diff --git a/core/api/test-current.txt b/core/api/test-current.txt index 8fe0425fd989e..73099a0829fe5 100644 --- a/core/api/test-current.txt +++ b/core/api/test-current.txt @@ -2750,6 +2750,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 0f032e906991f..88406ffcdf14f 100644 --- a/core/java/android/view/IWindowManager.aidl +++ b/core/java/android/view/IWindowManager.aidl @@ -858,4 +858,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 cca8257645fe3..60516eb9efd44 100644 --- a/core/java/android/view/WindowManager.java +++ b/core/java/android/view/WindowManager.java @@ -4568,4 +4568,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 a467d82b362e0..d49b6a0af42fd 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 d14a773825321..61fce88414dad 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -8498,6 +8498,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;