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

Commit bbb9a9c0 authored by Pinyao Ting's avatar Pinyao Ting Committed by Petr Cermak
Browse files

Extra logging related to widget removal upon restore

As observed in b/187799223, widgets are removed after restore. We cannot
identify the root cause from the bugreport. This CL includes more
logging in the hope of identifying the root cause.

Bug: 18779922
Bug: 190565858
Test: manual
Change-Id: Ibdc9876716028592d17beac4542e1d8c498f9e4c
(cherry picked from commit 655ac082)
parent c48d4047
Loading
Loading
Loading
Loading
+23 −3
Original line number Diff line number Diff line
@@ -140,6 +140,7 @@ import com.android.launcher3.model.BgDataModel.Callbacks;
import com.android.launcher3.model.ItemInstallQueue;
import com.android.launcher3.model.ModelUtils;
import com.android.launcher3.model.ModelWriter;
import com.android.launcher3.model.WidgetsModel;
import com.android.launcher3.model.data.AppInfo;
import com.android.launcher3.model.data.FolderInfo;
import com.android.launcher3.model.data.ItemInfo;
@@ -2329,24 +2330,43 @@ public class Launcher extends StatefulActivity<LauncherState> implements Launche

        try {
            final LauncherAppWidgetProviderInfo appWidgetInfo;
            String reason = "";

            if (item.hasRestoreFlag(LauncherAppWidgetInfo.FLAG_PROVIDER_NOT_READY)) {
                // If the provider is not ready, bind as a pending widget.
                appWidgetInfo = null;
                reason = "the provider not ready.";
            } else if (item.hasRestoreFlag(LauncherAppWidgetInfo.FLAG_ID_NOT_VALID)) {
                // The widget id is not valid. Try to find the widget based on the provider info.
                appWidgetInfo = mAppWidgetManager.findProvider(item.providerName, item.user);
                if (appWidgetInfo == null) {
                    if (WidgetsModel.GO_DISABLE_WIDGETS) {
                        reason = "widgets are disabled on go device.";
                    } else {
                        reason = "WidgetManagerHelper cannot find a provider from provider info.";
                    }
                }
            } else {
                appWidgetInfo = mAppWidgetManager.getLauncherAppWidgetInfo(item.appWidgetId);
                if (appWidgetInfo == null) {
                    if (item.appWidgetId <= LauncherAppWidgetInfo.CUSTOM_WIDGET_ID) {
                        reason = "CustomWidgetManager cannot find provider from that widget id .";
                    } else {
                        reason = "AppWidgetManager cannot find provider for that widget id."
                                + " It could be due to AppWidgetService is not available, or the"
                                + " appWidgetId has not been bound to a the provider yet, or you"
                                + " don't have access to that appWidgetId.";
                    }
                }
            }

            // If the provider is ready, but the width is not yet restored, try to restore it.
            if (!item.hasRestoreFlag(LauncherAppWidgetInfo.FLAG_PROVIDER_NOT_READY)
                    && (item.restoreStatus != LauncherAppWidgetInfo.RESTORE_COMPLETED)) {
                if (appWidgetInfo == null) {
                    Log.d(TAG, "Removing restored widget: id=" + item.appWidgetId
                            + " belongs to component " + item.providerName
                            + ", as the provider is null");
                    FileLog.d(TAG, "Removing restored widget: id=" + item.appWidgetId
                            + " belongs to component " + item.providerName + " user " + item.user
                            + ", as the provider is null and " + reason);
                    getModelWriter().deleteItemFromDatabase(item);
                    return null;
                }