Merge "Remove KidsModeTaskOrganizer" into udc-dev
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java b/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java
index dda430a..acbdbf9 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java
@@ -61,7 +61,6 @@
import com.android.wm.shell.freeform.FreeformTaskTransitionHandler;
import com.android.wm.shell.freeform.FreeformTaskTransitionObserver;
import com.android.wm.shell.keyguard.KeyguardTransitionHandler;
-import com.android.wm.shell.kidsmode.KidsModeTaskOrganizer;
import com.android.wm.shell.onehanded.OneHandedController;
import com.android.wm.shell.pip.Pip;
import com.android.wm.shell.pip.PipAnimationController;
@@ -711,42 +710,4 @@
static DesktopModeTaskRepository provideDesktopModeTaskRepository() {
return new DesktopModeTaskRepository();
}
-
- //
- // Kids mode
- //
- @WMSingleton
- @Provides
- static KidsModeTaskOrganizer provideKidsModeTaskOrganizer(
- Context context,
- ShellInit shellInit,
- ShellCommandHandler shellCommandHandler,
- SyncTransactionQueue syncTransactionQueue,
- DisplayController displayController,
- DisplayInsetsController displayInsetsController,
- Optional<UnfoldAnimationController> unfoldAnimationController,
- Optional<RecentTasksController> recentTasksOptional,
- @ShellMainThread ShellExecutor mainExecutor,
- @ShellMainThread Handler mainHandler
- ) {
- return new KidsModeTaskOrganizer(context, shellInit, shellCommandHandler,
- syncTransactionQueue, displayController, displayInsetsController,
- unfoldAnimationController, recentTasksOptional, mainExecutor, mainHandler);
- }
-
- //
- // Misc
- //
-
- // TODO: Temporarily move dependencies to this instead of ShellInit since that is needed to add
- // the callback. We will be moving to a different explicit startup mechanism in a follow- up CL.
- @WMSingleton
- @ShellCreateTriggerOverride
- @Provides
- static Object provideIndependentShellComponentsToCreate(
- DefaultMixedHandler defaultMixedHandler,
- KidsModeTaskOrganizer kidsModeTaskOrganizer,
- Optional<DesktopModeController> desktopModeController) {
- return new Object();
- }
}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/kidsmode/KidsModeSettingsObserver.java b/libs/WindowManager/Shell/src/com/android/wm/shell/kidsmode/KidsModeSettingsObserver.java
deleted file mode 100644
index 65cb7ac..0000000
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/kidsmode/KidsModeSettingsObserver.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * Copyright (C) 2022 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.kidsmode;
-
-import android.annotation.NonNull;
-import android.app.ActivityManager;
-import android.content.ContentResolver;
-import android.content.Context;
-import android.database.ContentObserver;
-import android.net.Uri;
-import android.os.Handler;
-import android.os.UserHandle;
-import android.provider.Settings;
-
-import java.util.Collection;
-
-/**
- * A ContentObserver for listening kids mode relative setting keys:
- * - {@link Settings.Secure#NAVIGATION_MODE}
- * - {@link Settings.Secure#NAV_BAR_KIDS_MODE}
- *
- * @hide
- */
-public class KidsModeSettingsObserver extends ContentObserver {
- private Context mContext;
- private Runnable mOnChangeRunnable;
-
- public KidsModeSettingsObserver(Handler handler, Context context) {
- super(handler);
- mContext = context;
- }
-
- public void setOnChangeRunnable(Runnable r) {
- mOnChangeRunnable = r;
- }
-
- /**
- * Registers the observer.
- */
- public void register() {
- final ContentResolver r = mContext.getContentResolver();
- r.registerContentObserver(
- Settings.Secure.getUriFor(Settings.Secure.NAVIGATION_MODE),
- false, this, UserHandle.USER_ALL);
- r.registerContentObserver(
- Settings.Secure.getUriFor(Settings.Secure.NAV_BAR_KIDS_MODE),
- false, this, UserHandle.USER_ALL);
- }
-
- /**
- * Unregisters the observer.
- */
- public void unregister() {
- mContext.getContentResolver().unregisterContentObserver(this);
- }
-
- @Override
- public void onChange(boolean selfChange, @NonNull Collection<Uri> uris, int flags, int userId) {
- if (userId != ActivityManager.getCurrentUser()) {
- return;
- }
-
- if (mOnChangeRunnable != null) {
- mOnChangeRunnable.run();
- }
- }
-
- /**
- * Returns true only when it's in three button nav mode and the kid nav bar mode is enabled.
- * Otherwise, return false.
- */
- public boolean isEnabled() {
- return Settings.Secure.getIntForUser(mContext.getContentResolver(),
- Settings.Secure.NAVIGATION_MODE, 0, UserHandle.USER_CURRENT) == 0
- && Settings.Secure.getIntForUser(mContext.getContentResolver(),
- Settings.Secure.NAV_BAR_KIDS_MODE, 0, UserHandle.USER_CURRENT) == 1;
- }
-}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/kidsmode/KidsModeTaskOrganizer.java b/libs/WindowManager/Shell/src/com/android/wm/shell/kidsmode/KidsModeTaskOrganizer.java
deleted file mode 100644
index 6d46a9c..0000000
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/kidsmode/KidsModeTaskOrganizer.java
+++ /dev/null
@@ -1,436 +0,0 @@
-/*
- * Copyright (C) 2022 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.kidsmode;
-
-import static android.app.WindowConfiguration.ACTIVITY_TYPE_HOME;
-import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD;
-import static android.app.WindowConfiguration.ACTIVITY_TYPE_UNDEFINED;
-import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;
-import static android.app.WindowConfiguration.WINDOWING_MODE_UNDEFINED;
-import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
-import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE;
-import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE;
-import static android.view.Display.DEFAULT_DISPLAY;
-
-import android.app.ActivityManager;
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.content.res.Configuration;
-import android.graphics.Rect;
-import android.os.Binder;
-import android.os.Handler;
-import android.os.IBinder;
-import android.view.Display;
-import android.view.InsetsSource;
-import android.view.InsetsState;
-import android.view.SurfaceControl;
-import android.view.WindowInsets;
-import android.window.ITaskOrganizerController;
-import android.window.TaskAppearedInfo;
-import android.window.WindowContainerToken;
-import android.window.WindowContainerTransaction;
-
-import androidx.annotation.NonNull;
-
-import com.android.internal.R;
-import com.android.internal.annotations.VisibleForTesting;
-import com.android.wm.shell.ShellTaskOrganizer;
-import com.android.wm.shell.common.DisplayController;
-import com.android.wm.shell.common.DisplayInsetsController;
-import com.android.wm.shell.common.DisplayLayout;
-import com.android.wm.shell.common.ShellExecutor;
-import com.android.wm.shell.common.SyncTransactionQueue;
-import com.android.wm.shell.recents.RecentTasksController;
-import com.android.wm.shell.sysui.ShellCommandHandler;
-import com.android.wm.shell.sysui.ShellInit;
-import com.android.wm.shell.unfold.UnfoldAnimationController;
-
-import java.io.PrintWriter;
-import java.util.List;
-import java.util.Optional;
-
-/**
- * A dedicated task organizer when kids mode is enabled.
- * - Creates a root task with bounds that exclude the navigation bar area
- * - Launch all task into the root task except for Launcher
- */
-public class KidsModeTaskOrganizer extends ShellTaskOrganizer {
- private static final String TAG = "KidsModeTaskOrganizer";
-
- private static final int[] CONTROLLED_ACTIVITY_TYPES =
- {ACTIVITY_TYPE_UNDEFINED, ACTIVITY_TYPE_STANDARD, ACTIVITY_TYPE_HOME};
- private static final int[] CONTROLLED_WINDOWING_MODES =
- {WINDOWING_MODE_FULLSCREEN, WINDOWING_MODE_UNDEFINED};
-
- private final Handler mMainHandler;
- private final Context mContext;
- private final ShellCommandHandler mShellCommandHandler;
- private final SyncTransactionQueue mSyncQueue;
- private final DisplayController mDisplayController;
- private final DisplayInsetsController mDisplayInsetsController;
-
- /**
- * The value of the {@link R.bool.config_reverseDefaultRotation} property which defines how
- * {@link Display#getRotation} values are mapped to screen orientations
- */
- private final boolean mReverseDefaultRotationEnabled;
-
- @VisibleForTesting
- ActivityManager.RunningTaskInfo mLaunchRootTask;
- @VisibleForTesting
- SurfaceControl mLaunchRootLeash;
- @VisibleForTesting
- final IBinder mCookie = new Binder();
-
- private final InsetsState mInsetsState = new InsetsState();
- private int mDisplayWidth;
- private int mDisplayHeight;
-
- private KidsModeSettingsObserver mKidsModeSettingsObserver;
- private boolean mEnabled;
-
- private ActivityManager.RunningTaskInfo mHomeTask;
-
- private final BroadcastReceiver mUserSwitchIntentReceiver = new BroadcastReceiver() {
- @Override
- public void onReceive(Context context, Intent intent) {
- updateKidsModeState();
- }
- };
-
- DisplayController.OnDisplaysChangedListener mOnDisplaysChangedListener =
- new DisplayController.OnDisplaysChangedListener() {
- @Override
- public void onDisplayConfigurationChanged(int displayId, Configuration newConfig) {
- if (displayId != DEFAULT_DISPLAY) {
- return;
- }
- final DisplayLayout displayLayout =
- mDisplayController.getDisplayLayout(DEFAULT_DISPLAY);
- if (displayLayout == null) {
- return;
- }
- final int displayWidth = displayLayout.width();
- final int displayHeight = displayLayout.height();
- if (displayWidth == mDisplayWidth || displayHeight == mDisplayHeight) {
- return;
- }
- mDisplayWidth = displayWidth;
- mDisplayHeight = displayHeight;
- updateBounds();
- }
- };
-
- DisplayInsetsController.OnInsetsChangedListener mOnInsetsChangedListener =
- new DisplayInsetsController.OnInsetsChangedListener() {
- @Override
- public void insetsChanged(InsetsState insetsState) {
- final boolean[] navigationBarChanged = {false};
- InsetsState.traverse(insetsState, mInsetsState, new InsetsState.OnTraverseCallbacks() {
- @Override
- public void onIdMatch(InsetsSource source1, InsetsSource source2) {
- if (source1.getType() == WindowInsets.Type.navigationBars()
- && !source1.equals(source2)) {
- navigationBarChanged[0] = true;
- }
- }
-
- @Override
- public void onIdNotFoundInState1(int index2, InsetsSource source2) {
- if (source2.getType() == WindowInsets.Type.navigationBars()) {
- navigationBarChanged[0] = true;
- }
- }
-
- @Override
- public void onIdNotFoundInState2(int index1, InsetsSource source1) {
- if (source1.getType() == WindowInsets.Type.navigationBars()) {
- navigationBarChanged[0] = true;
- }
- }
- });
- if (!navigationBarChanged[0]) {
- return;
- }
- // Update bounds only when the insets of navigation bar or task bar is changed.
- mInsetsState.set(insetsState);
- updateBounds();
- }
- };
-
- @VisibleForTesting
- KidsModeTaskOrganizer(
- Context context,
- ShellInit shellInit,
- ShellCommandHandler shellCommandHandler,
- ITaskOrganizerController taskOrganizerController,
- SyncTransactionQueue syncTransactionQueue,
- DisplayController displayController,
- DisplayInsetsController displayInsetsController,
- Optional<UnfoldAnimationController> unfoldAnimationController,
- Optional<RecentTasksController> recentTasks,
- KidsModeSettingsObserver kidsModeSettingsObserver,
- ShellExecutor mainExecutor,
- Handler mainHandler) {
- // Note: we don't call super with the shell init because we will be initializing manually
- super(/* shellInit= */ null, /* shellCommandHandler= */ null, taskOrganizerController,
- /* compatUI= */ null, unfoldAnimationController, recentTasks, mainExecutor);
- mContext = context;
- mShellCommandHandler = shellCommandHandler;
- mMainHandler = mainHandler;
- mSyncQueue = syncTransactionQueue;
- mDisplayController = displayController;
- mDisplayInsetsController = displayInsetsController;
- mKidsModeSettingsObserver = kidsModeSettingsObserver;
- shellInit.addInitCallback(this::onInit, this);
- mReverseDefaultRotationEnabled = context.getResources().getBoolean(
- R.bool.config_reverseDefaultRotation);
- }
-
- public KidsModeTaskOrganizer(
- Context context,
- ShellInit shellInit,
- ShellCommandHandler shellCommandHandler,
- SyncTransactionQueue syncTransactionQueue,
- DisplayController displayController,
- DisplayInsetsController displayInsetsController,
- Optional<UnfoldAnimationController> unfoldAnimationController,
- Optional<RecentTasksController> recentTasks,
- ShellExecutor mainExecutor,
- Handler mainHandler) {
- // Note: we don't call super with the shell init because we will be initializing manually
- super(/* shellInit= */ null, /* taskOrganizerController= */ null, /* compatUI= */ null,
- unfoldAnimationController, recentTasks, mainExecutor);
- mContext = context;
- mShellCommandHandler = shellCommandHandler;
- mMainHandler = mainHandler;
- mSyncQueue = syncTransactionQueue;
- mDisplayController = displayController;
- mDisplayInsetsController = displayInsetsController;
- shellInit.addInitCallback(this::onInit, this);
- mReverseDefaultRotationEnabled = context.getResources().getBoolean(
- R.bool.config_reverseDefaultRotation);
- }
-
- /**
- * Initializes kids mode status.
- */
- public void onInit() {
- if (mShellCommandHandler != null) {
- mShellCommandHandler.addDumpCallback(this::dump, this);
- }
- if (mKidsModeSettingsObserver == null) {
- mKidsModeSettingsObserver = new KidsModeSettingsObserver(mMainHandler, mContext);
- }
- mKidsModeSettingsObserver.setOnChangeRunnable(() -> updateKidsModeState());
- updateKidsModeState();
- mKidsModeSettingsObserver.register();
-
- final IntentFilter filter = new IntentFilter();
- filter.addAction(Intent.ACTION_USER_SWITCHED);
- mContext.registerReceiverForAllUsers(mUserSwitchIntentReceiver, filter, null, mMainHandler);
- }
-
- @Override
- public void onTaskAppeared(ActivityManager.RunningTaskInfo taskInfo, SurfaceControl leash) {
- if (mEnabled && mLaunchRootTask == null && taskInfo.launchCookies != null
- && taskInfo.launchCookies.contains(mCookie)) {
- mLaunchRootTask = taskInfo;
- mLaunchRootLeash = leash;
- updateTask();
- }
- super.onTaskAppeared(taskInfo, leash);
-
- // Only allow home to draw under system bars.
- if (taskInfo.getActivityType() == ACTIVITY_TYPE_HOME) {
- final WindowContainerTransaction wct = getWindowContainerTransaction();
- wct.setBounds(taskInfo.token, new Rect(0, 0, mDisplayWidth, mDisplayHeight));
- mSyncQueue.queue(wct);
- mHomeTask = taskInfo;
- }
- mSyncQueue.runInSync(t -> {
- // Reset several properties back to fullscreen (PiP, for example, leaves all these
- // properties in a bad state).
- t.setCrop(leash, null);
- t.setPosition(leash, 0, 0);
- t.setAlpha(leash, 1f);
- t.setMatrix(leash, 1, 0, 0, 1);
- t.show(leash);
- });
- }
-
- @Override
- public void onTaskInfoChanged(ActivityManager.RunningTaskInfo taskInfo) {
- if (mLaunchRootTask != null && mLaunchRootTask.taskId == taskInfo.taskId
- && !taskInfo.equals(mLaunchRootTask)) {
- mLaunchRootTask = taskInfo;
- }
-
- if (mHomeTask != null && mHomeTask.taskId == taskInfo.taskId
- && !taskInfo.equals(mHomeTask)) {
- mHomeTask = taskInfo;
- }
-
- super.onTaskInfoChanged(taskInfo);
- }
-
- @VisibleForTesting
- void updateKidsModeState() {
- final boolean enabled = mKidsModeSettingsObserver.isEnabled();
- if (mEnabled == enabled) {
- return;
- }
- mEnabled = enabled;
- if (mEnabled) {
- enable();
- } else {
- disable();
- }
- }
-
- @VisibleForTesting
- void enable() {
- // Needed since many Kids apps aren't optimised to support both orientations and it will be
- // hard for kids to understand the app compat mode.
- // TODO(229961548): Remove ignoreOrientationRequest exception for Kids Mode once possible.
- if (mReverseDefaultRotationEnabled) {
- setOrientationRequestPolicy(/* isIgnoreOrientationRequestDisabled */ true,
- /* fromOrientations */
- new int[]{SCREEN_ORIENTATION_LANDSCAPE, SCREEN_ORIENTATION_REVERSE_LANDSCAPE},
- /* toOrientations */
- new int[]{SCREEN_ORIENTATION_SENSOR_LANDSCAPE,
- SCREEN_ORIENTATION_SENSOR_LANDSCAPE});
- } else {
- setOrientationRequestPolicy(/* isIgnoreOrientationRequestDisabled */ true,
- /* fromOrientations */ null, /* toOrientations */ null);
- }
- final DisplayLayout displayLayout = mDisplayController.getDisplayLayout(DEFAULT_DISPLAY);
- if (displayLayout != null) {
- mDisplayWidth = displayLayout.width();
- mDisplayHeight = displayLayout.height();
- }
- mInsetsState.set(mDisplayController.getInsetsState(DEFAULT_DISPLAY));
- mDisplayInsetsController.addInsetsChangedListener(DEFAULT_DISPLAY,
- mOnInsetsChangedListener);
- mDisplayController.addDisplayWindowListener(mOnDisplaysChangedListener);
- List<TaskAppearedInfo> taskAppearedInfos = registerOrganizer();
- for (int i = 0; i < taskAppearedInfos.size(); i++) {
- final TaskAppearedInfo info = taskAppearedInfos.get(i);
- onTaskAppeared(info.getTaskInfo(), info.getLeash());
- }
- createRootTask(DEFAULT_DISPLAY, WINDOWING_MODE_FULLSCREEN, mCookie);
- updateTask();
- }
-
- @VisibleForTesting
- void disable() {
- setOrientationRequestPolicy(/* isIgnoreOrientationRequestDisabled */ false,
- /* fromOrientations */ null, /* toOrientations */ null);
- mDisplayInsetsController.removeInsetsChangedListener(DEFAULT_DISPLAY,
- mOnInsetsChangedListener);
- mDisplayController.removeDisplayWindowListener(mOnDisplaysChangedListener);
- updateTask();
- final WindowContainerToken token = mLaunchRootTask.token;
- if (token != null) {
- deleteRootTask(token);
- }
- mLaunchRootTask = null;
- mLaunchRootLeash = null;
- if (mHomeTask != null && mHomeTask.token != null) {
- final WindowContainerToken homeToken = mHomeTask.token;
- final WindowContainerTransaction wct = getWindowContainerTransaction();
- wct.setBounds(homeToken, null);
- mSyncQueue.queue(wct);
- }
- mHomeTask = null;
- unregisterOrganizer();
- }
-
- private void updateTask() {
- updateTask(getWindowContainerTransaction());
- }
-
- private void updateTask(WindowContainerTransaction wct) {
- if (mLaunchRootTask == null || mLaunchRootLeash == null) {
- return;
- }
- final Rect taskBounds = calculateBounds();
- final WindowContainerToken rootToken = mLaunchRootTask.token;
- wct.setBounds(rootToken, mEnabled ? taskBounds : null);
- wct.setLaunchRoot(rootToken,
- mEnabled ? CONTROLLED_WINDOWING_MODES : null,
- mEnabled ? CONTROLLED_ACTIVITY_TYPES : null);
- wct.reparentTasks(
- mEnabled ? null : rootToken /* currentParent */,
- mEnabled ? rootToken : null /* newParent */,
- CONTROLLED_WINDOWING_MODES,
- CONTROLLED_ACTIVITY_TYPES,
- true /* onTop */);
- wct.reorder(rootToken, mEnabled /* onTop */);
- mSyncQueue.queue(wct);
- if (mEnabled) {
- final SurfaceControl rootLeash = mLaunchRootLeash;
- mSyncQueue.runInSync(t -> {
- t.setPosition(rootLeash, taskBounds.left, taskBounds.top);
- t.setWindowCrop(rootLeash, mDisplayWidth, mDisplayHeight);
- });
- }
- }
-
- private Rect calculateBounds() {
- final Rect bounds = new Rect(0, 0, mDisplayWidth, mDisplayHeight);
- bounds.inset(mInsetsState.calculateInsets(
- bounds, WindowInsets.Type.navigationBars(), false /* ignoreVisibility */));
- return bounds;
- }
-
- private void updateBounds() {
- if (mLaunchRootTask == null) {
- return;
- }
- final WindowContainerTransaction wct = getWindowContainerTransaction();
- final Rect taskBounds = calculateBounds();
- wct.setBounds(mLaunchRootTask.token, taskBounds);
- wct.setBounds(mHomeTask.token, new Rect(0, 0, mDisplayWidth, mDisplayHeight));
- mSyncQueue.queue(wct);
- final SurfaceControl finalLeash = mLaunchRootLeash;
- mSyncQueue.runInSync(t -> {
- t.setPosition(finalLeash, taskBounds.left, taskBounds.top);
- t.setWindowCrop(finalLeash, mDisplayWidth, mDisplayHeight);
- });
- }
-
- @VisibleForTesting
- WindowContainerTransaction getWindowContainerTransaction() {
- return new WindowContainerTransaction();
- }
-
- @Override
- public void dump(@NonNull PrintWriter pw, String prefix) {
- final String innerPrefix = prefix + " ";
- pw.println(prefix + TAG);
- pw.println(innerPrefix + " mEnabled=" + mEnabled);
- pw.println(innerPrefix + " mLaunchRootTask=" + mLaunchRootTask);
- pw.println(innerPrefix + " mLaunchRootLeash=" + mLaunchRootLeash);
- pw.println(innerPrefix + " mDisplayWidth=" + mDisplayWidth);
- pw.println(innerPrefix + " mDisplayHeight=" + mDisplayHeight);
- pw.println(innerPrefix + " mInsetsState=" + mInsetsState);
- super.dump(pw, innerPrefix);
- }
-}
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/kidsmode/KidsModeTaskOrganizerTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/kidsmode/KidsModeTaskOrganizerTest.java
deleted file mode 100644
index 58e91cb..0000000
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/kidsmode/KidsModeTaskOrganizerTest.java
+++ /dev/null
@@ -1,163 +0,0 @@
-/*
- * Copyright (C) 2022 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.kidsmode;
-
-import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;
-import static android.view.Display.DEFAULT_DISPLAY;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.eq;
-import static org.mockito.Mockito.doReturn;
-import static org.mockito.Mockito.spy;
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
-
-import android.app.ActivityManager;
-import android.content.Context;
-import android.content.pm.ParceledListSlice;
-import android.content.res.Resources;
-import android.os.Handler;
-import android.os.IBinder;
-import android.os.RemoteException;
-import android.view.InsetsState;
-import android.view.SurfaceControl;
-import android.window.ITaskOrganizerController;
-import android.window.TaskAppearedInfo;
-import android.window.WindowContainerToken;
-import android.window.WindowContainerTransaction;
-
-import androidx.test.ext.junit.runners.AndroidJUnit4;
-import androidx.test.filters.SmallTest;
-
-import com.android.wm.shell.ShellTestCase;
-import com.android.wm.shell.common.DisplayController;
-import com.android.wm.shell.common.DisplayInsetsController;
-import com.android.wm.shell.common.ShellExecutor;
-import com.android.wm.shell.common.SyncTransactionQueue;
-import com.android.wm.shell.sysui.ShellCommandHandler;
-import com.android.wm.shell.sysui.ShellInit;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-
-import java.util.ArrayList;
-import java.util.Optional;
-
-@SmallTest
-@RunWith(AndroidJUnit4.class)
-public class KidsModeTaskOrganizerTest extends ShellTestCase {
- @Mock private ITaskOrganizerController mTaskOrganizerController;
- @Mock private Context mContext;
- @Mock private Handler mHandler;
- @Mock private SyncTransactionQueue mSyncTransactionQueue;
- @Mock private ShellExecutor mTestExecutor;
- @Mock private DisplayController mDisplayController;
- @Mock private SurfaceControl mLeash;
- @Mock private WindowContainerToken mToken;
- @Mock private WindowContainerTransaction mTransaction;
- @Mock private KidsModeSettingsObserver mObserver;
- @Mock private ShellInit mShellInit;
- @Mock private ShellCommandHandler mShellCommandHandler;
- @Mock private DisplayInsetsController mDisplayInsetsController;
- @Mock private Resources mResources;
-
- KidsModeTaskOrganizer mOrganizer;
-
- @Before
- public void setUp() {
- MockitoAnnotations.initMocks(this);
- try {
- doReturn(ParceledListSlice.<TaskAppearedInfo>emptyList())
- .when(mTaskOrganizerController).registerTaskOrganizer(any());
- } catch (RemoteException e) {
- }
- // NOTE: KidsModeTaskOrganizer should have a null CompatUIController.
- doReturn(mResources).when(mContext).getResources();
- final KidsModeTaskOrganizer kidsModeTaskOrganizer = new KidsModeTaskOrganizer(mContext,
- mShellInit, mShellCommandHandler, mTaskOrganizerController, mSyncTransactionQueue,
- mDisplayController, mDisplayInsetsController, Optional.empty(), Optional.empty(),
- mObserver, mTestExecutor, mHandler);
- mOrganizer = spy(kidsModeTaskOrganizer);
- doReturn(mTransaction).when(mOrganizer).getWindowContainerTransaction();
- doReturn(new InsetsState()).when(mDisplayController).getInsetsState(DEFAULT_DISPLAY);
- }
-
- @Test
- public void instantiateController_addInitCallback() {
- verify(mShellInit, times(1)).addInitCallback(any(), any());
- }
-
- @Test
- public void testKidsModeOn() {
- doReturn(true).when(mObserver).isEnabled();
-
- mOrganizer.updateKidsModeState();
-
- verify(mOrganizer, times(1)).enable();
- verify(mOrganizer, times(1)).registerOrganizer();
- verify(mOrganizer, times(1)).createRootTask(
- eq(DEFAULT_DISPLAY), eq(WINDOWING_MODE_FULLSCREEN), eq(mOrganizer.mCookie));
- verify(mOrganizer, times(1))
- .setOrientationRequestPolicy(eq(true), any(), any());
-
- final ActivityManager.RunningTaskInfo rootTask = createTaskInfo(12,
- WINDOWING_MODE_FULLSCREEN, mOrganizer.mCookie);
- mOrganizer.onTaskAppeared(rootTask, mLeash);
-
- assertThat(mOrganizer.mLaunchRootLeash).isEqualTo(mLeash);
- assertThat(mOrganizer.mLaunchRootTask).isEqualTo(rootTask);
- }
-
- @Test
- public void testKidsModeOff() {
- doReturn(true).when(mObserver).isEnabled();
- mOrganizer.updateKidsModeState();
- final ActivityManager.RunningTaskInfo rootTask = createTaskInfo(12,
- WINDOWING_MODE_FULLSCREEN, mOrganizer.mCookie);
- mOrganizer.onTaskAppeared(rootTask, mLeash);
-
- doReturn(false).when(mObserver).isEnabled();
- mOrganizer.updateKidsModeState();
-
- verify(mOrganizer, times(1)).disable();
- verify(mOrganizer, times(1)).unregisterOrganizer();
- verify(mOrganizer, times(1)).deleteRootTask(rootTask.token);
- verify(mOrganizer, times(1))
- .setOrientationRequestPolicy(eq(false), any(), any());
- assertThat(mOrganizer.mLaunchRootLeash).isNull();
- assertThat(mOrganizer.mLaunchRootTask).isNull();
- }
-
- private ActivityManager.RunningTaskInfo createTaskInfo(
- int taskId, int windowingMode, IBinder cookies) {
- ActivityManager.RunningTaskInfo taskInfo = new ActivityManager.RunningTaskInfo();
- taskInfo.taskId = taskId;
- taskInfo.token = mToken;
- taskInfo.configuration.windowConfiguration.setWindowingMode(windowingMode);
- final ArrayList<IBinder> launchCookies = new ArrayList<>();
- if (cookies != null) {
- launchCookies.add(cookies);
- }
- taskInfo.launchCookies = launchCookies;
- return taskInfo;
- }
-}