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

Commit 624112a0 authored by Massimo Carli's avatar Massimo Carli Committed by Automerger Merge Worker
Browse files

Merge "Fix letterbox for SCREEN_ORIENTATION_BEHIND" into tm-qpr-dev am: d119d254

parents 068284be d119d254
Loading
Loading
Loading
Loading
+25 −0
Original line number Diff line number Diff line
@@ -7638,6 +7638,31 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
        ensureActivityConfiguration(0 /* globalChanges */, false /* preserveWindow */);
    }

    /**
     * Returns the requested {@link Configuration.Orientation} for the current activity.
     *
     * <p>When The current orientation is set to {@link SCREEN_ORIENTATION_BEHIND} it returns the
     * requested orientation for the activity below which is the first activity with an explicit
     * (different from {@link SCREEN_ORIENTATION_UNSET}) orientation which is not {@link
     * SCREEN_ORIENTATION_BEHIND}.
     */
    @Configuration.Orientation
    @Override
    int getRequestedConfigurationOrientation(boolean forDisplay) {
        if (mOrientation == SCREEN_ORIENTATION_BEHIND && task != null) {
            // We use Task here because we want to be consistent with what happens in
            // multi-window mode where other tasks orientations are ignored.
            final ActivityRecord belowCandidate = task.getActivity(
                    a -> a.mOrientation != SCREEN_ORIENTATION_UNSET && !a.finishing
                            && a.mOrientation != ActivityInfo.SCREEN_ORIENTATION_BEHIND, this,
                    false /* includeBoundary */, true /* traverseTopToBottom */);
            if (belowCandidate != null) {
                return belowCandidate.getRequestedConfigurationOrientation(forDisplay);
            }
        }
        return super.getRequestedConfigurationOrientation(forDisplay);
    }

    @Override
    void onCancelFixedRotationTransform(int originalDisplayRotation) {
        if (this != mDisplayContent.getLastOrientationSource()) {
+16 −0
Original line number Diff line number Diff line
@@ -2319,6 +2319,22 @@ public class ActivityRecordTests extends WindowTestsBase {
        assertTrue(activity1.getTask().getTaskInfo().launchCookies.contains(launchCookie));
    }

    @Test
    public void testOrientationForScreenOrientationBehind() {
        final Task task = createTask(mDisplayContent);
        // Activity below
        new ActivityBuilder(mAtm)
                .setTask(task)
                .setScreenOrientation(SCREEN_ORIENTATION_PORTRAIT)
                .build();
        final ActivityRecord activityTop = new ActivityBuilder(mAtm)
                .setTask(task)
                .setScreenOrientation(SCREEN_ORIENTATION_BEHIND)
                .build();
        final int topOrientation = activityTop.getRequestedConfigurationOrientation();
        assertEquals(SCREEN_ORIENTATION_PORTRAIT, topOrientation);
    }

    private void verifyProcessInfoUpdate(ActivityRecord activity, State state,
            boolean shouldUpdate, boolean activityChange) {
        reset(activity.app);