diff --git a/src/com/android/settings/gestures/DoubleTapScreenPreferenceController.java b/src/com/android/settings/gestures/DoubleTapScreenPreferenceController.java
index deffa97..5412f36 100644
--- a/src/com/android/settings/gestures/DoubleTapScreenPreferenceController.java
+++ b/src/com/android/settings/gestures/DoubleTapScreenPreferenceController.java
@@ -22,6 +22,7 @@
 import android.content.SharedPreferences;
 import android.provider.Settings;
 import android.support.v7.preference.Preference;
+import android.support.annotation.VisibleForTesting;
 
 import com.android.internal.hardware.AmbientDisplayConfiguration;
 import com.android.settings.R;
@@ -55,8 +56,13 @@
     }
 
     public static boolean isSuggestionComplete(Context context, SharedPreferences prefs) {
-        AmbientDisplayConfiguration ambientConfig = new AmbientDisplayConfiguration(context);
-        return !ambientConfig.pulseOnDoubleTapAvailable()
+        return isSuggestionComplete(new AmbientDisplayConfiguration(context), prefs);
+    }
+
+    @VisibleForTesting
+    static boolean isSuggestionComplete(AmbientDisplayConfiguration config,
+            SharedPreferences prefs) {
+        return !config.pulseOnDoubleTapAvailable()
                 || prefs.getBoolean(DoubleTapScreenSettings.PREF_KEY_SUGGESTION_COMPLETE, false);
     }
 
diff --git a/tests/robotests/src/com/android/settings/gestures/DoubleTapScreenPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/gestures/DoubleTapScreenPreferenceControllerTest.java
index 2565dc8..72a77b0 100644
--- a/tests/robotests/src/com/android/settings/gestures/DoubleTapScreenPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/gestures/DoubleTapScreenPreferenceControllerTest.java
@@ -17,6 +17,7 @@
 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;
 
@@ -46,9 +47,7 @@
 import org.robolectric.annotation.Config;
 
 @RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION, shadows = {
-        SettingsShadowResources.class
-})
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O)
 public class DoubleTapScreenPreferenceControllerTest {
 
     @Mock(answer = Answers.RETURNS_DEEP_STUBS)
@@ -139,25 +138,19 @@
 
     @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");
+        when(mAmbientDisplayConfiguration.pulseOnDoubleTapAvailable()).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(DoubleTapScreenPreferenceController.isSuggestionComplete(context, prefs))
-                .isFalse();
+        assertThat(DoubleTapScreenPreferenceController.isSuggestionComplete(
+                mAmbientDisplayConfiguration, 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");
+        when(mAmbientDisplayConfiguration.pulseOnDoubleTapAvailable()).thenReturn(false);
         final Context context = RuntimeEnvironment.application;
         final SharedPreferences prefs = new SuggestionFeatureProviderImpl(context)
                 .getSharedPrefs(context);
@@ -165,7 +158,7 @@
         prefs.edit().putBoolean(
                 DoubleTapScreenSettings.PREF_KEY_SUGGESTION_COMPLETE, true).commit();
 
-        assertThat(DoubleTapScreenPreferenceController.isSuggestionComplete(context, prefs))
-                .isTrue();
+        assertThat(DoubleTapScreenPreferenceController.isSuggestionComplete(
+                mAmbientDisplayConfiguration, prefs)).isTrue();
     }
 }
