Move code from SuggestionChecks to FeatureProvider

This is step one to deprecate SuggestionChecks. Moving logic into
SuggestionFeatureProvider allows potential logic override and improves
testability.

Also moved isSuggestionComplete tests to corresponding activity/pref
controller test.

Bug: 65065268
Test: robotests
Change-Id: I2071d30fc58bb84acad2083ca03cfcf7d41f10cb
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 44555db..190c55b 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -1688,14 +1688,12 @@
                 android:value="true" />
         </activity>
 
-        <activity android:name=".Settings$ScreenLockSuggestionActivity"
+        <activity android:name=".password.ScreenLockSuggestionActivity"
             android:icon="@drawable/ic_settings_security">
             <intent-filter android:priority="1">
                 <action android:name="android.intent.action.MAIN" />
                 <category android:name="com.android.settings.suggested.category.LOCK_SCREEN" />
             </intent-filter>
-            <meta-data android:name="com.android.settings.dismiss"
-                       android:value="0,30" />
             <meta-data android:name="com.android.settings.title"
                        android:resource="@string/suggested_lock_settings_title" />
             <meta-data android:name="com.android.settings.summary"
@@ -1703,7 +1701,7 @@
             <meta-data android:name="com.android.settings.icon_tintable" android:value="true" />
         </activity>
 
-        <activity android:name=".Settings$FingerprintEnrollSuggestionActivity"
+        <activity android:name=".fingerprint.FingerprintEnrollSuggestionActivity"
             android:icon="@drawable/ic_suggestion_fingerprint">
             <intent-filter android:priority="2">
                 <action android:name="android.intent.action.MAIN" />
@@ -2908,7 +2906,7 @@
                        android:value="true" />
         </activity>
 
-        <activity android:name="Settings$WifiCallingSuggestionActivity"
+        <activity android:name=".wifi.WifiCallingSuggestionActivity"
                   android:label="@string/wifi_calling_settings_title"
                   android:icon="@drawable/ic_settings_wireless"
                   android:taskAffinity="">
diff --git a/src/com/android/settings/Settings.java b/src/com/android/settings/Settings.java
index cd479a5..089ffac 100644
--- a/src/com/android/settings/Settings.java
+++ b/src/com/android/settings/Settings.java
@@ -21,8 +21,6 @@
 
 import com.android.settings.applications.AppOpsSummary;
 import com.android.settings.enterprise.EnterprisePrivacySettings;
-import com.android.settings.fingerprint.FingerprintEnrollIntroduction;
-import com.android.settings.password.ChooseLockGeneric;
 
 /**
  * Top-level Settings activity
@@ -157,12 +155,6 @@
     public static class ManageExternalSourcesActivity extends SettingsActivity {
         /* empty */ }
     public static class ManageAppExternalSourcesActivity extends SettingsActivity { /* empty */ }
-
-    public static class WifiCallingSuggestionActivity extends SettingsActivity { /* empty */ }
-    public static class FingerprintEnrollSuggestionActivity extends FingerprintEnrollIntroduction {
-        /* empty */
-    }
-    public static class ScreenLockSuggestionActivity extends ChooseLockGeneric { /* empty */ }
     public static class DoubleTapPowerSuggestionActivity extends SettingsActivity { /* empty */ }
     public static class DoubleTwistSuggestionActivity extends SettingsActivity { /* empty */ }
     public static class AmbientDisplaySuggestionActivity extends SettingsActivity { /* empty */ }
diff --git a/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProvider.java b/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProvider.java
index 8670823..0f8bccc 100644
--- a/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProvider.java
+++ b/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProvider.java
@@ -54,7 +54,7 @@
     boolean isSmartSuggestionEnabled(Context context);
 
     /** Return true if the suggestion has already been completed and does not need to be shown */
-    boolean isSuggestionCompleted(Context context, @NonNull ComponentName suggestion);
+    boolean isSuggestionComplete(Context context, @NonNull ComponentName suggestion);
 
     /**
      * Returns the {@link SharedPreferences} that holds metadata for suggestions.
diff --git a/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImpl.java b/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImpl.java
index d4002b2..02a9223 100644
--- a/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImpl.java
+++ b/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImpl.java
@@ -39,13 +39,18 @@
 import com.android.settings.Settings.NightDisplaySuggestionActivity;
 import com.android.settings.Settings.SwipeToNotificationSuggestionActivity;
 import com.android.settings.core.instrumentation.MetricsFeatureProvider;
+import com.android.settings.fingerprint.FingerprintEnrollSuggestionActivity;
+import com.android.settings.fingerprint.FingerprintSuggestionActivity;
 import com.android.settings.gestures.DoubleTapPowerPreferenceController;
 import com.android.settings.gestures.DoubleTapScreenPreferenceController;
 import com.android.settings.gestures.DoubleTwistPreferenceController;
 import com.android.settings.gestures.PickupGesturePreferenceController;
 import com.android.settings.gestures.SwipeToNotificationPreferenceController;
 import com.android.settings.overlay.FeatureFactory;
+import com.android.settings.password.ScreenLockSuggestionActivity;
 import com.android.settings.support.NewDeviceIntroSuggestionActivity;
+import com.android.settings.wallpaper.WallpaperSuggestionActivity;
+import com.android.settings.wifi.WifiCallingSuggestionActivity;
 import com.android.settingslib.drawer.Tile;
 import com.android.settingslib.suggestions.SuggestionParser;
 
@@ -96,12 +101,21 @@
     }
 
     @Override
-    public boolean isSuggestionCompleted(Context context, @NonNull ComponentName component) {
+    public boolean isSuggestionComplete(Context context, @NonNull ComponentName component) {
         final String className = component.getClassName();
-        if (className.equals(NightDisplaySuggestionActivity.class.getName())) {
+        if (className.equals(WallpaperSuggestionActivity.class.getName())) {
+            return WallpaperSuggestionActivity.isSuggestionComplete(context);
+        } else if (className.equals(FingerprintSuggestionActivity.class.getName())) {
+            return FingerprintSuggestionActivity.isSuggestionComplete(context);
+        } else if (className.equals(FingerprintEnrollSuggestionActivity.class.getName())) {
+            return FingerprintEnrollSuggestionActivity.isSuggestionComplete(context);
+        } else if (className.equals(ScreenLockSuggestionActivity.class.getName())) {
+            return ScreenLockSuggestionActivity.isSuggestionComplete(context);
+        } else if (className.equals(WifiCallingSuggestionActivity.class.getName())) {
+            return WifiCallingSuggestionActivity.isSuggestionComplete(context);
+        } else if (className.equals(NightDisplaySuggestionActivity.class.getName())) {
             return hasUsedNightDisplay(context);
-        }
-        if (className.equals(NewDeviceIntroSuggestionActivity.class.getName())) {
+        } else if (className.equals(NewDeviceIntroSuggestionActivity.class.getName())) {
             return NewDeviceIntroSuggestionActivity.isSuggestionComplete(context);
         } else if (className.equals(DoubleTapPowerSuggestionActivity.class.getName())) {
             return DoubleTapPowerPreferenceController
diff --git a/src/com/android/settings/dashboard/suggestions/SuggestionsChecks.java b/src/com/android/settings/dashboard/suggestions/SuggestionsChecks.java
index eb969a5..7121e41 100644
--- a/src/com/android/settings/dashboard/suggestions/SuggestionsChecks.java
+++ b/src/com/android/settings/dashboard/suggestions/SuggestionsChecks.java
@@ -16,23 +16,10 @@
 
 package com.android.settings.dashboard.suggestions;
 
-import android.app.KeyguardManager;
-import android.app.WallpaperManager;
-import android.app.admin.DevicePolicyManager;
 import android.content.ComponentName;
 import android.content.Context;
-import android.hardware.fingerprint.FingerprintManager;
-import android.support.annotation.VisibleForTesting;
 
-import com.android.ims.ImsManager;
-import com.android.settings.Settings.FingerprintEnrollSuggestionActivity;
-import com.android.settings.Settings.ScreenLockSuggestionActivity;
-import com.android.settings.Settings.WifiCallingSuggestionActivity;
-import com.android.settings.Utils;
-import com.android.settings.fingerprint.FingerprintSuggestionActivity;
 import com.android.settings.overlay.FeatureFactory;
-import com.android.settings.wallpaper.WallpaperSuggestionActivity;
-import com.android.settings.wrapper.WallpaperManagerWrapper;
 import com.android.settingslib.drawer.Tile;
 
 /**
@@ -43,69 +30,17 @@
     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) {
         ComponentName component = suggestion.intent.getComponent();
-        String className = component.getClassName();
-        if (className.equals(WallpaperSuggestionActivity.class.getName())) {
-            return hasWallpaperSet();
-        } else if (className.equals(WifiCallingSuggestionActivity.class.getName())) {
-            return isWifiCallingUnavailableOrEnabled();
-        } else if (className.equals(FingerprintSuggestionActivity.class.getName())) {
-            return !Utils.hasFingerprintHardware(mContext) || !isFingerprintEnabled()
-                    || isNotSingleFingerprintEnrolled();
-        } else if (className.equals(ScreenLockSuggestionActivity.class.getName())) {
-            return isDeviceSecured();
-        } else if (className.equals(FingerprintEnrollSuggestionActivity.class.getName())) {
-            final FingerprintManager manager = Utils.getFingerprintManagerOrNull(mContext);
-            if (manager == null || !isFingerprintEnabled()
-                    || !Utils.hasFingerprintHardware(mContext)) {
-                return true;
-            }
-            return manager.hasEnrolledFingerprints();
-        }
 
         final SuggestionFeatureProvider provider =
                 FeatureFactory.getFactory(mContext).getSuggestionFeatureProvider(mContext);
 
-        return provider.isSuggestionCompleted(mContext, component);
+        return provider.isSuggestionComplete(mContext, component);
     }
 
-    private boolean isDeviceSecured() {
-        KeyguardManager km = mContext.getSystemService(KeyguardManager.class);
-        return km.isKeyguardSecure();
-    }
-
-    private boolean isNotSingleFingerprintEnrolled() {
-        FingerprintManager manager = Utils.getFingerprintManagerOrNull(mContext);
-        return manager == null || manager.getEnrolledFingerprints().size() != 1;
-    }
-
-    public boolean isWifiCallingUnavailableOrEnabled() {
-        if (!ImsManager.isWfcEnabledByPlatform(mContext) ||
-                !ImsManager.isWfcProvisionedOnDevice(mContext)) {
-            return true;
-        }
-        return ImsManager.isWfcEnabledByUser(mContext)
-                && ImsManager.isNonTtyOrTtyOnVolteEnabled(mContext);
-    }
-
-    @VisibleForTesting
-    boolean hasWallpaperSet() {
-        return mWallpaperManager.getWallpaperId(WallpaperManager.FLAG_SYSTEM) > 0;
-    }
-
-    private boolean isFingerprintEnabled() {
-        DevicePolicyManager dpManager =
-                (DevicePolicyManager) mContext.getSystemService(Context.DEVICE_POLICY_SERVICE);
-        final int dpmFlags = dpManager.getKeyguardDisabledFeatures(null, /* admin */
-                mContext.getUserId());
-        return (dpmFlags & DevicePolicyManager.KEYGUARD_DISABLE_FINGERPRINT) == 0;
-    }
 }
diff --git a/src/com/android/settings/fingerprint/FingerprintEnrollSuggestionActivity.java b/src/com/android/settings/fingerprint/FingerprintEnrollSuggestionActivity.java
new file mode 100644
index 0000000..4a4d08d
--- /dev/null
+++ b/src/com/android/settings/fingerprint/FingerprintEnrollSuggestionActivity.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.fingerprint;
+
+import android.content.Context;
+
+import com.android.settings.Utils;
+
+public class FingerprintEnrollSuggestionActivity extends FingerprintEnrollIntroduction {
+
+    public static boolean isSuggestionComplete(Context context) {
+        if (!Utils.hasFingerprintHardware(context)
+                || !FingerprintSuggestionActivity.isFingerprintEnabled(context)
+                || !Utils.hasFingerprintHardware(context)) {
+            return true;
+        }
+        return Utils.getFingerprintManagerOrNull(context).hasEnrolledFingerprints();
+    }
+}
diff --git a/src/com/android/settings/fingerprint/FingerprintSuggestionActivity.java b/src/com/android/settings/fingerprint/FingerprintSuggestionActivity.java
index e1a4183..fa6aeb4 100644
--- a/src/com/android/settings/fingerprint/FingerprintSuggestionActivity.java
+++ b/src/com/android/settings/fingerprint/FingerprintSuggestionActivity.java
@@ -16,9 +16,13 @@
 
 package com.android.settings.fingerprint;
 
+import android.app.admin.DevicePolicyManager;
+import android.content.Context;
+import android.hardware.fingerprint.FingerprintManager;
 import android.widget.Button;
 
 import com.android.settings.R;
+import com.android.settings.Utils;
 
 public class FingerprintSuggestionActivity extends SetupFingerprintEnrollIntroduction {
 
@@ -36,4 +40,23 @@
         setResult(RESULT_CANCELED);
         super.finish();
     }
+
+    public static boolean isSuggestionComplete(Context context) {
+        return !Utils.hasFingerprintHardware(context)
+                || !isFingerprintEnabled(context)
+                || isNotSingleFingerprintEnrolled(context);
+    }
+
+    private static boolean isNotSingleFingerprintEnrolled(Context context) {
+        final FingerprintManager manager = Utils.getFingerprintManagerOrNull(context);
+        return manager == null || manager.getEnrolledFingerprints().size() != 1;
+    }
+
+    static boolean isFingerprintEnabled(Context context) {
+        final DevicePolicyManager dpManager =
+                (DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE);
+        final int dpmFlags = dpManager.getKeyguardDisabledFeatures(null, /* admin */
+                context.getUserId());
+        return (dpmFlags & DevicePolicyManager.KEYGUARD_DISABLE_FINGERPRINT) == 0;
+    }
 }
diff --git a/src/com/android/settings/gestures/DoubleTapPowerPreferenceController.java b/src/com/android/settings/gestures/DoubleTapPowerPreferenceController.java
index 970b6a7..bee9893 100644
--- a/src/com/android/settings/gestures/DoubleTapPowerPreferenceController.java
+++ b/src/com/android/settings/gestures/DoubleTapPowerPreferenceController.java
@@ -16,10 +16,13 @@
 
 package com.android.settings.gestures;
 
+import static android.provider.Settings.Secure.CAMERA_DOUBLE_TAP_POWER_GESTURE_DISABLED;
+
 import android.content.Context;
 import android.content.Intent;
 import android.content.SharedPreferences;
 import android.provider.Settings;
+import android.support.annotation.VisibleForTesting;
 import android.support.v7.preference.Preference;
 
 import com.android.settings.R;
@@ -28,12 +31,12 @@
 import com.android.settings.search.ResultPayload;
 import com.android.settingslib.core.lifecycle.Lifecycle;
 
-import static android.provider.Settings.Secure.CAMERA_DOUBLE_TAP_POWER_GESTURE_DISABLED;
-
 public class DoubleTapPowerPreferenceController extends GesturePreferenceController {
 
-    private final int ON = 0;
-    private final int OFF = 1;
+    @VisibleForTesting
+    static final int ON = 0;
+    @VisibleForTesting
+    static final int OFF = 1;
 
     private static final String PREF_KEY_VIDEO = "gesture_double_tap_power_video";
     private final String mDoubleTapPowerKey;
@@ -81,7 +84,7 @@
     protected boolean isSwitchPrefEnabled() {
         final int cameraDisabled = Settings.Secure.getInt(mContext.getContentResolver(),
                 SECURE_KEY, ON);
-        return cameraDisabled == 0;
+        return cameraDisabled == ON;
     }
 
     @Override
diff --git a/src/com/android/settings/gestures/PickupGesturePreferenceController.java b/src/com/android/settings/gestures/PickupGesturePreferenceController.java
index e64c0cf..e1b444c 100644
--- a/src/com/android/settings/gestures/PickupGesturePreferenceController.java
+++ b/src/com/android/settings/gestures/PickupGesturePreferenceController.java
@@ -16,6 +16,8 @@
 
 package com.android.settings.gestures;
 
+import static android.provider.Settings.Secure.DOZE_PULSE_ON_PICK_UP;
+
 import android.annotation.UserIdInt;
 import android.content.Context;
 import android.content.Intent;
@@ -30,8 +32,6 @@
 import com.android.settings.search.ResultPayload;
 import com.android.settingslib.core.lifecycle.Lifecycle;
 
-import static android.provider.Settings.Secure.DOZE_PULSE_ON_PICK_UP;
-
 public class PickupGesturePreferenceController extends GesturePreferenceController {
 
     private final int ON = 1;
@@ -56,8 +56,8 @@
 
     public static boolean isSuggestionComplete(Context context, SharedPreferences prefs) {
         AmbientDisplayConfiguration ambientConfig = new AmbientDisplayConfiguration(context);
-        return !ambientConfig.pulseOnPickupAvailable()
-                || prefs.getBoolean(PickupGestureSettings.PREF_KEY_SUGGESTION_COMPLETE, false);
+        return prefs.getBoolean(PickupGestureSettings.PREF_KEY_SUGGESTION_COMPLETE, false)
+                || !ambientConfig.pulseOnPickupAvailable();
     }
 
     @Override
diff --git a/src/com/android/settings/gestures/SwipeToNotificationPreferenceController.java b/src/com/android/settings/gestures/SwipeToNotificationPreferenceController.java
index 6f334a5..b50968f 100644
--- a/src/com/android/settings/gestures/SwipeToNotificationPreferenceController.java
+++ b/src/com/android/settings/gestures/SwipeToNotificationPreferenceController.java
@@ -16,6 +16,8 @@
 
 package com.android.settings.gestures;
 
+import static android.provider.Settings.Secure.SYSTEM_NAVIGATION_KEYS_ENABLED;
+
 import android.content.Context;
 import android.content.SharedPreferences;
 import android.provider.Settings;
@@ -24,8 +26,6 @@
 import com.android.settings.Utils;
 import com.android.settingslib.core.lifecycle.Lifecycle;
 
-import static android.provider.Settings.Secure.SYSTEM_NAVIGATION_KEYS_ENABLED;
-
 public class SwipeToNotificationPreferenceController extends GesturePreferenceController {
 
     private static final int ON = 1;
@@ -45,11 +45,12 @@
     public static boolean isSuggestionComplete(Context context, SharedPreferences prefs) {
         return !isGestureAvailable(context)
                 || prefs.getBoolean(SwipeToNotificationSettings.PREF_KEY_SUGGESTION_COMPLETE,
-                        false);
+                false);
     }
 
     private static boolean isGestureAvailable(Context context) {
-        return Utils.hasFingerprintHardware(context) && context.getResources()
+        return Utils.hasFingerprintHardware(context)
+                && context.getResources()
                 .getBoolean(com.android.internal.R.bool.config_supportSystemNavigationKeys);
     }
 
diff --git a/src/com/android/settings/password/ScreenLockSuggestionActivity.java b/src/com/android/settings/password/ScreenLockSuggestionActivity.java
new file mode 100644
index 0000000..56beb01
--- /dev/null
+++ b/src/com/android/settings/password/ScreenLockSuggestionActivity.java
@@ -0,0 +1,28 @@
+/*
+ * 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.password;
+
+import android.app.KeyguardManager;
+import android.content.Context;
+
+public class ScreenLockSuggestionActivity extends ChooseLockGeneric {
+
+    public static boolean isSuggestionComplete(Context context) {
+        KeyguardManager km = context.getSystemService(KeyguardManager.class);
+        return km.isKeyguardSecure();
+    }
+}
diff --git a/src/com/android/settings/wallpaper/WallpaperSuggestionActivity.java b/src/com/android/settings/wallpaper/WallpaperSuggestionActivity.java
index 90c5888..ca37b64 100644
--- a/src/com/android/settings/wallpaper/WallpaperSuggestionActivity.java
+++ b/src/com/android/settings/wallpaper/WallpaperSuggestionActivity.java
@@ -17,6 +17,8 @@
 package com.android.settings.wallpaper;
 
 import android.app.Activity;
+import android.app.WallpaperManager;
+import android.content.Context;
 import android.content.Intent;
 import android.content.pm.PackageManager;
 import android.os.Bundle;
@@ -25,6 +27,7 @@
 import com.android.internal.logging.nano.MetricsProto;
 import com.android.settings.R;
 import com.android.settings.Utils;
+import com.android.settings.wrapper.WallpaperManagerWrapper;
 
 public class WallpaperSuggestionActivity extends Activity {
 
@@ -53,4 +56,10 @@
                 MetricsProto.MetricsEvent.DASHBOARD_SUMMARY);
     }
 
+    @VisibleForTesting
+    public static boolean isSuggestionComplete(Context context) {
+        final WallpaperManagerWrapper manager = new WallpaperManagerWrapper(context);
+        return manager.getWallpaperId(WallpaperManager.FLAG_SYSTEM) > 0;
+    }
+
 }
diff --git a/src/com/android/settings/wifi/WifiCallingSuggestionActivity.java b/src/com/android/settings/wifi/WifiCallingSuggestionActivity.java
new file mode 100644
index 0000000..c3c7adb
--- /dev/null
+++ b/src/com/android/settings/wifi/WifiCallingSuggestionActivity.java
@@ -0,0 +1,34 @@
+/*
+ * 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.wifi;
+
+import android.content.Context;
+
+import com.android.ims.ImsManager;
+import com.android.settings.SettingsActivity;
+
+public class WifiCallingSuggestionActivity extends SettingsActivity {
+
+    public static boolean isSuggestionComplete(Context context) {
+        if (!ImsManager.isWfcEnabledByPlatform(context) ||
+                !ImsManager.isWfcProvisionedOnDevice(context)) {
+            return true;
+        }
+        return ImsManager.isWfcEnabledByUser(context)
+                && ImsManager.isNonTtyOrTtyOnVolteEnabled(context);
+    }
+}
diff --git a/tests/robotests/src/com/android/internal/hardware/AmbientDisplayConfiguration.java b/tests/robotests/src/com/android/internal/hardware/AmbientDisplayConfiguration.java
index 3dcf6ab..e080aa3 100644
--- a/tests/robotests/src/com/android/internal/hardware/AmbientDisplayConfiguration.java
+++ b/tests/robotests/src/com/android/internal/hardware/AmbientDisplayConfiguration.java
@@ -24,7 +24,11 @@
  */
 public class AmbientDisplayConfiguration {
 
-    public AmbientDisplayConfiguration(Context context) {}
+    private final Context mContext;
+
+    public AmbientDisplayConfiguration(Context context) {
+        mContext = context;
+    }
 
     public boolean pulseOnPickupAvailable() {
         return false;
diff --git a/tests/robotests/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImplTest.java b/tests/robotests/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImplTest.java
index deb860d..69b76fa 100644
--- a/tests/robotests/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImplTest.java
+++ b/tests/robotests/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImplTest.java
@@ -19,7 +19,6 @@
 
 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.anyString;
 import static org.mockito.Matchers.eq;
 import static org.mockito.Mockito.never;
@@ -31,7 +30,6 @@
 import android.content.ComponentName;
 import android.content.Context;
 import android.content.Intent;
-import android.content.SharedPreferences;
 import android.content.pm.PackageManager;
 import android.hardware.fingerprint.FingerprintManager;
 import android.provider.Settings.Secure;
@@ -41,18 +39,8 @@
 
 import com.android.internal.logging.nano.MetricsProto;
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
-import com.android.settings.R;
-import com.android.settings.Settings.AmbientDisplayPickupSuggestionActivity;
-import com.android.settings.Settings.AmbientDisplaySuggestionActivity;
-import com.android.settings.Settings.DoubleTapPowerSuggestionActivity;
-import com.android.settings.Settings.DoubleTwistSuggestionActivity;
 import com.android.settings.Settings.NightDisplaySuggestionActivity;
-import com.android.settings.Settings.SwipeToNotificationSuggestionActivity;
 import com.android.settings.TestConfig;
-import com.android.settings.gestures.DoubleTapPowerSettings;
-import com.android.settings.gestures.DoubleTapScreenSettings;
-import com.android.settings.gestures.PickupGestureSettings;
-import com.android.settings.gestures.SwipeToNotificationSettings;
 import com.android.settings.testutils.FakeFeatureFactory;
 import com.android.settings.testutils.SettingsRobolectricTestRunner;
 import com.android.settings.testutils.shadow.SettingsShadowResources;
@@ -78,19 +66,13 @@
 import java.util.List;
 
 @RunWith(SettingsRobolectricTestRunner.class)
-@Config(
-    manifest = TestConfig.MANIFEST_PATH,
-    sdk = TestConfig.SDK_VERSION,
-    shadows = {ShadowSecureSettings.class,
-            SettingsShadowResources.class,
-            SettingsShadowSystemProperties.class
-    }
-)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION, shadows = {
+        ShadowSecureSettings.class,
+        SettingsShadowResources.class,
+        SettingsShadowSystemProperties.class
+})
 public class SuggestionFeatureProviderImplTest {
 
-    private static final String DOUBLE_TWIST_SENSOR_NAME = "double_twist_sensor_name";
-    private static final String DOUBLE_TWIST_SENSOR_VENDOR = "double_twist_sensor_vendor";
-
     @Mock(answer = Answers.RETURNS_DEEP_STUBS)
     private Context mContext;
     @Mock
@@ -105,8 +87,6 @@
     private PackageManager mPackageManager;
     @Mock
     private FingerprintManager mFingerprintManager;
-    @Mock
-    private SharedPreferences mSharedPreferences;
     @Captor
     private ArgumentCaptor<Pair> mTaggedDataCaptor = ArgumentCaptor.forClass(Pair.class);
 
@@ -134,6 +114,7 @@
 
     @After
     public void tearDown() {
+        SettingsShadowResources.reset();
         SettingsShadowSystemProperties.clear();
     }
 
@@ -144,158 +125,6 @@
     }
 
     @Test
-    public void isSuggestionCompleted_doubleTapPower_trueWhenNotAvailable() {
-        SettingsShadowResources.overrideResource(
-                com.android.internal.R.bool.config_cameraDoubleTapPowerGestureEnabled, false);
-
-        assertThat(mProvider.isSuggestionCompleted(RuntimeEnvironment.application,
-                new ComponentName(RuntimeEnvironment.application,
-                        DoubleTapPowerSuggestionActivity.class))).isTrue();
-    }
-
-    @Test
-    public void isSuggestionCompleted_doubleTapPower_falseWhenNotVisited() {
-        SettingsShadowResources.overrideResource(
-                com.android.internal.R.bool.config_cameraDoubleTapPowerGestureEnabled, true);
-        // No stored value in shared preferences if not visited yet.
-
-        assertThat(mProvider.isSuggestionCompleted(RuntimeEnvironment.application,
-                new ComponentName(RuntimeEnvironment.application,
-                        DoubleTapPowerSuggestionActivity.class))).isFalse();
-    }
-
-    @Test
-    public void isSuggestionCompleted_doubleTapPower_trueWhenVisited() {
-        SettingsShadowResources.overrideResource(
-                com.android.internal.R.bool.config_cameraDoubleTapPowerGestureEnabled, true);
-        mProvider.getSharedPrefs(RuntimeEnvironment.application).edit().putBoolean(
-                DoubleTapPowerSettings.PREF_KEY_SUGGESTION_COMPLETE, true).commit();
-
-        assertThat(mProvider.isSuggestionCompleted(RuntimeEnvironment.application,
-                new ComponentName(RuntimeEnvironment.application,
-                        DoubleTapPowerSuggestionActivity.class))).isTrue();
-    }
-
-    @Test
-    public void isSuggestionCompleted_doubleTwist_trueWhenNotAvailable() {
-        SettingsShadowResources.overrideResource(
-                R.string.gesture_double_twist_sensor_name, "nonexistant name");
-        SettingsShadowResources.overrideResource(
-                R.string.gesture_double_twist_sensor_vendor, "nonexistant vendor");
-
-        assertThat(mProvider.isSuggestionCompleted(RuntimeEnvironment.application,
-                new ComponentName(RuntimeEnvironment.application,
-                        DoubleTwistSuggestionActivity.class))).isTrue();
-    }
-
-    @Test
-    public void isSuggestionCompleted_ambientDisplay_falseWhenNotVisited() {
-        SettingsShadowResources.overrideResource(
-                com.android.internal.R.string.config_dozeComponent, "foo");
-        SettingsShadowResources.overrideResource(
-                com.android.internal.R.string.config_dozeDoubleTapSensorType, "bar");
-        // No stored value in shared preferences if not visited yet.
-
-        assertThat(mProvider.isSuggestionCompleted(RuntimeEnvironment.application,
-                new ComponentName(RuntimeEnvironment.application,
-                        AmbientDisplaySuggestionActivity.class))).isFalse();
-    }
-
-    @Test
-    public void isSuggestionCompleted_ambientDisplay_trueWhenVisited() {
-        SettingsShadowResources.overrideResource(
-                com.android.internal.R.string.config_dozeComponent, "foo");
-        SettingsShadowResources.overrideResource(
-                com.android.internal.R.string.config_dozeDoubleTapSensorType, "bar");
-        mProvider.getSharedPrefs(RuntimeEnvironment.application).edit().putBoolean(
-                DoubleTapScreenSettings.PREF_KEY_SUGGESTION_COMPLETE, true).commit();
-
-        assertThat(mProvider.isSuggestionCompleted(RuntimeEnvironment.application,
-                new ComponentName(RuntimeEnvironment.application,
-                        AmbientDisplaySuggestionActivity.class))).isTrue();
-    }
-
-    @Test
-    public void isSuggestionCompleted_ambientDisplayPickup_falseWhenNotVisited() {
-        SettingsShadowResources.overrideResource(
-                com.android.internal.R.string.config_dozeComponent, "foo");
-        SettingsShadowResources.overrideResource(
-                com.android.internal.R.bool.config_dozePulsePickup, true);
-        // No stored value in shared preferences if not visited yet.
-
-        assertThat(mProvider.isSuggestionCompleted(RuntimeEnvironment.application,
-                new ComponentName(RuntimeEnvironment.application,
-                        AmbientDisplaySuggestionActivity.class))).isFalse();
-    }
-
-    @Test
-    public void isSuggestionCompleted_ambientDisplayPickup_trueWhenVisited() {
-        SettingsShadowResources.overrideResource(
-                com.android.internal.R.string.config_dozeComponent, "foo");
-        SettingsShadowResources.overrideResource(
-                com.android.internal.R.bool.config_dozePulsePickup, true);
-        mProvider.getSharedPrefs(RuntimeEnvironment.application).edit().putBoolean(
-                PickupGestureSettings.PREF_KEY_SUGGESTION_COMPLETE, true).commit();
-
-        assertThat(mProvider.isSuggestionCompleted(RuntimeEnvironment.application,
-                new ComponentName(RuntimeEnvironment.application,
-                        AmbientDisplayPickupSuggestionActivity.class))).isTrue();
-    }
-
-    @Test
-    public void isSuggestionCompleted_swipeToNotification_trueWhenNotHardwareNotAvailable() {
-        stubFingerprintSupported(true);
-        when(mFingerprintManager.isHardwareDetected()).thenReturn(false);
-        when(mContext.getResources().
-                getBoolean(com.android.internal.R.bool.config_supportSystemNavigationKeys))
-                .thenReturn(true);
-
-        assertThat(mProvider.isSuggestionCompleted(mContext,
-                new ComponentName(mContext, SwipeToNotificationSuggestionActivity.class))).isTrue();
-    }
-
-    @Test
-    public void isSuggestionCompleted_swipeToNotification_trueWhenNotAvailable() {
-        stubFingerprintSupported(true);
-        when(mFingerprintManager.isHardwareDetected()).thenReturn(true);
-        when(mContext.getResources().
-                getBoolean(com.android.internal.R.bool.config_supportSystemNavigationKeys))
-                .thenReturn(false);
-
-        assertThat(mProvider.isSuggestionCompleted(mContext,
-                new ComponentName(mContext, SwipeToNotificationSuggestionActivity.class))).isTrue();
-    }
-
-    @Test
-    public void isSuggestionCompleted_swipeToNotification_falseWhenNotVisited() {
-        stubFingerprintSupported(true);
-        when(mFingerprintManager.isHardwareDetected()).thenReturn(true);
-        when(mContext.getResources().
-                getBoolean(com.android.internal.R.bool.config_supportSystemNavigationKeys))
-                .thenReturn(true);
-        // No stored value in shared preferences if not visited yet.
-
-        assertThat(mProvider.isSuggestionCompleted(mContext,
-                new ComponentName(mContext,
-                        SwipeToNotificationSuggestionActivity.class))).isFalse();
-    }
-
-    @Test
-    public void isSuggestionCompleted_swipeToNotification_trueWhenVisited() {
-        stubFingerprintSupported(true);
-        when(mFingerprintManager.isHardwareDetected()).thenReturn(true);
-        when(mContext.getResources().
-                getBoolean(com.android.internal.R.bool.config_supportSystemNavigationKeys))
-                .thenReturn(true);
-        when(mContext.getSharedPreferences(anyString(), anyInt())).thenReturn(mSharedPreferences);
-        when(mSharedPreferences.getBoolean(
-                SwipeToNotificationSettings.PREF_KEY_SUGGESTION_COMPLETE, false)).thenReturn(true);
-
-        assertThat(mProvider.isSuggestionCompleted(mContext,
-                new ComponentName(mContext, SwipeToNotificationSuggestionActivity.class))).isTrue();
-    }
-
-    @Test
     public void isSuggestionEnabled_isLowMemoryDevice_shouldReturnFalse() {
         when(mActivityManager.isLowRamDevice()).thenReturn(true);
 
@@ -325,7 +154,6 @@
         assertThat(mProvider.isSuggestionV2Enabled(mContext)).isFalse();
     }
 
-
     @Test
     public void dismissSuggestion_noParserOrSuggestion_noop() {
         mProvider.dismissSuggestion(mContext, null, (Tile) null);
@@ -423,11 +251,6 @@
                         PackageManager.DONT_KILL_APP);
     }
 
-    private void stubFingerprintSupported(boolean enabled) {
-        when(mPackageManager.hasSystemFeature(PackageManager.FEATURE_FINGERPRINT))
-                .thenReturn(enabled);
-    }
-
     @Test
     public void filterExclusiveSuggestions_shouldOnlyKeepFirst3() {
         final List<Tile> suggestions = new ArrayList<>();
@@ -463,7 +286,7 @@
                 LocalDateTime.now().toString());
         final ComponentName componentName =
                 new ComponentName(mContext, NightDisplaySuggestionActivity.class);
-        assertThat(mProvider.isSuggestionCompleted(mContext, componentName)).isTrue();
+        assertThat(mProvider.isSuggestionComplete(mContext, componentName)).isTrue();
     }
 
     @Test
@@ -471,7 +294,7 @@
         Secure.putInt(mContext.getContentResolver(), Secure.NIGHT_DISPLAY_AUTO_MODE, 1);
         final ComponentName componentName =
                 new ComponentName(mContext, NightDisplaySuggestionActivity.class);
-        assertThat(mProvider.isSuggestionCompleted(mContext, componentName)).isTrue();
+        assertThat(mProvider.isSuggestionComplete(mContext, componentName)).isTrue();
     }
 
     @Test
@@ -481,13 +304,13 @@
         Secure.putInt(mContext.getContentResolver(), Secure.NIGHT_DISPLAY_AUTO_MODE, 1);
         final ComponentName componentName =
                 new ComponentName(mContext, NightDisplaySuggestionActivity.class);
-        assertThat(mProvider.isSuggestionCompleted(mContext, componentName)).isTrue();
+        assertThat(mProvider.isSuggestionComplete(mContext, componentName)).isTrue();
     }
 
     @Test
     public void nightDisplaySuggestion_isNotCompleted_byDefault() {
         final ComponentName componentName =
                 new ComponentName(mContext, NightDisplaySuggestionActivity.class);
-        assertThat(mProvider.isSuggestionCompleted(mContext, componentName)).isFalse();
+        assertThat(mProvider.isSuggestionComplete(mContext, componentName)).isFalse();
     }
 }
diff --git a/tests/robotests/src/com/android/settings/dashboard/suggestions/SuggestionsChecksTest.java b/tests/robotests/src/com/android/settings/fingerprint/FingerprintEnrollSuggestionActivityTest.java
similarity index 62%
rename from tests/robotests/src/com/android/settings/dashboard/suggestions/SuggestionsChecksTest.java
rename to tests/robotests/src/com/android/settings/fingerprint/FingerprintEnrollSuggestionActivityTest.java
index 0165fff..e299fd5 100644
--- a/tests/robotests/src/com/android/settings/dashboard/suggestions/SuggestionsChecksTest.java
+++ b/tests/robotests/src/com/android/settings/fingerprint/FingerprintEnrollSuggestionActivityTest.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.settings.dashboard.suggestions;
+package com.android.settings.fingerprint;
 
 import static com.google.common.truth.Truth.assertThat;
 import static org.mockito.Matchers.any;
@@ -22,19 +22,13 @@
 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;
-import android.content.Intent;
 import android.content.pm.PackageManager;
 import android.hardware.fingerprint.FingerprintManager;
 
-import com.android.settings.Settings;
 import com.android.settings.TestConfig;
 import com.android.settings.testutils.SettingsRobolectricTestRunner;
-import com.android.settings.wrapper.WallpaperManagerWrapper;
-import com.android.settingslib.drawer.Tile;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -42,12 +36,10 @@
 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)
-public class SuggestionsChecksTest {
+public class FingerprintEnrollSuggestionActivityTest {
 
     @Mock
     private Context mContext;
@@ -57,16 +49,10 @@
     private FingerprintManager mFingerprintManager;
     @Mock
     private DevicePolicyManager mDevicePolicyManager;
-    @Mock
-    private WallpaperManagerWrapper mWallpaperManager;
-    private SuggestionsChecks mSuggestionsChecks;
 
     @Before
     public void setUp() {
         MockitoAnnotations.initMocks(this);
-
-        when(mContext.getApplicationContext()).thenReturn(mContext);
-        mSuggestionsChecks = new SuggestionsChecks(mContext);
         when(mContext.getPackageManager()).thenReturn(mPackageManager);
         when(mContext.getSystemService(eq(Context.DEVICE_POLICY_SERVICE)))
                 .thenReturn(mDevicePolicyManager);
@@ -80,8 +66,8 @@
         stubFingerprintSupported(true);
         when(mFingerprintManager.hasEnrolledFingerprints()).thenReturn(true);
         when(mFingerprintManager.isHardwareDetected()).thenReturn(true);
-        Tile tile = createFingerprintTile();
-        assertThat(mSuggestionsChecks.isSuggestionComplete(tile)).isTrue();
+
+        assertThat(FingerprintEnrollSuggestionActivity.isSuggestionComplete(mContext)).isTrue();
     }
 
     @Test
@@ -89,8 +75,8 @@
         stubFingerprintSupported(true);
         when(mFingerprintManager.hasEnrolledFingerprints()).thenReturn(false);
         when(mFingerprintManager.isHardwareDetected()).thenReturn(true);
-        Tile tile = createFingerprintTile();
-        assertThat(mSuggestionsChecks.isSuggestionComplete(tile)).isFalse();
+
+        assertThat(FingerprintEnrollSuggestionActivity.isSuggestionComplete(mContext)).isFalse();
     }
 
     @Test
@@ -98,15 +84,15 @@
         stubFingerprintSupported(true);
         when(mFingerprintManager.hasEnrolledFingerprints()).thenReturn(false);
         when(mFingerprintManager.isHardwareDetected()).thenReturn(false);
-        Tile tile = createFingerprintTile();
-        assertThat(mSuggestionsChecks.isSuggestionComplete(tile)).isTrue();
+
+        assertThat(FingerprintEnrollSuggestionActivity.isSuggestionComplete(mContext)).isTrue();
     }
 
     @Test
     public void testFingerprintEnrollmentIntroductionIsCompleteWhenFingerprintNotSupported() {
         stubFingerprintSupported(false);
-        Tile tile = createFingerprintTile();
-        assertThat(mSuggestionsChecks.isSuggestionComplete(tile)).isTrue();
+
+        assertThat(FingerprintEnrollSuggestionActivity.isSuggestionComplete(mContext)).isTrue();
     }
 
     @Test
@@ -117,40 +103,11 @@
         when(mDevicePolicyManager.getKeyguardDisabledFeatures(any(), anyInt()))
                 .thenReturn(DevicePolicyManager.KEYGUARD_DISABLE_FINGERPRINT);
 
-        Tile tile = createFingerprintTile();
-        assertThat(mSuggestionsChecks.isSuggestionComplete(tile)).isTrue();
+        assertThat(FingerprintEnrollSuggestionActivity.isSuggestionComplete(mContext)).isTrue();
     }
 
     private void stubFingerprintSupported(boolean enabled) {
         when(mPackageManager.hasSystemFeature(PackageManager.FEATURE_FINGERPRINT))
                 .thenReturn(enabled);
     }
-
-    private Tile createFingerprintTile() {
-        final Tile tile = new Tile();
-        tile.intent = new Intent();
-        tile.intent.setComponent(new ComponentName(mContext,
-                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();
-    }
 }
diff --git a/tests/robotests/src/com/android/settings/gestures/DoubleTapPowerPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/gestures/DoubleTapPowerPreferenceControllerTest.java
index 9c9a546..0c804b3 100644
--- a/tests/robotests/src/com/android/settings/gestures/DoubleTapPowerPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/gestures/DoubleTapPowerPreferenceControllerTest.java
@@ -16,18 +16,29 @@
 
 package com.android.settings.gestures;
 
+import static android.provider.Settings.Secure.CAMERA_DOUBLE_TAP_POWER_GESTURE_DISABLED;
+import static com.android.settings.gestures.DoubleTapPowerPreferenceController.OFF;
+import static com.android.settings.gestures.DoubleTapPowerPreferenceController.ON;
+import static com.android.settings.gestures.DoubleTapPowerPreferenceController.isSuggestionComplete;
+import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.Mockito.when;
+
 import android.content.ContentResolver;
 import android.content.Context;
+import android.content.SharedPreferences;
 import android.provider.Settings;
-import android.support.v7.preference.PreferenceScreen;
 
+import com.android.settings.TestConfig;
+import com.android.settings.dashboard.suggestions.SuggestionFeatureProviderImpl;
 import com.android.settings.search.InlinePayload;
 import com.android.settings.search.InlineSwitchPayload;
 import com.android.settings.search.ResultPayload;
 import com.android.settings.testutils.SettingsRobolectricTestRunner;
-import com.android.settings.TestConfig;
-
+import com.android.settings.testutils.shadow.SettingsShadowResources;
+import com.android.settings.testutils.shadow.SettingsShadowSystemProperties;
 import com.android.settings.testutils.shadow.ShadowSecureSettings;
+
+import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -36,20 +47,15 @@
 import org.mockito.MockitoAnnotations;
 import org.robolectric.RuntimeEnvironment;
 import org.robolectric.annotation.Config;
-import org.robolectric.shadows.ShadowApplication;
-
-import static android.provider.Settings.Secure.CAMERA_DOUBLE_TAP_POWER_GESTURE_DISABLED;
-import static com.google.common.truth.Truth.assertThat;
-import static org.mockito.Mockito.when;
 
 @RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION, shadows = {
+        SettingsShadowResources.class
+})
 public class DoubleTapPowerPreferenceControllerTest {
 
     @Mock(answer = Answers.RETURNS_DEEP_STUBS)
     private Context mContext;
-    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
-    private PreferenceScreen mScreen;
     private DoubleTapPowerPreferenceController mController;
     private static final String KEY_DOUBLE_TAP_POWER = "gesture_double_tap_power";
 
@@ -59,6 +65,11 @@
         mController = new DoubleTapPowerPreferenceController(mContext, null, KEY_DOUBLE_TAP_POWER);
     }
 
+    @After
+    public void tearDown() {
+        SettingsShadowResources.reset();
+    }
+
     @Test
     public void isAvailable_configIsTrue_shouldReturnTrue() {
         when(mContext.getResources().
@@ -80,9 +91,9 @@
     @Test
     public void testSwitchEnabled_configIsNotSet_shouldReturnTrue() {
         // Set the setting to be enabled.
-        final Context context = ShadowApplication.getInstance().getApplicationContext();
+        final Context context = RuntimeEnvironment.application;
         Settings.System.putInt(context.getContentResolver(),
-                CAMERA_DOUBLE_TAP_POWER_GESTURE_DISABLED, 0);
+                CAMERA_DOUBLE_TAP_POWER_GESTURE_DISABLED, ON);
         mController = new DoubleTapPowerPreferenceController(context, null, KEY_DOUBLE_TAP_POWER);
 
         assertThat(mController.isSwitchPrefEnabled()).isTrue();
@@ -91,9 +102,9 @@
     @Test
     public void testSwitchEnabled_configIsSet_shouldReturnFalse() {
         // Set the setting to be disabled.
-        final Context context = ShadowApplication.getInstance().getApplicationContext();
+        final Context context = RuntimeEnvironment.application;
         Settings.System.putInt(context.getContentResolver(),
-                CAMERA_DOUBLE_TAP_POWER_GESTURE_DISABLED, 1);
+                CAMERA_DOUBLE_TAP_POWER_GESTURE_DISABLED, OFF);
         mController = new DoubleTapPowerPreferenceController(context, null, KEY_DOUBLE_TAP_POWER);
 
         assertThat(mController.isSwitchPrefEnabled()).isFalse();
@@ -138,4 +149,43 @@
         newValue = 1 - newValue; // DoubleTapPower is a non-standard switch
         assertThat(newValue).isEqualTo(currentValue);
     }
+
+    @Test
+    public void isSuggestionCompleted_doubleTapPower_trueWhenNotAvailable() {
+        SettingsShadowResources.overrideResource(
+                com.android.internal.R.bool.config_cameraDoubleTapPowerGestureEnabled, false);
+
+        assertThat(
+                isSuggestionComplete(RuntimeEnvironment.application, null/* prefs */))
+                .isTrue();
+    }
+
+    @Test
+    public void isSuggestionCompleted_doubleTapPower_falseWhenNotVisited() {
+        SettingsShadowResources.overrideResource(
+                com.android.internal.R.bool.config_cameraDoubleTapPowerGestureEnabled, true);
+        // No stored value in shared preferences if not visited yet.
+        final Context context = RuntimeEnvironment.application;
+        final SharedPreferences prefs = new SuggestionFeatureProviderImpl(context)
+                .getSharedPrefs(context);
+        assertThat(
+                isSuggestionComplete(RuntimeEnvironment.application, prefs))
+                .isFalse();
+    }
+
+    @Test
+    public void isSuggestionCompleted_doubleTapPower_trueWhenVisited() {
+        SettingsShadowResources.overrideResource(
+                com.android.internal.R.bool.config_cameraDoubleTapPowerGestureEnabled, true);
+        // No stored value in shared preferences if not visited yet.
+        final Context context = RuntimeEnvironment.application;
+        final SharedPreferences prefs = new SuggestionFeatureProviderImpl(context)
+                .getSharedPrefs(context);
+        prefs.edit().putBoolean(
+                DoubleTapPowerSettings.PREF_KEY_SUGGESTION_COMPLETE, true).commit();
+
+        assertThat(
+                isSuggestionComplete(RuntimeEnvironment.application, prefs))
+                .isTrue();
+    }
 }
diff --git a/tests/robotests/src/com/android/settings/gestures/DoubleTapScreenPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/gestures/DoubleTapScreenPreferenceControllerTest.java
index 37f52de..2565dc8 100644
--- a/tests/robotests/src/com/android/settings/gestures/DoubleTapScreenPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/gestures/DoubleTapScreenPreferenceControllerTest.java
@@ -16,18 +16,26 @@
 
 package com.android.settings.gestures;
 
+import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.Matchers.anyInt;
+import static org.mockito.Mockito.when;
+
 import android.content.ContentResolver;
 import android.content.Context;
-
+import android.content.SharedPreferences;
 import android.provider.Settings;
+
 import com.android.internal.hardware.AmbientDisplayConfiguration;
+import com.android.settings.TestConfig;
+import com.android.settings.dashboard.suggestions.SuggestionFeatureProviderImpl;
 import com.android.settings.search.InlinePayload;
 import com.android.settings.search.InlineSwitchPayload;
 import com.android.settings.search.ResultPayload;
 import com.android.settings.testutils.SettingsRobolectricTestRunner;
-import com.android.settings.TestConfig;
-
+import com.android.settings.testutils.shadow.SettingsShadowResources;
 import com.android.settings.testutils.shadow.ShadowSecureSettings;
+
+import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -37,12 +45,10 @@
 import org.robolectric.RuntimeEnvironment;
 import org.robolectric.annotation.Config;
 
-import static com.google.common.truth.Truth.assertThat;
-import static org.mockito.Matchers.anyInt;
-import static org.mockito.Mockito.when;
-
 @RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION, shadows = {
+        SettingsShadowResources.class
+})
 public class DoubleTapScreenPreferenceControllerTest {
 
     @Mock(answer = Answers.RETURNS_DEEP_STUBS)
@@ -60,6 +66,11 @@
                 mContext, null, mAmbientDisplayConfiguration, 0, KEY_DOUBLE_TAP_SCREEN);
     }
 
+    @After
+    public void tearDown() {
+        SettingsShadowResources.reset();
+    }
+
     @Test
     public void isAvailable_configIsTrue_shouldReturnTrue() {
         when(mAmbientDisplayConfiguration.pulseOnDoubleTapAvailable()).thenReturn(true);
@@ -125,4 +136,36 @@
 
         assertThat(newValue).isEqualTo(currentValue);
     }
+
+    @Test
+    public void isSuggestionCompleted_ambientDisplay_falseWhenNotVisited() {
+        SettingsShadowResources.overrideResource(
+                com.android.internal.R.string.config_dozeComponent, "foo");
+        SettingsShadowResources.overrideResource(
+                com.android.internal.R.string.config_dozeDoubleTapSensorType, "bar");
+        // No stored value in shared preferences if not visited yet.
+        final Context context = RuntimeEnvironment.application;
+        final SharedPreferences prefs = new SuggestionFeatureProviderImpl(context)
+                .getSharedPrefs(context);
+
+        assertThat(DoubleTapScreenPreferenceController.isSuggestionComplete(context, prefs))
+                .isFalse();
+    }
+
+    @Test
+    public void isSuggestionCompleted_ambientDisplay_trueWhenVisited() {
+        SettingsShadowResources.overrideResource(
+                com.android.internal.R.string.config_dozeComponent, "foo");
+        SettingsShadowResources.overrideResource(
+                com.android.internal.R.string.config_dozeDoubleTapSensorType, "bar");
+        final Context context = RuntimeEnvironment.application;
+        final SharedPreferences prefs = new SuggestionFeatureProviderImpl(context)
+                .getSharedPrefs(context);
+
+        prefs.edit().putBoolean(
+                DoubleTapScreenSettings.PREF_KEY_SUGGESTION_COMPLETE, true).commit();
+
+        assertThat(DoubleTapScreenPreferenceController.isSuggestionComplete(context, prefs))
+                .isTrue();
+    }
 }
diff --git a/tests/robotests/src/com/android/settings/gestures/DoubleTwistPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/gestures/DoubleTwistPreferenceControllerTest.java
index aa8121c..a7516fc 100644
--- a/tests/robotests/src/com/android/settings/gestures/DoubleTwistPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/gestures/DoubleTwistPreferenceControllerTest.java
@@ -16,38 +16,44 @@
 
 package com.android.settings.gestures;
 
-import android.content.Context;
-import android.hardware.Sensor;
-import android.hardware.SensorManager;
-import android.os.UserManager;
-import android.provider.Settings;
-
-import com.android.settings.testutils.SettingsRobolectricTestRunner;
-import com.android.settings.TestConfig;
-import com.android.settings.testutils.shadow.ShadowSecureSettings;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Answers;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-import org.robolectric.annotation.Config;
-import org.robolectric.shadows.ShadowApplication;
-
-import java.util.ArrayList;
-import java.util.List;
-
 import static com.google.common.truth.Truth.assertThat;
 import static org.mockito.Matchers.anyInt;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.when;
 
+import android.content.Context;
+import android.hardware.Sensor;
+import android.hardware.SensorManager;
+import android.os.UserManager;
+import android.provider.Settings;
+
+import com.android.settings.R;
+import com.android.settings.TestConfig;
+import com.android.settings.testutils.SettingsRobolectricTestRunner;
+import com.android.settings.testutils.shadow.SettingsShadowResources;
+import com.android.settings.testutils.shadow.SettingsShadowSystemProperties;
 import com.android.settings.testutils.shadow.ShadowDoubleTwistPreferenceController;
+import com.android.settings.testutils.shadow.ShadowSecureSettings;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Answers;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.RuntimeEnvironment;
+import org.robolectric.annotation.Config;
+import org.robolectric.shadows.ShadowApplication;
+
+import java.util.ArrayList;
+import java.util.List;
 
 @RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION, shadows = {
+        SettingsShadowResources.class
+})
 public class DoubleTwistPreferenceControllerTest {
 
     @Mock(answer = Answers.RETURNS_DEEP_STUBS)
@@ -64,6 +70,11 @@
         mController = new DoubleTwistPreferenceController(mContext, null, KEY_DOUBLE_TWIST);
     }
 
+    @After
+    public void tearDown() {
+        SettingsShadowResources.reset();
+    }
+
     @Test
     public void isAvailable_hasSensor_shouldReturnTrue() {
         // Mock sensors
@@ -97,15 +108,27 @@
     }
 
     @Test
+    public void isSuggestionCompleted_doubleTwist_trueWhenNotAvailable() {
+        SettingsShadowResources.overrideResource(
+                R.string.gesture_double_twist_sensor_name, "nonexistant name");
+        SettingsShadowResources.overrideResource(
+                R.string.gesture_double_twist_sensor_vendor, "nonexistant vendor");
+
+        assertThat(DoubleTwistPreferenceController.isSuggestionComplete(
+                RuntimeEnvironment.application, null /* prefs */))
+                .isTrue();
+    }
+
+    @Test
     @Config(shadows = {
             ShadowDoubleTwistPreferenceController.class,
             ShadowSecureSettings.class})
     public void onPreferenceChange_hasWorkProfile_shouldUpdateSettingForWorkProfileUser() {
         final int managedId = 2;
         ShadowSecureSettings.putIntForUser(
-            null, Settings.Secure.CAMERA_DOUBLE_TWIST_TO_FLIP_ENABLED, 0, managedId);
+                null, Settings.Secure.CAMERA_DOUBLE_TWIST_TO_FLIP_ENABLED, 0, managedId);
         DoubleTwistPreferenceController controller =
-            spy(new DoubleTwistPreferenceController(mContext, null, KEY_DOUBLE_TWIST));
+                spy(new DoubleTwistPreferenceController(mContext, null, KEY_DOUBLE_TWIST));
         ShadowDoubleTwistPreferenceController.setManagedProfileId(managedId);
 
         // enable the gesture
diff --git a/tests/robotests/src/com/android/settings/gestures/PickupGesturePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/gestures/PickupGesturePreferenceControllerTest.java
index a2a6923..8757a65 100644
--- a/tests/robotests/src/com/android/settings/gestures/PickupGesturePreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/gestures/PickupGesturePreferenceControllerTest.java
@@ -16,18 +16,26 @@
 
 package com.android.settings.gestures;
 
+import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.Matchers.anyInt;
+import static org.mockito.Mockito.when;
+
 import android.content.ContentResolver;
 import android.content.Context;
-
+import android.content.SharedPreferences;
 import android.provider.Settings;
+
 import com.android.internal.hardware.AmbientDisplayConfiguration;
+import com.android.settings.TestConfig;
+import com.android.settings.dashboard.suggestions.SuggestionFeatureProviderImpl;
 import com.android.settings.search.InlinePayload;
 import com.android.settings.search.InlineSwitchPayload;
 import com.android.settings.search.ResultPayload;
 import com.android.settings.testutils.SettingsRobolectricTestRunner;
-import com.android.settings.TestConfig;
-
+import com.android.settings.testutils.shadow.SettingsShadowResources;
 import com.android.settings.testutils.shadow.ShadowSecureSettings;
+
+import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -37,12 +45,10 @@
 import org.robolectric.RuntimeEnvironment;
 import org.robolectric.annotation.Config;
 
-import static com.google.common.truth.Truth.assertThat;
-import static org.mockito.Matchers.anyInt;
-import static org.mockito.Mockito.when;
-
 @RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION, shadows = {
+        SettingsShadowResources.class
+})
 public class PickupGesturePreferenceControllerTest {
 
     @Mock(answer = Answers.RETURNS_DEEP_STUBS)
@@ -61,6 +67,12 @@
                 mContext, null, mAmbientDisplayConfiguration, 0, KEY_PICK_UP);
     }
 
+    @After
+    public void tearDown() {
+        SettingsShadowResources.reset();
+        ShadowSecureSettings.clear();
+    }
+
     @Test
     public void isAvailable_configIsTrue_shouldReturnTrue() {
         when(mAmbientDisplayConfiguration.pulseOnPickupAvailable()).thenReturn(true);
@@ -140,4 +152,20 @@
 
         assertThat(newValue).isEqualTo(currentValue);
     }
+
+    @Test
+    public void isSuggestionCompleted_ambientDisplayPickup_trueWhenVisited() {
+        when(mContext.getResources().getBoolean(anyInt()))
+                .thenReturn(true);
+        when(mContext.getResources().getString(anyInt()))
+                .thenReturn("foo");
+        final Context context = RuntimeEnvironment.application;
+        final SharedPreferences prefs = new SuggestionFeatureProviderImpl(context)
+                .getSharedPrefs(context);
+        prefs.edit().putBoolean(
+                PickupGestureSettings.PREF_KEY_SUGGESTION_COMPLETE, true).commit();
+
+        assertThat(PickupGesturePreferenceController.isSuggestionComplete(mContext, prefs))
+                .isTrue();
+    }
 }
diff --git a/tests/robotests/src/com/android/settings/gestures/SwipeToNotificationPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/gestures/SwipeToNotificationPreferenceControllerTest.java
index 063d7eb..f3cc2ca 100644
--- a/tests/robotests/src/com/android/settings/gestures/SwipeToNotificationPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/gestures/SwipeToNotificationPreferenceControllerTest.java
@@ -16,13 +16,19 @@
 
 package com.android.settings.gestures;
 
+import static android.provider.Settings.Secure.SYSTEM_NAVIGATION_KEYS_ENABLED;
+import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.Mockito.when;
+
 import android.content.Context;
+import android.content.SharedPreferences;
 import android.content.pm.PackageManager;
 import android.hardware.fingerprint.FingerprintManager;
 import android.provider.Settings;
 
-import com.android.settings.testutils.SettingsRobolectricTestRunner;
 import com.android.settings.TestConfig;
+import com.android.settings.dashboard.suggestions.SuggestionFeatureProviderImpl;
+import com.android.settings.testutils.SettingsRobolectricTestRunner;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -30,17 +36,10 @@
 import org.mockito.Answers;
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
+import org.robolectric.RuntimeEnvironment;
 import org.robolectric.annotation.Config;
 import org.robolectric.shadows.ShadowApplication;
 
-import static android.provider.Settings.Secure.SYSTEM_NAVIGATION_KEYS_ENABLED;
-import static com.google.common.truth.Truth.assertThat;
-
-import static org.mockito.Mockito.doReturn;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.spy;
-import static org.mockito.Mockito.when;
-
 @RunWith(SettingsRobolectricTestRunner.class)
 @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
 public class SwipeToNotificationPreferenceControllerTest {
@@ -122,6 +121,54 @@
         assertThat(mController.isSwitchPrefEnabled()).isFalse();
     }
 
+    @Test
+    public void isSuggestionCompleted_configDisabled_shouldReturnTrue() {
+        stubFingerprintSupported(true);
+        when(mFingerprintManager.isHardwareDetected()).thenReturn(true);
+        when(mContext.getResources().
+                getBoolean(com.android.internal.R.bool.config_supportSystemNavigationKeys))
+                .thenReturn(false);
+
+        assertThat(SwipeToNotificationPreferenceController.isSuggestionComplete(
+                mContext, null /* prefs */))
+                .isTrue();
+    }
+
+    @Test
+    public void isSuggestionCompleted_notVisited_shouldReturnFalse() {
+        stubFingerprintSupported(true);
+        when(mFingerprintManager.isHardwareDetected()).thenReturn(true);
+        when(mContext.getResources().
+                getBoolean(com.android.internal.R.bool.config_supportSystemNavigationKeys))
+                .thenReturn(true);
+        // No stored value in shared preferences if not visited yet.
+        final Context context = RuntimeEnvironment.application;
+        final SharedPreferences prefs = new SuggestionFeatureProviderImpl(context)
+                .getSharedPrefs(context);
+
+        assertThat(SwipeToNotificationPreferenceController.isSuggestionComplete(mContext, prefs))
+                .isFalse();
+    }
+
+    @Test
+    public void isSuggestionCompleted_visited_shouldReturnTrue() {
+        stubFingerprintSupported(true);
+        when(mFingerprintManager.isHardwareDetected()).thenReturn(true);
+        when(mContext.getResources().
+                getBoolean(com.android.internal.R.bool.config_supportSystemNavigationKeys))
+                .thenReturn(true);
+        // No stored value in shared preferences if not visited yet.
+        final Context context = RuntimeEnvironment.application;
+        final SharedPreferences prefs = new SuggestionFeatureProviderImpl(context)
+                .getSharedPrefs(context);
+        prefs.edit()
+                .putBoolean(SwipeToNotificationSettings.PREF_KEY_SUGGESTION_COMPLETE, true)
+                .commit();
+
+        assertThat(SwipeToNotificationPreferenceController.isSuggestionComplete(mContext, prefs))
+                .isTrue();
+    }
+
     private void stubFingerprintSupported(boolean enabled) {
         when(mPackageManager.hasSystemFeature(PackageManager.FEATURE_FINGERPRINT))
                 .thenReturn(enabled);
diff --git a/tests/robotests/src/com/android/settings/suggestions/SettingsSuggestionsTest.java b/tests/robotests/src/com/android/settings/suggestions/SettingsSuggestionsTest.java
index a7a9706..677bf41 100644
--- a/tests/robotests/src/com/android/settings/suggestions/SettingsSuggestionsTest.java
+++ b/tests/robotests/src/com/android/settings/suggestions/SettingsSuggestionsTest.java
@@ -68,7 +68,7 @@
 
     @Test
     public void wifiCallingSuggestion_isValid() {
-        assertSuggestionEquals("Settings$WifiCallingSuggestionActivity",
+        assertSuggestionEquals("com.android.settings.wifi.WifiCallingSuggestionActivity",
                 CATEGORY_FIRST_IMPRESSION,
                 R.string.wifi_calling_suggestion_title, R.string.wifi_calling_suggestion_summary);
     }
diff --git a/tests/robotests/src/com/android/settings/wallpaper/WallpaperSuggestionActivityTest.java b/tests/robotests/src/com/android/settings/wallpaper/WallpaperSuggestionActivityTest.java
index d8c0861..49a678f 100644
--- a/tests/robotests/src/com/android/settings/wallpaper/WallpaperSuggestionActivityTest.java
+++ b/tests/robotests/src/com/android/settings/wallpaper/WallpaperSuggestionActivityTest.java
@@ -16,13 +16,18 @@
 
 package com.android.settings.wallpaper;
 
+import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.Mockito.when;
+import static org.robolectric.Shadows.shadowOf;
+
 import android.content.Context;
 import android.content.Intent;
 import android.content.pm.PackageManager;
 
-import com.android.settings.testutils.SettingsRobolectricTestRunner;
 import com.android.settings.SubSettings;
 import com.android.settings.TestConfig;
+import com.android.settings.testutils.SettingsRobolectricTestRunner;
+import com.android.settings.wrapper.WallpaperManagerWrapper;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -32,14 +37,15 @@
 import org.robolectric.Robolectric;
 import org.robolectric.android.controller.ActivityController;
 import org.robolectric.annotation.Config;
+import org.robolectric.annotation.Implementation;
+import org.robolectric.annotation.Implements;
 import org.robolectric.shadows.ShadowActivity;
 
-import static com.google.common.truth.Truth.assertThat;
-import static org.mockito.Mockito.when;
-import static org.robolectric.Shadows.shadowOf;
-
 @RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION,
+        shadows = {
+                WallpaperSuggestionActivityTest.ShadowWallpaperManagerWrapper.class
+        })
 public class WallpaperSuggestionActivityTest {
 
     @Mock
@@ -62,4 +68,39 @@
 
         assertThat(intent.getComponent().getClassName()).isEqualTo(SubSettings.class.getName());
     }
+
+    @Test
+    public void hasWallpaperSet_no_shouldReturnFalse() {
+        ShadowWallpaperManagerWrapper.setWallpaperId(0);
+
+        assertThat(WallpaperSuggestionActivity.isSuggestionComplete(mContext))
+                .isFalse();
+    }
+
+    @Test
+    public void hasWallpaperSet_yes_shouldReturnTrue() {
+        ShadowWallpaperManagerWrapper.setWallpaperId(100);
+
+        assertThat(WallpaperSuggestionActivity.isSuggestionComplete(mContext))
+                .isTrue();
+    }
+
+    @Implements(WallpaperManagerWrapper.class)
+    public static class ShadowWallpaperManagerWrapper {
+
+        private static int sWallpaperId;
+
+        public static void setWallpaperId(int id) {
+            sWallpaperId = id;
+        }
+
+        public static void reset() {
+            sWallpaperId = 0;
+        }
+
+        @Implementation
+        public int getWallpaperId(int which) {
+            return sWallpaperId;
+        }
+    }
 }