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

Commit 0fea6e25 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Revert "Override process config for cold start on secondary screens"" into qt-dev

parents 1bebf6a1 beadaccf
Loading
Loading
Loading
Loading
+2 −26
Original line number Diff line number Diff line
@@ -1085,22 +1085,6 @@ final class ActivityRecord extends ConfigurationContainer {
        if (root == this) {
            task.setRootProcess(proc);
        }
        // Override the process configuration to match the display where the first activity in
        // the process was launched. This can help with compat issues on secondary displays when
        // apps use Application to obtain configuration or metrics instead of Activity.
        final ActivityDisplay display = getDisplay();
        if (display == null || display.mDisplayId == INVALID_DISPLAY) {
            return;
        }
        if (!proc.hasActivities() && display.mDisplayId != DEFAULT_DISPLAY) {
            proc.registerDisplayConfigurationListenerLocked(display);
        } else if (display.mDisplayId == DEFAULT_DISPLAY) {
            // Once an activity is launched on default display - stop listening for other displays
            // configurations to maintain compatibility with previous platform releases. E.g. when
            // an activity is launched in a Bubble and then moved to default screen, we should match
            // the global device config.
            proc.unregisterDisplayConfigurationListenerLocked();
        }
    }

    boolean hasProcess() {
@@ -3249,7 +3233,7 @@ final class ActivityRecord extends ConfigurationContainer {
        // Update last reported values.
        final Configuration newMergedOverrideConfig = getMergedOverrideConfiguration();

        setLastReportedConfiguration(getProcessGlobalConfiguration(), newMergedOverrideConfig);
        setLastReportedConfiguration(mAtmService.getGlobalConfiguration(), newMergedOverrideConfig);

        if (mState == INITIALIZING) {
            // No need to relaunch or schedule new config for activity that hasn't been launched
@@ -3358,14 +3342,6 @@ final class ActivityRecord extends ConfigurationContainer {
        return true;
    }

    /** Get process configuration, or global config if the process is not set. */
    private Configuration getProcessGlobalConfiguration() {
        if (app != null) {
            return app.getConfiguration();
        }
        return mAtmService.getGlobalConfiguration();
    }

    /**
     * When assessing a configuration change, decide if the changes flags and the new configurations
     * should cause the Activity to relaunch.
@@ -3473,7 +3449,7 @@ final class ActivityRecord extends ConfigurationContainer {
            mStackSupervisor.activityRelaunchingLocked(this);
            final ClientTransactionItem callbackItem = ActivityRelaunchItem.obtain(pendingResults,
                    pendingNewIntents, configChangeFlags,
                    new MergedConfiguration(getProcessGlobalConfiguration(),
                    new MergedConfiguration(mAtmService.getGlobalConfiguration(),
                            getMergedOverrideConfiguration()),
                    preserveWindow);
            final ActivityLifecycleItem lifecycleItem;
+1 −65
Original line number Diff line number Diff line
@@ -16,8 +16,6 @@

package com.android.server.wm;

import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD;
import static android.app.WindowConfiguration.WINDOWING_MODE_UNDEFINED;
import static android.view.Display.DEFAULT_DISPLAY;
import static android.view.Surface.ROTATION_0;
import static android.view.Surface.ROTATION_90;
@@ -40,7 +38,6 @@ import static com.android.server.wm.ActivityStack.REMOVE_TASK_MODE_MOVING;
import static com.android.server.wm.ActivityStack.STACK_VISIBILITY_INVISIBLE;
import static com.android.server.wm.ActivityStack.STACK_VISIBILITY_VISIBLE;
import static com.android.server.wm.ActivityStack.STACK_VISIBILITY_VISIBLE_BEHIND_TRANSLUCENT;
import static com.android.server.wm.WindowContainer.POSITION_TOP;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
@@ -59,10 +56,10 @@ import android.app.servertransaction.PauseActivityItem;
import android.content.pm.ActivityInfo;
import android.content.res.Configuration;
import android.graphics.Rect;
import android.os.RemoteException;
import android.platform.test.annotations.Presubmit;
import android.util.MergedConfiguration;
import android.util.MutableBoolean;
import android.view.DisplayInfo;
import android.view.IRemoteAnimationFinishedCallback;
import android.view.IRemoteAnimationRunner.Stub;
import android.view.RemoteAnimationAdapter;
@@ -601,67 +598,6 @@ public class ActivityRecordTests extends ActivityTestsBase {
        assertNull(mActivity.pendingOptions);
    }

    @Test
    public void testSetProcessOverridesConfig() {
        final ActivityRecord defaultDisplayActivity =
                createActivityOnDisplay(true /* defaultDisplay */, null /* process */);
        assertFalse(defaultDisplayActivity.app.registeredForDisplayConfigChanges());

        final ActivityRecord secondaryDisplayActivity =
                createActivityOnDisplay(false /* defaultDisplay */, null /* process */);
        assertTrue(secondaryDisplayActivity.app.registeredForDisplayConfigChanges());
        assertEquals(secondaryDisplayActivity.getDisplay().getResolvedOverrideConfiguration(),
                secondaryDisplayActivity.app.getRequestedOverrideConfiguration());

        assertNotEquals(defaultDisplayActivity.getConfiguration(),
                secondaryDisplayActivity.getConfiguration());
    }

    @Test
    public void testSetProcessDoesntOverrideConfigIfAnotherActivityPresent() {
        final ActivityRecord defaultDisplayActivity =
                createActivityOnDisplay(true /* defaultDisplay */, null /* process */);
        assertFalse(defaultDisplayActivity.app.registeredForDisplayConfigChanges());

        final ActivityRecord secondaryDisplayActivity =
                createActivityOnDisplay(false /* defaultDisplay */, defaultDisplayActivity.app);
        assertFalse(secondaryDisplayActivity.app.registeredForDisplayConfigChanges());
    }

    @Test
    public void testActivityOnDefaultDisplayClearsProcessOverride() {
        final ActivityRecord secondaryDisplayActivity =
                createActivityOnDisplay(false /* defaultDisplay */, null /* process */);
        assertTrue(secondaryDisplayActivity.app.registeredForDisplayConfigChanges());

        final ActivityRecord defaultDisplayActivity =
                createActivityOnDisplay(true /* defaultDisplay */,
                        secondaryDisplayActivity.app);
        assertFalse(defaultDisplayActivity.app.registeredForDisplayConfigChanges());
        assertFalse(secondaryDisplayActivity.app.registeredForDisplayConfigChanges());
    }

    /**
     * Creates an activity on display. For non-default display request it will also create a new
     * display with custom DisplayInfo.
     */
    private ActivityRecord createActivityOnDisplay(boolean defaultDisplay,
            WindowProcessController process) {
        final ActivityDisplay display;
        if (defaultDisplay) {
            display = mRootActivityContainer.getDefaultDisplay();
        } else {
            final DisplayInfo info = new DisplayInfo();
            info.logicalWidth = 100;
            info.logicalHeight = 100;
            display = addNewActivityDisplayAt(info, POSITION_TOP);
        }
        final TestActivityStack stack = display.createStack(WINDOWING_MODE_UNDEFINED,
                ACTIVITY_TYPE_STANDARD, true /* onTop */);
        final TaskRecord task = new TaskBuilder(mSupervisor).setStack(stack).build();
        return new ActivityBuilder(mService).setTask(task).setUseProcess(process).build();
    }

    /** Setup {@link #mActivity} as a size-compat-mode-able activity without fixed orientation. */
    private void prepareFixedAspectRatioUnresizableActivity() {
        setupDisplayContentForCompatDisplayInsets();
+5 −17
Original line number Diff line number Diff line
@@ -195,7 +195,6 @@ class ActivityTestsBase {
        private ActivityStack mStack;
        private int mActivityFlags;
        private int mLaunchMode;
        private WindowProcessController mWpc;

        ActivityBuilder(ActivityTaskManagerService service) {
            mService = service;
@@ -246,11 +245,6 @@ class ActivityTestsBase {
            return this;
        }

        ActivityBuilder setUseProcess(WindowProcessController wpc) {
            mWpc = wpc;
            return this;
        }

        ActivityRecord build() {
            if (mComponent == null) {
                final int id = sCurrentActivityId++;
@@ -296,18 +290,12 @@ class ActivityTestsBase {
                mTaskRecord.addActivityToTop(activity);
            }

            final WindowProcessController wpc;
            if (mWpc != null) {
                wpc = mWpc;
            } else {
                wpc = new WindowProcessController(mService,
            final WindowProcessController wpc = new WindowProcessController(mService,
                    mService.mContext.getApplicationInfo(), "name", 12345,
                    UserHandle.getUserId(12345), mock(Object.class),
                    mock(WindowProcessListener.class));
            wpc.setThread(mock(IApplicationThread.class));
            }
            activity.setProcess(wpc);
            wpc.addActivityIfNeeded(activity);
            return activity;
        }
    }
+2 −0
Original line number Diff line number Diff line
@@ -153,6 +153,7 @@ public class AppWindowTokenTests extends WindowTestsBase {
    @FlakyTest(bugId = 131005232)
    public void testLandscapeSeascapeRotationByApp() {
        // Some plumbing to get the service ready for rotation updates.
        mWm.mDisplayReady = true;
        mWm.mDisplayEnabled = true;

        final WindowManager.LayoutParams attrs = new WindowManager.LayoutParams(
@@ -185,6 +186,7 @@ public class AppWindowTokenTests extends WindowTestsBase {
    @Test
    public void testLandscapeSeascapeRotationByPolicy() {
        // Some plumbing to get the service ready for rotation updates.
        mWm.mDisplayReady = true;
        mWm.mDisplayEnabled = true;

        final DisplayRotation spiedRotation = spy(mDisplayContent.getDisplayRotation());
+0 −7
Original line number Diff line number Diff line
@@ -41,7 +41,6 @@ import android.content.BroadcastReceiver;
import android.content.ContentResolver;
import android.content.Context;
import android.content.IntentFilter;
import android.content.res.Configuration;
import android.database.ContentObserver;
import android.hardware.display.DisplayManagerInternal;
import android.net.Uri;
@@ -176,12 +175,6 @@ public class SystemServicesTestRule implements TestRule {
        // Display creation is driven by the ActivityManagerService via
        // ActivityStackSupervisor. We emulate those steps here.
        mWindowManagerService.mRoot.createDisplayContent(display, mock(ActivityDisplay.class));
        mWindowManagerService.displayReady();

        final Configuration defaultDisplayConfig =
                mWindowManagerService.computeNewConfiguration(DEFAULT_DISPLAY);
        doReturn(defaultDisplayConfig).when(atms).getGlobalConfiguration();
        doReturn(defaultDisplayConfig).when(atms).getGlobalConfigurationForPid(anyInt());

        mMockTracker.stopTracking();
    }
Loading