diff --git a/res/raw/gesture_ambient_tap.mp4 b/res/raw/gesture_ambient_tap.mp4
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 10d35e03a30..3cbcc566d5b 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -2215,7 +2215,7 @@
Ambient display
- Wake screen when you receive notifications
+ Wake screen when you double-tap it or get new notifications. See how
Font size
diff --git a/res/xml/display_settings.xml b/res/xml/display_settings.xml
index b5e2848e5b8..e797b4f7d13 100644
--- a/res/xml/display_settings.xml
+++ b/res/xml/display_settings.xml
@@ -79,10 +79,19 @@
android:key="lift_to_wake"
android:title="@string/lift_to_wake_title" />
-
+ android:title="@string/ambient_display_title"
+ android:summary="@string/doze_summary" >
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/com/android/settings/DisplaySettings.java b/src/com/android/settings/DisplaySettings.java
index f7b94433c25..87634fc1a56 100644
--- a/src/com/android/settings/DisplaySettings.java
+++ b/src/com/android/settings/DisplaySettings.java
@@ -41,6 +41,7 @@ import android.support.v7.preference.DropDownPreference;
import android.support.v7.preference.ListPreference;
import android.support.v7.preference.Preference;
import android.support.v7.preference.Preference.OnPreferenceChangeListener;
+import android.support.v7.preference.PreferenceScreen;
import android.text.TextUtils;
import android.util.Log;
@@ -96,10 +97,10 @@ public class DisplaySettings extends SettingsPreferenceFragment implements
private ListPreference mNightModePreference;
private Preference mScreenSaverPreference;
private SwitchPreference mLiftToWakePreference;
- private SwitchPreference mDozePreference;
private SwitchPreference mTapToWakePreference;
private SwitchPreference mAutoBrightnessPreference;
private SwitchPreference mCameraGesturePreference;
+ private PreferenceScreen mDozePreference;
@Override
protected int getMetricsCategory() {
@@ -143,11 +144,10 @@ public class DisplaySettings extends SettingsPreferenceFragment implements
removePreference(KEY_LIFT_TO_WAKE);
}
- if (isDozeAvailable(activity)) {
- mDozePreference = (SwitchPreference) findPreference(KEY_DOZE);
- mDozePreference.setOnPreferenceChangeListener(this);
- } else {
+ if (!isDozeAvailable(activity)) {
removePreference(KEY_DOZE);
+ } else {
+ mDozePreference = (PreferenceScreen) findPreference(KEY_DOZE);
}
if (isTapToWakeAvailable(getResources())) {
@@ -360,12 +360,6 @@ public class DisplaySettings extends SettingsPreferenceFragment implements
mTapToWakePreference.setChecked(value != 0);
}
- // Update doze if it is available.
- if (mDozePreference != null) {
- int value = Settings.Secure.getInt(getContentResolver(), DOZE_ENABLED, 1);
- mDozePreference.setChecked(value != 0);
- }
-
// Update camera gesture #1 if it is available.
if (mCameraGesturePreference != null) {
int value = Settings.Secure.getInt(getContentResolver(), CAMERA_GESTURE_DISABLED, 0);
@@ -413,10 +407,6 @@ public class DisplaySettings extends SettingsPreferenceFragment implements
boolean value = (Boolean) objValue;
Settings.Secure.putInt(getContentResolver(), WAKE_GESTURE_ENABLED, value ? 1 : 0);
}
- if (preference == mDozePreference) {
- boolean value = (Boolean) objValue;
- Settings.Secure.putInt(getContentResolver(), DOZE_ENABLED, value ? 1 : 0);
- }
if (preference == mTapToWakePreference) {
boolean value = (Boolean) objValue;
Settings.Secure.putInt(getContentResolver(), DOUBLE_TAP_TO_WAKE, value ? 1 : 0);
diff --git a/src/com/android/settings/gestures/GestureSettings.java b/src/com/android/settings/gestures/GestureSettings.java
index 9932bd68b91..a44c7812ead 100644
--- a/src/com/android/settings/gestures/GestureSettings.java
+++ b/src/com/android/settings/gestures/GestureSettings.java
@@ -20,7 +20,9 @@ import android.content.Context;
import android.content.res.Resources;
import android.hardware.Sensor;
import android.hardware.SensorManager;
+import android.os.Build;
import android.os.Bundle;
+import android.os.SystemProperties;
import android.provider.SearchIndexableResource;
import android.provider.Settings.Secure;
import android.support.v7.preference.Preference;
@@ -50,11 +52,16 @@ public class GestureSettings extends SettingsPreferenceFragment implements
private static final String TAG = "GestureSettings";
private static final String PREF_KEY_DOUBLE_TAP_POWER = "gesture_double_tap_power";
private static final String PREF_KEY_DOUBLE_TWIST = "gesture_double_twist";
+ private static final String PREF_KEY_PICK_UP_AND_NUDGE = "gesture_pick_up_and_nudge";
private static final String PREF_KEY_SWIPE_DOWN_FINGERPRINT = "gesture_swipe_down_fingerprint";
+ private static final String DEBUG_DOZE_COMPONENT = "debug.doze.component";
+ private static final String ARG_SCROLL_TO_PREFERENCE = "gesture_scroll_to_preference";
private static final int PREF_ID_DOUBLE_TAP_POWER = 0;
private static final int PREF_ID_DOUBLE_TWIST = 1;
- private static final int PREF_ID_SWIPE_DOWN_FINGERPRINT = 2;
+ private static final int PREF_ID_PICK_UP_AND_NUDG = 2;
+ private static final int PREF_ID_SWIPE_DOWN_FINGERPRINT = 3;
+ private int mScrollPosition = -1;
private List mPreferences;
@Override
@@ -73,10 +80,18 @@ public class GestureSettings extends SettingsPreferenceFragment implements
removePreference(PREF_KEY_DOUBLE_TAP_POWER);
}
+ // Ambient Display
+ if (isDozeAvailable(context)) {
+ int dozeEnabled = Secure.getInt(getContentResolver(), Secure.DOZE_ENABLED, 1);
+ addPreference(PREF_KEY_PICK_UP_AND_NUDGE, dozeEnabled != 0, PREF_ID_DOUBLE_TWIST);
+ } else {
+ removePreference(PREF_KEY_PICK_UP_AND_NUDGE);
+ }
+
// Fingerprint slide for notifications
if (isSystemUINavigationAvailable(context)) {
addPreference(PREF_KEY_SWIPE_DOWN_FINGERPRINT, isSystemUINavigationEnabled(context),
- PREF_ID_SWIPE_DOWN_FINGERPRINT);
+ PREF_ID_PICK_UP_AND_NUDG);
} else {
removePreference(PREF_KEY_SWIPE_DOWN_FINGERPRINT);
}
@@ -85,11 +100,23 @@ public class GestureSettings extends SettingsPreferenceFragment implements
if (isDoubleTwistAvailable(context)) {
int doubleTwistEnabled = Secure.getInt(
getContentResolver(), Secure.CAMERA_DOUBLE_TWIST_TO_FLIP_ENABLED, 1);
- addPreference(PREF_KEY_DOUBLE_TWIST, doubleTwistEnabled != 0, PREF_ID_DOUBLE_TWIST);
+ addPreference(PREF_KEY_DOUBLE_TWIST, doubleTwistEnabled != 0,
+ PREF_ID_SWIPE_DOWN_FINGERPRINT);
} else {
removePreference(PREF_KEY_DOUBLE_TWIST);
}
+ if (savedInstanceState == null) {
+ final Bundle args = getArguments();
+ if (args != null && args.containsKey(ARG_SCROLL_TO_PREFERENCE)) {
+ String prefKey = args.getString(ARG_SCROLL_TO_PREFERENCE);
+ GesturePreference pref = (GesturePreference) findPreference(prefKey);
+ if (pref != null) {
+ mScrollPosition = pref.getOrder();
+ }
+ }
+ }
+
}
@Override
@@ -97,6 +124,9 @@ public class GestureSettings extends SettingsPreferenceFragment implements
Bundle savedInstanceState) {
View view = super.onCreateView(inflater, container, savedInstanceState);
RecyclerView listview = getListView();
+ if (mScrollPosition >= 0) {
+ listview.scrollToPosition(mScrollPosition);
+ }
listview.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
@@ -133,6 +163,8 @@ public class GestureSettings extends SettingsPreferenceFragment implements
if (PREF_KEY_DOUBLE_TAP_POWER.equals(key)) {
Secure.putInt(getContentResolver(),
Secure.CAMERA_DOUBLE_TAP_POWER_GESTURE_DISABLED, enabled ? 0 : 1);
+ } else if (PREF_KEY_PICK_UP_AND_NUDGE.equals(key)) {
+ Secure.putInt(getContentResolver(), Secure.DOZE_ENABLED, enabled ? 1 : 0);
} else if (PREF_KEY_SWIPE_DOWN_FINGERPRINT.equals(key)) {
Secure.putInt(getContentResolver(),
Secure.SYSTEM_NAVIGATION_KEYS_ENABLED, enabled ? 1 : 0);
@@ -158,6 +190,15 @@ public class GestureSettings extends SettingsPreferenceFragment implements
com.android.internal.R.bool.config_cameraDoubleTapPowerGestureEnabled);
}
+ private static boolean isDozeAvailable(Context context) {
+ String name = Build.IS_DEBUGGABLE ? SystemProperties.get(DEBUG_DOZE_COMPONENT) : null;
+ if (TextUtils.isEmpty(name)) {
+ name = context.getResources().getString(
+ com.android.internal.R.string.config_dozeComponent);
+ }
+ return !TextUtils.isEmpty(name);
+ }
+
private static boolean isSystemUINavigationAvailable(Context context) {
return context.getResources().getBoolean(
com.android.internal.R.bool.config_supportSystemNavigationKeys);
@@ -213,6 +254,9 @@ public class GestureSettings extends SettingsPreferenceFragment implements
if (!isCameraDoubleTapPowerGestureAvailable(context.getResources())) {
result.add(PREF_KEY_DOUBLE_TAP_POWER);
}
+ if (!isDozeAvailable(context)) {
+ result.add(PREF_KEY_PICK_UP_AND_NUDGE);
+ }
if (!isSystemUINavigationAvailable(context)) {
result.add(PREF_KEY_SWIPE_DOWN_FINGERPRINT);
}