Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 38952498 authored by Steven Ng's avatar Steven Ng
Browse files

Disable desktop experience wallpapers for non-supported devices

Test: atests FrameworksMockingServicesTests:WallpaperManagerServiceTests
Flag: android.app.enable_connected_displays_wallpaper
Bug: 394241948

Change-Id: I969f21f5905d6167449b5480ffacad4df57c54ef
parent b7b68024
Loading
Loading
Loading
Loading
+9 −9
Original line number Diff line number Diff line
@@ -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;
@@ -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;
@@ -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
@@ -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
@@ -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);
@@ -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;
                            }
@@ -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;
                        }
@@ -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 {
@@ -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
@@ -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
+7 −0
Original line number Diff line number Diff line
@@ -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 @@ 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);
    }
}
+5 −0
Original line number Diff line number Diff line
@@ -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;
@@ -148,6 +149,8 @@ public class WallpaperManagerServiceTests {

    private IPackageManager mIpm = AppGlobals.getPackageManager();

    private Resources mResources = sContext.getResources();

    @Mock
    private DisplayManager mDisplayManager;

@@ -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();