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

Commit 4c7b3394 authored by Andrii Kulian's avatar Andrii Kulian Committed by Android (Google) Code Review
Browse files

Merge "Don't make redundant launch while updating configuration" into nyc-mr1-dev

parents ea7999dc db3e4ecf
Loading
Loading
Loading
Loading
+15 −9
Original line number Original line Diff line number Diff line
@@ -18669,7 +18669,7 @@ public final class ActivityManagerService extends ActivityManagerNative
        synchronized(this) {
        synchronized(this) {
            final long origId = Binder.clearCallingIdentity();
            final long origId = Binder.clearCallingIdentity();
            updateConfigurationLocked(values, null, false, true, userId);
            updateConfigurationLocked(values, null, false, true, userId, false /* deferResume */);
            Binder.restoreCallingIdentity(origId);
            Binder.restoreCallingIdentity(origId);
        }
        }
    }
    }
@@ -18737,11 +18737,16 @@ public final class ActivityManagerService extends ActivityManagerNative
        updateConfigurationLocked(configuration, null, false);
        updateConfigurationLocked(configuration, null, false);
    }
    }
    boolean updateConfigurationLocked(Configuration values,
    boolean updateConfigurationLocked(Configuration values, ActivityRecord starting,
            ActivityRecord starting, boolean initLocale) {
            boolean initLocale) {
        return updateConfigurationLocked(values, starting, initLocale, false /* deferResume */);
    }
    boolean updateConfigurationLocked(Configuration values, ActivityRecord starting,
            boolean initLocale, boolean deferResume) {
        // pass UserHandle.USER_NULL as userId because we don't persist configuration for any user
        // pass UserHandle.USER_NULL as userId because we don't persist configuration for any user
        return updateConfigurationLocked(values, starting, initLocale, false,
        return updateConfigurationLocked(values, starting, initLocale, false /* persistent */,
                UserHandle.USER_NULL);
                UserHandle.USER_NULL, deferResume);
    }
    }
    // To cache the list of supported system locales
    // To cache the list of supported system locales
@@ -18757,8 +18762,8 @@ public final class ActivityManagerService extends ActivityManagerNative
     * @param userId is only used when persistent parameter is set to true to persist configuration
     * @param userId is only used when persistent parameter is set to true to persist configuration
     *               for that particular user
     *               for that particular user
     */
     */
    private boolean updateConfigurationLocked(Configuration values,
    private boolean updateConfigurationLocked(Configuration values, ActivityRecord starting,
            ActivityRecord starting, boolean initLocale, boolean persistent, int userId) {
            boolean initLocale, boolean persistent, int userId, boolean deferResume) {
        int changes = 0;
        int changes = 0;
        if (mWindowManager != null) {
        if (mWindowManager != null) {
@@ -18886,7 +18891,7 @@ public final class ActivityManagerService extends ActivityManagerNative
                    for (int stackId : resizedStacks) {
                    for (int stackId : resizedStacks) {
                        final Rect newBounds = mWindowManager.getBoundsForNewConfiguration(stackId);
                        final Rect newBounds = mWindowManager.getBoundsForNewConfiguration(stackId);
                        mStackSupervisor.resizeStackLocked(
                        mStackSupervisor.resizeStackLocked(
                                stackId, newBounds, null, null, false, false, !DEFER_RESUME);
                                stackId, newBounds, null, null, false, false, deferResume);
                    }
                    }
                }
                }
            }
            }
@@ -21783,7 +21788,8 @@ public final class ActivityManagerService extends ActivityManagerNative
            Preconditions.checkNotNull(values, "Configuration must not be null");
            Preconditions.checkNotNull(values, "Configuration must not be null");
            Preconditions.checkArgumentNonnegative(userId, "userId " + userId + " not supported");
            Preconditions.checkArgumentNonnegative(userId, "userId " + userId + " not supported");
            synchronized (ActivityManagerService.this) {
            synchronized (ActivityManagerService.this) {
                updateConfigurationLocked(values, null, false, true, userId);
                updateConfigurationLocked(values, null, false, true, userId,
                        false /* deferResume */);
            }
            }
        }
        }
+19 −6
Original line number Original line Diff line number Diff line
@@ -1189,7 +1189,10 @@ public final class ActivityStackSupervisor implements DisplayListener {
            Configuration config = mWindowManager.updateOrientationFromAppTokens(
            Configuration config = mWindowManager.updateOrientationFromAppTokens(
                    mService.mConfiguration,
                    mService.mConfiguration,
                    r.mayFreezeScreenLocked(app) ? r.appToken : null);
                    r.mayFreezeScreenLocked(app) ? r.appToken : null);
            mService.updateConfigurationLocked(config, r, false);
            // Deferring resume here because we're going to launch new activity shortly.
            // We don't want to perform a redundant launch of the same record while ensuring
            // configurations and trying to resume top activity of focused stack.
            mService.updateConfigurationLocked(config, r, false, true /* deferResume */);
        }
        }


        r.app = app;
        r.app = app;
@@ -2004,7 +2007,7 @@ public final class ActivityStackSupervisor implements DisplayListener {
            boolean preserveWindows, boolean allowResizeInDockedMode, boolean deferResume) {
            boolean preserveWindows, boolean allowResizeInDockedMode, boolean deferResume) {
        if (stackId == DOCKED_STACK_ID) {
        if (stackId == DOCKED_STACK_ID) {
            resizeDockedStackLocked(bounds, tempTaskBounds, tempTaskInsetBounds, null, null,
            resizeDockedStackLocked(bounds, tempTaskBounds, tempTaskInsetBounds, null, null,
                    preserveWindows);
                    preserveWindows, deferResume);
            return;
            return;
        }
        }
        final ActivityStack stack = getStack(stackId);
        final ActivityStack stack = getStack(stackId);
@@ -2154,8 +2157,16 @@ public final class ActivityStackSupervisor implements DisplayListener {
    }
    }


    void resizeDockedStackLocked(Rect dockedBounds, Rect tempDockedTaskBounds,
    void resizeDockedStackLocked(Rect dockedBounds, Rect tempDockedTaskBounds,
            Rect tempDockedTaskInsetBounds,
            Rect tempDockedTaskInsetBounds, Rect tempOtherTaskBounds, Rect tempOtherTaskInsetBounds,
            Rect tempOtherTaskBounds, Rect tempOtherTaskInsetBounds, boolean preserveWindows) {
            boolean preserveWindows) {
        resizeDockedStackLocked(dockedBounds, tempDockedTaskBounds, tempDockedTaskInsetBounds,
                tempOtherTaskBounds, tempOtherTaskInsetBounds, preserveWindows,
                false /* deferResume */);
    }

    void resizeDockedStackLocked(Rect dockedBounds, Rect tempDockedTaskBounds,
            Rect tempDockedTaskInsetBounds, Rect tempOtherTaskBounds, Rect tempOtherTaskInsetBounds,
            boolean preserveWindows, boolean deferResume) {


        if (!mAllowDockedStackResize) {
        if (!mAllowDockedStackResize) {
            // Docked stack resize currently disabled.
            // Docked stack resize currently disabled.
@@ -2198,11 +2209,13 @@ public final class ActivityStackSupervisor implements DisplayListener {
                    if (StackId.isResizeableByDockedStack(i) && getStack(i) != null) {
                    if (StackId.isResizeableByDockedStack(i) && getStack(i) != null) {
                        resizeStackLocked(i, tempRect, tempOtherTaskBounds,
                        resizeStackLocked(i, tempRect, tempOtherTaskBounds,
                                tempOtherTaskInsetBounds, preserveWindows,
                                tempOtherTaskInsetBounds, preserveWindows,
                                true /* allowResizeInDockedMode */, !DEFER_RESUME);
                                true /* allowResizeInDockedMode */, deferResume);
                    }
                    }
                }
                }
            }
            }
            if (!deferResume) {
                stack.ensureVisibleActivitiesConfigurationLocked(r, preserveWindows);
                stack.ensureVisibleActivitiesConfigurationLocked(r, preserveWindows);
            }
        } finally {
        } finally {
            mAllowDockedStackResize = true;
            mAllowDockedStackResize = true;
            mWindowManager.continueSurfaceLayout();
            mWindowManager.continueSurfaceLayout();