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

Commit 428305ec authored by Graciela Wissen Putri's avatar Graciela Wissen Putri
Browse files

Move hide scm button condition

Move shouldShowSizeCompatRestartButton to eligibleToShowLayout which
should release the layout if not eligible before view is created. This
should also let size compat restart button to be shown when
exiting/entering split screen and folding/unfolding.

Remove unnecessary check in createLayout and updateCompatInfo as the
eligibility is already checked in eligibleToShowLayout.

getLastTaskInfo can never be null as mTaskInfo is never null.

Fix: 321920640
Test: atest CompatUIWindowManagerTest
      atest CompatUILayoutTest
Change-Id: I78cdd070e43ae0e8a43314abbac73c6948047e47
parent b8cf7695
Loading
Loading
Loading
Loading
+4 −10
Original line number Diff line number Diff line
@@ -80,8 +80,7 @@ class CompatUIWindowManager extends CompatUIWindowManagerAbstract {
            Consumer<Pair<TaskInfo, ShellTaskOrganizer.TaskListener>> onRestartButtonClicked) {
        super(context, taskInfo, syncQueue, taskListener, displayLayout);
        mCallback = callback;
        mHasSizeCompat = taskInfo.appCompatTaskInfo.topActivityInSizeCompat
                && shouldShowSizeCompatRestartButton(taskInfo);
        mHasSizeCompat = taskInfo.appCompatTaskInfo.topActivityInSizeCompat;
        mCameraCompatControlState = taskInfo.appCompatTaskInfo.cameraCompatControlState;
        mCompatUIHintsState = compatUIHintsState;
        mCompatUIConfiguration = compatUIConfiguration;
@@ -106,7 +105,8 @@ class CompatUIWindowManager extends CompatUIWindowManagerAbstract {

    @Override
    protected boolean eligibleToShowLayout() {
        return mHasSizeCompat || shouldShowCameraControl();
        return (mHasSizeCompat && shouldShowSizeCompatRestartButton(getLastTaskInfo()))
                || shouldShowCameraControl();
    }

    @Override
@@ -114,11 +114,6 @@ class CompatUIWindowManager extends CompatUIWindowManagerAbstract {
        mLayout = inflateLayout();
        mLayout.inject(this);

        final TaskInfo taskInfo = getLastTaskInfo();
        if (taskInfo != null) {
            mHasSizeCompat = mHasSizeCompat && shouldShowSizeCompatRestartButton(taskInfo);
        }

        updateVisibilityOfViews();

        if (mHasSizeCompat) {
@@ -139,8 +134,7 @@ class CompatUIWindowManager extends CompatUIWindowManagerAbstract {
            boolean canShow) {
        final boolean prevHasSizeCompat = mHasSizeCompat;
        final int prevCameraCompatControlState = mCameraCompatControlState;
        mHasSizeCompat = taskInfo.appCompatTaskInfo.topActivityInSizeCompat
                && shouldShowSizeCompatRestartButton(taskInfo);
        mHasSizeCompat = taskInfo.appCompatTaskInfo.topActivityInSizeCompat;
        mCameraCompatControlState = taskInfo.appCompatTaskInfo.cameraCompatControlState;

        if (!super.updateCompatInfo(taskInfo, taskListener, canShow)) {
+1 −1
Original line number Diff line number Diff line
@@ -332,7 +332,7 @@ public abstract class CompatUIWindowManagerAbstract extends WindowlessWindowMana
        updateSurfacePosition();
    }

    @Nullable
    @NonNull
    protected TaskInfo getLastTaskInfo() {
        return mTaskInfo;
    }
+5 −1
Original line number Diff line number Diff line
@@ -30,6 +30,7 @@ import static org.mockito.Mockito.verify;
import android.app.ActivityManager;
import android.app.AppCompatTaskInfo.CameraCompatControlState;
import android.app.TaskInfo;
import android.graphics.Rect;
import android.testing.AndroidTestingRunner;
import android.util.Pair;
import android.view.LayoutInflater;
@@ -83,6 +84,7 @@ public class CompatUILayoutTest extends ShellTestCase {
    @Before
    public void setUp() {
        MockitoAnnotations.initMocks(this);
        doReturn(100).when(mCompatUIConfiguration).getHideSizeCompatRestartButtonTolerance();
        mTaskInfo = createTaskInfo(/* hasSizeCompat= */ false, CAMERA_COMPAT_CONTROL_HIDDEN);
        mWindowManager = new CompatUIWindowManager(mContext, mTaskInfo, mSyncTransactionQueue,
                mCallback, mTaskListener, new DisplayLayout(), new CompatUIHintsState(),
@@ -127,7 +129,6 @@ public class CompatUILayoutTest extends ShellTestCase {
    @Test
    public void testOnClickForSizeCompatHint() {
        mWindowManager.mHasSizeCompat = true;
        doReturn(true).when(mWindowManager).shouldShowSizeCompatRestartButton(mTaskInfo);
        mWindowManager.createLayout(/* canShow= */ true);
        final LinearLayout sizeCompatHint = mLayout.findViewById(R.id.size_compat_hint);
        sizeCompatHint.performClick();
@@ -222,6 +223,9 @@ public class CompatUILayoutTest extends ShellTestCase {
        taskInfo.taskId = TASK_ID;
        taskInfo.appCompatTaskInfo.topActivityInSizeCompat = hasSizeCompat;
        taskInfo.appCompatTaskInfo.cameraCompatControlState = cameraCompatControlState;
        taskInfo.appCompatTaskInfo.topActivityLetterboxHeight = 1000;
        taskInfo.appCompatTaskInfo.topActivityLetterboxWidth = 1000;
        taskInfo.configuration.windowConfiguration.setBounds(new Rect(0, 0, 2000, 2000));
        return taskInfo;
    }
}
+24 −6
Original line number Diff line number Diff line
@@ -20,7 +20,6 @@ import static android.app.AppCompatTaskInfo.CAMERA_COMPAT_CONTROL_DISMISSED;
import static android.app.AppCompatTaskInfo.CAMERA_COMPAT_CONTROL_HIDDEN;
import static android.app.AppCompatTaskInfo.CAMERA_COMPAT_CONTROL_TREATMENT_APPLIED;
import static android.app.AppCompatTaskInfo.CAMERA_COMPAT_CONTROL_TREATMENT_SUGGESTED;
import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;
import static android.platform.test.flag.junit.SetFlagsRule.DefaultInitValueType.DEVICE_DEFAULT;
import static android.view.WindowInsets.Type.navigationBars;

@@ -86,6 +85,8 @@ public class CompatUIWindowManagerTest extends ShellTestCase {
    public final SetFlagsRule mSetFlagsRule = new SetFlagsRule(DEVICE_DEFAULT);

    private static final int TASK_ID = 1;
    private static final int TASK_WIDTH = 2000;
    private static final int TASK_HEIGHT = 2000;

    @Mock private SyncTransactionQueue mSyncTransactionQueue;
    @Mock private CompatUIController.CompatUICallback mCallback;
@@ -101,6 +102,7 @@ public class CompatUIWindowManagerTest extends ShellTestCase {
    @Before
    public void setUp() {
        MockitoAnnotations.initMocks(this);
        doReturn(100).when(mCompatUIConfiguration).getHideSizeCompatRestartButtonTolerance();
        mTaskInfo = createTaskInfo(/* hasSizeCompat= */ false, CAMERA_COMPAT_CONTROL_HIDDEN);
        mWindowManager = new CompatUIWindowManager(mContext, mTaskInfo, mSyncTransactionQueue,
                mCallback, mTaskListener, new DisplayLayout(), new CompatUIHintsState(),
@@ -115,7 +117,6 @@ public class CompatUIWindowManagerTest extends ShellTestCase {
    public void testCreateSizeCompatButton() {
        // Doesn't create layout if show is false.
        mWindowManager.mHasSizeCompat = true;
        doReturn(true).when(mWindowManager).shouldShowSizeCompatRestartButton(mTaskInfo);
        assertTrue(mWindowManager.createLayout(/* canShow= */ false));

        verify(mWindowManager, never()).inflateLayout();
@@ -147,6 +148,13 @@ public class CompatUIWindowManagerTest extends ShellTestCase {
        mWindowManager.mHasSizeCompat = false;
        assertFalse(mWindowManager.createLayout(/* canShow= */ true));

        // Returns false and doesn't create layout if restart button should be hidden.
        clearInvocations(mWindowManager);
        mWindowManager.mHasSizeCompat = true;
        mTaskInfo.appCompatTaskInfo.topActivityLetterboxWidth = TASK_WIDTH;
        mTaskInfo.appCompatTaskInfo.topActivityLetterboxHeight = TASK_HEIGHT;
        assertFalse(mWindowManager.createLayout(/* canShow= */ true));

        verify(mWindowManager, never()).inflateLayout();
    }

@@ -293,8 +301,6 @@ public class CompatUIWindowManagerTest extends ShellTestCase {

    @Test
    public void testUpdateCompatInfoLayoutNotInflatedYet() {
        mWindowManager.mHasSizeCompat = true;
        doReturn(true).when(mWindowManager).shouldShowSizeCompatRestartButton(any());
        mWindowManager.createLayout(/* canShow= */ false);

        verify(mWindowManager, never()).inflateLayout();
@@ -314,6 +320,15 @@ public class CompatUIWindowManagerTest extends ShellTestCase {
        mWindowManager.updateCompatInfo(taskInfo, mTaskListener, /* canShow= */ true);

        verify(mWindowManager).inflateLayout();

        // Change shouldShowSizeCompatRestartButton to false and pass canShow true, layout
        // shouldn't be inflated
        clearInvocations(mWindowManager);
        taskInfo.appCompatTaskInfo.topActivityLetterboxWidth = TASK_WIDTH;
        taskInfo.appCompatTaskInfo.topActivityLetterboxHeight = TASK_HEIGHT;
        mWindowManager.updateCompatInfo(taskInfo, mTaskListener, /* canShow= */ true);

        verify(mWindowManager, never()).inflateLayout();
    }

    @Test
@@ -364,7 +379,6 @@ public class CompatUIWindowManagerTest extends ShellTestCase {
        // Create button if it is not created.
        mWindowManager.mLayout = null;
        mWindowManager.mHasSizeCompat = true;
        doReturn(true).when(mWindowManager).shouldShowSizeCompatRestartButton(mTaskInfo);
        mWindowManager.updateVisibility(/* canShow= */ true);

        verify(mWindowManager).createLayout(/* canShow= */ true);
@@ -489,7 +503,6 @@ public class CompatUIWindowManagerTest extends ShellTestCase {
        TaskInfo taskInfo = createTaskInfo(true, CAMERA_COMPAT_CONTROL_HIDDEN);
        taskInfo.configuration.windowConfiguration.setBounds(new Rect(0, 0, 2000, 2000));
        taskInfo.appCompatTaskInfo.topActivityLetterboxHeight = 2000;
        taskInfo.configuration.windowConfiguration.setWindowingMode(WINDOWING_MODE_FULLSCREEN);
        taskInfo.appCompatTaskInfo.topActivityLetterboxWidth = 1850;

        assertFalse(mWindowManager.shouldShowSizeCompatRestartButton(taskInfo));
@@ -514,6 +527,11 @@ public class CompatUIWindowManagerTest extends ShellTestCase {
        taskInfo.appCompatTaskInfo.topActivityInSizeCompat = hasSizeCompat;
        taskInfo.appCompatTaskInfo.cameraCompatControlState = cameraCompatControlState;
        taskInfo.configuration.uiMode &= ~Configuration.UI_MODE_TYPE_DESK;
        // Letterboxed activity that takes half the screen should show size compat restart button
        taskInfo.configuration.windowConfiguration.setBounds(
                new Rect(0, 0, TASK_WIDTH, TASK_HEIGHT));
        taskInfo.appCompatTaskInfo.topActivityLetterboxHeight = 1000;
        taskInfo.appCompatTaskInfo.topActivityLetterboxWidth = 1000;
        return taskInfo;
    }
}