diff options
7 files changed, 67 insertions, 2 deletions
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java index dc70d7b..d3a5561 100644 --- a/core/java/android/provider/Settings.java +++ b/core/java/android/provider/Settings.java @@ -5517,6 +5517,12 @@ public final class Settings { public static final String APP_IDLE_DURATION = "app_idle_duration"; /** + * Controls whether double tap to wake is enabled. + * @hide + */ + public static final String DOUBLE_TAP_TO_WAKE = "double_tap_to_wake"; + + /** * This are the settings to be backed up. * * NOTE: Settings are backed up and restored in the order they appear @@ -5571,7 +5577,8 @@ public final class Settings { MOUNT_UMS_PROMPT, MOUNT_UMS_NOTIFY_ENABLED, UI_NIGHT_MODE, - SLEEP_TIMEOUT + SLEEP_TIMEOUT, + DOUBLE_TAP_TO_WAKE, }; /** diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml index 7270b2c..690fd28 100755 --- a/core/res/res/values/config.xml +++ b/core/res/res/values/config.xml @@ -2141,4 +2141,7 @@ <!-- This config is ued to determine whether animations are allowed in low power mode. --> <bool name="config_allowAnimationsInLowPowerMode">false</bool> + + <!-- Whether device supports double tap to wake --> + <bool name="config_supportDoubleTapWake">false</bool> </resources> diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index e54a0b2..8f949e1 100755 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -2261,4 +2261,5 @@ <java-symbol type="layout" name="chooser_row" /> <java-symbol type="color" name="chooser_service_row_background_color" /> <java-symbol type="id" name="target_badge" /> + <java-symbol type="bool" name="config_supportDoubleTapWake" /> </resources> diff --git a/packages/SettingsProvider/res/values/defaults.xml b/packages/SettingsProvider/res/values/defaults.xml index 16c6075..3f0d71c 100644 --- a/packages/SettingsProvider/res/values/defaults.xml +++ b/packages/SettingsProvider/res/values/defaults.xml @@ -207,4 +207,7 @@ <!-- Default for Settings.Global.GUEST_USER_ENABLED --> <bool name="def_guest_user_enabled">true</bool> + <!-- Default state of tap to wake --> + <bool name="def_double_tap_to_wake">true</bool> + </resources> diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java index 5f5d61e..ad710a6 100644 --- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java +++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java @@ -1791,7 +1791,7 @@ public class SettingsProvider extends ContentProvider { } private final class UpgradeController { - private static final int SETTINGS_VERSION = 119; + private static final int SETTINGS_VERSION = 120; private final int mUserId; @@ -1908,6 +1908,17 @@ public class SettingsProvider extends ContentProvider { currentVersion = 119; } + // v120: Add double tap to wake setting. + if (currentVersion == 119) { + SettingsState secureSettings = getSecureSettingsLocked(userId); + secureSettings.insertSettingLocked(Settings.Secure.DOUBLE_TAP_TO_WAKE, + getContext().getResources().getBoolean( + R.bool.def_double_tap_to_wake) ? "1" : "0", + SettingsState.SYSTEM_PACKAGE_NAME); + + currentVersion = 120; + } + // vXXX: Add new settings above this point. // Return the current version. diff --git a/services/core/java/com/android/server/power/PowerManagerService.java b/services/core/java/com/android/server/power/PowerManagerService.java index decca16..74df0a0 100644 --- a/services/core/java/com/android/server/power/PowerManagerService.java +++ b/services/core/java/com/android/server/power/PowerManagerService.java @@ -150,6 +150,12 @@ public final class PowerManagerService extends SystemService private static final int POWER_HINT_INTERACTION = 2; private static final int POWER_HINT_LOW_POWER = 5; + // Power features defined in hardware/libhardware/include/hardware/power.h. + private static final int POWER_FEATURE_DOUBLE_TAP_TO_WAKE = 1; + + // Default setting for double tap to wake. + private static final int DEFAULT_DOUBLE_TAP_TO_WAKE = 0; + private final Context mContext; private final ServiceThread mHandlerThread; private final PowerManagerHandler mHandler; @@ -339,6 +345,9 @@ public final class PowerManagerService extends SystemService // Otherwise the user won't get much screen on time before dimming occurs. private float mMaximumScreenDimRatioConfig; + // Whether device supports double tap to wake. + private boolean mSupportsDoubleTapWakeConfig; + // The screen off timeout setting value in milliseconds. private int mScreenOffTimeoutSetting; @@ -430,6 +439,9 @@ public final class PowerManagerService extends SystemService // True if theater mode is enabled private boolean mTheaterModeEnabled; + // True if double tap to wake is enabled + private boolean mDoubleTapWakeEnabled; + private final ArrayList<PowerManagerInternal.LowPowerModeListener> mLowPowerModeListeners = new ArrayList<PowerManagerInternal.LowPowerModeListener>(); @@ -440,6 +452,7 @@ public final class PowerManagerService extends SystemService private static native void nativeSetInteractive(boolean enable); private static native void nativeSetAutoSuspend(boolean enable); private static native void nativeSendPowerHint(int hintId, int data); + private static native void nativeSetFeature(int featureId, int data); public PowerManagerService(Context context) { super(context); @@ -462,6 +475,7 @@ public final class PowerManagerService extends SystemService nativeInit(); nativeSetAutoSuspend(false); nativeSetInteractive(true); + nativeSetFeature(POWER_FEATURE_DOUBLE_TAP_TO_WAKE, 0); } } @@ -580,6 +594,9 @@ public final class PowerManagerService extends SystemService resolver.registerContentObserver(Settings.Global.getUriFor( Settings.Global.THEATER_MODE_ON), false, mSettingsObserver, UserHandle.USER_ALL); + resolver.registerContentObserver(Settings.Secure.getUriFor( + Settings.Secure.DOUBLE_TAP_TO_WAKE), + false, mSettingsObserver, UserHandle.USER_ALL); // Go. readConfigurationLocked(); updateSettingsLocked(); @@ -625,6 +642,8 @@ public final class PowerManagerService extends SystemService com.android.internal.R.integer.config_maximumScreenDimDuration); mMaximumScreenDimRatioConfig = resources.getFraction( com.android.internal.R.fraction.config_maximumScreenDimRatio, 1, 1); + mSupportsDoubleTapWakeConfig = resources.getBoolean( + com.android.internal.R.bool.config_supportDoubleTapWake); } private void updateSettingsLocked() { @@ -653,6 +672,16 @@ public final class PowerManagerService extends SystemService mTheaterModeEnabled = Settings.Global.getInt(mContext.getContentResolver(), Settings.Global.THEATER_MODE_ON, 0) == 1; + if (mSupportsDoubleTapWakeConfig) { + boolean doubleTapWakeEnabled = Settings.Secure.getIntForUser(resolver, + Settings.Secure.DOUBLE_TAP_TO_WAKE, DEFAULT_DOUBLE_TAP_TO_WAKE, + UserHandle.USER_CURRENT) != 0; + if (doubleTapWakeEnabled != mDoubleTapWakeEnabled) { + mDoubleTapWakeEnabled = doubleTapWakeEnabled; + nativeSetFeature(POWER_FEATURE_DOUBLE_TAP_TO_WAKE, mDoubleTapWakeEnabled ? 1 : 0); + } + } + final int oldScreenBrightnessSetting = mScreenBrightnessSetting; mScreenBrightnessSetting = Settings.System.getIntForUser(resolver, Settings.System.SCREEN_BRIGHTNESS, mScreenBrightnessSettingDefault, @@ -2610,6 +2639,7 @@ public final class PowerManagerService extends SystemService pw.println(" mScreenBrightnessSettingMinimum=" + mScreenBrightnessSettingMinimum); pw.println(" mScreenBrightnessSettingMaximum=" + mScreenBrightnessSettingMaximum); pw.println(" mScreenBrightnessSettingDefault=" + mScreenBrightnessSettingDefault); + pw.println(" mDoubleTapWakeEnabled=" + mDoubleTapWakeEnabled); final int sleepTimeout = getSleepTimeoutLocked(); final int screenOffTimeout = getScreenOffTimeoutLocked(sleepTimeout); diff --git a/services/core/jni/com_android_server_power_PowerManagerService.cpp b/services/core/jni/com_android_server_power_PowerManagerService.cpp index 6dcdd9d..1662755 100644 --- a/services/core/jni/com_android_server_power_PowerManagerService.cpp +++ b/services/core/jni/com_android_server_power_PowerManagerService.cpp @@ -156,6 +156,14 @@ static void nativeSendPowerHint(JNIEnv *env, jclass clazz, jint hintId, jint dat } } +static void nativeSetFeature(JNIEnv *env, jclass clazz, jint featureId, jint data) { + int data_param = data; + + if (gPowerModule && gPowerModule->setFeature) { + gPowerModule->setFeature(gPowerModule, (feature_t)featureId, data_param); + } +} + // ---------------------------------------------------------------------------- static JNINativeMethod gPowerManagerServiceMethods[] = { @@ -172,6 +180,8 @@ static JNINativeMethod gPowerManagerServiceMethods[] = { (void*) nativeSetAutoSuspend }, { "nativeSendPowerHint", "(II)V", (void*) nativeSendPowerHint }, + { "nativeSetFeature", "(II)V", + (void*) nativeSetFeature }, }; #define FIND_CLASS(var, className) \ |