Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit cdb3c0af authored by Sihua Ma's avatar Sihua Ma
Browse files

Use app widget host instead of holder to get rid of deleteHost

Also putting the calls to destroy() in try-finally blocks.

Test: N/A
Fix: 272535886
Change-Id: I57ecd90e412b3b8b59b4ed755a5d4191b05fd9b3
parent f1a0bd61
Loading
Loading
Loading
Loading
+5 −4
Original line number Diff line number Diff line
@@ -2,6 +2,7 @@ package com.android.launcher3;

import static android.os.Process.myUserHandle;

import android.appwidget.AppWidgetHost;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProviderInfo;
import android.content.BroadcastReceiver;
@@ -51,10 +52,10 @@ public class AppWidgetsRestoredReceiver extends BroadcastReceiver {
     */
    @WorkerThread
    public static void restoreAppWidgetIds(Context context, int[] oldWidgetIds, int[] newWidgetIds,
            @NonNull LauncherWidgetHolder holder) {
            @NonNull AppWidgetHost host) {
        if (WidgetsModel.GO_DISABLE_WIDGETS) {
            Log.e(TAG, "Skipping widget ID remap as widgets not supported");
            holder.deleteHost();
            host.deleteHost();
            return;
        }
        if (!RestoreDbTask.isPending(context)) {
@@ -63,7 +64,7 @@ public class AppWidgetsRestoredReceiver extends BroadcastReceiver {
            Log.e(TAG, "Skipping widget ID remap as DB already in use");
            for (int widgetId : newWidgetIds) {
                Log.d(TAG, "Deleting widgetId: " + widgetId);
                holder.deleteAppWidgetId(widgetId);
                host.deleteAppWidgetId(widgetId);
            }
            return;
        }
@@ -100,7 +101,7 @@ public class AppWidgetsRestoredReceiver extends BroadcastReceiver {
                try {
                    if (!cursor.moveToFirst()) {
                        // The widget no long exists.
                        holder.deleteAppWidgetId(newWidgetIds[i]);
                        host.deleteAppWidgetId(newWidgetIds[i]);
                    }
                } finally {
                    cursor.close();
+30 −29
Original line number Diff line number Diff line
@@ -550,6 +550,7 @@ public class LauncherProvider extends ContentProvider {
            Log.d(TAG, "loading default workspace");

            LauncherWidgetHolder widgetHolder = mOpenHelper.newLauncherWidgetHolder();
            try {
                AutoInstallsLayout loader = createWorkspaceLoaderFromAppRestriction(widgetHolder);
                if (loader == null) {
                    loader = AutoInstallsLayout.get(getContext(), widgetHolder, mOpenHelper);
@@ -582,9 +583,11 @@ public class LauncherProvider extends ContentProvider {
                            getDefaultLayoutParser(widgetHolder));
                }
                clearFlagEmptyDbCreated();
            } finally {
                widgetHolder.destroy();
            }
        }
    }

    /**
     * Creates workspace loader from an XML resource listed in the app restrictions.
@@ -957,8 +960,6 @@ public class LauncherProvider extends ContentProvider {
                    allWidgets = holder.getAppWidgetIds();
                } catch (IncompatibleClassChangeError e) {
                    Log.e(TAG, "getAppWidgetIds not supported", e);
                    // Necessary to destroy the holder to free up possible activity context
                    holder.destroy();
                    return;
                }
                final IntSet validWidgets = IntSet.wrap(LauncherDbUtils.queryIntArray(false, db,
+4 −4
Original line number Diff line number Diff line
@@ -21,8 +21,10 @@ import static com.android.launcher3.LauncherPrefs.APP_WIDGET_IDS;
import static com.android.launcher3.LauncherPrefs.OLD_APP_WIDGET_IDS;
import static com.android.launcher3.LauncherPrefs.RESTORE_DEVICE;
import static com.android.launcher3.provider.LauncherDbUtils.dropTable;
import static com.android.launcher3.widget.LauncherWidgetHolder.APPWIDGET_HOST_ID;

import android.app.backup.BackupManager;
import android.appwidget.AppWidgetHost;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
@@ -49,7 +51,6 @@ import com.android.launcher3.model.data.WorkspaceItemInfo;
import com.android.launcher3.provider.LauncherDbUtils.SQLiteTransaction;
import com.android.launcher3.util.IntArray;
import com.android.launcher3.util.LogConfig;
import com.android.launcher3.widget.LauncherWidgetHolder;

import java.io.InvalidObjectException;
import java.util.Arrays;
@@ -354,12 +355,11 @@ public class RestoreDbTask {
    private void restoreAppWidgetIdsIfExists(Context context) {
        LauncherPrefs lp = LauncherPrefs.get(context);
        if (lp.has(APP_WIDGET_IDS, OLD_APP_WIDGET_IDS)) {
            LauncherWidgetHolder holder = LauncherWidgetHolder.newInstance(context);
            AppWidgetHost host = new AppWidgetHost(context, APPWIDGET_HOST_ID);
            AppWidgetsRestoredReceiver.restoreAppWidgetIds(context,
                    IntArray.fromConcatString(lp.get(OLD_APP_WIDGET_IDS)).toArray(),
                    IntArray.fromConcatString(lp.get(APP_WIDGET_IDS)).toArray(),
                    holder);
            holder.destroy();
                    host);
        } else {
            FileLog.d(TAG, "No app widget ids to restore.");
        }
+0 −7
Original line number Diff line number Diff line
@@ -321,13 +321,6 @@ public class LauncherWidgetHolder {
        mFlags &= ~FLAG_LISTENING;
    }

    /**
     * Delete the host
     */
    public void deleteHost() {
        mWidgetHost.deleteHost();
    }

    /**
     * @return The app widget ids
     */