diff --git a/android-app-core/src/main/java/org/solovyev/android/calculator/CalculatorReceiver.java b/android-app-core/src/main/java/org/solovyev/android/calculator/CalculatorReceiver.java
new file mode 100644
index 00000000..22702083
--- /dev/null
+++ b/android-app-core/src/main/java/org/solovyev/android/calculator/CalculatorReceiver.java
@@ -0,0 +1,35 @@
+package org.solovyev.android.calculator;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+
+import javax.annotation.Nonnull;
+
+public final class CalculatorReceiver extends BroadcastReceiver {
+
+ public static final String ACTION_BUTTON_ID_EXTRA = "buttonId";
+ public static final String ACTION_BUTTON_PRESSED = "org.solovyev.android.calculator.BUTTON_PRESSED";
+
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ final String action = intent.getAction();
+
+ if (CalculatorReceiver.ACTION_BUTTON_PRESSED.equals(action)) {
+ final int buttonId = intent.getIntExtra(CalculatorReceiver.ACTION_BUTTON_ID_EXTRA, 0);
+
+ final CalculatorButton button = CalculatorButton.getById(buttonId);
+ if (button != null) {
+ button.onClick(context);
+ }
+ }
+ }
+
+ @Nonnull
+ public static Intent newButtonClickedIntent(@Nonnull Context context, @Nonnull CalculatorButton button) {
+ final Intent onButtonClickIntent = new Intent(context, CalculatorReceiver.class);
+ onButtonClickIntent.setAction(ACTION_BUTTON_PRESSED);
+ onButtonClickIntent.putExtra(ACTION_BUTTON_ID_EXTRA, button.getButtonId());
+ return onButtonClickIntent;
+ }
+}
diff --git a/android-app-widget/src/main/java/org/solovyev/android/calculator/widget/AbstractCalculatorWidgetProvider.java b/android-app-widget/src/main/java/org/solovyev/android/calculator/widget/AbstractCalculatorWidgetProvider.java
index 46381be5..b5ee508b 100644
--- a/android-app-widget/src/main/java/org/solovyev/android/calculator/widget/AbstractCalculatorWidgetProvider.java
+++ b/android-app-widget/src/main/java/org/solovyev/android/calculator/widget/AbstractCalculatorWidgetProvider.java
@@ -38,6 +38,7 @@ import javax.annotation.Nullable;
import static android.content.Intent.ACTION_CONFIGURATION_CHANGED;
import static org.solovyev.android.calculator.CalculatorBroadcaster.ACTION_DISPLAY_STATE_CHANGED;
import static org.solovyev.android.calculator.CalculatorBroadcaster.ACTION_EDITOR_STATE_CHANGED;
+import static org.solovyev.android.calculator.CalculatorReceiver.newButtonClickedIntent;
/**
* User: Solovyev_S
@@ -46,9 +47,6 @@ import static org.solovyev.android.calculator.CalculatorBroadcaster.ACTION_EDITO
*/
abstract class AbstractCalculatorWidgetProvider extends AppWidgetProvider {
- static final String ACTION_BUTTON_ID_EXTRA = "buttonId";
- static final String ACTION_BUTTON_PRESSED = "org.solovyev.android.calculator.BUTTON_PRESSED";
-
private static final String TAG = "Calculator++ Widget";
/*
@@ -125,10 +123,7 @@ abstract class AbstractCalculatorWidgetProvider extends AppWidgetProvider {
final RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_layout);
for (CalculatorButton button : CalculatorButton.values()) {
- final Intent onButtonClickIntent = new Intent(context, getComponentClass());
- onButtonClickIntent.setAction(ACTION_BUTTON_PRESSED);
- onButtonClickIntent.putExtra(ACTION_BUTTON_ID_EXTRA, button.getButtonId());
- final PendingIntent pendingIntent = PendingIntent.getBroadcast(context, button.getButtonId(), onButtonClickIntent, PendingIntent.FLAG_UPDATE_CURRENT);
+ final PendingIntent pendingIntent = PendingIntent.getBroadcast(context, button.getButtonId(), newButtonClickedIntent(context, button), PendingIntent.FLAG_UPDATE_CURRENT);
if (pendingIntent != null) {
views.setOnClickPendingIntent(button.getButtonId(), pendingIntent);
}
@@ -148,14 +143,7 @@ abstract class AbstractCalculatorWidgetProvider extends AppWidgetProvider {
super.onReceive(context, intent);
final String action = intent.getAction();
- if (ACTION_BUTTON_PRESSED.equals(action)) {
- final int buttonId = intent.getIntExtra(ACTION_BUTTON_ID_EXTRA, 0);
-
- final CalculatorButton button = CalculatorButton.getById(buttonId);
- if (button != null) {
- button.onClick(context);
- }
- } else if (ACTION_CONFIGURATION_CHANGED.equals(action)) {
+ if (ACTION_CONFIGURATION_CHANGED.equals(action)) {
updateState(context);
} else if (ACTION_EDITOR_STATE_CHANGED.equals(action)) {
updateState(context);
diff --git a/android-app/AndroidManifest.xml b/android-app/AndroidManifest.xml
index de3b4e17..65c320d4 100644
--- a/android-app/AndroidManifest.xml
+++ b/android-app/AndroidManifest.xml
@@ -37,6 +37,12 @@
+
+
+
+
+
+