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

Commit 794bf418 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Revert "Use FocusTransitionObserver in CompatUIController"" into main

parents 17a6dd16 e4c87bd0
Loading
Loading
Loading
Loading
+3 −10
Original line number Diff line number Diff line
@@ -20,7 +20,6 @@ import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;

import android.annotation.NonNull;
import android.annotation.Nullable;
import android.app.ActivityManager.RunningTaskInfo;
import android.app.TaskInfo;
import android.content.ComponentName;
import android.content.Context;
@@ -60,7 +59,6 @@ import com.android.wm.shell.shared.desktopmode.DesktopModeStatus;
import com.android.wm.shell.sysui.KeyguardChangeListener;
import com.android.wm.shell.sysui.ShellController;
import com.android.wm.shell.sysui.ShellInit;
import com.android.wm.shell.transition.FocusTransitionObserver;
import com.android.wm.shell.transition.Transitions;

import dagger.Lazy;
@@ -73,6 +71,7 @@ import java.util.Optional;
import java.util.Set;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.IntPredicate;
import java.util.function.Predicate;

/**
@@ -197,9 +196,6 @@ public class CompatUIController implements OnDisplaysChangedListener,
    @NonNull
    private final CompatUIStatusManager mCompatUIStatusManager;

    @NonNull
    private final FocusTransitionObserver mFocusTransitionObserver;

    @NonNull
    private final Optional<DesktopUserRepositories> mDesktopUserRepositories;

@@ -217,8 +213,7 @@ public class CompatUIController implements OnDisplaysChangedListener,
            @NonNull CompatUIShellCommandHandler compatUIShellCommandHandler,
            @NonNull AccessibilityManager accessibilityManager,
            @NonNull CompatUIStatusManager compatUIStatusManager,
            @NonNull Optional<DesktopUserRepositories> desktopUserRepositories,
            @NonNull FocusTransitionObserver focusTransitionObserver) {
            @NonNull Optional<DesktopUserRepositories> desktopUserRepositories) {
        mContext = context;
        mShellController = shellController;
        mDisplayController = displayController;
@@ -235,7 +230,6 @@ public class CompatUIController implements OnDisplaysChangedListener,
                DISAPPEAR_DELAY_MS, flags);
        mCompatUIStatusManager = compatUIStatusManager;
        mDesktopUserRepositories = desktopUserRepositories;
        mFocusTransitionObserver = focusTransitionObserver;
        shellInit.addInitCallback(this::onInit, this);
    }

@@ -412,8 +406,7 @@ public class CompatUIController implements OnDisplaysChangedListener,
        // start tracking the buttons visibility for this task.
        if (mTopActivityTaskId != taskInfo.taskId
                && !taskInfo.isTopActivityTransparent
                && taskInfo.isVisible
                && mFocusTransitionObserver.hasGlobalFocus((RunningTaskInfo) taskInfo)) {
                && taskInfo.isVisible && taskInfo.isFocused) {
            mTopActivityTaskId = taskInfo.taskId;
            setHasShownUserAspectRatioSettingsButton(false);
        }
+2 −4
Original line number Diff line number Diff line
@@ -272,8 +272,7 @@ public abstract class WMShellBaseModule {
            @NonNull CompatUIState compatUIState,
            @NonNull CompatUIComponentIdGenerator componentIdGenerator,
            @NonNull CompatUIComponentFactory compatUIComponentFactory,
            CompatUIStatusManager compatUIStatusManager,
            @NonNull FocusTransitionObserver focusTransitionObserver) {
            CompatUIStatusManager compatUIStatusManager) {
        if (!context.getResources().getBoolean(R.bool.config_enableCompatUIController)) {
            return Optional.empty();
        }
@@ -298,8 +297,7 @@ public abstract class WMShellBaseModule {
                        compatUIShellCommandHandler.get(),
                        accessibilityManager.get(),
                        compatUIStatusManager,
                        desktopUserRepositories,
                        focusTransitionObserver));
                        desktopUserRepositories));
    }

    @WMSingleton
+16 −35
Original line number Diff line number Diff line
@@ -62,11 +62,12 @@ import com.android.wm.shell.desktopmode.DesktopRepository;
import com.android.wm.shell.desktopmode.DesktopUserRepositories;
import com.android.wm.shell.sysui.ShellController;
import com.android.wm.shell.sysui.ShellInit;
import com.android.wm.shell.transition.FocusTransitionObserver;
import com.android.wm.shell.transition.Transitions;

import dagger.Lazy;

import java.util.Optional;

import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
@@ -76,8 +77,6 @@ import org.mockito.Captor;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;

import java.util.Optional;

/**
 * Tests for {@link CompatUIController}.
 *
@@ -128,8 +127,6 @@ public class CompatUIControllerTest extends CompatUIShellTestCase {
    private DesktopUserRepositories mDesktopUserRepositories;
    @Mock
    private DesktopRepository mDesktopRepository;
    @Mock
    private FocusTransitionObserver mFocusTransitionObserver;

    @Captor
    ArgumentCaptor<OnInsetsChangedListener> mOnInsetsChangedListenerCaptor;
@@ -165,8 +162,7 @@ public class CompatUIControllerTest extends CompatUIShellTestCase {
                mMockDisplayController, mMockDisplayInsetsController, mMockImeController,
                mMockSyncQueue, mMockExecutor, mMockTransitionsLazy, mDockStateReader,
                mCompatUIConfiguration, mCompatUIShellCommandHandler, mAccessibilityManager,
                mCompatUIStatusManager, Optional.of(mDesktopUserRepositories),
                mFocusTransitionObserver) {
                mCompatUIStatusManager, Optional.of(mDesktopUserRepositories)) {
            @Override
            CompatUIWindowManager createCompatUiWindowManager(Context context, TaskInfo taskInfo,
                    ShellTaskOrganizer.TaskListener taskListener) {
@@ -284,7 +280,6 @@ public class CompatUIControllerTest extends CompatUIShellTestCase {
        doReturn(false).when(mMockRestartDialogLayout).updateCompatInfo(any(), any(), anyBoolean());

        TaskInfo taskInfo = createTaskInfo(DISPLAY_ID, TASK_ID, /* hasSizeCompat= */ true);
        when(mFocusTransitionObserver.hasGlobalFocus((RunningTaskInfo) taskInfo)).thenReturn(true);
        mController.onCompatInfoChanged(new CompatUIInfo(taskInfo, mMockTaskListener));

        verify(mController).createCompatUiWindowManager(any(), eq(taskInfo), eq(mMockTaskListener));
@@ -416,7 +411,6 @@ public class CompatUIControllerTest extends CompatUIShellTestCase {
        // Verify button remains hidden while IME is showing.
        TaskInfo taskInfo = createTaskInfo(DISPLAY_ID, TASK_ID, /* hasSizeCompat= */ true);
        mController.onCompatInfoChanged(new CompatUIInfo(taskInfo, mMockTaskListener));
        when(mFocusTransitionObserver.hasGlobalFocus((RunningTaskInfo) taskInfo)).thenReturn(false);

        verify(mMockCompatLayout).updateCompatInfo(taskInfo, mMockTaskListener,
                /* canShow= */ false);
@@ -449,7 +443,6 @@ public class CompatUIControllerTest extends CompatUIShellTestCase {
        // Verify button remains hidden while keyguard is showing.
        TaskInfo taskInfo = createTaskInfo(DISPLAY_ID, TASK_ID, /* hasSizeCompat= */ true);
        mController.onCompatInfoChanged(new CompatUIInfo(taskInfo, mMockTaskListener));
        when(mFocusTransitionObserver.hasGlobalFocus((RunningTaskInfo) taskInfo)).thenReturn(false);

        verify(mMockCompatLayout).updateCompatInfo(taskInfo, mMockTaskListener,
                /* canShow= */ false);
@@ -530,7 +523,6 @@ public class CompatUIControllerTest extends CompatUIShellTestCase {
    @RequiresFlagsDisabled(Flags.FLAG_APP_COMPAT_UI_FRAMEWORK)
    public void testRestartLayoutRecreatedIfNeeded() {
        final TaskInfo taskInfo = createTaskInfo(DISPLAY_ID, TASK_ID, /* hasSizeCompat= */ true);
        when(mFocusTransitionObserver.hasGlobalFocus((RunningTaskInfo) taskInfo)).thenReturn(false);
        doReturn(true).when(mMockRestartDialogLayout)
                .needsToBeRecreated(any(TaskInfo.class),
                        any(ShellTaskOrganizer.TaskListener.class));
@@ -546,7 +538,6 @@ public class CompatUIControllerTest extends CompatUIShellTestCase {
    @RequiresFlagsDisabled(Flags.FLAG_APP_COMPAT_UI_FRAMEWORK)
    public void testRestartLayoutNotRecreatedIfNotNeeded() {
        final TaskInfo taskInfo = createTaskInfo(DISPLAY_ID, TASK_ID, /* hasSizeCompat= */ true);
        when(mFocusTransitionObserver.hasGlobalFocus((RunningTaskInfo) taskInfo)).thenReturn(false);
        doReturn(false).when(mMockRestartDialogLayout)
                .needsToBeRecreated(any(TaskInfo.class),
                        any(ShellTaskOrganizer.TaskListener.class));
@@ -567,8 +558,7 @@ public class CompatUIControllerTest extends CompatUIShellTestCase {

        // Create new task
        final TaskInfo taskInfo = createTaskInfo(DISPLAY_ID, TASK_ID, /* hasSizeCompat= */ true,
                /* isVisible */ true);
        when(mFocusTransitionObserver.hasGlobalFocus((RunningTaskInfo) taskInfo)).thenReturn(true);
                /* isVisible */ true, /* isFocused */ true);

        // Simulate new task being shown
        mController.updateActiveTaskInfo(taskInfo);
@@ -584,8 +574,7 @@ public class CompatUIControllerTest extends CompatUIShellTestCase {
    public void testUpdateActiveTaskInfo_newTask_notVisibleOrFocused_notUpdated() {
        // Create new task
        final TaskInfo taskInfo = createTaskInfo(DISPLAY_ID, TASK_ID, /* hasSizeCompat= */ true,
                /* isVisible */ true);
        when(mFocusTransitionObserver.hasGlobalFocus((RunningTaskInfo) taskInfo)).thenReturn(true);
                /* isVisible */ true, /* isFocused */ true);

        // Simulate task being shown
        mController.updateActiveTaskInfo(taskInfo);
@@ -603,8 +592,7 @@ public class CompatUIControllerTest extends CompatUIShellTestCase {

        // Create visible but NOT focused task
        final TaskInfo taskInfo1 = createTaskInfo(DISPLAY_ID, newTaskId, /* hasSizeCompat= */ true,
                /* isVisible */ true);
        when(mFocusTransitionObserver.hasGlobalFocus((RunningTaskInfo) taskInfo)).thenReturn(false);
                /* isVisible */ true, /* isFocused */ false);

        // Simulate new task being shown
        mController.updateActiveTaskInfo(taskInfo1);
@@ -616,8 +604,7 @@ public class CompatUIControllerTest extends CompatUIShellTestCase {

        // Create focused but NOT visible task
        final TaskInfo taskInfo2 = createTaskInfo(DISPLAY_ID, newTaskId, /* hasSizeCompat= */ true,
                /* isVisible */ false);
        when(mFocusTransitionObserver.hasGlobalFocus((RunningTaskInfo) taskInfo)).thenReturn(true);
                /* isVisible */ false, /* isFocused */ true);

        // Simulate new task being shown
        mController.updateActiveTaskInfo(taskInfo2);
@@ -629,8 +616,7 @@ public class CompatUIControllerTest extends CompatUIShellTestCase {

        // Create NOT focused but NOT visible task
        final TaskInfo taskInfo3 = createTaskInfo(DISPLAY_ID, newTaskId, /* hasSizeCompat= */ true,
                /* isVisible */ false);
        when(mFocusTransitionObserver.hasGlobalFocus((RunningTaskInfo) taskInfo)).thenReturn(false);
                /* isVisible */ false, /* isFocused */ false);

        // Simulate new task being shown
        mController.updateActiveTaskInfo(taskInfo3);
@@ -646,8 +632,7 @@ public class CompatUIControllerTest extends CompatUIShellTestCase {
    public void testUpdateActiveTaskInfo_sameTask_notUpdated() {
        // Create new task
        final TaskInfo taskInfo = createTaskInfo(DISPLAY_ID, TASK_ID, /* hasSizeCompat= */ true,
                /* isVisible */ true);
        when(mFocusTransitionObserver.hasGlobalFocus((RunningTaskInfo) taskInfo)).thenReturn(true);
                /* isVisible */ true, /* isFocused */ true);

        // Simulate new task being shown
        mController.updateActiveTaskInfo(taskInfo);
@@ -675,8 +660,7 @@ public class CompatUIControllerTest extends CompatUIShellTestCase {
    public void testUpdateActiveTaskInfo_transparentTask_notUpdated() {
        // Create new task
        final TaskInfo taskInfo = createTaskInfo(DISPLAY_ID, TASK_ID, /* hasSizeCompat= */ true,
                /* isVisible */ true);
        when(mFocusTransitionObserver.hasGlobalFocus((RunningTaskInfo) taskInfo)).thenReturn(true);
                /* isVisible */ true, /* isFocused */ true);

        // Simulate new task being shown
        mController.updateActiveTaskInfo(taskInfo);
@@ -694,8 +678,7 @@ public class CompatUIControllerTest extends CompatUIShellTestCase {

        // Create transparent task
        final TaskInfo taskInfo1 = createTaskInfo(DISPLAY_ID, newTaskId, /* hasSizeCompat= */ true,
                /* isVisible */ true, /* isTopActivityTransparent */ true);
        when(mFocusTransitionObserver.hasGlobalFocus((RunningTaskInfo) taskInfo)).thenReturn(true);
                /* isVisible */ true, /* isFocused */ true, /* isTopActivityTransparent */ true);

        // Simulate new task being shown
        mController.updateActiveTaskInfo(taskInfo1);
@@ -711,7 +694,6 @@ public class CompatUIControllerTest extends CompatUIShellTestCase {
    public void testLetterboxEduLayout_notCreatedWhenLetterboxEducationIsDisabled() {
        TaskInfo taskInfo = createTaskInfo(DISPLAY_ID, TASK_ID, /* hasSizeCompat= */ true);
        taskInfo.appCompatTaskInfo.setLetterboxEducationEnabled(false);
        when(mFocusTransitionObserver.hasGlobalFocus((RunningTaskInfo) taskInfo)).thenReturn(false);

        mController.onCompatInfoChanged(new CompatUIInfo(taskInfo, mMockTaskListener));

@@ -725,7 +707,6 @@ public class CompatUIControllerTest extends CompatUIShellTestCase {
    public void testUpdateActiveTaskInfo_removeAllComponentWhenInDesktopModeFlagEnabled() {
        TaskInfo taskInfo = createTaskInfo(DISPLAY_ID, TASK_ID, /* hasSizeCompat= */ true);
        when(mDesktopUserRepositories.getCurrent().getVisibleTaskCount(DISPLAY_ID)).thenReturn(0);
        when(mFocusTransitionObserver.hasGlobalFocus((RunningTaskInfo) taskInfo)).thenReturn(false);

        mController.onCompatInfoChanged(new CompatUIInfo(taskInfo, mMockTaskListener));

@@ -744,7 +725,6 @@ public class CompatUIControllerTest extends CompatUIShellTestCase {
    public void testUpdateActiveTaskInfo_removeAllComponentWhenInDesktopModeFlagDisabled() {
        when(mDesktopUserRepositories.getCurrent().getVisibleTaskCount(DISPLAY_ID)).thenReturn(0);
        TaskInfo taskInfo = createTaskInfo(DISPLAY_ID, TASK_ID, /* hasSizeCompat= */ true);
        when(mFocusTransitionObserver.hasGlobalFocus((RunningTaskInfo) taskInfo)).thenReturn(false);

        mController.onCompatInfoChanged(new CompatUIInfo(taskInfo, mMockTaskListener));

@@ -759,22 +739,23 @@ public class CompatUIControllerTest extends CompatUIShellTestCase {

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

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

    private static TaskInfo createTaskInfo(int displayId, int taskId, boolean hasSizeCompat,
            boolean isVisible, boolean isTopActivityTransparent) {
            boolean isVisible, boolean isFocused, boolean isTopActivityTransparent) {
        RunningTaskInfo taskInfo = new RunningTaskInfo();
        taskInfo.taskId = taskId;
        taskInfo.displayId = displayId;
        taskInfo.appCompatTaskInfo.setTopActivityInSizeCompat(hasSizeCompat);
        taskInfo.isVisible = isVisible;
        taskInfo.isFocused = isFocused;
        taskInfo.isTopActivityTransparent = isTopActivityTransparent;
        taskInfo.appCompatTaskInfo.setLetterboxEducationEnabled(true);
        taskInfo.appCompatTaskInfo.setTopActivityLetterboxed(true);