Added suggestions for gestures.

Bug: 30986021
Test: manual + make RunSettingsRoboTests + adb shell am instrument -w
com.android.settings.tests.unit /android.support.test.runner.AndroidJUnitRunner

Change-Id: I7aed110c81ca2fb6b90e2f359b4bb941c02bc1c3
This commit is contained in:
Daniel Sheng
2017-06-30 16:01:54 -07:00
parent d5612408af
commit 20d5588a27
16 changed files with 479 additions and 25 deletions

View File

@@ -149,6 +149,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 */ }

View File

@@ -21,15 +21,27 @@ import android.content.ContentResolver;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.os.UserHandle;
import android.provider.Settings.Secure;
import android.support.annotation.NonNull;
import android.support.annotation.VisibleForTesting;
import android.text.format.DateUtils;
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.NightDisplaySuggestionActivity;
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;
@@ -52,6 +64,7 @@ public class SuggestionFeatureProviderImpl implements SuggestionFeatureProvider
private final SuggestionRanker mSuggestionRanker;
private final MetricsFeatureProvider mMetricsFeatureProvider;
private final AmbientDisplayConfiguration mAmbientDisplayConfig;
@Override
public boolean isSmartSuggestionEnabled(Context context) {
@@ -66,6 +79,21 @@ public class SuggestionFeatureProviderImpl implements SuggestionFeatureProvider
}
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;
}
@@ -81,6 +109,7 @@ public class SuggestionFeatureProviderImpl implements SuggestionFeatureProvider
new SuggestionFeaturizer(new EventStore(appContext)));
mMetricsFeatureProvider = FeatureFactory.getFactory(appContext)
.getMetricsFeatureProvider();
mAmbientDisplayConfig = new AmbientDisplayConfiguration(appContext);
}
@Override

View File

@@ -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;
}
}

View File

@@ -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

View File

@@ -17,11 +17,14 @@
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.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.AbstractPreferenceController;
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;

View File

@@ -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();

View File

@@ -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;
@@ -24,6 +25,8 @@ import com.android.internal.hardware.AmbientDisplayConfiguration;
import com.android.internal.logging.nano.MetricsProto;
import com.android.settings.R;
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.AbstractPreferenceController;
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;

View File

@@ -17,11 +17,14 @@
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.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.AbstractPreferenceController;
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;

View File

@@ -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;
}
}

View File

@@ -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();

View File

@@ -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;
@@ -24,6 +25,8 @@ import com.android.internal.hardware.AmbientDisplayConfiguration;
import com.android.internal.logging.nano.MetricsProto;
import com.android.settings.R;
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.AbstractPreferenceController;
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;

View File

@@ -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

View File

@@ -17,11 +17,14 @@
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.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.AbstractPreferenceController;
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;