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 Diff line number Diff line
@@ -111,6 +111,12 @@ public class CompatUIController implements OnDisplaysChangedListener,
    private final SparseArray<RestartDialogWindowManager> mTaskIdToRestartDialogWindowManagerMap =
            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
     */
@@ -261,7 +267,11 @@ public class CompatUIController implements OnDisplaysChangedListener,

    private void handleDisplayCompatShowRestartDialog(
            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) {
        final TaskInfo taskInfo = compatUIInfo.getTaskInfo();
        final ShellTaskOrganizer.TaskListener taskListener = compatUIInfo.getListener();
        if (taskListener == null) {
            mTaskIdToCompatUIInfoMap.delete(taskInfo.taskId);
        } else {
            mTaskIdToCompatUIInfoMap.put(taskInfo.taskId, compatUIInfo);
        }
        final boolean isInDisplayCompatMode =
                taskInfo.appCompatTaskInfo.isRestartMenuEnabledForDisplayMove();
        if (taskInfo != null && !taskInfo.appCompatTaskInfo.isTopActivityInSizeCompat()
+1 −4
Original line number Diff line number Diff line
@@ -16,8 +16,6 @@

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

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 {
    /** Sent when the restart handle menu is clicked, and a restart dialog is requested. */
    data class DisplayCompatShowRestartDialog(val taskInfo: TaskInfo,
        val taskListener: ShellTaskOrganizer.TaskListener) :
    data class DisplayCompatShowRestartDialog(val taskId: Int) :
        CompatUIRequests(DISPLAY_COMPAT_SHOW_RESTART_DIALOG)
}
+19 −10
Original line number Diff line number Diff line
@@ -680,7 +680,8 @@ public class CompatUIControllerTest extends ShellTestCase {

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

        mController.sendCompatUIRequest(new CompatUIRequests.DisplayCompatShowRestartDialog(
                taskInfo, mMockTaskListener));
        mController.onCompatInfoChanged(new CompatUIInfo(taskInfo, mMockTaskListener));
        verify(mController).createRestartDialogWindowManager(any(), eq(taskInfo),
                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) {
        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,
            boolean isVisible, boolean isFocused) {
        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,
            boolean isVisible, boolean isFocused, boolean isTopActivityTransparent) {
            boolean isVisible, boolean isFocused, boolean isTopActivityTransparent,
            boolean isRestartMenuEnabledForDisplayMove) {
        RunningTaskInfo taskInfo = new RunningTaskInfo();
        taskInfo.taskId = taskId;
        taskInfo.displayId = displayId;
@@ -777,6 +784,8 @@ public class CompatUIControllerTest extends ShellTestCase {
        taskInfo.isTopActivityTransparent = isTopActivityTransparent;
        taskInfo.appCompatTaskInfo.setLetterboxEducationEnabled(true);
        taskInfo.appCompatTaskInfo.setTopActivityLetterboxed(true);
        taskInfo.appCompatTaskInfo.setRestartMenuEnabledForDisplayMove(
                isRestartMenuEnabledForDisplayMove);
        return taskInfo;
    }
}