diff --git a/core/api/test-current.txt b/core/api/test-current.txt index 63e90100b6b45..9acb72da75cd8 100644 --- a/core/api/test-current.txt +++ b/core/api/test-current.txt @@ -2730,6 +2730,7 @@ package android.view { public interface WindowManager extends android.view.ViewManager { method public default int getDisplayImePolicy(int); method public default void holdLock(android.os.IBinder, int); + method public default boolean isTaskSnapshotSupported(); method public default void setDisplayImePolicy(int, int); method public default void setForceCrossWindowBlurDisabled(boolean); method public default void setShouldShowSystemDecors(int, boolean); diff --git a/core/java/android/view/IWindowManager.aidl b/core/java/android/view/IWindowManager.aidl index d0a3e4b86e2d5..3a78db0444899 100644 --- a/core/java/android/view/IWindowManager.aidl +++ b/core/java/android/view/IWindowManager.aidl @@ -827,4 +827,6 @@ interface IWindowManager void unregisterCrossWindowBlurEnabledListener(ICrossWindowBlurEnabledListener listener); void setForceCrossWindowBlurDisabled(boolean disable); + + boolean isTaskSnapshotSupported(); } diff --git a/core/java/android/view/WindowManager.java b/core/java/android/view/WindowManager.java index 4b56fd740e8da..d71bbb527a9f2 100644 --- a/core/java/android/view/WindowManager.java +++ b/core/java/android/view/WindowManager.java @@ -4544,4 +4544,13 @@ public interface WindowManager extends ViewManager { default void holdLock(IBinder token, int durationMs) { throw new UnsupportedOperationException(); } + + /** + * Used for testing to check if the system supports TaskSnapshot mechanism. + * @hide + */ + @TestApi + default boolean isTaskSnapshotSupported() { + return false; + } } diff --git a/core/java/android/view/WindowManagerImpl.java b/core/java/android/view/WindowManagerImpl.java index 2bed3119a301f..07eeb034b663d 100644 --- a/core/java/android/view/WindowManagerImpl.java +++ b/core/java/android/view/WindowManagerImpl.java @@ -335,4 +335,13 @@ public final class WindowManagerImpl implements WindowManager { } catch (RemoteException e) { } } + + @Override + public boolean isTaskSnapshotSupported() { + try { + return WindowManagerGlobal.getWindowManagerService().isTaskSnapshotSupported(); + } catch (RemoteException e) { + } + return false; + } } diff --git a/services/core/java/com/android/server/wm/TaskSnapshotController.java b/services/core/java/com/android/server/wm/TaskSnapshotController.java index 5ffab483202f0..7d75c86a141a4 100644 --- a/services/core/java/com/android/server/wm/TaskSnapshotController.java +++ b/services/core/java/com/android/server/wm/TaskSnapshotController.java @@ -486,7 +486,7 @@ class TaskSnapshotController { return builder.build(); } - private boolean shouldDisableSnapshots() { + boolean shouldDisableSnapshots() { return mIsRunningOnWear || mIsRunningOnTv || mIsRunningOnIoT; } diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index e5ec3c9a2225a..c4d8f0c8432c0 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -8712,6 +8712,13 @@ public class WindowManagerService extends IWindowManager.Stub mDisplayHashController.setDisplayHashThrottlingEnabled(enable); } + @Override + public boolean isTaskSnapshotSupported() { + synchronized (mGlobalLock) { + return !mTaskSnapshotController.shouldDisableSnapshots(); + } + } + void generateDisplayHash(Session session, IWindow window, Rect boundsInWindow, String hashAlgorithm, RemoteCallback callback) { final SurfaceControl displaySurfaceControl;