diff --git a/android-app/src/main/AndroidManifest.xml b/android-app/src/main/AndroidManifest.xml
index 885df7d0..3431bffb 100644
--- a/android-app/src/main/AndroidManifest.xml
+++ b/android-app/src/main/AndroidManifest.xml
@@ -112,6 +112,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/android-app/src/main/java/org/solovyev/android/calculator/App.java b/android-app/src/main/java/org/solovyev/android/calculator/App.java
index f6175b7e..a708d000 100644
--- a/android-app/src/main/java/org/solovyev/android/calculator/App.java
+++ b/android-app/src/main/java/org/solovyev/android/calculator/App.java
@@ -23,20 +23,25 @@
package org.solovyev.android.calculator;
import android.app.Application;
-import android.content.Context;
+import android.appwidget.AppWidgetManager;
+import android.appwidget.AppWidgetProvider;
+import android.content.ComponentName;
import android.content.SharedPreferences;
import android.content.res.Configuration;
import android.os.Build;
import android.preference.PreferenceManager;
-import android.text.TextUtils;
-import android.util.Log;
+import org.solovyev.android.Android;
import org.solovyev.android.UiThreadExecutor;
import org.solovyev.android.Views;
import org.solovyev.android.calculator.ga.Ga;
import org.solovyev.android.calculator.view.ScreenMetrics;
+import org.solovyev.android.calculator.widget.BaseCalculatorWidgetProvider;
+import org.solovyev.android.calculator.widget.CalculatorWidgetProvider;
+import org.solovyev.android.calculator.widget.CalculatorWidgetProvider3x4;
+import org.solovyev.android.calculator.widget.CalculatorWidgetProvider4x4;
+import org.solovyev.android.calculator.widget.CalculatorWidgetProvider4x5;
import org.solovyev.android.checkout.*;
-import org.solovyev.android.view.VibratorContainer;
import org.solovyev.common.listeners.JEvent;
import org.solovyev.common.listeners.JEventListener;
import org.solovyev.common.listeners.JEventListeners;
@@ -46,7 +51,9 @@ import org.solovyev.common.threads.DelayedExecutor;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
+import java.util.ArrayList;
import java.util.Arrays;
+import java.util.List;
import java.util.concurrent.Executor;
/**
@@ -62,14 +69,8 @@ import java.util.concurrent.Executor;
* Before first usage this class must be initialized by calling {@link App#init(android.app.Application)} method (for example, from {@link android.app.Application#onCreate()})
*/
public final class App {
-
- /*
- **********************************************************************
- *
- * FIELDS
- *
- **********************************************************************
- */
+ @Nonnull
+ private static final List> OLD_WIDGETS = Arrays.asList(CalculatorWidgetProvider.class, CalculatorWidgetProvider3x4.class, CalculatorWidgetProvider4x4.class, CalculatorWidgetProvider4x5.class);
@Nonnull
private static volatile Application application;
@@ -166,12 +167,33 @@ public final class App {
App.broadcaster = new CalculatorBroadcaster(application);
App.vibrator = new Vibrator(application, preferences);
App.screenMetrics = new ScreenMetrics(application);
+
+ final List> oldNotUsedWidgetClasses = findNotUsedWidgets(application);
+ for (Class extends AppWidgetProvider> oldNotUsedWidgetClass : oldNotUsedWidgetClasses) {
+ Android.enableComponent(application, oldNotUsedWidgetClass, false);
+ }
+
App.initialized = true;
} else {
throw new IllegalStateException("Already initialized!");
}
}
+ @Nonnull
+ private static List> findNotUsedWidgets(@Nonnull Application application) {
+ final List> result = new ArrayList<>();
+
+ final AppWidgetManager widgetManager = AppWidgetManager.getInstance(application);
+ for (Class extends AppWidgetProvider> widgetClass : OLD_WIDGETS) {
+ final int ids[] = widgetManager.getAppWidgetIds(new ComponentName(application, widgetClass));
+ if (ids == null || ids.length == 0) {
+ result.add(widgetClass);
+ }
+ }
+
+ return result;
+ }
+
private static void checkInit() {
if (!initialized) {
throw new IllegalStateException("App should be initialized!");
diff --git a/android-app/src/main/java/org/solovyev/android/calculator/external/ExternalCalculatorIntentHandler.java b/android-app/src/main/java/org/solovyev/android/calculator/external/ExternalCalculatorIntentHandler.java
deleted file mode 100644
index 4540558f..00000000
--- a/android-app/src/main/java/org/solovyev/android/calculator/external/ExternalCalculatorIntentHandler.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright 2013 serso aka se.solovyev
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- * Contact details
- *
- * Email: se.solovyev@gmail.com
- * Site: http://se.solovyev.org
- */
-
-package org.solovyev.android.calculator.external;
-
-import android.content.Context;
-import android.content.Intent;
-
-import javax.annotation.Nonnull;
-
-/**
- * User: serso
- * Date: 11/20/12
- * Time: 10:33 PM
- */
-public interface ExternalCalculatorIntentHandler {
-
- void onIntent(@Nonnull Context context, @Nonnull Intent intent);
-}
diff --git a/android-app/src/main/java/org/solovyev/android/calculator/widget/AbstractCalculatorWidgetProvider.java b/android-app/src/main/java/org/solovyev/android/calculator/widget/BaseCalculatorWidgetProvider.java
similarity index 97%
rename from android-app/src/main/java/org/solovyev/android/calculator/widget/AbstractCalculatorWidgetProvider.java
rename to android-app/src/main/java/org/solovyev/android/calculator/widget/BaseCalculatorWidgetProvider.java
index 4e53e0fb..35000e3a 100644
--- a/android-app/src/main/java/org/solovyev/android/calculator/widget/AbstractCalculatorWidgetProvider.java
+++ b/android-app/src/main/java/org/solovyev/android/calculator/widget/BaseCalculatorWidgetProvider.java
@@ -49,7 +49,7 @@ import static org.solovyev.android.calculator.CalculatorReceiver.newButtonClicke
* Date: 19.10.12
* Time: 16:18
*/
-abstract class AbstractCalculatorWidgetProvider extends AppWidgetProvider {
+public abstract class BaseCalculatorWidgetProvider extends AppWidgetProvider {
private static final String TAG = "Calculator++ Widget";
private static final int WIDGET_CATEGORY_KEYGUARD = 2;
@@ -75,7 +75,7 @@ abstract class AbstractCalculatorWidgetProvider extends AppWidgetProvider {
**********************************************************************
*/
- protected AbstractCalculatorWidgetProvider() {
+ protected BaseCalculatorWidgetProvider() {
}
/*
@@ -116,7 +116,7 @@ abstract class AbstractCalculatorWidgetProvider extends AppWidgetProvider {
}
@Nonnull
- protected Class extends AbstractCalculatorWidgetProvider> getComponentClass() {
+ protected Class extends BaseCalculatorWidgetProvider> getComponentClass() {
return this.getClass();
}
diff --git a/android-app/src/main/java/org/solovyev/android/calculator/widget/CalculatorWidget.java b/android-app/src/main/java/org/solovyev/android/calculator/widget/CalculatorWidget.java
new file mode 100644
index 00000000..8e7695ad
--- /dev/null
+++ b/android-app/src/main/java/org/solovyev/android/calculator/widget/CalculatorWidget.java
@@ -0,0 +1,4 @@
+package org.solovyev.android.calculator.widget;
+
+public class CalculatorWidget extends BaseCalculatorWidgetProvider {
+}
diff --git a/android-app/src/main/java/org/solovyev/android/calculator/widget/CalculatorWidgetProvider.java b/android-app/src/main/java/org/solovyev/android/calculator/widget/CalculatorWidgetProvider.java
index d53a7cd4..f8785be3 100644
--- a/android-app/src/main/java/org/solovyev/android/calculator/widget/CalculatorWidgetProvider.java
+++ b/android-app/src/main/java/org/solovyev/android/calculator/widget/CalculatorWidgetProvider.java
@@ -27,5 +27,5 @@ package org.solovyev.android.calculator.widget;
* Date: 11/18/12
* Time: 1:00 PM
*/
-public class CalculatorWidgetProvider extends AbstractCalculatorWidgetProvider {
+public class CalculatorWidgetProvider extends BaseCalculatorWidgetProvider {
}
diff --git a/android-app/src/main/java/org/solovyev/android/calculator/widget/CalculatorWidgetProvider3x4.java b/android-app/src/main/java/org/solovyev/android/calculator/widget/CalculatorWidgetProvider3x4.java
index bcf2f83b..5e88bd60 100644
--- a/android-app/src/main/java/org/solovyev/android/calculator/widget/CalculatorWidgetProvider3x4.java
+++ b/android-app/src/main/java/org/solovyev/android/calculator/widget/CalculatorWidgetProvider3x4.java
@@ -27,5 +27,5 @@ package org.solovyev.android.calculator.widget;
* Date: 11/18/12
* Time: 1:01 PM
*/
-public class CalculatorWidgetProvider3x4 extends AbstractCalculatorWidgetProvider {
+public class CalculatorWidgetProvider3x4 extends BaseCalculatorWidgetProvider {
}
diff --git a/android-app/src/main/java/org/solovyev/android/calculator/widget/CalculatorWidgetProvider4x4.java b/android-app/src/main/java/org/solovyev/android/calculator/widget/CalculatorWidgetProvider4x4.java
index e8ddbfe9..459db813 100644
--- a/android-app/src/main/java/org/solovyev/android/calculator/widget/CalculatorWidgetProvider4x4.java
+++ b/android-app/src/main/java/org/solovyev/android/calculator/widget/CalculatorWidgetProvider4x4.java
@@ -27,5 +27,5 @@ package org.solovyev.android.calculator.widget;
* Date: 11/18/12
* Time: 1:01 PM
*/
-public class CalculatorWidgetProvider4x4 extends AbstractCalculatorWidgetProvider {
+public class CalculatorWidgetProvider4x4 extends BaseCalculatorWidgetProvider {
}
diff --git a/android-app/src/main/java/org/solovyev/android/calculator/widget/CalculatorWidgetProvider4x5.java b/android-app/src/main/java/org/solovyev/android/calculator/widget/CalculatorWidgetProvider4x5.java
index 5130d615..4fac4dcd 100644
--- a/android-app/src/main/java/org/solovyev/android/calculator/widget/CalculatorWidgetProvider4x5.java
+++ b/android-app/src/main/java/org/solovyev/android/calculator/widget/CalculatorWidgetProvider4x5.java
@@ -27,5 +27,5 @@ package org.solovyev.android.calculator.widget;
* Date: 11/18/12
* Time: 7:43 PM
*/
-public class CalculatorWidgetProvider4x5 extends AbstractCalculatorWidgetProvider {
+public class CalculatorWidgetProvider4x5 extends BaseCalculatorWidgetProvider {
}
diff --git a/android-app/src/main/res/xml/calculator_widget_info.xml b/android-app/src/main/res/xml/calculator_widget_info.xml
new file mode 100644
index 00000000..8ca2536e
--- /dev/null
+++ b/android-app/src/main/res/xml/calculator_widget_info.xml
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
\ No newline at end of file