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) {