diff --git a/doze/res/xml/doze_settings.xml b/doze/res/xml/doze_settings.xml index 5738316..60d88aa 100644 --- a/doze/res/xml/doze_settings.xml +++ b/doze/res/xml/doze_settings.xml @@ -1,6 +1,7 @@ + + diff --git a/doze/src/org/lineageos/settings/doze/DozeSettingsFragment.java b/doze/src/org/lineageos/settings/doze/DozeSettingsFragment.java index a4558b9..0a03d3f 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. @@ -29,6 +29,7 @@ import android.os.Bundle; import android.support.v14.preference.PreferenceFragment; import android.support.v14.preference.SwitchPreference; import android.support.v7.preference.Preference; +import android.support.v7.preference.PreferenceCategory; import android.support.v7.preference.Preference.OnPreferenceChangeListener; import android.view.LayoutInflater; import android.view.MenuItem; @@ -44,6 +45,8 @@ public class DozeSettingsFragment extends PreferenceFragment implements OnPrefer private TextView mTextView; private View mSwitchBar; + private SwitchPreference mAlwaysOnDisplayPreference; + private SwitchPreference mPickUpPreference; private SwitchPreference mPocketPreference; @@ -61,6 +64,16 @@ public class DozeSettingsFragment extends PreferenceFragment implements OnPrefer boolean dozeEnabled = Utils.isDozeEnabled(getActivity()); + mAlwaysOnDisplayPreference = (SwitchPreference) findPreference(Utils.ALWAYS_ON_DISPLAY); + mAlwaysOnDisplayPreference.setEnabled(dozeEnabled); + mAlwaysOnDisplayPreference.setChecked(Utils.isAlwaysOnEnabled(getActivity())); + mAlwaysOnDisplayPreference.setOnPreferenceChangeListener(this); + + PreferenceCategory pickupSensorCategory = (PreferenceCategory) getPreferenceScreen(). + findPreference(Utils.CATEG_PICKUP_SENSOR); + PreferenceCategory proximitySensorCategory = (PreferenceCategory) getPreferenceScreen(). + findPreference(Utils.CATEG_PROX_SENSOR); + mPickUpPreference = (SwitchPreference) findPreference(Utils.GESTURE_PICK_UP_KEY); mPickUpPreference.setEnabled(dozeEnabled); mPickUpPreference.setOnPreferenceChangeListener(this); @@ -68,6 +81,14 @@ public class DozeSettingsFragment extends PreferenceFragment implements OnPrefer mPocketPreference = (SwitchPreference) findPreference(Utils.GESTURE_POCKET_KEY); mPocketPreference.setEnabled(dozeEnabled); mPocketPreference.setOnPreferenceChangeListener(this); + + // Hide AOD if not supported and set all its dependents otherwise + if (!Utils.alwaysOnDisplayAvailable(getActivity())) { + getPreferenceScreen().removePreference(mAlwaysOnDisplayPreference); + } else { + pickupSensorCategory.setDependency(Utils.ALWAYS_ON_DISPLAY); + proximitySensorCategory.setDependency(Utils.ALWAYS_ON_DISPLAY); + } } @Override @@ -101,8 +122,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; } @@ -114,6 +140,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); mPocketPreference.setEnabled(isChecked); } diff --git a/doze/src/org/lineageos/settings/doze/Utils.java b/doze/src/org/lineageos/settings/doze/Utils.java index e8bb642..10f6c45 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 + * Copyright (C) 2015 The CyanogenMod 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. @@ -26,6 +26,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 { @@ -35,6 +38,11 @@ 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_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_POCKET_KEY = "gesture_pocket"; @@ -51,7 +59,7 @@ public final class Utils { } protected static void checkDozeService(Context context) { - if (isDozeEnabled(context) && areGesturesEnabled(context)) { + if (isDozeEnabled(context) && !isAlwaysOnEnabled(context) && areGesturesEnabled(context)) { startService(context); } else { stopService(context); @@ -74,6 +82,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); + } + + protected 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();