sdm660-common: XiaomiDoze: Raise To Wake Gesture

- Adapted to Xiaomi SDM660
- Implemented with tilt sensor

SQUASHED COMMITS:
-----------------
* sdm845-common: Introduce raise to wake gesture
- Highly inspired by iOS raise to wake

* EvoX notes:
- Adapted to OnePlus sdm845
- Strings will be added to packages/resources/devicesettings which is where all current strings are located

* sdm845-common: doze: Add min interval for raise2wake
- avoid having early wakeup

* sd845-common: doze: raise2wake: Check proximity before wakeup
- To avoid having unnecessary wakeups when phone inside the pocket

* sdm845-common: doze: Enable pickup when raise to wake is toggled
- This is needed in order for raise to wake to function properly.

References:
* f45b58b511
* dc69b3678c

Co-authored-by: Nauval Rizky <enuma.alrizky@gmail.com>
Co-authored-by: AnierinB <anierinb@evolution-x.org>
Signed-off-by: Nauval Rizky <enuma.alrizky@gmail.com>
Signed-off-by: Joey Huab <joey@evolution-x.org>
Signed-off-by: AnierinB <anierinb@evolution-x.org>
Signed-off-by: OdSazib <odsazib@gmail.com>
This commit is contained in:
OdSazib 2020-08-08 16:10:57 +06:00
parent 88279b484c
commit f441fa06a2
No known key found for this signature in database
GPG key ID: A2D2E5C18BB04462
6 changed files with 98 additions and 5 deletions

View file

@ -0,0 +1,9 @@
<!-- drawable/arrow_decision_outline.xml -->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:height="24dp"
android:width="24dp"
android:viewportWidth="24"
android:viewportHeight="24"
android:tint="?android:attr/colorControlNormal" >
<path android:fillColor="#000" android:pathData="M9.64,13.4C8.63,12.5 7.34,12.03 6,12V15L2,11L6,7V10C7.67,10 9.3,10.57 10.63,11.59C10.22,12.15 9.89,12.76 9.64,13.4M18,15V12C17.5,12 13.5,12.16 13.05,16.2C14.61,16.75 15.43,18.47 14.88,20.03C14.33,21.59 12.61,22.41 11.05,21.86C9.5,21.3 8.67,19.59 9.22,18.03C9.5,17.17 10.2,16.5 11.05,16.2C11.34,12.61 14.4,9.88 18,10V7L22,11L18,15M13,19A1,1 0 0,0 12,18A1,1 0 0,0 11,19A1,1 0 0,0 12,20A1,1 0 0,0 13,19M11,11.12C11.58,10.46 12.25,9.89 13,9.43V5H16L12,1L8,5H11V11.12Z" />
</vector>

View file

@ -29,7 +29,7 @@
<string name="ambient_display_title">Ambient display</string>
<!-- Tilt sensor -->
<string name="tilt_sensor_title">Tilt sensor</string>
<string name="tilt_sensor_title">Tilt Sensor Gestures</string>
<!-- Proximity sensor -->
<string name="proximity_sensor_title">Proximity sensor</string>
@ -59,4 +59,8 @@
<!-- Doze Tile Service -->
<string name="ambient_display_gestures_title">Ambient Display Gesture</string>
<!-- Raise to Wake Gesture -->
<string name="raise_to_wake_gesture_title">Raise To Wake</string>
<string name="raise_to_wake_gesture_summary">Tilt Sensor events to raise your device.</string>
</resources>

View file

@ -25,6 +25,14 @@
android:defaultValue="false"
android:title="@string/pick_up_gesture_title"
android:summary="@string/pick_up_gesture_summary" />
<SwitchPreference
android:defaultValue="false"
android:disableDependentsState="true"
android:icon="@drawable/ic_raise"
android:key="gesture_raise_to_wake"
android:summary="@string/raise_to_wake_gesture_summary"
android:title="@string/raise_to_wake_gesture_title" />
</PreferenceCategory>

View file

@ -45,6 +45,7 @@ public class DozeSettingsFragment extends PreferenceFragment implements OnPrefer
private View mSwitchBar;
private SwitchPreference mPickUpPreference;
private SwitchPreference mRaiseToWakePreference;
private SwitchPreference mHandwavePreference;
private SwitchPreference mPocketPreference;
@ -64,10 +65,17 @@ public class DozeSettingsFragment extends PreferenceFragment implements OnPrefer
PreferenceCategory proximitySensorCategory =
(PreferenceCategory) getPreferenceScreen().findPreference(Utils.CATEG_PROX_SENSOR);
PreferenceCategory tiltSensorCategory =
(PreferenceCategory) getPreferenceScreen().findPreference(Utils.CATEG_TILT_SENSOR);
mPickUpPreference = (SwitchPreference) findPreference(Utils.GESTURE_PICK_UP_KEY);
mPickUpPreference.setEnabled(dozeEnabled);
mPickUpPreference.setOnPreferenceChangeListener(this);
mRaiseToWakePreference = (SwitchPreference) findPreference(Utils.GESTURE_RAISE_TO_WAKE_KEY);
mRaiseToWakePreference.setEnabled(dozeEnabled);
mRaiseToWakePreference.setOnPreferenceChangeListener(this);
mHandwavePreference = (SwitchPreference) findPreference(Utils.GESTURE_HAND_WAVE_KEY);
mHandwavePreference.setEnabled(dozeEnabled);
@ -81,6 +89,11 @@ public class DozeSettingsFragment extends PreferenceFragment implements OnPrefer
if (!Utils.getProxCheckBeforePulse(getActivity())) {
getPreferenceScreen().removePreference(proximitySensorCategory);
}
// Hide proximity sensor related features if the device doesn't support them
if (!Utils.getProxCheckBeforePulse(getActivity())) {
getPreferenceScreen().removePreference(tiltSensorCategory);
}
}
@Override
@ -116,6 +129,10 @@ public class DozeSettingsFragment extends PreferenceFragment implements OnPrefer
public boolean onPreferenceChange(Preference preference, Object newValue) {
Utils.enableGesture(getActivity(), preference.getKey(), (Boolean) newValue);
Utils.checkDozeService(getActivity());
if (Utils.GESTURE_RAISE_TO_WAKE_KEY.equals(preference.getKey())) {
Utils.setPickUp(getActivity(), (Boolean) newValue);
}
return true;
}
@ -128,6 +145,7 @@ public class DozeSettingsFragment extends PreferenceFragment implements OnPrefer
mSwitchBar.setActivated(isChecked);
mPickUpPreference.setEnabled(isChecked);
mRaiseToWakePreference.setEnabled(isChecked);
mHandwavePreference.setEnabled(isChecked);
mPocketPreference.setEnabled(isChecked);
}

View file

@ -22,6 +22,8 @@ import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.PowerManager;
import android.os.PowerManager.WakeLock;
import android.os.SystemClock;
import android.util.Log;
@ -36,11 +38,18 @@ public class TiltSensor implements SensorEventListener {
private static final int BATCH_LATENCY_IN_MS = 100;
private static final int MIN_PULSE_INTERVAL_MS = 2500;
private static final int MIN_WAKEUP_INTERVAL_MS = 1000;
private static final int WAKELOCK_TIMEOUT_MS = 300;
private SensorManager mSensorManager;
private Sensor mSensor;
private Context mContext;
private ExecutorService mExecutorService;
private PowerManager mPowerManager;
private Sensor mProximitySensor;
private WakeLock mWakeLock;
private boolean mInsidePocket = false;
private long mEntryTimestamp;
@ -48,6 +57,9 @@ public class TiltSensor implements SensorEventListener {
mContext = context;
mSensorManager = mContext.getSystemService(SensorManager.class);
mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_TILT_DETECTOR);
mPowerManager = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE);
mProximitySensor = mSensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY, false);
mWakeLock = mPowerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, TAG);
mExecutorService = Executors.newSingleThreadExecutor();
}
@ -58,16 +70,28 @@ public class TiltSensor implements SensorEventListener {
@Override
public void onSensorChanged(SensorEvent event) {
if (DEBUG) Log.d(TAG, "Got sensor event: " + event.values[0]);
boolean isRaiseToWake = Utils.isRaiseToWakeEnabled(mContext);
long delta = SystemClock.elapsedRealtime() - mEntryTimestamp;
if (delta < MIN_PULSE_INTERVAL_MS) {
if (delta < (isRaiseToWake ? MIN_WAKEUP_INTERVAL_MS : MIN_PULSE_INTERVAL_MS)) {
return;
} else {
mEntryTimestamp = SystemClock.elapsedRealtime();
}
if (event.values[0] == 1) {
Utils.launchDozePulse(mContext);
if (!isRaiseToWake && !Utils.isPocketGestureEnabled(mContext)) {
mInsidePocket = false;
}
if (event.values[0] == 1 && !mInsidePocket) {
if (isRaiseToWake) {
mWakeLock.acquire(WAKELOCK_TIMEOUT_MS);
mPowerManager.wakeUp(SystemClock.uptimeMillis(),
PowerManager.WAKE_REASON_GESTURE, TAG);
} else {
Utils.launchDozePulse(mContext);
}
}
}
@ -75,6 +99,18 @@ public class TiltSensor implements SensorEventListener {
public void onAccuracyChanged(Sensor sensor, int accuracy) {
/* Empty */
}
private SensorEventListener mProximityListener = new SensorEventListener() {
@Override
public void onSensorChanged(SensorEvent event) {
mInsidePocket = event.values[0] < mProximitySensor.getMaximumRange();
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
// stub
}
};
protected void enable() {
if (DEBUG) Log.d(TAG, "Enabling");
@ -82,6 +118,10 @@ public class TiltSensor implements SensorEventListener {
mSensorManager.registerListener(this, mSensor,
SensorManager.SENSOR_DELAY_NORMAL, BATCH_LATENCY_IN_MS * 1000);
mEntryTimestamp = SystemClock.elapsedRealtime();
if (Utils.isRaiseToWakeEnabled(mContext)) {
mSensorManager.registerListener(mProximityListener, mProximitySensor,
SensorManager.SENSOR_DELAY_NORMAL);
}
});
}

View file

@ -19,6 +19,7 @@ package org.lineageos.settings.doze;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.os.UserHandle;
import androidx.preference.PreferenceManager;
@ -35,8 +36,10 @@ public final class Utils {
private static final String DOZE_INTENT = "com.android.systemui.doze.pulse";
protected static final String CATEG_PROX_SENSOR = "proximity_sensor";
protected static final String CATEG_TILT_SENSOR = "tilt_sensor";
protected static final String GESTURE_PICK_UP_KEY = "gesture_pick_up";
protected static final String GESTURE_RAISE_TO_WAKE_KEY = "gesture_raise_to_wake";
protected static final String GESTURE_HAND_WAVE_KEY = "gesture_hand_wave";
protected static final String GESTURE_POCKET_KEY = "gesture_pocket";
@ -100,6 +103,16 @@ public final class Utils {
protected static boolean isPickUpEnabled(Context context) {
return isGestureEnabled(context, GESTURE_PICK_UP_KEY);
}
protected static void setPickUp(Context context, boolean value) {
SharedPreferences.Editor e = PreferenceManager.getDefaultSharedPreferences(context).edit();
e.putBoolean(GESTURE_PICK_UP_KEY, value);
e.commit();
}
protected static boolean isRaiseToWakeEnabled(Context context) {
return isGestureEnabled(context, GESTURE_RAISE_TO_WAKE_KEY);
}
protected static boolean isHandwaveGestureEnabled(Context context) {
return isGestureEnabled(context, GESTURE_HAND_WAVE_KEY);
@ -111,6 +124,7 @@ public final class Utils {
protected static boolean sensorsEnabled(Context context) {
return isPickUpEnabled(context) || isHandwaveGestureEnabled(context)
|| isPocketGestureEnabled(context);
|| isPocketGestureEnabled(context) || isRaiseToWakeEnabled(context);
}
}