summaryrefslogtreecommitdiffstats
path: root/src/com/android/launcher3/AppWidgetsRestoredReceiver.java
diff options
context:
space:
mode:
authorSunny Goyal <sunnygoyal@google.com>2016-03-18 16:25:05 -0700
committerSunny Goyal <sunnygoyal@google.com>2016-03-18 16:29:08 -0700
commit047317735c039e8ca08331d364f9edc7ddb98fb7 (patch)
tree062537f47aa99e398e308c1614ce858f963180b9 /src/com/android/launcher3/AppWidgetsRestoredReceiver.java
parentb8f00da8deec7f65002830261042da0140cbead0 (diff)
downloadandroid_packages_apps_Trebuchet-047317735c039e8ca08331d364f9edc7ddb98fb7.tar.gz
android_packages_apps_Trebuchet-047317735c039e8ca08331d364f9edc7ddb98fb7.tar.bz2
android_packages_apps_Trebuchet-047317735c039e8ca08331d364f9edc7ddb98fb7.zip
Deleting the unrestored widget id synchronously
> We are making the DB call (IO) on the UI thread which is costlier than the AppWidgetHost call. > The process can get killed after the broadcast receiver returns, which can prevent these ids from getting deleted. Change-Id: I47746cf03d0eae573b6baa25cde9e573fd1f1a60
Diffstat (limited to 'src/com/android/launcher3/AppWidgetsRestoredReceiver.java')
-rw-r--r--src/com/android/launcher3/AppWidgetsRestoredReceiver.java25
1 files changed, 3 insertions, 22 deletions
diff --git a/src/com/android/launcher3/AppWidgetsRestoredReceiver.java b/src/com/android/launcher3/AppWidgetsRestoredReceiver.java
index 54ce0fd3c..c5b31046c 100644
--- a/src/com/android/launcher3/AppWidgetsRestoredReceiver.java
+++ b/src/com/android/launcher3/AppWidgetsRestoredReceiver.java
@@ -9,17 +9,13 @@ import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
-import android.os.AsyncTask;
import android.util.Log;
import com.android.launcher3.LauncherSettings.Favorites;
-import java.util.ArrayList;
-import java.util.List;
-
public class AppWidgetsRestoredReceiver extends BroadcastReceiver {
- private static final String TAG = "AppWidgetsRestoredReceiver";
+ private static final String TAG = "AWRestoredReceiver";
@Override
public void onReceive(Context context, Intent intent) {
@@ -39,8 +35,8 @@ public class AppWidgetsRestoredReceiver extends BroadcastReceiver {
*/
static void restoreAppWidgetIds(Context context, int[] oldWidgetIds, int[] newWidgetIds) {
final ContentResolver cr = context.getContentResolver();
- final List<Integer> idsToRemove = new ArrayList<Integer>();
final AppWidgetManager widgets = AppWidgetManager.getInstance(context);
+ AppWidgetHost appWidgetHost = new AppWidgetHost(context, Launcher.APPWIDGET_HOST_ID);
for (int i = 0; i < oldWidgetIds.length; i++) {
Log.i(TAG, "Widget state restore id " + oldWidgetIds[i] + " => " + newWidgetIds[i]);
@@ -69,28 +65,13 @@ public class AppWidgetsRestoredReceiver extends BroadcastReceiver {
try {
if (!cursor.moveToFirst()) {
// The widget no long exists.
- idsToRemove.add(newWidgetIds[i]);
+ appWidgetHost.deleteAppWidgetId(newWidgetIds[i]);
}
} finally {
cursor.close();
}
}
}
- // Unregister the widget IDs which are not present on the workspace. This could happen
- // when a widget place holder is removed from workspace, before this method is called.
- if (!idsToRemove.isEmpty()) {
- final AppWidgetHost appWidgetHost =
- new AppWidgetHost(context, Launcher.APPWIDGET_HOST_ID);
- new AsyncTask<Void, Void, Void>() {
- public Void doInBackground(Void ... args) {
- for (Integer id : idsToRemove) {
- appWidgetHost.deleteAppWidgetId(id);
- Log.e(TAG, "Widget no longer present, appWidgetId=" + id);
- }
- return null;
- }
- }.executeOnExecutor(Utilities.THREAD_POOL_EXECUTOR);
- }
LauncherAppState app = LauncherAppState.getInstanceNoCreate();
if (app != null) {