diff options
-rw-r--r-- | doze/res/xml/doze_settings.xml | 8 | ||||
-rw-r--r-- | doze/src/org/lineageos/settings/doze/DozeSettingsFragment.java | 31 | ||||
-rw-r--r-- | doze/src/org/lineageos/settings/doze/Utils.java | 24 |
3 files changed, 59 insertions, 4 deletions
diff --git a/doze/res/xml/doze_settings.xml b/doze/res/xml/doze_settings.xml index 005c6ae..f213a97 100644 --- a/doze/res/xml/doze_settings.xml +++ b/doze/res/xml/doze_settings.xml @@ -1,6 +1,7 @@ <?xml version="1.0" encoding="utf-8"?> <!-- Copyright (C) 2015 The CyanogenMod Project + 2018-2019 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. @@ -16,6 +17,13 @@ --> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> + <SwitchPreference + android:key="always_on_display" + android:defaultValue="false" + android:disableDependentsState="true" + android:title="@string/ambient_display_always_on_title" + android:summary="@string/ambient_display_always_on_summary" /> + <PreferenceCategory android:key="tilt_sensor" android:title="@string/tilt_sensor_title"> diff --git a/doze/src/org/lineageos/settings/doze/DozeSettingsFragment.java b/doze/src/org/lineageos/settings/doze/DozeSettingsFragment.java index fd1756e..507d287 100644 --- a/doze/src/org/lineageos/settings/doze/DozeSettingsFragment.java +++ b/doze/src/org/lineageos/settings/doze/DozeSettingsFragment.java @@ -1,6 +1,6 @@ /* * Copyright (C) 2015 The CyanogenMod Project - * 2017-2018 The LineageOS Project + * 2017-2019 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. @@ -45,6 +45,8 @@ public class DozeSettingsFragment extends PreferenceFragment implements OnPrefer private TextView mTextView; private View mSwitchBar; + private SwitchPreference mAlwaysOnDisplayPreference; + private SwitchPreference mPickUpPreference; private SwitchPreference mHandwavePreference; private SwitchPreference mPocketPreference; @@ -63,6 +65,12 @@ public class DozeSettingsFragment extends PreferenceFragment implements OnPrefer boolean dozeEnabled = Utils.isDozeEnabled(getActivity()); + mAlwaysOnDisplayPreference = (SwitchPreference) findPreference(Utils.ALWAYS_ON_DISPLAY); + mAlwaysOnDisplayPreference.setEnabled(dozeEnabled); + mAlwaysOnDisplayPreference.setOnPreferenceChangeListener(this); + + PreferenceCategory tiltSensorCategory = + (PreferenceCategory) getPreferenceScreen().findPreference(Utils.CATEG_TILT_SENSOR); PreferenceCategory proximitySensorCategory = (PreferenceCategory) getPreferenceScreen().findPreference(Utils.CATEG_PROX_SENSOR); @@ -82,6 +90,14 @@ public class DozeSettingsFragment extends PreferenceFragment implements OnPrefer if (!Utils.getProxCheckBeforePulse(getActivity())) { getPreferenceScreen().removePreference(proximitySensorCategory); } + + // Hide AOD if not supported and set all its dependents otherwise + if (!Utils.alwaysOnDisplayAvailable(getActivity())) { + getPreferenceScreen().removePreference(mAlwaysOnDisplayPreference); + } else { + tiltSensorCategory.setDependency(Utils.ALWAYS_ON_DISPLAY); + proximitySensorCategory.setDependency(Utils.ALWAYS_ON_DISPLAY); + } } @Override @@ -115,8 +131,13 @@ public class DozeSettingsFragment extends PreferenceFragment implements OnPrefer @Override public boolean onPreferenceChange(Preference preference, Object newValue) { - Utils.enableGesture(getActivity(), preference.getKey(), (Boolean) newValue); + if (Utils.ALWAYS_ON_DISPLAY.equals(preference.getKey())) { + Utils.enableAlwaysOn(getActivity(), (Boolean) newValue); + } else { + Utils.enableGesture(getActivity(), preference.getKey(), (Boolean) newValue); + } Utils.checkDozeService(getActivity()); + return true; } @@ -128,6 +149,12 @@ public class DozeSettingsFragment extends PreferenceFragment implements OnPrefer mTextView.setText(getString(isChecked ? R.string.switch_bar_on : R.string.switch_bar_off)); mSwitchBar.setActivated(isChecked); + if (!isChecked) { + Utils.enableAlwaysOn(getActivity(), false); + mAlwaysOnDisplayPreference.setChecked(false); + } + mAlwaysOnDisplayPreference.setEnabled(isChecked); + mPickUpPreference.setEnabled(isChecked); mHandwavePreference.setEnabled(isChecked); mPocketPreference.setEnabled(isChecked); diff --git a/doze/src/org/lineageos/settings/doze/Utils.java b/doze/src/org/lineageos/settings/doze/Utils.java index 9cd7fdd..72a7477 100644 --- a/doze/src/org/lineageos/settings/doze/Utils.java +++ b/doze/src/org/lineageos/settings/doze/Utils.java @@ -1,6 +1,6 @@ /* * Copyright (C) 2015 The CyanogenMod Project - * 2017-2018 The LineageOS Project + * 2017-2019 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. @@ -25,6 +25,9 @@ import android.support.v7.preference.PreferenceManager; import android.provider.Settings; import android.util.Log; +import com.android.internal.hardware.AmbientDisplayConfiguration; + +import static android.provider.Settings.Secure.DOZE_ALWAYS_ON; import static android.provider.Settings.Secure.DOZE_ENABLED; public final class Utils { @@ -34,6 +37,9 @@ public final class Utils { private static final String DOZE_INTENT = "com.android.systemui.doze.pulse"; + protected static final String ALWAYS_ON_DISPLAY = "always_on_display"; + + protected static final String CATEG_TILT_SENSOR = "tilt_sensor"; protected static final String CATEG_PROX_SENSOR = "proximity_sensor"; protected static final String GESTURE_PICK_UP_KEY = "gesture_pick_up"; @@ -53,7 +59,7 @@ public final class Utils { } protected static void checkDozeService(Context context) { - if (isDozeEnabled(context) && sensorsEnabled(context)) { + if (isDozeEnabled(context) && !isAlwaysOnEnabled(context) && sensorsEnabled(context)) { startService(context); } else { stopService(context); @@ -87,6 +93,20 @@ public final class Utils { new UserHandle(UserHandle.USER_CURRENT)); } + protected static boolean enableAlwaysOn(Context context, boolean enable) { + return Settings.Secure.putIntForUser(context.getContentResolver(), + DOZE_ALWAYS_ON, enable ? 1 : 0, UserHandle.USER_CURRENT); + } + + private static boolean isAlwaysOnEnabled(Context context) { + return Settings.Secure.getIntForUser(context.getContentResolver(), + DOZE_ALWAYS_ON, 1, UserHandle.USER_CURRENT) != 0; + } + + protected static boolean alwaysOnDisplayAvailable(Context context) { + return new AmbientDisplayConfiguration(context).alwaysOnAvailable(); + } + protected static void enableGesture(Context context, String gesture, boolean enable) { PreferenceManager.getDefaultSharedPreferences(context).edit() .putBoolean(gesture, enable).apply(); |