From 0c6bd7efe7490683e12dfebe2814c20afc5126c2 Mon Sep 17 00:00:00 2001 From: Fan Zhang Date: Wed, 19 Apr 2017 17:11:40 -0700 Subject: [PATCH] Properly check wallpaper state before showing suggestion The old check only considers static wallpaper. So if user set a dynamic one we still think wallpaper is not set. Change-Id: I3fa0908b29891cf7b90c24d5a63ce60d5985a70d Fix: 34719455 Test: make RunSettingsRoboTests --- .../suggestions/SuggestionsChecks.java | 34 +++++-------------- .../suggestions/WallpaperManagerWrapper.java | 33 ++++++++++++++++++ .../suggestions/SuggestionsChecksTest.java | 29 ++++++++++++++-- 3 files changed, 68 insertions(+), 28 deletions(-) create mode 100644 src/com/android/settings/dashboard/suggestions/WallpaperManagerWrapper.java diff --git a/src/com/android/settings/dashboard/suggestions/SuggestionsChecks.java b/src/com/android/settings/dashboard/suggestions/SuggestionsChecks.java index 1be2c682afe..bdd5c60606e 100644 --- a/src/com/android/settings/dashboard/suggestions/SuggestionsChecks.java +++ b/src/com/android/settings/dashboard/suggestions/SuggestionsChecks.java @@ -17,19 +17,13 @@ package com.android.settings.dashboard.suggestions; import android.app.AutomaticZenRule; -import android.app.IWallpaperManager; -import android.app.IWallpaperManager.Stub; -import android.app.IWallpaperManagerCallback; import android.app.KeyguardManager; import android.app.NotificationManager; import android.app.WallpaperManager; import android.app.admin.DevicePolicyManager; import android.content.Context; import android.hardware.fingerprint.FingerprintManager; -import android.os.Bundle; -import android.os.IBinder; -import android.os.RemoteException; -import android.os.ServiceManager; +import android.support.annotation.VisibleForTesting; import com.android.ims.ImsManager; import com.android.settings.Settings.FingerprintEnrollSuggestionActivity; @@ -49,10 +43,14 @@ import java.util.Collection; */ public class SuggestionsChecks { + private static final String TAG = "SuggestionsChecks"; private final Context mContext; + private final WallpaperManagerWrapper mWallpaperManager; + public SuggestionsChecks(Context context) { mContext = context.getApplicationContext(); + mWallpaperManager = new WallpaperManagerWrapper(mContext); } public boolean isSuggestionComplete(Tile suggestion) { @@ -76,7 +74,7 @@ public class SuggestionsChecks { } SuggestionFeatureProvider provider = - FeatureFactory.getFactory(mContext).getSuggestionFeatureProvider(mContext); + FeatureFactory.getFactory(mContext).getSuggestionFeatureProvider(mContext); if (provider != null && provider.isPresent(className)) { return provider.isSuggestionCompleted(mContext); } @@ -114,16 +112,9 @@ public class SuggestionsChecks { return false; } - private boolean hasWallpaperSet() { - IBinder b = ServiceManager.getService(Context.WALLPAPER_SERVICE); - IWallpaperManager service = Stub.asInterface(b); - try { - return !service.isSetWallpaperAllowed(mContext.getOpPackageName()) || - service.getWallpaper(mCallback, WallpaperManager.FLAG_SYSTEM, - new Bundle(), mContext.getUserId()) != null; - } catch (RemoteException e) { - } - return false; + @VisibleForTesting + boolean hasWallpaperSet() { + return mWallpaperManager.getWallpaperId(WallpaperManager.FLAG_SYSTEM) > 0; } private boolean isFingerprintEnabled() { @@ -133,11 +124,4 @@ public class SuggestionsChecks { mContext.getUserId()); return (dpmFlags & DevicePolicyManager.KEYGUARD_DISABLE_FINGERPRINT) == 0; } - - private final IWallpaperManagerCallback mCallback = new IWallpaperManagerCallback.Stub() { - @Override - public void onWallpaperChanged() throws RemoteException { - // Don't care. - } - }; } diff --git a/src/com/android/settings/dashboard/suggestions/WallpaperManagerWrapper.java b/src/com/android/settings/dashboard/suggestions/WallpaperManagerWrapper.java new file mode 100644 index 00000000000..9efe4fe0a0f --- /dev/null +++ b/src/com/android/settings/dashboard/suggestions/WallpaperManagerWrapper.java @@ -0,0 +1,33 @@ +/* + * Copyright (C) 2017 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings.dashboard.suggestions; + +import android.app.WallpaperManager; +import android.content.Context; + +public class WallpaperManagerWrapper { + + private final WallpaperManager mWallpaperManager; + + public WallpaperManagerWrapper(Context context) { + mWallpaperManager = (WallpaperManager) context.getSystemService(Context.WALLPAPER_SERVICE); + } + + public int getWallpaperId(int which) { + return mWallpaperManager.getWallpaperId(which); + } +} diff --git a/tests/robotests/src/com/android/settings/dashboard/suggestions/SuggestionsChecksTest.java b/tests/robotests/src/com/android/settings/dashboard/suggestions/SuggestionsChecksTest.java index 72231b225c6..accca2abc35 100644 --- a/tests/robotests/src/com/android/settings/dashboard/suggestions/SuggestionsChecksTest.java +++ b/tests/robotests/src/com/android/settings/dashboard/suggestions/SuggestionsChecksTest.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2017 Google Inc. + * Copyright (C) 2017 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -17,12 +17,12 @@ package com.android.settings.dashboard.suggestions; import static com.google.common.truth.Truth.assertThat; - import static org.mockito.Matchers.any; import static org.mockito.Matchers.anyInt; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.when; +import android.app.WallpaperManager; import android.app.admin.DevicePolicyManager; import android.content.ComponentName; import android.content.Context; @@ -41,6 +41,8 @@ import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.annotation.Config; +import org.robolectric.util.ReflectionHelpers; + @RunWith(SettingsRobolectricTestRunner.class) @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) @@ -54,7 +56,8 @@ public class SuggestionsChecksTest { private FingerprintManager mFingerprintManager; @Mock private DevicePolicyManager mDevicePolicyManager; - + @Mock + private WallpaperManagerWrapper mWallpaperManager; private SuggestionsChecks mSuggestionsChecks; @Before @@ -118,4 +121,24 @@ public class SuggestionsChecksTest { Settings.FingerprintEnrollSuggestionActivity.class)); return tile; } + + @Test + public void hasWallpaperSet_no_shouldReturnFalse() { + ReflectionHelpers.setField(mSuggestionsChecks, "mWallpaperManager", mWallpaperManager); + when(mWallpaperManager.getWallpaperId(WallpaperManager.FLAG_SYSTEM)) + .thenReturn(0); + + assertThat(mSuggestionsChecks.hasWallpaperSet()) + .isFalse(); + } + + @Test + public void hasWallpaperSet_yes_shouldReturnTrue() { + ReflectionHelpers.setField(mSuggestionsChecks, "mWallpaperManager", mWallpaperManager); + when(mWallpaperManager.getWallpaperId(WallpaperManager.FLAG_SYSTEM)) + .thenReturn(100); + + assertThat(mSuggestionsChecks.hasWallpaperSet()) + .isTrue(); + } }