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

Commit 57c9e16d authored by Winson's avatar Winson Committed by Winson Chung
Browse files

Process user events from service lifecycle callbacks.

- Instead of waiting for the broadcast to start loading the user’s 
  widgets, handle them in the service callbacks to ensure the app widget
  update broadcasts are enqueued earlier.

Bug: 27262341
Change-Id: I095abe5e15fe46412d00438986f7a9aee50872ca
parent ed353f17
Loading
Loading
Loading
Loading
+15 −0
Original line number Diff line number Diff line
@@ -44,4 +44,19 @@ public class AppWidgetService extends SystemService {
            mImpl.setSafeMode(isSafeMode());
        }
    }

    @Override
    public void onUnlockUser(int userHandle) {
        mImpl.onUserUnlocked(userHandle);
    }

    @Override
    public void onStopUser(int userHandle) {
        mImpl.onUserStopped(userHandle);
    }

    @Override
    public void onSwitchUser(int userHandle) {
        mImpl.reloadWidgetsMaskedStateForGroup(userHandle);
    }
}
+3 −16
Original line number Diff line number Diff line
@@ -158,12 +158,6 @@ class AppWidgetServiceImpl extends IAppWidgetService.Stub implements WidgetBacku

            if (Intent.ACTION_CONFIGURATION_CHANGED.equals(action)) {
                onConfigurationChanged();
            } else if (Intent.ACTION_USER_UNLOCKED.equals(action)) {
                onUserUnlocked(userId);
            } else if (Intent.ACTION_USER_STOPPED.equals(action)) {
                onUserStopped(userId);
            } else if (Intent.ACTION_USER_SWITCHED.equals(action)) {
                reloadWidgetsMaskedStateForGroup(userId);
            } else if (Intent.ACTION_MANAGED_PROFILE_AVAILABLE.equals(action)
                    || Intent.ACTION_MANAGED_PROFILE_UNAVAILABLE.equals(action)) {
                synchronized (mLock) {
@@ -281,13 +275,6 @@ class AppWidgetServiceImpl extends IAppWidgetService.Stub implements WidgetBacku
        mContext.registerReceiverAsUser(mBroadcastReceiver, UserHandle.ALL,
                sdFilter, null, null);

        IntentFilter userFilter = new IntentFilter();
        userFilter.addAction(Intent.ACTION_USER_UNLOCKED);
        userFilter.addAction(Intent.ACTION_USER_STOPPED);
        userFilter.addAction(Intent.ACTION_USER_SWITCHED);
        mContext.registerReceiverAsUser(mBroadcastReceiver, UserHandle.ALL,
                userFilter, null, null);

        IntentFilter offModeFilter = new IntentFilter();
        offModeFilter.addAction(Intent.ACTION_MANAGED_PROFILE_AVAILABLE);
        offModeFilter.addAction(Intent.ACTION_MANAGED_PROFILE_UNAVAILABLE);
@@ -454,7 +441,7 @@ class AppWidgetServiceImpl extends IAppWidgetService.Stub implements WidgetBacku
     * due to user not being available and package suspension.
     * userId must be the group parent.
     */
    private void reloadWidgetsMaskedStateForGroup(int userId) {
    void reloadWidgetsMaskedStateForGroup(int userId) {
        if (!mUserManager.isUserUnlockingOrUnlocked(userId)) {
            return;
        }
@@ -2525,7 +2512,7 @@ class AppWidgetServiceImpl extends IAppWidgetService.Stub implements WidgetBacku
        }
    }

    private void onUserUnlocked(int userId) {
    void onUserUnlocked(int userId) {
        if (isProfileWithLockedParent(userId)) {
            return;
        }
@@ -3072,7 +3059,7 @@ class AppWidgetServiceImpl extends IAppWidgetService.Stub implements WidgetBacku
        return new AtomicFile(settingsFile);
    }

    private void onUserStopped(int userId) {
    void onUserStopped(int userId) {
        synchronized (mLock) {
            boolean crossProfileWidgetsChanged = false;