Merge "Disable desktop experience wallpapers for non-supported devices" into main
diff --git a/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java b/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java
index d9c79b5..ef63229 100644
--- a/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java
+++ b/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java
@@ -20,7 +20,6 @@
 import static android.Manifest.permission.MANAGE_EXTERNAL_STORAGE;
 import static android.Manifest.permission.READ_WALLPAPER_INTERNAL;
 import static android.app.ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND;
-import static android.app.Flags.enableConnectedDisplaysWallpaper;
 import static android.app.Flags.fixWallpaperChanged;
 import static android.app.Flags.liveWallpaperContentHandling;
 import static android.app.Flags.removeNextWallpaperComponent;
@@ -46,6 +45,7 @@
 import static com.android.server.wallpaper.WallpaperUtils.WALLPAPER_LOCK_ORIG;
 import static com.android.server.wallpaper.WallpaperUtils.getWallpaperDir;
 import static com.android.server.wallpaper.WallpaperUtils.makeWallpaperIdLocked;
+import static com.android.server.wm.DesktopModeHelper.isDeviceEligibleForDesktopExperienceWallpaper;
 import static com.android.window.flags.Flags.avoidRebindingIntentionallyDisconnectedWallpaper;
 import static com.android.window.flags.Flags.multiCrop;
 import static com.android.window.flags.Flags.offloadColorExtraction;
@@ -756,7 +756,7 @@
         }
 
         // Image wallpaper
-        if (enableConnectedDisplaysWallpaper()) {
+        if (isDeviceEligibleForDesktopExperienceWallpaper(mContext)) {
             // TODO(b/384519749): check display's resolution and image wallpaper cropped image
             //  aspect ratio.
             return displayId == DEFAULT_DISPLAY
@@ -792,7 +792,7 @@
             return;
         }
 
-        if (enableConnectedDisplaysWallpaper()) {
+        if (isDeviceEligibleForDesktopExperienceWallpaper(mContext)) {
             mWallpaperDisplayHelper.forEachDisplayData(displayData -> {
                 int displayId = displayData.mDisplayId;
                 // If the display is already connected to the desired wallpaper(s), either the
@@ -914,7 +914,7 @@
                 return;
             }
             int which = wallpaper.mWhich;
-            if (enableConnectedDisplaysWallpaper()) {
+            if (isDeviceEligibleForDesktopExperienceWallpaper(mContext)) {
                 which = mWhich;
             }
             TimingsTraceAndSlog t = new TimingsTraceAndSlog(TAG);
@@ -1438,7 +1438,7 @@
                             // changes to currentSystem.mWhich alone won't update the corresponding
                             // flag in currentSystem.connection.mWallpaper.mWhich. Let's point
                             // currentSystem.connection.mWallpaper back to currentSystem.
-                            if (enableConnectedDisplaysWallpaper()
+                            if (isDeviceEligibleForDesktopExperienceWallpaper(mContext)
                                     && currentSystem.connection != null) {
                                 currentSystem.connection.mWallpaper = currentSystem;
                             }
@@ -1464,7 +1464,7 @@
                     WallpaperData currentSystem = mWallpaperMap.get(mNewWallpaper.userId);
                     if (currentSystem.wallpaperId == mOriginalSystem.wallpaperId) {
                         // Fixing the reference, see above for more details.
-                        if (enableConnectedDisplaysWallpaper()
+                        if (isDeviceEligibleForDesktopExperienceWallpaper(mContext)
                                 && currentSystem.connection != null) {
                             currentSystem.connection.mWallpaper = currentSystem;
                         }
@@ -1654,7 +1654,7 @@
         mShuttingDown = false;
         mImageWallpaper = ComponentName.unflattenFromString(
                 context.getResources().getString(R.string.image_wallpaper_component));
-        if (enableConnectedDisplaysWallpaper()) {
+        if (isDeviceEligibleForDesktopExperienceWallpaper(mContext)) {
             mFallbackWallpaperComponent = ComponentName.unflattenFromString(
                     context.getResources().getString(R.string.fallback_wallpaper_component));
         } else {
@@ -4034,7 +4034,7 @@
                 return;
             }
             int useFallbackWallpaperWhich = 0;
-            if (enableConnectedDisplaysWallpaper()) {
+            if (isDeviceEligibleForDesktopExperienceWallpaper(mContext)) {
                 List<WallpaperData> wallpapers = new ArrayList<>();
                 wallpapers.add(mLastWallpaper);
                 // If the system and the lock wallpapers are not the same, we should also
@@ -4095,7 +4095,7 @@
     // removed to start mirroring.
     private void onDisplayRemovedInternal(int displayId) {
         synchronized (mLock) {
-            if (enableConnectedDisplaysWallpaper()) {
+            if (isDeviceEligibleForDesktopExperienceWallpaper(mContext)) {
                 // There could be at most 2 wallpaper connections per display:
                 // 1. system & lock are the same: mLastWallpaper
                 // 2. system, lock are different: mLastWallpaper, mLastLockWallpaper
diff --git a/services/core/java/com/android/server/wm/DesktopModeHelper.java b/services/core/java/com/android/server/wm/DesktopModeHelper.java
index 0eea30a..a1faa75 100644
--- a/services/core/java/com/android/server/wm/DesktopModeHelper.java
+++ b/services/core/java/com/android/server/wm/DesktopModeHelper.java
@@ -16,6 +16,8 @@
 
 package com.android.server.wm;
 
+import static android.app.Flags.enableConnectedDisplaysWallpaper;
+
 import android.annotation.NonNull;
 import android.content.Context;
 import android.os.SystemProperties;
@@ -82,4 +84,9 @@
         return (isDesktopModeEnabled() && isDeviceEligibleForDesktopMode(context))
                 || isDesktopModeEnabledByDevOption(context);
     }
+
+    /** Returns {@code true} if desktop experience wallpaper is supported on this device. */
+    public static boolean isDeviceEligibleForDesktopExperienceWallpaper(@NonNull Context context) {
+        return enableConnectedDisplaysWallpaper() && isDeviceEligibleForDesktopMode(context);
+    }
 }
diff --git a/services/tests/mockingservicestests/src/com/android/server/wallpaper/WallpaperManagerServiceTests.java b/services/tests/mockingservicestests/src/com/android/server/wallpaper/WallpaperManagerServiceTests.java
index ef77a0e..a507359 100644
--- a/services/tests/mockingservicestests/src/com/android/server/wallpaper/WallpaperManagerServiceTests.java
+++ b/services/tests/mockingservicestests/src/com/android/server/wallpaper/WallpaperManagerServiceTests.java
@@ -64,6 +64,7 @@
 import android.content.pm.PackageManager;
 import android.content.pm.ParceledListSlice;
 import android.content.pm.ServiceInfo;
+import android.content.res.Resources;
 import android.graphics.Color;
 import android.hardware.display.DisplayManager;
 import android.hardware.display.DisplayManager.DisplayListener;
@@ -148,6 +149,8 @@
 
     private IPackageManager mIpm = AppGlobals.getPackageManager();
 
+    private Resources mResources = sContext.getResources();
+
     @Mock
     private DisplayManager mDisplayManager;
 
@@ -245,6 +248,8 @@
         doReturn(displays).when(mDisplayManager).getDisplays();
 
         spyOn(mIpm);
+        spyOn(mResources);
+        doReturn(true).when(mResources).getBoolean(eq(R.bool.config_isDesktopModeSupported));
         mService = new TestWallpaperManagerService(sContext);
         spyOn(mService);
         mService.systemReady();