From 3243920695b4c29cb3d679ac6006d6643edb7a5b Mon Sep 17 00:00:00 2001 From: Matthew Mintz Date: Wed, 29 Jul 2020 17:39:47 +0800 Subject: [PATCH] Make WallpaperPreferenceController available when only style picker present. WallpaperPreferenceController prefers the style picker over the basic wallpaper picker. However, the entire setting is disabled when only the style picker is available, even though the basic wallpaper picker is not used. This change corrects that. Fixes: 162395248 Test: Added unit tests. Also built, flashed and tested setting with all four combinations of CategoryPickerActivity and CustomizationPickerActivity enabled/disabled. Change-Id: I4184f834ed771359cef13b64aacf2072e592d6d8 --- .../WallpaperPreferenceController.java | 12 +++-- .../WallpaperPreferenceControllerTest.java | 45 ++++++++++++++++++- 2 files changed, 51 insertions(+), 6 deletions(-) diff --git a/src/com/android/settings/display/WallpaperPreferenceController.java b/src/com/android/settings/display/WallpaperPreferenceController.java index b134ee49f9d..72054e9541c 100644 --- a/src/com/android/settings/display/WallpaperPreferenceController.java +++ b/src/com/android/settings/display/WallpaperPreferenceController.java @@ -62,8 +62,11 @@ public class WallpaperPreferenceController extends BasePreferenceController { } public ComponentName getComponentName() { - return new ComponentName(mWallpaperPackage, - areStylesAvailable() ? mStylesAndWallpaperClass : mWallpaperClass); + return new ComponentName(mWallpaperPackage, getComponentClassString()); + } + + public String getComponentClassString() { + return areStylesAvailable() ? mStylesAndWallpaperClass : mWallpaperClass; } public String getKeywords() { @@ -76,11 +79,12 @@ public class WallpaperPreferenceController extends BasePreferenceController { @Override public int getAvailabilityStatus() { - if (TextUtils.isEmpty(mWallpaperPackage) || TextUtils.isEmpty(mWallpaperClass)) { + if ((TextUtils.isEmpty(mWallpaperClass) && TextUtils.isEmpty(mStylesAndWallpaperClass)) + || TextUtils.isEmpty(mWallpaperPackage)) { Log.e(TAG, "No Wallpaper picker specified!"); return UNSUPPORTED_ON_DEVICE; } - return canResolveWallpaperComponent(mWallpaperClass) + return canResolveWallpaperComponent(getComponentClassString()) ? AVAILABLE_UNSEARCHABLE : CONDITIONALLY_UNAVAILABLE; } diff --git a/tests/robotests/src/com/android/settings/display/WallpaperPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/display/WallpaperPreferenceControllerTest.java index d6ad52d21a7..a8893eab731 100644 --- a/tests/robotests/src/com/android/settings/display/WallpaperPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/display/WallpaperPreferenceControllerTest.java @@ -73,21 +73,62 @@ public class WallpaperPreferenceControllerTest { } @Test - public void isAvailable_wallpaperPickerEnabled_shouldReturnTrue() { + public void isAvailable_wallpaperPickerEnabledAndStylePickerEnabled_returnsTrue() { mShadowPackageManager.setResolveInfosForIntent( mWallpaperIntent, Lists.newArrayList(mock(ResolveInfo.class))); + mShadowPackageManager.setResolveInfosForIntent( + mStylesAndWallpaperIntent, Lists.newArrayList(mock(ResolveInfo.class))); assertThat(mController.isAvailable()).isTrue(); } @Test - public void isAvailable_wallpaperPickerDisabled_shouldReturnFalse() { + public void isAvailable_wallpaperPickerEnabledAndStylePickerDisabled_returnsTrue() { + mShadowPackageManager.setResolveInfosForIntent( + mWallpaperIntent, Lists.newArrayList(mock(ResolveInfo.class))); + mShadowPackageManager.setResolveInfosForIntent( + mStylesAndWallpaperIntent, Lists.newArrayList()); + + assertThat(mController.isAvailable()).isTrue(); + } + + @Test + public void isAvailable_wallpaperPickerDisabledAndStylePickerEnabled_returnsTrue() { mShadowPackageManager.setResolveInfosForIntent( mWallpaperIntent, Lists.newArrayList()); + mShadowPackageManager.setResolveInfosForIntent( + mStylesAndWallpaperIntent, Lists.newArrayList(mock(ResolveInfo.class))); + + assertThat(mController.isAvailable()).isTrue(); + } + + @Test + public void isAvailable_wallpaperPickerDisabledAndStylePickerDisabled_returnsFalse() { + mShadowPackageManager.setResolveInfosForIntent( + mWallpaperIntent, Lists.newArrayList()); + mShadowPackageManager.setResolveInfosForIntent( + mStylesAndWallpaperIntent, Lists.newArrayList()); assertThat(mController.isAvailable()).isFalse(); } + @Test + public void getComponentClassString_stylesAvailable_returnsStylePickerClassString() { + mShadowPackageManager.setResolveInfosForIntent( + mStylesAndWallpaperIntent, + Lists.newArrayList(mock(ResolveInfo.class))); + assertThat(mController.getComponentClassString()) + .isEqualTo(mContext.getString(R.string.config_styles_and_wallpaper_picker_class)); + } + + @Test + public void getComponentClassString_stylesUnavailable_returnsWallpaperPickerClassString() { + mShadowPackageManager.setResolveInfosForIntent( + mStylesAndWallpaperIntent, Lists.newArrayList()); + assertThat(mController.getComponentClassString()) + .isEqualTo(mContext.getString(R.string.config_wallpaper_picker_class)); + } + @Test public void areStylesAvailable_noComponentSpecified() { SettingsShadowResources.overrideResource(