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:
parent
88279b484c
commit
f441fa06a2
6 changed files with 98 additions and 5 deletions
9
XiaomiDoze/res/drawable/ic_raise.xml
Normal file
9
XiaomiDoze/res/drawable/ic_raise.xml
Normal 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>
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue