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 Original line Diff line number Diff line
@@ -20,7 +20,6 @@ import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;


import android.annotation.NonNull;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.Nullable;
import android.app.ActivityManager.RunningTaskInfo;
import android.app.TaskInfo;
import android.app.TaskInfo;
import android.content.ComponentName;
import android.content.ComponentName;
import android.content.Context;
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.KeyguardChangeListener;
import com.android.wm.shell.sysui.ShellController;
import com.android.wm.shell.sysui.ShellController;
import com.android.wm.shell.sysui.ShellInit;
import com.android.wm.shell.sysui.ShellInit;
import com.android.wm.shell.transition.FocusTransitionObserver;
import com.android.wm.shell.transition.Transitions;
import com.android.wm.shell.transition.Transitions;


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


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


    @NonNull
    private final FocusTransitionObserver mFocusTransitionObserver;

    @NonNull
    @NonNull
    private final Optional<DesktopUserRepositories> mDesktopUserRepositories;
    private final Optional<DesktopUserRepositories> mDesktopUserRepositories;


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


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


    @WMSingleton
    @WMSingleton
+16 −35
Original line number Original line 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.desktopmode.DesktopUserRepositories;
import com.android.wm.shell.sysui.ShellController;
import com.android.wm.shell.sysui.ShellController;
import com.android.wm.shell.sysui.ShellInit;
import com.android.wm.shell.sysui.ShellInit;
import com.android.wm.shell.transition.FocusTransitionObserver;
import com.android.wm.shell.transition.Transitions;
import com.android.wm.shell.transition.Transitions;


import dagger.Lazy;
import dagger.Lazy;


import java.util.Optional;

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


import java.util.Optional;

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


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


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


        verify(mController).createCompatUiWindowManager(any(), eq(taskInfo), eq(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.
        // Verify button remains hidden while IME is showing.
        TaskInfo taskInfo = createTaskInfo(DISPLAY_ID, TASK_ID, /* hasSizeCompat= */ true);
        TaskInfo taskInfo = createTaskInfo(DISPLAY_ID, TASK_ID, /* hasSizeCompat= */ true);
        mController.onCompatInfoChanged(new CompatUIInfo(taskInfo, mMockTaskListener));
        mController.onCompatInfoChanged(new CompatUIInfo(taskInfo, mMockTaskListener));
        when(mFocusTransitionObserver.hasGlobalFocus((RunningTaskInfo) taskInfo)).thenReturn(false);


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


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


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


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


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


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


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


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


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


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


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


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


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


        // 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, /* isTopActivityTransparent */ true);
                /* isVisible */ true, /* isFocused */ true, /* isTopActivityTransparent */ true);
        when(mFocusTransitionObserver.hasGlobalFocus((RunningTaskInfo) taskInfo)).thenReturn(true);


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


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


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


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


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


        mController.onCompatInfoChanged(new CompatUIInfo(taskInfo, mMockTaskListener));
        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) {
    private static TaskInfo createTaskInfo(int displayId, int taskId, boolean hasSizeCompat) {
        return createTaskInfo(displayId, taskId, hasSizeCompat, /* isVisible */ false,
        return createTaskInfo(displayId, taskId, hasSizeCompat, /* isVisible */ false,
                /* isTopActivityTransparent */ false);
                /* isFocused */ false, /* isTopActivityTransparent */ false);
    }
    }


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


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