Merge "Adding support for getting task overlay" into main
diff --git a/quickstep/src/com/android/quickstep/SystemUiProxy.java b/quickstep/src/com/android/quickstep/SystemUiProxy.java
index 27de20c..94ed5b9 100644
--- a/quickstep/src/com/android/quickstep/SystemUiProxy.java
+++ b/quickstep/src/com/android/quickstep/SystemUiProxy.java
@@ -17,7 +17,6 @@
import static android.app.ActivityManager.RECENT_IGNORE_UNAVAILABLE;
-import static com.android.launcher3.testing.shared.TestProtocol.testLogD;
import static com.android.launcher3.util.Executors.MAIN_EXECUTOR;
import static com.android.launcher3.util.Executors.UI_HELPER_EXECUTOR;
import static com.android.launcher3.util.SplitConfigurationOptions.StagePosition;
@@ -102,6 +101,7 @@
import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedHashMap;
+import java.util.List;
/**
* Holds the reference to SystemUI.
@@ -147,6 +147,9 @@
private IDesktopTaskListener mDesktopTaskListener;
private final LinkedHashMap<RemoteTransition, TransitionFilter> mRemoteTransitions =
new LinkedHashMap<>();
+
+ private final List<Runnable> mStateChangeCallbacks = new ArrayList<>();
+
private IBinder mOriginalTransactionToken = null;
private IOnBackInvokedCallback mBackToLauncherCallback;
private IRemoteAnimationRunner mBackToLauncherRunner;
@@ -268,6 +271,7 @@
setDesktopTaskListener(mDesktopTaskListener);
setAssistantOverridesRequested(
AssistUtils.newInstance(mContext).getSysUiAssistOverrideInvocationTypes());
+ mStateChangeCallbacks.forEach(Runnable::run);
}
/**
@@ -278,6 +282,20 @@
setProxy(null, null, null, null, null, null, null, null, null, null, null, null, null);
}
+ /**
+ * Adds a callback to be notified whenever the active state changes
+ */
+ public void addOnStateChangeListener(Runnable callback) {
+ mStateChangeCallbacks.add(callback);
+ }
+
+ /**
+ * Removes a previously added state change callback
+ */
+ public void removeOnStateChangeListener(Runnable callback) {
+ mStateChangeCallbacks.remove(callback);
+ }
+
// TODO(141886704): Find a way to remove this
public void setLastSystemUiStateFlags(int stateFlags) {
mLastSystemUiStateFlags = stateFlags;
@@ -1082,6 +1100,25 @@
}
/**
+ * Returns a surface which can be used to attach overlays to home task or null if
+ * the task doesn't exist or sysui is not connected
+ */
+ @Nullable
+ public SurfaceControl getHomeTaskOverlayContainer() {
+ // Use a local reference as this method can be called on a worker thread, which can lead
+ // to NullPointer exceptions if mShellTransitions is modified on the main thread.
+ IShellTransitions shellTransitions = mShellTransitions;
+ if (shellTransitions != null) {
+ try {
+ return mShellTransitions.getHomeTaskOverlayContainer();
+ } catch (RemoteException e) {
+ Log.w(TAG, "Failed call getOverlayContainerForTask", e);
+ }
+ }
+ return null;
+ }
+
+ /**
* Use SystemUI's transaction-queue instead of Launcher's independent one. This is necessary
* if Launcher and SystemUI need to coordinate transactions (eg. for shell transitions).
*/