Minor refactoring to support moving code to shell
Bug: 148148105
Test: atest SystemUITests
Change-Id: I8614fe50cb87f66b1e403dfbfe8a68d1e043bd13
diff --git a/packages/SystemUI/src/com/android/systemui/Dependency.java b/packages/SystemUI/src/com/android/systemui/Dependency.java
index aacc2c4..93b6a41 100644
--- a/packages/SystemUI/src/com/android/systemui/Dependency.java
+++ b/packages/SystemUI/src/com/android/systemui/Dependency.java
@@ -123,8 +123,8 @@
import com.android.systemui.util.leak.LeakDetector;
import com.android.systemui.util.leak.LeakReporter;
import com.android.systemui.util.sensors.AsyncSensorManager;
+import com.android.systemui.wm.DisplayController;
import com.android.systemui.wm.DisplayImeController;
-import com.android.systemui.wm.DisplayWindowController;
import com.android.systemui.wm.SystemWindows;
import java.io.FileDescriptor;
@@ -323,7 +323,7 @@
@Inject Lazy<CommandQueue> mCommandQueue;
@Inject Lazy<Recents> mRecents;
@Inject Lazy<StatusBar> mStatusBar;
- @Inject Lazy<DisplayWindowController> mDisplayWindowController;
+ @Inject Lazy<DisplayController> mDisplayController;
@Inject Lazy<SystemWindows> mSystemWindows;
@Inject Lazy<DisplayImeController> mDisplayImeController;
@Inject Lazy<RecordingController> mRecordingController;
@@ -516,7 +516,7 @@
mProviders.put(CommandQueue.class, mCommandQueue::get);
mProviders.put(Recents.class, mRecents::get);
mProviders.put(StatusBar.class, mStatusBar::get);
- mProviders.put(DisplayWindowController.class, mDisplayWindowController::get);
+ mProviders.put(DisplayController.class, mDisplayController::get);
mProviders.put(SystemWindows.class, mSystemWindows::get);
mProviders.put(DisplayImeController.class, mDisplayImeController::get);
diff --git a/packages/SystemUI/src/com/android/systemui/pip/BasePipManager.java b/packages/SystemUI/src/com/android/systemui/pip/BasePipManager.java
index d1d9b3d..92aa020 100644
--- a/packages/SystemUI/src/com/android/systemui/pip/BasePipManager.java
+++ b/packages/SystemUI/src/com/android/systemui/pip/BasePipManager.java
@@ -20,13 +20,13 @@
import android.content.res.Configuration;
import com.android.systemui.broadcast.BroadcastDispatcher;
-import com.android.systemui.wm.DisplayWindowController;
+import com.android.systemui.wm.DisplayController;
import java.io.PrintWriter;
public interface BasePipManager {
void initialize(Context context, BroadcastDispatcher broadcastDispatcher,
- DisplayWindowController displayWindowController);
+ DisplayController displayController);
void showPictureInPictureMenu();
default void expandPip() {}
default void hidePipMenu(Runnable onStartCallback, Runnable onEndCallback) {}
diff --git a/packages/SystemUI/src/com/android/systemui/pip/PipUI.java b/packages/SystemUI/src/com/android/systemui/pip/PipUI.java
index 29de90b..cecdc9c 100644
--- a/packages/SystemUI/src/com/android/systemui/pip/PipUI.java
+++ b/packages/SystemUI/src/com/android/systemui/pip/PipUI.java
@@ -28,7 +28,7 @@
import com.android.systemui.SystemUI;
import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.statusbar.CommandQueue;
-import com.android.systemui.wm.DisplayWindowController;
+import com.android.systemui.wm.DisplayController;
import java.io.FileDescriptor;
import java.io.PrintWriter;
@@ -45,17 +45,17 @@
private final CommandQueue mCommandQueue;
private BasePipManager mPipManager;
private final BroadcastDispatcher mBroadcastDispatcher;
- private final DisplayWindowController mDisplayWindowController;
+ private final DisplayController mDisplayController;
private boolean mSupportsPip;
@Inject
public PipUI(Context context, CommandQueue commandQueue,
BroadcastDispatcher broadcastDispatcher,
- DisplayWindowController displayWindowController) {
+ DisplayController displayController) {
super(context);
mBroadcastDispatcher = broadcastDispatcher;
mCommandQueue = commandQueue;
- mDisplayWindowController = displayWindowController;
+ mDisplayController = displayController;
}
@Override
@@ -75,7 +75,7 @@
mPipManager = pm.hasSystemFeature(FEATURE_LEANBACK_ONLY)
? com.android.systemui.pip.tv.PipManager.getInstance()
: com.android.systemui.pip.phone.PipManager.getInstance();
- mPipManager.initialize(mContext, mBroadcastDispatcher, mDisplayWindowController);
+ mPipManager.initialize(mContext, mBroadcastDispatcher, mDisplayController);
mCommandQueue.addCallback(this);
}
diff --git a/packages/SystemUI/src/com/android/systemui/pip/phone/PipManager.java b/packages/SystemUI/src/com/android/systemui/pip/phone/PipManager.java
index e48a23f..239ef36 100644
--- a/packages/SystemUI/src/com/android/systemui/pip/phone/PipManager.java
+++ b/packages/SystemUI/src/com/android/systemui/pip/phone/PipManager.java
@@ -46,7 +46,8 @@
import com.android.systemui.shared.system.PinnedStackListenerForwarder.PinnedStackListener;
import com.android.systemui.shared.system.TaskStackChangeListener;
import com.android.systemui.shared.system.WindowManagerWrapper;
-import com.android.systemui.wm.DisplayWindowController;
+import com.android.systemui.wm.DisplayChangeController;
+import com.android.systemui.wm.DisplayController;
import java.io.PrintWriter;
@@ -79,7 +80,7 @@
/**
* Handler for display rotation changes.
*/
- private final DisplayWindowController.OnDisplayWindowRotationController mRotationController = (
+ private final DisplayChangeController.OnDisplayChangingListener mRotationController = (
int displayId, int fromRotation, int toRotation, WindowContainerTransaction t) -> {
final boolean changed = mPipBoundsHandler.onDisplayRotationChanged(mTmpNormalBounds,
displayId, fromRotation, toRotation, t);
@@ -230,7 +231,7 @@
* Initializes {@link PipManager}.
*/
public void initialize(Context context, BroadcastDispatcher broadcastDispatcher,
- DisplayWindowController displayWindowController) {
+ DisplayController displayController) {
mContext = context;
mActivityManager = ActivityManager.getService();
mActivityTaskManager = ActivityTaskManager.getService();
@@ -251,7 +252,7 @@
mMenuController, mInputConsumerController, mPipBoundsHandler);
mAppOpsListener = new PipAppOpsListener(context, mActivityManager,
mTouchHandler.getMotionHelper());
- displayWindowController.addRotationController(mRotationController);
+ displayController.addDisplayChangingController(mRotationController);
// If SystemUI restart, and it already existed a pinned stack,
// register the pip input consumer to ensure touch can send to it.
diff --git a/packages/SystemUI/src/com/android/systemui/pip/tv/PipManager.java b/packages/SystemUI/src/com/android/systemui/pip/tv/PipManager.java
index 1d92375..7532f9f 100644
--- a/packages/SystemUI/src/com/android/systemui/pip/tv/PipManager.java
+++ b/packages/SystemUI/src/com/android/systemui/pip/tv/PipManager.java
@@ -55,7 +55,7 @@
import com.android.systemui.shared.system.PinnedStackListenerForwarder.PinnedStackListener;
import com.android.systemui.shared.system.TaskStackChangeListener;
import com.android.systemui.shared.system.WindowManagerWrapper;
-import com.android.systemui.wm.DisplayWindowController;
+import com.android.systemui.wm.DisplayController;
import java.util.ArrayList;
import java.util.List;
@@ -230,7 +230,7 @@
* Initializes {@link PipManager}.
*/
public void initialize(Context context, BroadcastDispatcher broadcastDispatcher,
- DisplayWindowController displayWindowController) {
+ DisplayController displayController) {
if (mInitialized) {
return;
}
diff --git a/packages/SystemUI/src/com/android/systemui/wm/DisplayChangeController.java b/packages/SystemUI/src/com/android/systemui/wm/DisplayChangeController.java
new file mode 100644
index 0000000..66bc306
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/wm/DisplayChangeController.java
@@ -0,0 +1,109 @@
+/*
+ * Copyright (C) 2019 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.systemui.wm;
+
+import android.os.Handler;
+import android.os.RemoteException;
+import android.view.IDisplayWindowRotationCallback;
+import android.view.IDisplayWindowRotationController;
+import android.view.IWindowManager;
+import android.view.WindowContainerTransaction;
+
+import java.util.ArrayList;
+
+/**
+ * This module deals with display rotations coming from WM. When WM starts a rotation: after it has
+ * frozen the screen, it will call into this class. This will then call all registered local
+ * controllers and give them a chance to queue up task changes to be applied synchronously with that
+ * rotation.
+ */
+public class DisplayChangeController {
+
+ private final Handler mHandler;
+ private final IWindowManager mWmService;
+
+ private final ArrayList<OnDisplayChangingListener> mRotationListener =
+ new ArrayList<>();
+ private final ArrayList<OnDisplayChangingListener> mTmpListeners = new ArrayList<>();
+
+ private final IDisplayWindowRotationController mDisplayRotationController =
+ new IDisplayWindowRotationController.Stub() {
+ @Override
+ public void onRotateDisplay(int displayId, final int fromRotation,
+ final int toRotation, IDisplayWindowRotationCallback callback) {
+ mHandler.post(() -> {
+ WindowContainerTransaction t = new WindowContainerTransaction();
+ synchronized (mRotationListener) {
+ mTmpListeners.clear();
+ // Make a local copy in case the handlers add/remove themselves.
+ mTmpListeners.addAll(mRotationListener);
+ }
+ for (OnDisplayChangingListener c : mTmpListeners) {
+ c.onRotateDisplay(displayId, fromRotation, toRotation, t);
+ }
+ try {
+ callback.continueRotateDisplay(toRotation, t);
+ } catch (RemoteException e) {
+ }
+ });
+ }
+ };
+
+ public DisplayChangeController(Handler mainHandler, IWindowManager wmService) {
+ mHandler = mainHandler;
+ mWmService = wmService;
+ try {
+ mWmService.setDisplayWindowRotationController(mDisplayRotationController);
+ } catch (RemoteException e) {
+ throw new RuntimeException("Unable to register rotation controller");
+ }
+ }
+
+ /**
+ * Adds a display rotation controller.
+ */
+ public void addRotationListener(OnDisplayChangingListener listener) {
+ synchronized (mRotationListener) {
+ mRotationListener.add(listener);
+ }
+ }
+
+ /**
+ * Removes a display rotation controller.
+ */
+ public void removeRotationListener(OnDisplayChangingListener listener) {
+ synchronized (mRotationListener) {
+ mRotationListener.remove(listener);
+ }
+ }
+
+ /**
+ * Give a listener a chance to queue up configuration changes to execute as part of a
+ * display rotation. The contents of {@link #onRotateDisplay} must run synchronously.
+ */
+ public interface OnDisplayChangingListener {
+ /**
+ * Called before the display is rotated. Contents of this method must run synchronously.
+ * @param displayId Id of display that is rotating.
+ * @param fromRotation starting rotation of the display.
+ * @param toRotation target rotation of the display (after rotating).
+ * @param t A task transaction to populate.
+ */
+ void onRotateDisplay(int displayId, int fromRotation, int toRotation,
+ WindowContainerTransaction t);
+ }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/wm/DisplayWindowController.java b/packages/SystemUI/src/com/android/systemui/wm/DisplayController.java
similarity index 69%
rename from packages/SystemUI/src/com/android/systemui/wm/DisplayWindowController.java
rename to packages/SystemUI/src/com/android/systemui/wm/DisplayController.java
index 951d6dd..bc24ad0 100644
--- a/packages/SystemUI/src/com/android/systemui/wm/DisplayWindowController.java
+++ b/packages/SystemUI/src/com/android/systemui/wm/DisplayController.java
@@ -26,12 +26,10 @@
import android.util.SparseArray;
import android.view.Display;
import android.view.IDisplayWindowListener;
-import android.view.IDisplayWindowRotationCallback;
-import android.view.IDisplayWindowRotationController;
import android.view.IWindowManager;
-import android.view.WindowContainerTransaction;
import com.android.systemui.dagger.qualifiers.Main;
+import com.android.systemui.wm.DisplayChangeController.OnDisplayChangingListener;
import java.util.ArrayList;
@@ -45,42 +43,16 @@
* rotation.
*/
@Singleton
-public class DisplayWindowController {
- private static final String TAG = "DisplayWindowController";
+public class DisplayController {
+ private static final String TAG = "DisplayController";
private final Handler mHandler;
private final Context mContext;
private final IWindowManager mWmService;
-
- private final ArrayList<OnDisplayWindowRotationController> mRotationControllers =
- new ArrayList<>();
- private final ArrayList<OnDisplayWindowRotationController> mTmpControllers = new ArrayList<>();
+ private final DisplayChangeController mChangeController;
private final SparseArray<DisplayRecord> mDisplays = new SparseArray<>();
- private final ArrayList<DisplayWindowListener> mDisplayChangedListeners = new ArrayList<>();
-
- private final IDisplayWindowRotationController mDisplayRotationController =
- new IDisplayWindowRotationController.Stub() {
- @Override
- public void onRotateDisplay(int displayId, final int fromRotation,
- final int toRotation, IDisplayWindowRotationCallback callback) {
- mHandler.post(() -> {
- WindowContainerTransaction t = new WindowContainerTransaction();
- synchronized (mRotationControllers) {
- mTmpControllers.clear();
- // Make a local copy in case the handlers add/remove themselves.
- mTmpControllers.addAll(mRotationControllers);
- }
- for (OnDisplayWindowRotationController c : mTmpControllers) {
- c.onRotateDisplay(displayId, fromRotation, toRotation, t);
- }
- try {
- callback.continueRotateDisplay(toRotation, t);
- } catch (RemoteException e) {
- }
- });
- }
- };
+ private final ArrayList<OnDisplaysChangedListener> mDisplayChangedListeners = new ArrayList<>();
/**
* Get's a display by id from DisplayManager.
@@ -160,14 +132,14 @@
};
@Inject
- public DisplayWindowController(Context context, @Main Handler mainHandler,
+ public DisplayController(Context context, @Main Handler mainHandler,
IWindowManager wmService) {
mHandler = mainHandler;
mContext = context;
mWmService = wmService;
+ mChangeController = new DisplayChangeController(mHandler, mWmService);
try {
mWmService.registerDisplayWindowListener(mDisplayContainerListener);
- mWmService.setDisplayWindowRotationController(mDisplayRotationController);
} catch (RemoteException e) {
throw new RuntimeException("Unable to register hierarchy listener");
}
@@ -193,7 +165,7 @@
* Add a display window-container listener. It will get notified whenever a display's
* configuration changes or when displays are added/removed from the WM hierarchy.
*/
- public void addDisplayWindowListener(DisplayWindowListener listener) {
+ public void addDisplayWindowListener(OnDisplaysChangedListener listener) {
synchronized (mDisplays) {
if (mDisplayChangedListeners.contains(listener)) {
return;
@@ -208,7 +180,7 @@
/**
* Remove a display window-container listener.
*/
- public void removeDisplayWindowListener(DisplayWindowListener listener) {
+ public void removeDisplayWindowListener(OnDisplaysChangedListener listener) {
synchronized (mDisplays) {
mDisplayChangedListeners.remove(listener);
}
@@ -217,19 +189,15 @@
/**
* Adds a display rotation controller.
*/
- public void addRotationController(OnDisplayWindowRotationController controller) {
- synchronized (mRotationControllers) {
- mRotationControllers.add(controller);
- }
+ public void addDisplayChangingController(OnDisplayChangingListener controller) {
+ mChangeController.addRotationListener(controller);
}
/**
* Removes a display rotation controller.
*/
- public void removeRotationController(OnDisplayWindowRotationController controller) {
- synchronized (mRotationControllers) {
- mRotationControllers.remove(controller);
- }
+ public void removeDisplayChangingController(OnDisplayChangingListener controller) {
+ mChangeController.removeRotationListener(controller);
}
private static class DisplayRecord {
@@ -244,36 +212,20 @@
*
* @see IDisplayWindowListener
*/
- public interface DisplayWindowListener {
+ public interface OnDisplaysChangedListener {
/**
* Called when a display has been added to the WM hierarchy.
*/
- void onDisplayAdded(int displayId);
+ default void onDisplayAdded(int displayId) {}
/**
* Called when a display's window-container configuration changes.
*/
- void onDisplayConfigurationChanged(int displayId, Configuration newConfig);
+ default void onDisplayConfigurationChanged(int displayId, Configuration newConfig) {}
/**
* Called when a display is removed.
*/
- void onDisplayRemoved(int displayId);
- }
-
- /**
- * Give a controller a chance to queue up configuration changes to execute as part of a
- * display rotation. The contents of {@link #onRotateDisplay} must run synchronously.
- */
- public interface OnDisplayWindowRotationController {
- /**
- * Called before the display is rotated. Contents of this method must run synchronously.
- * @param displayId Id of display that is rotating.
- * @param fromRotation starting rotation of the display.
- * @param toRotation target rotation of the display (after rotating).
- * @param t A task transaction to populate.
- */
- void onRotateDisplay(int displayId, int fromRotation, int toRotation,
- WindowContainerTransaction t);
+ default void onDisplayRemoved(int displayId) {}
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/wm/DisplayImeController.java b/packages/SystemUI/src/com/android/systemui/wm/DisplayImeController.java
index d413308..7dad05d 100644
--- a/packages/SystemUI/src/com/android/systemui/wm/DisplayImeController.java
+++ b/packages/SystemUI/src/com/android/systemui/wm/DisplayImeController.java
@@ -45,7 +45,7 @@
* Manages IME control at the display-level. This occurs when IME comes up in multi-window mode.
*/
@Singleton
-public class DisplayImeController implements DisplayWindowController.DisplayWindowListener {
+public class DisplayImeController implements DisplayController.OnDisplaysChangedListener {
private static final String TAG = "DisplayImeController";
static final int ANIMATION_DURATION_SHOW_MS = 275;
@@ -63,7 +63,7 @@
final ArrayList<ImePositionProcessor> mPositionProcessors = new ArrayList<>();
@Inject
- DisplayImeController(SystemWindows syswin, DisplayWindowController displayController,
+ public DisplayImeController(SystemWindows syswin, DisplayController displayController,
@Main Handler mainHandler) {
mHandler = mainHandler;
mSystemWindows = syswin;
@@ -315,19 +315,20 @@
/**
* Called when the IME position is starting to animate.
*/
- void onImeStartPositioning(int displayId, int imeTop, int finalImeTop, boolean showing,
- SurfaceControl.Transaction t);
+ default void onImeStartPositioning(int displayId, int imeTop, int finalImeTop,
+ boolean showing, SurfaceControl.Transaction t) {}
/**
* Called when the ime position changed. This is expected to be a synchronous call on the
* animation thread. Operations can be added to the transaction to be applied in sync.
*/
- void onImePositionChanged(int displayId, int imeTop, SurfaceControl.Transaction t);
+ default void onImePositionChanged(int displayId, int imeTop,
+ SurfaceControl.Transaction t) {}
/**
* Called when the IME position is done animating.
*/
- void onImeEndPositioning(int displayId, int imeTop, boolean showing,
- SurfaceControl.Transaction t);
+ default void onImeEndPositioning(int displayId, int imeTop, boolean showing,
+ SurfaceControl.Transaction t) {}
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/wm/SystemWindows.java b/packages/SystemUI/src/com/android/systemui/wm/SystemWindows.java
index 5aba013..9faee68 100644
--- a/packages/SystemUI/src/com/android/systemui/wm/SystemWindows.java
+++ b/packages/SystemUI/src/com/android/systemui/wm/SystemWindows.java
@@ -64,11 +64,11 @@
final HashMap<View, SurfaceControlViewHost> mViewRoots = new HashMap<>();
Context mContext;
IWindowSession mSession;
- DisplayWindowController mDisplayController;
+ DisplayController mDisplayController;
IWindowManager mWmService;
- private final DisplayWindowController.DisplayWindowListener mDisplayListener =
- new DisplayWindowController.DisplayWindowListener() {
+ private final DisplayController.OnDisplaysChangedListener mDisplayListener =
+ new DisplayController.OnDisplaysChangedListener() {
@Override
public void onDisplayAdded(int displayId) { }
@@ -86,7 +86,7 @@
};
@Inject
- public SystemWindows(Context context, DisplayWindowController displayController,
+ public SystemWindows(Context context, DisplayController displayController,
IWindowManager wmService) {
mContext = context;
mWmService = wmService;