diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 485a23365f5..1b995663943 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -3149,7 +3149,7 @@
@@ -3160,7 +3160,7 @@
+ android:value="4,8,30" />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/com/android/settings/Settings.java b/src/com/android/settings/Settings.java
index 6b8570cd4eb..c059ff19c8f 100644
--- a/src/com/android/settings/Settings.java
+++ b/src/com/android/settings/Settings.java
@@ -147,6 +147,13 @@ public class Settings extends SettingsActivity {
}
public static class ScreenLockSuggestionActivity extends ChooseLockGeneric { /* empty */ }
public static class CameraLiftTriggerSuggestionActivity extends SettingsActivity { /* empty */ }
+ public static class DoubleTapPowerSuggestionActivity extends SettingsActivity { /* empty */ }
+ public static class DoubleTwistSuggestionActivity extends SettingsActivity { /* empty */ }
+ public static class AmbientDisplaySuggestionActivity extends SettingsActivity { /* empty */ }
+ public static class AmbientDisplayPickupSuggestionActivity extends SettingsActivity {
+ /* empty */ }
+ public static class SwipeToNotificationSuggestionActivity extends SettingsActivity {
+ /* empty */ }
public static class WallpaperSettingsActivity extends SettingsActivity { /* empty */ }
public static class ManagedProfileSettingsActivity extends SettingsActivity { /* empty */ }
public static class DeletionHelperActivity extends SettingsActivity { /* empty */ }
diff --git a/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImpl.java b/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImpl.java
index 638f85f94f2..d9feae9d0b4 100644
--- a/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImpl.java
+++ b/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImpl.java
@@ -20,11 +20,24 @@ import android.content.ComponentName;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
+import android.os.UserHandle;
+import android.provider.Settings;
import android.support.annotation.NonNull;
import android.util.Log;
+import com.android.internal.hardware.AmbientDisplayConfiguration;
import com.android.internal.logging.nano.MetricsProto;
+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.SwipeToNotificationSuggestionActivity;
import com.android.settings.core.instrumentation.MetricsFeatureProvider;
+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.support.NewDeviceIntroSuggestionActivity;
import com.android.settingslib.drawer.Tile;
@@ -41,6 +54,7 @@ public class SuggestionFeatureProviderImpl implements SuggestionFeatureProvider
private final SuggestionRanker mSuggestionRanker;
private final MetricsFeatureProvider mMetricsFeatureProvider;
+ private final AmbientDisplayConfiguration mAmbientDisplayConfig;
@Override
public boolean isSmartSuggestionEnabled(Context context) {
@@ -52,6 +66,21 @@ public class SuggestionFeatureProviderImpl implements SuggestionFeatureProvider
final String className = component.getClassName();
if (className.equals(NewDeviceIntroSuggestionActivity.class.getName())) {
return NewDeviceIntroSuggestionActivity.isSuggestionComplete(context);
+ } else if (className.equals(DoubleTapPowerSuggestionActivity.class.getName())) {
+ return DoubleTapPowerPreferenceController
+ .isSuggestionComplete(context, getSharedPrefs(context));
+ } else if (className.equals(DoubleTwistSuggestionActivity.class.getName())) {
+ return DoubleTwistPreferenceController
+ .isSuggestionComplete(context, getSharedPrefs(context));
+ } else if (className.equals(AmbientDisplaySuggestionActivity.class.getName())) {
+ return DoubleTapScreenPreferenceController
+ .isSuggestionComplete(context, getSharedPrefs(context));
+ } else if (className.equals(AmbientDisplayPickupSuggestionActivity.class.getName())) {
+ return PickupGesturePreferenceController
+ .isSuggestionComplete(context, getSharedPrefs(context));
+ } else if (className.equals(SwipeToNotificationSuggestionActivity.class.getName())) {
+ return SwipeToNotificationPreferenceController
+ .isSuggestionComplete(context, getSharedPrefs(context));
}
return false;
}
@@ -67,6 +96,7 @@ public class SuggestionFeatureProviderImpl implements SuggestionFeatureProvider
new SuggestionFeaturizer(new EventStore(appContext)));
mMetricsFeatureProvider = FeatureFactory.getFactory(appContext)
.getMetricsFeatureProvider();
+ mAmbientDisplayConfig = new AmbientDisplayConfiguration(appContext);
}
@Override
diff --git a/src/com/android/settings/dashboard/suggestions/SuggestionsChecks.java b/src/com/android/settings/dashboard/suggestions/SuggestionsChecks.java
index fa0da305ac8..ae8c0a68daf 100644
--- a/src/com/android/settings/dashboard/suggestions/SuggestionsChecks.java
+++ b/src/com/android/settings/dashboard/suggestions/SuggestionsChecks.java
@@ -130,7 +130,8 @@ public class SuggestionsChecks {
private boolean isCameraLiftTriggerEnabled() {
final int triggerEnabled = Settings.Secure.getInt(mContext.getContentResolver(),
- Settings.Secure.CAMERA_LIFT_TRIGGER_ENABLED, 0);
+ Settings.Secure.CAMERA_LIFT_TRIGGER_ENABLED,
+ Settings.Secure.CAMERA_LIFT_TRIGGER_ENABLED_DEFAULT);
return triggerEnabled == 1;
}
}
diff --git a/src/com/android/settings/gestures/DoubleTapPowerPreferenceController.java b/src/com/android/settings/gestures/DoubleTapPowerPreferenceController.java
index d36ecc47223..0cfa0077b0c 100644
--- a/src/com/android/settings/gestures/DoubleTapPowerPreferenceController.java
+++ b/src/com/android/settings/gestures/DoubleTapPowerPreferenceController.java
@@ -17,9 +17,11 @@
package com.android.settings.gestures;
import android.content.Context;
+import android.content.SharedPreferences;
import android.provider.Settings;
import android.support.v7.preference.Preference;
+import com.android.settings.overlay.FeatureFactory;
import com.android.settingslib.core.lifecycle.Lifecycle;
public class DoubleTapPowerPreferenceController extends GesturePreferenceController {
@@ -32,10 +34,19 @@ public class DoubleTapPowerPreferenceController extends GesturePreferenceControl
mDoubleTapPowerKey = key;
}
+ public static boolean isSuggestionComplete(Context context, SharedPreferences prefs) {
+ return !isGestureAvailable(context)
+ || prefs.getBoolean(DoubleTapPowerSettings.PREF_KEY_SUGGESTION_COMPLETE, false);
+ }
+
+ private static boolean isGestureAvailable(Context context) {
+ return context.getResources()
+ .getBoolean(com.android.internal.R.bool.config_cameraDoubleTapPowerGestureEnabled);
+ }
+
@Override
public boolean isAvailable() {
- return mContext.getResources().getBoolean(
- com.android.internal.R.bool.config_cameraDoubleTapPowerGestureEnabled);
+ return isGestureAvailable(mContext);
}
@Override
diff --git a/src/com/android/settings/gestures/DoubleTapPowerSettings.java b/src/com/android/settings/gestures/DoubleTapPowerSettings.java
index d38292d80b0..4efe3be52f6 100644
--- a/src/com/android/settings/gestures/DoubleTapPowerSettings.java
+++ b/src/com/android/settings/gestures/DoubleTapPowerSettings.java
@@ -17,12 +17,15 @@
package com.android.settings.gestures;
import android.content.Context;
+import android.content.SharedPreferences;
import android.provider.SearchIndexableResource;
import com.android.internal.logging.nano.MetricsProto;
import com.android.settings.R;
import com.android.settings.core.PreferenceController;
import com.android.settings.dashboard.DashboardFragment;
+import com.android.settings.dashboard.suggestions.SuggestionFeatureProvider;
+import com.android.settings.overlay.FeatureFactory;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settingslib.core.lifecycle.Lifecycle;
@@ -35,6 +38,18 @@ public class DoubleTapPowerSettings extends DashboardFragment {
private static final String TAG = "DoubleTapPower";
private static final String KEY_DOUBLE_TAP_POWER = "gesture_double_tap_power";
+ public static final String PREF_KEY_SUGGESTION_COMPLETE =
+ "pref_double_tap_power_suggestion_complete";
+
+ @Override
+ public void onAttach(Context context) {
+ super.onAttach(context);
+ SuggestionFeatureProvider suggestionFeatureProvider = FeatureFactory.getFactory(context)
+ .getSuggestionFeatureProvider(context);
+ SharedPreferences prefs = suggestionFeatureProvider.getSharedPrefs(context);
+ prefs.edit().putBoolean(PREF_KEY_SUGGESTION_COMPLETE, true).apply();
+ }
+
@Override
public int getMetricsCategory() {
return MetricsProto.MetricsEvent.SETTINGS_GESTURE_DOUBLE_TAP_POWER;
diff --git a/src/com/android/settings/gestures/DoubleTapScreenPreferenceController.java b/src/com/android/settings/gestures/DoubleTapScreenPreferenceController.java
index a38e4b67209..e671f60912d 100644
--- a/src/com/android/settings/gestures/DoubleTapScreenPreferenceController.java
+++ b/src/com/android/settings/gestures/DoubleTapScreenPreferenceController.java
@@ -18,10 +18,12 @@ package com.android.settings.gestures;
import android.annotation.UserIdInt;
import android.content.Context;
+import android.content.SharedPreferences;
import android.provider.Settings;
import android.support.v7.preference.Preference;
import com.android.internal.hardware.AmbientDisplayConfiguration;
+import com.android.settings.overlay.FeatureFactory;
import com.android.settingslib.core.lifecycle.Lifecycle;
public class DoubleTapScreenPreferenceController extends GesturePreferenceController {
@@ -41,6 +43,12 @@ public class DoubleTapScreenPreferenceController extends GesturePreferenceContro
mDoubleTapScreenPrefKey = key;
}
+ public static boolean isSuggestionComplete(Context context, SharedPreferences prefs) {
+ AmbientDisplayConfiguration ambientConfig = new AmbientDisplayConfiguration(context);
+ return !ambientConfig.pulseOnDoubleTapAvailable()
+ || prefs.getBoolean(DoubleTapScreenSettings.PREF_KEY_SUGGESTION_COMPLETE, false);
+ }
+
@Override
public boolean isAvailable() {
return mAmbientConfig.pulseOnDoubleTapAvailable();
diff --git a/src/com/android/settings/gestures/DoubleTapScreenSettings.java b/src/com/android/settings/gestures/DoubleTapScreenSettings.java
index 4690eadaec7..0cc0365d9f4 100644
--- a/src/com/android/settings/gestures/DoubleTapScreenSettings.java
+++ b/src/com/android/settings/gestures/DoubleTapScreenSettings.java
@@ -17,6 +17,7 @@
package com.android.settings.gestures;
import android.content.Context;
+import android.content.SharedPreferences;
import android.os.UserHandle;
import android.provider.SearchIndexableResource;
@@ -25,6 +26,8 @@ import com.android.internal.logging.nano.MetricsProto;
import com.android.settings.R;
import com.android.settings.core.PreferenceController;
import com.android.settings.dashboard.DashboardFragment;
+import com.android.settings.dashboard.suggestions.SuggestionFeatureProvider;
+import com.android.settings.overlay.FeatureFactory;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settingslib.core.lifecycle.Lifecycle;
@@ -37,6 +40,18 @@ public class DoubleTapScreenSettings extends DashboardFragment {
private static final String TAG = "DoubleTapScreen";
private static final String KEY_DOUBLE_TAP_SCREEN = "gesture_double_tap_screen";
+ public static final String PREF_KEY_SUGGESTION_COMPLETE =
+ "pref_double_tap_screen_suggestion_complete";
+
+ @Override
+ public void onAttach(Context context) {
+ super.onAttach(context);
+ SuggestionFeatureProvider suggestionFeatureProvider = FeatureFactory.getFactory(context)
+ .getSuggestionFeatureProvider(context);
+ SharedPreferences prefs = suggestionFeatureProvider.getSharedPrefs(context);
+ prefs.edit().putBoolean(PREF_KEY_SUGGESTION_COMPLETE, true).apply();
+ }
+
@Override
public int getMetricsCategory() {
return MetricsProto.MetricsEvent.SETTINGS_GESTURE_DOUBLE_TAP_SCREEN;
diff --git a/src/com/android/settings/gestures/DoubleTwistGestureSettings.java b/src/com/android/settings/gestures/DoubleTwistGestureSettings.java
index 2b46cce564b..e5fb9a0fc83 100644
--- a/src/com/android/settings/gestures/DoubleTwistGestureSettings.java
+++ b/src/com/android/settings/gestures/DoubleTwistGestureSettings.java
@@ -17,12 +17,15 @@
package com.android.settings.gestures;
import android.content.Context;
+import android.content.SharedPreferences;
import android.provider.SearchIndexableResource;
import com.android.internal.logging.nano.MetricsProto;
import com.android.settings.R;
import com.android.settings.core.PreferenceController;
import com.android.settings.dashboard.DashboardFragment;
+import com.android.settings.dashboard.suggestions.SuggestionFeatureProvider;
+import com.android.settings.overlay.FeatureFactory;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settingslib.core.lifecycle.Lifecycle;
@@ -35,6 +38,18 @@ public class DoubleTwistGestureSettings extends DashboardFragment {
private static final String TAG = "DoubleTwistGesture";
private static final String KEY_DOUBLE_TWIST = "gesture_double_twist";
+ public static final String PREF_KEY_SUGGESTION_COMPLETE =
+ "pref_double_twist_suggestion_complete";
+
+ @Override
+ public void onAttach(Context context) {
+ super.onAttach(context);
+ SuggestionFeatureProvider suggestionFeatureProvider = FeatureFactory.getFactory(context)
+ .getSuggestionFeatureProvider(context);
+ SharedPreferences prefs = suggestionFeatureProvider.getSharedPrefs(context);
+ prefs.edit().putBoolean(PREF_KEY_SUGGESTION_COMPLETE, true).apply();
+ }
+
@Override
public int getMetricsCategory() {
return MetricsProto.MetricsEvent.SETTINGS_GESTURE_DOUBLE_TWIST;
diff --git a/src/com/android/settings/gestures/DoubleTwistPreferenceController.java b/src/com/android/settings/gestures/DoubleTwistPreferenceController.java
index baf2d317f4a..c07a37b7e1b 100644
--- a/src/com/android/settings/gestures/DoubleTwistPreferenceController.java
+++ b/src/com/android/settings/gestures/DoubleTwistPreferenceController.java
@@ -17,6 +17,7 @@
package com.android.settings.gestures;
import android.content.Context;
+import android.content.SharedPreferences;
import android.content.res.Resources;
import android.hardware.Sensor;
import android.hardware.SensorManager;
@@ -29,6 +30,7 @@ import android.text.TextUtils;
import com.android.settings.R;
import com.android.settings.Utils;
+import com.android.settings.overlay.FeatureFactory;
import com.android.settingslib.core.lifecycle.Lifecycle;
public class DoubleTwistPreferenceController extends GesturePreferenceController {
@@ -43,10 +45,30 @@ public class DoubleTwistPreferenceController extends GesturePreferenceController
mUserManager = (UserManager) context.getSystemService(Context.USER_SERVICE);
}
+ public static boolean isSuggestionComplete(Context context, SharedPreferences prefs) {
+ return !isGestureAvailable(context)
+ || prefs.getBoolean(DoubleTwistGestureSettings.PREF_KEY_SUGGESTION_COMPLETE, false);
+ }
+
+ private static boolean isGestureAvailable(Context context) {
+ final Resources resources = context.getResources();
+ final String name = resources.getString(R.string.gesture_double_twist_sensor_name);
+ final String vendor = resources.getString(R.string.gesture_double_twist_sensor_vendor);
+ if (!TextUtils.isEmpty(name) && !TextUtils.isEmpty(vendor)) {
+ final SensorManager sensorManager =
+ (SensorManager) context.getSystemService(Context.SENSOR_SERVICE);
+ for (Sensor s : sensorManager.getSensorList(Sensor.TYPE_ALL)) {
+ if (name.equals(s.getName()) && vendor.equals(s.getVendor())) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
@Override
public boolean isAvailable() {
- return hasSensor(R.string.gesture_double_twist_sensor_name,
- R.string.gesture_double_twist_sensor_vendor);
+ return isGestureAvailable(mContext);
}
@Override
@@ -83,20 +105,4 @@ public class DoubleTwistPreferenceController extends GesturePreferenceController
int getManagedProfileUserId() {
return Utils.getManagedProfileId(mUserManager, UserHandle.myUserId());
}
-
- private boolean hasSensor(int nameResId, int vendorResId) {
- final Resources resources = mContext.getResources();
- final String name = resources.getString(nameResId);
- final String vendor = resources.getString(vendorResId);
- if (!TextUtils.isEmpty(name) && !TextUtils.isEmpty(vendor)) {
- final SensorManager sensorManager =
- (SensorManager) mContext.getSystemService(Context.SENSOR_SERVICE);
- for (Sensor s : sensorManager.getSensorList(Sensor.TYPE_ALL)) {
- if (name.equals(s.getName()) && vendor.equals(s.getVendor())) {
- return true;
- }
- }
- }
- return false;
- }
}
diff --git a/src/com/android/settings/gestures/PickupGesturePreferenceController.java b/src/com/android/settings/gestures/PickupGesturePreferenceController.java
index a6ce1a159f0..6308b37b64c 100644
--- a/src/com/android/settings/gestures/PickupGesturePreferenceController.java
+++ b/src/com/android/settings/gestures/PickupGesturePreferenceController.java
@@ -18,10 +18,12 @@ package com.android.settings.gestures;
import android.annotation.UserIdInt;
import android.content.Context;
+import android.content.SharedPreferences;
import android.provider.Settings;
import android.support.v7.preference.Preference;
import com.android.internal.hardware.AmbientDisplayConfiguration;
+import com.android.settings.overlay.FeatureFactory;
import com.android.settingslib.core.lifecycle.Lifecycle;
public class PickupGesturePreferenceController extends GesturePreferenceController {
@@ -41,6 +43,12 @@ public class PickupGesturePreferenceController extends GesturePreferenceControll
mPickUpPrefKey = key;
}
+ public static boolean isSuggestionComplete(Context context, SharedPreferences prefs) {
+ AmbientDisplayConfiguration ambientConfig = new AmbientDisplayConfiguration(context);
+ return !ambientConfig.pulseOnPickupAvailable()
+ || prefs.getBoolean(PickupGestureSettings.PREF_KEY_SUGGESTION_COMPLETE, false);
+ }
+
@Override
public boolean isAvailable() {
return mAmbientConfig.pulseOnPickupAvailable();
diff --git a/src/com/android/settings/gestures/PickupGestureSettings.java b/src/com/android/settings/gestures/PickupGestureSettings.java
index 17d930f5a4f..7cc264c181d 100644
--- a/src/com/android/settings/gestures/PickupGestureSettings.java
+++ b/src/com/android/settings/gestures/PickupGestureSettings.java
@@ -17,6 +17,7 @@
package com.android.settings.gestures;
import android.content.Context;
+import android.content.SharedPreferences;
import android.os.UserHandle;
import android.provider.SearchIndexableResource;
@@ -25,6 +26,8 @@ import com.android.internal.logging.nano.MetricsProto;
import com.android.settings.R;
import com.android.settings.core.PreferenceController;
import com.android.settings.dashboard.DashboardFragment;
+import com.android.settings.dashboard.suggestions.SuggestionFeatureProvider;
+import com.android.settings.overlay.FeatureFactory;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settingslib.core.lifecycle.Lifecycle;
@@ -37,6 +40,18 @@ public class PickupGestureSettings extends DashboardFragment {
private static final String TAG = "PickupGestureSettings";
private static final String KEY_PICK_UP = "gesture_pick_up";
+ public static final String PREF_KEY_SUGGESTION_COMPLETE =
+ "pref_pickup_gesture_suggestion_complete";
+
+ @Override
+ public void onAttach(Context context) {
+ super.onAttach(context);
+ SuggestionFeatureProvider suggestionFeatureProvider = FeatureFactory.getFactory(context)
+ .getSuggestionFeatureProvider(context);
+ SharedPreferences prefs = suggestionFeatureProvider.getSharedPrefs(context);
+ prefs.edit().putBoolean(PREF_KEY_SUGGESTION_COMPLETE, true).apply();
+ }
+
@Override
public int getMetricsCategory() {
return MetricsProto.MetricsEvent.SETTINGS_GESTURE_PICKUP;
diff --git a/src/com/android/settings/gestures/SwipeToNotificationPreferenceController.java b/src/com/android/settings/gestures/SwipeToNotificationPreferenceController.java
index b760c2520a3..d71c0765611 100644
--- a/src/com/android/settings/gestures/SwipeToNotificationPreferenceController.java
+++ b/src/com/android/settings/gestures/SwipeToNotificationPreferenceController.java
@@ -17,9 +17,11 @@
package com.android.settings.gestures;
import android.content.Context;
+import android.content.SharedPreferences;
import android.provider.Settings;
import android.support.v7.preference.Preference;
+import com.android.settings.overlay.FeatureFactory;
import com.android.settingslib.core.lifecycle.Lifecycle;
public class SwipeToNotificationPreferenceController extends GesturePreferenceController {
@@ -33,6 +35,17 @@ public class SwipeToNotificationPreferenceController extends GesturePreferenceCo
mSwipeDownFingerPrefKey = key;
}
+ public static boolean isSuggestionComplete(Context context, SharedPreferences prefs) {
+ return !isGestureAvailable(context)
+ || prefs.getBoolean(SwipeToNotificationSettings.PREF_KEY_SUGGESTION_COMPLETE,
+ false);
+ }
+
+ private static boolean isGestureAvailable(Context context) {
+ return context.getResources()
+ .getBoolean(com.android.internal.R.bool.config_supportSystemNavigationKeys);
+ }
+
@Override
public String getPreferenceKey() {
return mSwipeDownFingerPrefKey;
@@ -45,8 +58,7 @@ public class SwipeToNotificationPreferenceController extends GesturePreferenceCo
@Override
public boolean isAvailable() {
- return mContext.getResources().getBoolean(
- com.android.internal.R.bool.config_supportSystemNavigationKeys);
+ return isGestureAvailable(mContext);
}
@Override
diff --git a/src/com/android/settings/gestures/SwipeToNotificationSettings.java b/src/com/android/settings/gestures/SwipeToNotificationSettings.java
index 00d4700ae86..05a1202a05d 100644
--- a/src/com/android/settings/gestures/SwipeToNotificationSettings.java
+++ b/src/com/android/settings/gestures/SwipeToNotificationSettings.java
@@ -17,12 +17,15 @@
package com.android.settings.gestures;
import android.content.Context;
+import android.content.SharedPreferences;
import android.provider.SearchIndexableResource;
import com.android.internal.logging.nano.MetricsProto;
import com.android.settings.R;
import com.android.settings.core.PreferenceController;
import com.android.settings.dashboard.DashboardFragment;
+import com.android.settings.dashboard.suggestions.SuggestionFeatureProvider;
+import com.android.settings.overlay.FeatureFactory;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settingslib.core.lifecycle.Lifecycle;
@@ -36,6 +39,18 @@ public class SwipeToNotificationSettings extends DashboardFragment {
private static final String KEY = "gesture_swipe_down_fingerprint";
+ public static final String PREF_KEY_SUGGESTION_COMPLETE =
+ "pref_swipe_to_notification_suggestion_complete";
+
+ @Override
+ public void onAttach(Context context) {
+ super.onAttach(context);
+ SuggestionFeatureProvider suggestionFeatureProvider = FeatureFactory.getFactory(context)
+ .getSuggestionFeatureProvider(context);
+ SharedPreferences prefs = suggestionFeatureProvider.getSharedPrefs(context);
+ prefs.edit().putBoolean(PREF_KEY_SUGGESTION_COMPLETE, true).apply();
+ }
+
@Override
public int getMetricsCategory() {
return MetricsProto.MetricsEvent.SETTINGS_GESTURE_SWIPE_TO_NOTIFICATION;
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 d5d87b1b34f..78c1d1ad36e 100644
--- a/tests/robotests/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImplTest.java
+++ b/tests/robotests/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImplTest.java
@@ -16,29 +16,6 @@
package com.android.settings.dashboard.suggestions;
-import android.content.Context;
-import android.content.Intent;
-import android.content.pm.PackageManager;
-
-import com.android.internal.logging.nano.MetricsProto;
-import com.android.settings.testutils.SettingsRobolectricTestRunner;
-import com.android.settings.TestConfig;
-import com.android.settings.testutils.FakeFeatureFactory;
-import com.android.settingslib.drawer.Tile;
-import com.android.settingslib.suggestions.SuggestionParser;
-
-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 java.util.ArrayList;
-import java.util.List;
-
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyBoolean;
@@ -49,10 +26,46 @@ import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyZeroInteractions;
import static org.mockito.Mockito.when;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import com.android.internal.logging.nano.MetricsProto;
+import com.android.settings.R;
+import com.android.settings.Settings.AmbientDisplaySuggestionActivity;
+import com.android.settings.Settings.AmbientDisplayPickupSuggestionActivity;
+import com.android.settings.Settings.DoubleTapPowerSuggestionActivity;
+import com.android.settings.Settings.DoubleTwistSuggestionActivity;
+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;
+import com.android.settingslib.drawer.Tile;
+import com.android.settingslib.suggestions.SuggestionParser;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+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;
+
@RunWith(SettingsRobolectricTestRunner.class)
@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
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
@@ -75,6 +88,149 @@ public class SuggestionFeatureProviderImplTest {
mProvider = new SuggestionFeatureProviderImpl(mContext);
}
+ @Test
+ @Config(shadows = SettingsShadowResources.class)
+ 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
+ @Config(shadows = SettingsShadowResources.class)
+ 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
+ @Config(shadows = SettingsShadowResources.class)
+ 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
+ @Config(shadows = SettingsShadowResources.class)
+ 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
+ @Config(shadows = SettingsShadowResources.class)
+ 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
+ @Config(shadows = SettingsShadowResources.class)
+ 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
+ @Config(shadows = SettingsShadowResources.class)
+ 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
+ @Config(shadows = SettingsShadowResources.class)
+ 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
+ @Config(shadows = SettingsShadowResources.class)
+ public void isSuggestionCompleted_swipeToNotification_trueWhenNotAvailable() {
+ SettingsShadowResources.overrideResource(
+ com.android.internal.R.bool.config_supportSystemNavigationKeys, false);
+
+ assertThat(mProvider.isSuggestionCompleted(RuntimeEnvironment.application,
+ new ComponentName(RuntimeEnvironment.application,
+ SwipeToNotificationSuggestionActivity.class))).isTrue();
+ }
+
+ @Test
+ @Config(shadows = SettingsShadowResources.class)
+ public void isSuggestionCompleted_swipeToNotification_falseWhenNotVisited() {
+ SettingsShadowResources.overrideResource(
+ com.android.internal.R.bool.config_supportSystemNavigationKeys, true);
+ // No stored value in shared preferences if not visited yet.
+
+ assertThat(mProvider.isSuggestionCompleted(RuntimeEnvironment.application,
+ new ComponentName(RuntimeEnvironment.application,
+ SwipeToNotificationSuggestionActivity.class))).isFalse();
+ }
+
+ @Test
+ @Config(shadows = SettingsShadowResources.class)
+ public void isSuggestionCompleted_swipeToNotification_trueWhenVisited() {
+ SettingsShadowResources.overrideResource(
+ com.android.internal.R.bool.config_supportSystemNavigationKeys, true);
+ mProvider.getSharedPrefs(RuntimeEnvironment.application).edit().putBoolean(
+ SwipeToNotificationSettings.PREF_KEY_SUGGESTION_COMPLETE, true).commit();
+
+ assertThat(mProvider.isSuggestionCompleted(RuntimeEnvironment.application,
+ new ComponentName(RuntimeEnvironment.application,
+ SwipeToNotificationSuggestionActivity.class))).isTrue();
+ }
+
@Test
public void dismissSuggestion_noParserOrSuggestion_noop() {
mProvider.dismissSuggestion(mContext, null, null);