diff --git a/doze/res/values/arrays.xml b/doze/res/values/arrays.xml
new file mode 100644
index 0000000..4712b8d
--- /dev/null
+++ b/doze/res/values/arrays.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+ - @string/disabled
+ - @string/pick_up_gesture_summary
+ - @string/pick_up_wake_gesture_summary
+
+
+
+ - 0
+ - 1
+ - 2
+
+
diff --git a/doze/res/xml/doze_settings.xml b/doze/res/xml/doze_settings.xml
index 16a97c0..f8cba2b 100644
--- a/doze/res/xml/doze_settings.xml
+++ b/doze/res/xml/doze_settings.xml
@@ -28,12 +28,14 @@
android:key="pickup_sensor"
android:title="@string/pickup_sensor_title">
-
+ android:summary="%s"
+ android:entries="@array/pick_up_gesture_entries"
+ android:entryValues="@array/pick_up_gesture_values" />
diff --git a/doze/src/org/lineageos/settings/doze/DozeSettingsFragment.java b/doze/src/org/lineageos/settings/doze/DozeSettingsFragment.java
index be5216e..31723f7 100644
--- a/doze/src/org/lineageos/settings/doze/DozeSettingsFragment.java
+++ b/doze/src/org/lineageos/settings/doze/DozeSettingsFragment.java
@@ -34,6 +34,7 @@ import android.view.ViewGroup;
import android.widget.CompoundButton;
import android.widget.Switch;
import android.widget.TextView;
+import androidx.preference.ListPreference;
import androidx.preference.Preference;
import androidx.preference.Preference.OnPreferenceChangeListener;
import androidx.preference.PreferenceCategory;
@@ -48,7 +49,7 @@ public class DozeSettingsFragment extends PreferenceFragment implements OnPrefer
private SwitchPreference mAlwaysOnDisplayPreference;
- private SwitchPreference mPickUpPreference;
+ private ListPreference mPickUpPreference;
private SwitchPreference mPocketPreference;
private Handler mHandler = new Handler();
@@ -77,7 +78,7 @@ public class DozeSettingsFragment extends PreferenceFragment implements OnPrefer
PreferenceCategory proximitySensorCategory = (PreferenceCategory) getPreferenceScreen().
findPreference(Utils.CATEG_PROX_SENSOR);
- mPickUpPreference = (SwitchPreference) findPreference(Utils.GESTURE_PICK_UP_KEY);
+ mPickUpPreference = (ListPreference) findPreference(Utils.GESTURE_PICK_UP_KEY);
mPickUpPreference.setEnabled(dozeEnabled);
mPickUpPreference.setOnPreferenceChangeListener(this);
diff --git a/doze/src/org/lineageos/settings/doze/PickupSensor.java b/doze/src/org/lineageos/settings/doze/PickupSensor.java
index 5326057..b002440 100644
--- a/doze/src/org/lineageos/settings/doze/PickupSensor.java
+++ b/doze/src/org/lineageos/settings/doze/PickupSensor.java
@@ -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;
@@ -35,9 +37,13 @@ public class PickupSensor implements SensorEventListener {
private static final String TAG = "PickupSensor";
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 Sensor mSensor;
+ private WakeLock mWakeLock;
private Context mContext;
private ExecutorService mExecutorService;
@@ -45,8 +51,10 @@ public class PickupSensor implements SensorEventListener {
public PickupSensor(Context context) {
mContext = context;
+ mPowerManager = mContext.getSystemService(PowerManager.class);
mSensorManager = mContext.getSystemService(SensorManager.class);
mSensor = Utils.getSensor(mSensorManager, "oneplus.sensor.op_motion_detect");
+ mWakeLock = mPowerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, TAG);
mExecutorService = Executors.newSingleThreadExecutor();
}
@@ -66,7 +74,13 @@ public class PickupSensor implements SensorEventListener {
mEntryTimestamp = SystemClock.elapsedRealtime();
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);
+ }
}
}
diff --git a/doze/src/org/lineageos/settings/doze/Utils.java b/doze/src/org/lineageos/settings/doze/Utils.java
index 790ce23..786c824 100644
--- a/doze/src/org/lineageos/settings/doze/Utils.java
+++ b/doze/src/org/lineageos/settings/doze/Utils.java
@@ -42,7 +42,7 @@ public final class Utils {
protected static final String CATEG_PICKUP_SENSOR = "pickup_sensor";
protected static final String CATEG_PROX_SENSOR = "proximity_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 final String GESTURE_POCKET_KEY = "gesture_pocket";
protected static void startService(Context context) {
@@ -101,7 +101,13 @@ public final class Utils {
}
protected static boolean isPickUpEnabled(Context context) {
- return isGestureEnabled(context, GESTURE_PICK_UP_KEY);
+ return !PreferenceManager.getDefaultSharedPreferences(context)
+ .getString(GESTURE_PICK_UP_KEY, "0").equals("0");
+ }
+
+ protected static boolean isPickUpSetToWake(Context context) {
+ return PreferenceManager.getDefaultSharedPreferences(context)
+ .getString(GESTURE_PICK_UP_KEY, "0").equals("2");
}
protected static boolean isPocketEnabled(Context context) {