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 4625b589d25..6c9ac6974a9 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -2223,7 +2223,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 d35c11b39a0..67a4b15d57b 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 public 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 4860e0ebc20..9f127b502c7 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); }