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

Commit 95746467 authored by Kazuki Takise's avatar Kazuki Takise Committed by Android (Google) Code Review
Browse files

Merge "Maintain CompatUIInfo in CompatUIController" into main

parents dd8f4e6b efe0b92d
Loading
Loading
Loading
Loading
+16 −1
Original line number Original line Diff line number Diff line
@@ -111,6 +111,12 @@ public class CompatUIController implements OnDisplaysChangedListener,
    private final SparseArray<RestartDialogWindowManager> mTaskIdToRestartDialogWindowManagerMap =
    private final SparseArray<RestartDialogWindowManager> mTaskIdToRestartDialogWindowManagerMap =
            new SparseArray<>(0);
            new SparseArray<>(0);


    /**
     * {@link SparseArray} that maps task ids to {@link CompatUIInfo}.
     */
    private final SparseArray<CompatUIInfo> mTaskIdToCompatUIInfoMap =
            new SparseArray<>(0);

    /**
    /**
     * {@link Set} of task ids for which we need to display a restart confirmation dialog
     * {@link Set} of task ids for which we need to display a restart confirmation dialog
     */
     */
@@ -261,7 +267,11 @@ public class CompatUIController implements OnDisplaysChangedListener,


    private void handleDisplayCompatShowRestartDialog(
    private void handleDisplayCompatShowRestartDialog(
            CompatUIRequests.DisplayCompatShowRestartDialog request) {
            CompatUIRequests.DisplayCompatShowRestartDialog request) {
        onRestartButtonClicked(new Pair<>(request.getTaskInfo(), request.getTaskListener()));
        final CompatUIInfo compatUIInfo = mTaskIdToCompatUIInfoMap.get(request.getTaskId());
        if (compatUIInfo == null) {
            return;
        }
        onRestartButtonClicked(new Pair<>(compatUIInfo.getTaskInfo(), compatUIInfo.getListener()));
    }
    }


    /**
    /**
@@ -273,6 +283,11 @@ public class CompatUIController implements OnDisplaysChangedListener,
    public void onCompatInfoChanged(@NonNull CompatUIInfo compatUIInfo) {
    public void onCompatInfoChanged(@NonNull CompatUIInfo compatUIInfo) {
        final TaskInfo taskInfo = compatUIInfo.getTaskInfo();
        final TaskInfo taskInfo = compatUIInfo.getTaskInfo();
        final ShellTaskOrganizer.TaskListener taskListener = compatUIInfo.getListener();
        final ShellTaskOrganizer.TaskListener taskListener = compatUIInfo.getListener();
        if (taskListener == null) {
            mTaskIdToCompatUIInfoMap.delete(taskInfo.taskId);
        } else {
            mTaskIdToCompatUIInfoMap.put(taskInfo.taskId, compatUIInfo);
        }
        final boolean isInDisplayCompatMode =
        final boolean isInDisplayCompatMode =
                taskInfo.appCompatTaskInfo.isRestartMenuEnabledForDisplayMove();
                taskInfo.appCompatTaskInfo.isRestartMenuEnabledForDisplayMove();
        if (taskInfo != null && !taskInfo.appCompatTaskInfo.isTopActivityInSizeCompat()
        if (taskInfo != null && !taskInfo.appCompatTaskInfo.isTopActivityInSizeCompat()
+1 −4
Original line number Original line Diff line number Diff line
@@ -16,8 +16,6 @@


package com.android.wm.shell.compatui.impl
package com.android.wm.shell.compatui.impl


import android.app.TaskInfo
import com.android.wm.shell.ShellTaskOrganizer
import com.android.wm.shell.compatui.api.CompatUIRequest
import com.android.wm.shell.compatui.api.CompatUIRequest


internal const val DISPLAY_COMPAT_SHOW_RESTART_DIALOG = 0
internal const val DISPLAY_COMPAT_SHOW_RESTART_DIALOG = 0
@@ -27,7 +25,6 @@ internal const val DISPLAY_COMPAT_SHOW_RESTART_DIALOG = 0
 */
 */
sealed class CompatUIRequests(override val requestId: Int) : CompatUIRequest {
sealed class CompatUIRequests(override val requestId: Int) : CompatUIRequest {
    /** Sent when the restart handle menu is clicked, and a restart dialog is requested. */
    /** Sent when the restart handle menu is clicked, and a restart dialog is requested. */
    data class DisplayCompatShowRestartDialog(val taskInfo: TaskInfo,
    data class DisplayCompatShowRestartDialog(val taskId: Int) :
        val taskListener: ShellTaskOrganizer.TaskListener) :
        CompatUIRequests(DISPLAY_COMPAT_SHOW_RESTART_DIALOG)
        CompatUIRequests(DISPLAY_COMPAT_SHOW_RESTART_DIALOG)
}
}
+19 −10
Original line number Original line Diff line number Diff line
@@ -680,7 +680,8 @@ public class CompatUIControllerTest extends ShellTestCase {


        // Create transparent task
        // Create transparent task
        final TaskInfo taskInfo1 = createTaskInfo(DISPLAY_ID, newTaskId, /* hasSizeCompat= */ true,
        final TaskInfo taskInfo1 = createTaskInfo(DISPLAY_ID, newTaskId, /* hasSizeCompat= */ true,
                /* isVisible */ true, /* isFocused */ true, /* isTopActivityTransparent */ true);
                /* isVisible */ true, /* isFocused */ true, /* isTopActivityTransparent */ true,
                /* isRestartMenuEnabledForDisplayMove */ true);


        // Simulate new task being shown
        // Simulate new task being shown
        mController.updateActiveTaskInfo(taskInfo1);
        mController.updateActiveTaskInfo(taskInfo1);
@@ -742,32 +743,38 @@ public class CompatUIControllerTest extends ShellTestCase {
    @Test
    @Test
    @RequiresFlagsDisabled(Flags.FLAG_APP_COMPAT_UI_FRAMEWORK)
    @RequiresFlagsDisabled(Flags.FLAG_APP_COMPAT_UI_FRAMEWORK)
    public void testSendCompatUIRequest_createRestartDialog() {
    public void testSendCompatUIRequest_createRestartDialog() {
        TaskInfo taskInfo = createTaskInfo(DISPLAY_ID, TASK_ID, /* hasSizeCompat= */ false);
        final TaskInfo taskInfo = createTaskInfo(DISPLAY_ID, TASK_ID, /* hasSizeCompat= */ true,
        doReturn(true).when(mMockRestartDialogLayout)
                /* isVisible */ true, /* isFocused */ true, /* isTopActivityTransparent */ false,
                .needsToBeRecreated(any(TaskInfo.class),
                /* isRestartMenuEnabledForDisplayMove */ true);
                        any(ShellTaskOrganizer.TaskListener.class));
        doReturn(true).when(mCompatUIConfiguration).isRestartDialogEnabled();
        doReturn(true).when(mCompatUIConfiguration).isRestartDialogEnabled();
        doReturn(true).when(mCompatUIConfiguration).shouldShowRestartDialogAgain(eq(taskInfo));
        doReturn(true).when(mCompatUIConfiguration).shouldShowRestartDialogAgain(eq(taskInfo));


        mController.sendCompatUIRequest(new CompatUIRequests.DisplayCompatShowRestartDialog(
        mController.onCompatInfoChanged(new CompatUIInfo(taskInfo, mMockTaskListener));
                taskInfo, mMockTaskListener));
        verify(mController).createRestartDialogWindowManager(any(), eq(taskInfo),
        verify(mController).createRestartDialogWindowManager(any(), eq(taskInfo),
                eq(mMockTaskListener));
                eq(mMockTaskListener));
        verify(mMockRestartDialogLayout).setRequestRestartDialog(false);

        mController.sendCompatUIRequest(
                new CompatUIRequests.DisplayCompatShowRestartDialog(taskInfo.taskId));
        verify(mMockRestartDialogLayout).setRequestRestartDialog(true);
    }
    }


    private static TaskInfo createTaskInfo(int displayId, int taskId, boolean hasSizeCompat) {
    private static TaskInfo createTaskInfo(int displayId, int taskId, boolean hasSizeCompat) {
        return createTaskInfo(displayId, taskId, hasSizeCompat, /* isVisible */ false,
        return createTaskInfo(displayId, taskId, hasSizeCompat, /* isVisible */ false,
                /* isFocused */ false, /* isTopActivityTransparent */ false);
                /* isFocused */ false, /* isTopActivityTransparent */ false,
                /* isRestartMenuEnabledForDisplayMove */ false);
    }
    }


    private static TaskInfo createTaskInfo(int displayId, int taskId, boolean hasSizeCompat,
    private static TaskInfo createTaskInfo(int displayId, int taskId, boolean hasSizeCompat,
            boolean isVisible, boolean isFocused) {
            boolean isVisible, boolean isFocused) {
        return createTaskInfo(displayId, taskId, hasSizeCompat,
        return createTaskInfo(displayId, taskId, hasSizeCompat,
                isVisible, isFocused, /* isTopActivityTransparent */ false);
                isVisible, isFocused, /* isTopActivityTransparent */ false,
                /* isRestartMenuEnabledForDisplayMove */ false);
    }
    }


    private static TaskInfo createTaskInfo(int displayId, int taskId, boolean hasSizeCompat,
    private static TaskInfo createTaskInfo(int displayId, int taskId, boolean hasSizeCompat,
            boolean isVisible, boolean isFocused, boolean isTopActivityTransparent) {
            boolean isVisible, boolean isFocused, boolean isTopActivityTransparent,
            boolean isRestartMenuEnabledForDisplayMove) {
        RunningTaskInfo taskInfo = new RunningTaskInfo();
        RunningTaskInfo taskInfo = new RunningTaskInfo();
        taskInfo.taskId = taskId;
        taskInfo.taskId = taskId;
        taskInfo.displayId = displayId;
        taskInfo.displayId = displayId;
@@ -777,6 +784,8 @@ public class CompatUIControllerTest extends ShellTestCase {
        taskInfo.isTopActivityTransparent = isTopActivityTransparent;
        taskInfo.isTopActivityTransparent = isTopActivityTransparent;
        taskInfo.appCompatTaskInfo.setLetterboxEducationEnabled(true);
        taskInfo.appCompatTaskInfo.setLetterboxEducationEnabled(true);
        taskInfo.appCompatTaskInfo.setTopActivityLetterboxed(true);
        taskInfo.appCompatTaskInfo.setTopActivityLetterboxed(true);
        taskInfo.appCompatTaskInfo.setRestartMenuEnabledForDisplayMove(
                isRestartMenuEnabledForDisplayMove);
        return taskInfo;
        return taskInfo;
    }
    }
}
}