sm8150-common: doze: Introduce raise to wake gesture

* Highly inspired by iOS raise to wake

- Adapted to OnePlus sm8150 doze

sm8150-common: doze: Add min interval for raise2wake

* avoid having early wakeup
* also fix typo in acquire timeout

sm8150-common: doze: Enable pickup when raise to wake is toggled

- This is needed in order for raise to wake to function properly.

sm8150-common: doze: Fix pickup status for raise to wake

Co-authored-by: AnierinB <anierinb@evolution-x.org>
Co-authored-by: AshutoshSundresh <ashutoshsundresh@gmail.com>
Co-authored-by: LuK1337 <priv.luk@gmail.com>
Signed-off-by: AnierinB <anierinb@evolution-x.org>
Signed-off-by: Omkar Chandorkar <gotenksIN@aosip.dev>
Signed-off-by: LuK1337 <priv.luk@gmail.com>
Change-Id: I5df0c4f11f1b24ab813abc393960c5f03f5fab1f
This commit is contained in:
Nauval Rizky 2020-01-31 11:57:48 +09:00 committed by Omkar Chandorkar
parent 5d947faf83
commit 776063454f
No known key found for this signature in database
GPG Key ID: 95A33FD984777F70
5 changed files with 61 additions and 13 deletions

View File

@ -0,0 +1,30 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright (C) 2021 The LineageOS Project
Licensed under the Apache License, Version 2.0 (the "License"
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<resources>
<!-- Pickup gesture -->
<string-array name="pick_up_gesture_entries" translatable="false">
<item>@string/disabled</item>
<item>@string/pick_up_gesture_summary</item>
<item>@string/pick_up_wake_gesture_summary</item>
</string-array>
<string-array name="pick_up_gesture_values" translatable="false">
<item>0</item>
<item>1</item>
<item>2</item>
</string-array>
</resources>

View File

@ -28,12 +28,14 @@
android:key="pickup_sensor" android:key="pickup_sensor"
android:title="@string/pickup_sensor_title"> android:title="@string/pickup_sensor_title">
<SwitchPreference <ListPreference
android:key="gesture_pick_up" android:key="gesture_pick_up_type"
android:defaultValue="false" android:defaultValue="0"
android:icon="@drawable/ic_pickup" android:icon="@drawable/ic_pickup"
android:title="@string/pick_up_gesture_title" android:title="@string/pick_up_gesture_title"
android:summary="@string/pick_up_gesture_summary" /> android:summary="%s"
android:entries="@array/pick_up_gesture_entries"
android:entryValues="@array/pick_up_gesture_values" />
</PreferenceCategory> </PreferenceCategory>

View File

@ -34,6 +34,7 @@ import android.view.ViewGroup;
import android.widget.CompoundButton; import android.widget.CompoundButton;
import android.widget.Switch; import android.widget.Switch;
import android.widget.TextView; import android.widget.TextView;
import androidx.preference.ListPreference;
import androidx.preference.Preference; import androidx.preference.Preference;
import androidx.preference.Preference.OnPreferenceChangeListener; import androidx.preference.Preference.OnPreferenceChangeListener;
import androidx.preference.PreferenceCategory; import androidx.preference.PreferenceCategory;
@ -48,7 +49,7 @@ public class DozeSettingsFragment extends PreferenceFragment implements OnPrefer
private SwitchPreference mAlwaysOnDisplayPreference; private SwitchPreference mAlwaysOnDisplayPreference;
private SwitchPreference mPickUpPreference; private ListPreference mPickUpPreference;
private Handler mHandler = new Handler(); private Handler mHandler = new Handler();
@ -74,7 +75,7 @@ public class DozeSettingsFragment extends PreferenceFragment implements OnPrefer
PreferenceCategory pickupSensorCategory = (PreferenceCategory) getPreferenceScreen(). PreferenceCategory pickupSensorCategory = (PreferenceCategory) getPreferenceScreen().
findPreference(Utils.CATEG_PICKUP_SENSOR); findPreference(Utils.CATEG_PICKUP_SENSOR);
mPickUpPreference = (SwitchPreference) findPreference(Utils.GESTURE_PICK_UP_KEY); mPickUpPreference = (ListPreference) findPreference(Utils.GESTURE_PICK_UP_KEY);
mPickUpPreference.setEnabled(dozeEnabled); mPickUpPreference.setEnabled(dozeEnabled);
mPickUpPreference.setOnPreferenceChangeListener(this); mPickUpPreference.setOnPreferenceChangeListener(this);

View File

@ -22,6 +22,8 @@ import android.hardware.Sensor;
import android.hardware.SensorEvent; import android.hardware.SensorEvent;
import android.hardware.SensorEventListener; import android.hardware.SensorEventListener;
import android.hardware.SensorManager; import android.hardware.SensorManager;
import android.os.PowerManager;
import android.os.PowerManager.WakeLock;
import android.os.SystemClock; import android.os.SystemClock;
import android.util.Log; import android.util.Log;
@ -35,9 +37,13 @@ public class PickupSensor implements SensorEventListener {
private static final String TAG = "PickupSensor"; private static final String TAG = "PickupSensor";
private static final int MIN_PULSE_INTERVAL_MS = 2500; 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 PowerManager mPowerManager;
private SensorManager mSensorManager; private SensorManager mSensorManager;
private Sensor mSensor; private Sensor mSensor;
private WakeLock mWakeLock;
private Context mContext; private Context mContext;
private ExecutorService mExecutorService; private ExecutorService mExecutorService;
@ -45,8 +51,10 @@ public class PickupSensor implements SensorEventListener {
public PickupSensor(Context context) { public PickupSensor(Context context) {
mContext = context; mContext = context;
mPowerManager = mContext.getSystemService(PowerManager.class);
mSensorManager = mContext.getSystemService(SensorManager.class); mSensorManager = mContext.getSystemService(SensorManager.class);
mSensor = Utils.getSensor(mSensorManager, "oneplus.sensor.op_motion_detect"); mSensor = Utils.getSensor(mSensorManager, "oneplus.sensor.op_motion_detect");
mWakeLock = mPowerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, TAG);
mExecutorService = Executors.newSingleThreadExecutor(); mExecutorService = Executors.newSingleThreadExecutor();
} }
@ -66,7 +74,13 @@ public class PickupSensor implements SensorEventListener {
mEntryTimestamp = SystemClock.elapsedRealtime(); mEntryTimestamp = SystemClock.elapsedRealtime();
if (event.values[0] == 1) { if (event.values[0] == 1) {
Utils.launchDozePulse(mContext); if (Utils.isPickUpSetToWake(mContext)) {
mWakeLock.acquire(WAKELOCK_TIMEOUT_MS);
mPowerManager.wakeUp(SystemClock.uptimeMillis(),
PowerManager.WAKE_REASON_GESTURE, TAG);
} else {
Utils.launchDozePulse(mContext);
}
} }
} }

View File

@ -41,7 +41,7 @@ public final class Utils {
protected static final String CATEG_PICKUP_SENSOR = "pickup_sensor"; protected static final String CATEG_PICKUP_SENSOR = "pickup_sensor";
protected static final String GESTURE_PICK_UP_KEY = "gesture_pick_up"; protected static final String GESTURE_PICK_UP_KEY = "gesture_pick_up_type";
protected static void startService(Context context) { protected static void startService(Context context) {
if (DEBUG) Log.d(TAG, "Starting service"); if (DEBUG) Log.d(TAG, "Starting service");
@ -93,13 +93,14 @@ public final class Utils {
return new AmbientDisplayConfiguration(context).alwaysOnAvailable(); return new AmbientDisplayConfiguration(context).alwaysOnAvailable();
} }
protected static boolean isGestureEnabled(Context context, String gesture) { protected static boolean isPickUpEnabled(Context context) {
return PreferenceManager.getDefaultSharedPreferences(context) return !PreferenceManager.getDefaultSharedPreferences(context)
.getBoolean(gesture, false); .getString(GESTURE_PICK_UP_KEY, "0").equals("0");
} }
protected static boolean isPickUpEnabled(Context context) { protected static boolean isPickUpSetToWake(Context context) {
return isGestureEnabled(context, GESTURE_PICK_UP_KEY); return PreferenceManager.getDefaultSharedPreferences(context)
.getString(GESTURE_PICK_UP_KEY, "0").equals("2");
} }
public static boolean areGesturesEnabled(Context context) { public static boolean areGesturesEnabled(Context context) {