From ebd1b296486cd39491727d771a59b0516fe2d13f Mon Sep 17 00:00:00 2001 From: Bruno Martins Date: Tue, 1 Jan 2019 12:39:38 +0000 Subject: msm8996-common: doze: Add AOD support to Ambient Display * This makes the always on display mode feature visible for those devices that explicitly set it as available via AOSP overlay. Should only be enabled on devices where the display has been tuned to be power efficient in DOZE and/or DOZE_SUSPEND states. Change-Id: If543936f9421dd7a6c0be594f7cb76afb227e34b Signed-off-by: Davide Garberi --- doze/res/xml/doze_settings.xml | 8 ++++++ .../settings/doze/DozeSettingsFragment.java | 31 ++++++++++++++++++++-- doze/src/org/lineageos/settings/doze/Utils.java | 24 +++++++++++++++-- 3 files changed, 59 insertions(+), 4 deletions(-) (limited to 'doze') 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 @@ + + 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(); -- cgit v1.2.3