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

Commit a6548669 authored by Willie Koomson's avatar Willie Koomson Committed by Android (Google) Code Review
Browse files

Merge "Always re-register AlarmManager broadcast and send widget update when...

Merge "Always re-register AlarmManager broadcast and send widget update when package is unstopped" into main
parents d0f837cc 6e19c0a5
Loading
Loading
Loading
Loading
+42 −30
Original line number Diff line number Diff line
@@ -888,18 +888,31 @@ class AppWidgetServiceImpl extends IAppWidgetService.Stub implements WidgetBacku
                        || !packageName.equals(provider.id.componentName.getPackageName())) {
                    continue;
                }
                if (provider.setMaskedByStoppedPackageLocked(isStopped)) {
                    if (provider.isMaskedLocked()) {
                boolean changed = provider.setMaskedByStoppedPackageLocked(isStopped);
                boolean masked = provider.isMaskedLocked();
                if (masked && changed) {
                    maskWidgetsViewsLocked(provider, null);
                    cancelBroadcastsLocked(provider);
                    } else {
                } else if (!masked) {
                    if (changed) {
                        unmaskWidgetsViewsLocked(provider);
                    }
                    // Re-register AlarmManager broadcast and send APPWIDGET_UPDATE even if we have
                    // not observed a change in masked state.
                    // We may have received a PACKAGE_RESTARTED, but did not mask the widget
                    // (masked == false) because the package was already unstopped by the time we
                    // queried PackageManager.isPackageStoppedForUser. In that case, the
                    // PendingIntents for this widget will have still been cancelled, and we need
                    // to trigger a widget update so that the provider can create new PendingIntents
                    // for their widget. Also, the broadcast has been cleared from AlarmManager and
                    // must be re-registered.
                    final int widgetCount = provider.widgets.size();
                    if (widgetCount > 0) {
                        final int[] widgetIds = new int[widgetCount];
                        for (int j = 0; j < widgetCount; j++) {
                            widgetIds[j] = provider.widgets.get(j).appWidgetId;
                        }
                        cancelBroadcastsLocked(provider);
                        registerForBroadcastsLocked(provider, widgetIds);
                        sendUpdateIntentLocked(provider, widgetIds, /* interactive= */ false);
                    }
@@ -926,7 +939,6 @@ class AppWidgetServiceImpl extends IAppWidgetService.Stub implements WidgetBacku
            }
        }
    }
    }

    /**
     * Mask the target widget belonging to the specified provider, or all active widgets