Loading services/core/java/com/android/server/wallpaper/WallpaperManagerService.java +9 −9 Original line number Diff line number Diff line Loading @@ -20,7 +20,6 @@ import static android.Manifest.permission.INTERACT_ACROSS_USERS_FULL; 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; Loading @@ -46,6 +45,7 @@ import static com.android.server.wallpaper.WallpaperUtils.WALLPAPER_INFO; 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; Loading Loading @@ -756,7 +756,7 @@ public class WallpaperManagerService extends IWallpaperManager.Stub } // 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 Loading Loading @@ -792,7 +792,7 @@ public class WallpaperManagerService extends IWallpaperManager.Stub 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 Loading Loading @@ -914,7 +914,7 @@ public class WallpaperManagerService extends IWallpaperManager.Stub return; } int which = wallpaper.mWhich; if (enableConnectedDisplaysWallpaper()) { if (isDeviceEligibleForDesktopExperienceWallpaper(mContext)) { which = mWhich; } TimingsTraceAndSlog t = new TimingsTraceAndSlog(TAG); Loading Loading @@ -1438,7 +1438,7 @@ public class WallpaperManagerService extends IWallpaperManager.Stub // 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; } Loading @@ -1464,7 +1464,7 @@ public class WallpaperManagerService extends IWallpaperManager.Stub 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; } Loading Loading @@ -1654,7 +1654,7 @@ public class WallpaperManagerService extends IWallpaperManager.Stub 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 { Loading Loading @@ -4034,7 +4034,7 @@ public class WallpaperManagerService extends IWallpaperManager.Stub 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 Loading Loading @@ -4095,7 +4095,7 @@ public class WallpaperManagerService extends IWallpaperManager.Stub // 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 Loading services/core/java/com/android/server/wm/DesktopModeHelper.java +7 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -82,4 +84,9 @@ public final class DesktopModeHelper { 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); } } services/tests/mockingservicestests/src/com/android/server/wallpaper/WallpaperManagerServiceTests.java +5 −0 Original line number Diff line number Diff line Loading @@ -64,6 +64,7 @@ import android.content.pm.IPackageManager; 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; Loading Loading @@ -148,6 +149,8 @@ public class WallpaperManagerServiceTests { private IPackageManager mIpm = AppGlobals.getPackageManager(); private Resources mResources = sContext.getResources(); @Mock private DisplayManager mDisplayManager; Loading Loading @@ -245,6 +248,8 @@ public class WallpaperManagerServiceTests { 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(); Loading Loading
services/core/java/com/android/server/wallpaper/WallpaperManagerService.java +9 −9 Original line number Diff line number Diff line Loading @@ -20,7 +20,6 @@ import static android.Manifest.permission.INTERACT_ACROSS_USERS_FULL; 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; Loading @@ -46,6 +45,7 @@ import static com.android.server.wallpaper.WallpaperUtils.WALLPAPER_INFO; 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; Loading Loading @@ -756,7 +756,7 @@ public class WallpaperManagerService extends IWallpaperManager.Stub } // 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 Loading Loading @@ -792,7 +792,7 @@ public class WallpaperManagerService extends IWallpaperManager.Stub 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 Loading Loading @@ -914,7 +914,7 @@ public class WallpaperManagerService extends IWallpaperManager.Stub return; } int which = wallpaper.mWhich; if (enableConnectedDisplaysWallpaper()) { if (isDeviceEligibleForDesktopExperienceWallpaper(mContext)) { which = mWhich; } TimingsTraceAndSlog t = new TimingsTraceAndSlog(TAG); Loading Loading @@ -1438,7 +1438,7 @@ public class WallpaperManagerService extends IWallpaperManager.Stub // 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; } Loading @@ -1464,7 +1464,7 @@ public class WallpaperManagerService extends IWallpaperManager.Stub 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; } Loading Loading @@ -1654,7 +1654,7 @@ public class WallpaperManagerService extends IWallpaperManager.Stub 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 { Loading Loading @@ -4034,7 +4034,7 @@ public class WallpaperManagerService extends IWallpaperManager.Stub 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 Loading Loading @@ -4095,7 +4095,7 @@ public class WallpaperManagerService extends IWallpaperManager.Stub // 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 Loading
services/core/java/com/android/server/wm/DesktopModeHelper.java +7 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -82,4 +84,9 @@ public final class DesktopModeHelper { 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); } }
services/tests/mockingservicestests/src/com/android/server/wallpaper/WallpaperManagerServiceTests.java +5 −0 Original line number Diff line number Diff line Loading @@ -64,6 +64,7 @@ import android.content.pm.IPackageManager; 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; Loading Loading @@ -148,6 +149,8 @@ public class WallpaperManagerServiceTests { private IPackageManager mIpm = AppGlobals.getPackageManager(); private Resources mResources = sContext.getResources(); @Mock private DisplayManager mDisplayManager; Loading Loading @@ -245,6 +248,8 @@ public class WallpaperManagerServiceTests { 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(); Loading