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

Commit 655ac082 authored by Pinyao Ting's avatar Pinyao Ting
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: 187799223
Test: manual
Change-Id: Ibdc9876716028592d17beac4542e1d8c498f9e4c
parent 1802be87
Loading
Loading
Loading
Loading
+23 −3
Original line number Diff line number Diff line
@@ -138,6 +138,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;
@@ -2295,24 +2296,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;
                }