Cherish: Allow scheduling always on display [2/2]

From sunset to sunrise or at a custom time

Signed-off-by: Hưng Phan <phandinhhungvp2001@gmail.com>
This commit is contained in:
idoybh
2021-12-11 00:13:54 +00:00
committed by Hưng Phan
parent 6bc14947d6
commit 9d7a94864c
6 changed files with 269 additions and 0 deletions

View File

@@ -276,4 +276,17 @@
<item>4</item> <item>4</item>
</string-array> </string-array>
<!-- AOD Schedule -->
<string-array name="doze_always_on_auto_mode_entries">
<item>@string/disabled</item>
<item>@string/night_display_auto_mode_twilight</item>
<item>@string/night_display_auto_mode_custom</item>
</string-array>
<string-array name="doze_always_on_auto_mode_values" translatable="false">
<item>0</item>
<item>1</item>
<item>2</item>
</string-array>
</resources> </resources>

View File

@@ -394,4 +394,9 @@
<!-- QS battery estimates --> <!-- QS battery estimates -->
<string name="qs_show_battery_estimate_title">Battery estimates</string> <string name="qs_show_battery_estimate_title">Battery estimates</string>
<string name="qs_show_battery_estimate_summary">Show estimated remaining battery life next to the icon</string> <string name="qs_show_battery_estimate_summary">Show estimated remaining battery life next to the icon</string>
<!-- AOD Schedule -->
<string name="always_on_display_schedule_title">Always on display schedule</string>
<string name="always_on_display_schedule_sunset">Sunset</string>
<string name="always_on_display_schedule_sunrise">Sunrise</string>
</resources> </resources>

View File

@@ -0,0 +1,34 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2021 Yet Another AOSP Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android"
android:title="@string/always_on_display_schedule_title"
xmlns:settings="http://schemas.android.com/apk/res/com.android.settings">
<com.cherish.settings.preferences.SecureSettingListPreference
android:key="doze_always_on_auto_mode"
android:title="@string/night_display_auto_mode_title"
android:dialogTitle="@string/night_display_auto_mode_title"
android:entries="@array/doze_always_on_auto_mode_entries"
android:entryValues="@array/doze_always_on_auto_mode_values"
android:persistent="false" />
<Preference
android:key="doze_always_on_auto_since"
android:title="@string/night_display_start_time_title" />
<Preference
android:key="doze_always_on_auto_till"
android:title="@string/night_display_end_time_title" />
</PreferenceScreen>

View File

@@ -34,6 +34,11 @@
android:defaultValue="true" /> android:defaultValue="true" />
</PreferenceCategory> </PreferenceCategory>
<Preference
android:key="always_on_display_schedule"
android:title="@string/always_on_display_schedule_title"
android:fragment="com.cherish.settings.fragments.AODSchedule" />
<com.cherish.settings.preferences.SystemSettingSwitchPreference <com.cherish.settings.preferences.SystemSettingSwitchPreference
android:key="lockscreen_battery_info" android:key="lockscreen_battery_info"

View File

@@ -0,0 +1,187 @@
/*
* Copyright (C) 2021 Yet Another AOSP Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.cherish.settings.fragments;
import android.app.TimePickerDialog;
import android.content.ContentResolver;
import android.content.Context;
import android.os.Bundle;
import android.os.UserHandle;
import android.provider.Settings;
import android.text.format.DateFormat;
import android.widget.TimePicker;
import androidx.preference.Preference;
import androidx.preference.PreferenceScreen;
import com.android.internal.logging.nano.MetricsProto;
import com.android.settings.R;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.SettingsPreferenceFragment;
import com.android.settingslib.search.SearchIndexable;
import com.cherish.settings.preferences.SecureSettingListPreference;
@SearchIndexable
public class AODSchedule extends SettingsPreferenceFragment implements
Preference.OnPreferenceClickListener, Preference.OnPreferenceChangeListener {
private static final String MODE_KEY = "doze_always_on_auto_mode";
private static final String SINCE_PREF_KEY = "doze_always_on_auto_since";
private static final String TILL_PREF_KEY = "doze_always_on_auto_till";
private SecureSettingListPreference mModePref;
private Preference mSincePref;
private Preference mTillPref;
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
addPreferencesFromResource(R.xml.always_on_display_schedule);
PreferenceScreen screen = getPreferenceScreen();
ContentResolver resolver = getActivity().getContentResolver();
mSincePref = findPreference(SINCE_PREF_KEY);
mSincePref.setOnPreferenceClickListener(this);
mTillPref = findPreference(TILL_PREF_KEY);
mTillPref.setOnPreferenceClickListener(this);
int mode = Settings.Secure.getIntForUser(resolver,
MODE_KEY, 0, UserHandle.USER_CURRENT);
mModePref = (SecureSettingListPreference) findPreference(MODE_KEY);
mModePref.setValue(String.valueOf(mode));
mModePref.setSummary(mModePref.getEntry());
mModePref.setOnPreferenceChangeListener(this);
updateTimeEnablement(mode == 2);
updateTimeSummary(mode);
}
@Override
public boolean onPreferenceChange(Preference preference, Object objValue) {
int value = Integer.valueOf((String) objValue);
int index = mModePref.findIndexOfValue((String) objValue);
mModePref.setSummary(mModePref.getEntries()[index]);
Settings.Secure.putIntForUser(getActivity().getContentResolver(),
MODE_KEY, value, UserHandle.USER_CURRENT);
updateTimeEnablement(value == 2);
updateTimeSummary(value);
return true;
}
@Override
public boolean onPreferenceClick(Preference preference) {
String[] times = getCustomTimeSetting();
boolean isSince = preference == mSincePref;
int hour, minute; hour = minute = 0;
TimePickerDialog.OnTimeSetListener listener = new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
updateTimeSetting(isSince, hourOfDay, minute);
}
};
if (isSince) {
String[] sinceValues = times[0].split(":", 0);
hour = Integer.parseInt(sinceValues[0]);
minute = Integer.parseInt(sinceValues[1]);
} else {
String[] tillValues = times[1].split(":", 0);
hour = Integer.parseInt(tillValues[0]);
minute = Integer.parseInt(tillValues[1]);
}
TimePickerDialog dialog = new TimePickerDialog(getContext(), listener,
hour, minute, DateFormat.is24HourFormat(getContext()));
dialog.show();
return true;
}
private String[] getCustomTimeSetting() {
String value = Settings.Secure.getStringForUser(getActivity().getContentResolver(),
Settings.Secure.DOZE_ALWAYS_ON_AUTO_TIME, UserHandle.USER_CURRENT);
if (value == null || value.equals("")) value = "20:00,07:00";
return value.split(",", 0);
}
private void updateTimeEnablement(boolean enabled) {
mSincePref.setEnabled(enabled);
mTillPref.setEnabled(enabled);
}
private void updateTimeSummary(int mode) {
updateTimeSummary(getCustomTimeSetting(), mode);
}
private void updateTimeSummary(String[] times, int mode) {
if (mode == 0) {
mSincePref.setSummary("-");
mTillPref.setSummary("-");
return;
}
if (mode == 1) {
mSincePref.setSummary(R.string.always_on_display_schedule_sunset);
mTillPref.setSummary(R.string.always_on_display_schedule_sunrise);
return;
}
if (DateFormat.is24HourFormat(getContext())) {
mSincePref.setSummary(times[0]);
mTillPref.setSummary(times[1]);
return;
}
String[] sinceValues = times[0].split(":", 0);
String[] tillValues = times[1].split(":", 0);
int sinceHour = Integer.parseInt(sinceValues[0]);
int tillHour = Integer.parseInt(tillValues[0]);
String sinceSummary = "";
String tillSummary = "";
if (sinceHour > 12) {
sinceHour -= 12;
sinceSummary += String.valueOf(sinceHour) + ":" + sinceValues[1] + " PM";
} else {
sinceSummary = times[0].substring(1) + " AM";
}
if (tillHour > 12) {
tillHour -= 12;
tillSummary += String.valueOf(tillHour) + ":" + tillValues[1] + " PM";
} else {
tillSummary = times[0].substring(1) + " AM";
}
mSincePref.setSummary(sinceSummary);
mTillPref.setSummary(tillSummary);
}
private void updateTimeSetting(boolean since, int hour, int minute) {
String[] times = getCustomTimeSetting();
String nHour = "";
String nMinute = "";
if (hour < 10) nHour += "0";
if (minute < 10) nMinute += "0";
nHour += String.valueOf(hour);
nMinute += String.valueOf(minute);
times[since ? 0 : 1] = nHour + ":" + nMinute;
Settings.Secure.putStringForUser(getActivity().getContentResolver(),
Settings.Secure.DOZE_ALWAYS_ON_AUTO_TIME,
times[0] + "," + times[1], UserHandle.USER_CURRENT);
updateTimeSummary(times, 2);
}
@Override
public int getMetricsCategory() {
return MetricsProto.MetricsEvent.CHERISH_SETTINGS;
}
public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
new BaseSearchIndexProvider(R.xml.always_on_display_schedule);
}

View File

@@ -57,6 +57,10 @@ import java.util.List;
@SearchIndexable(forTarget = SearchIndexable.ALL & ~SearchIndexable.ARC) @SearchIndexable(forTarget = SearchIndexable.ALL & ~SearchIndexable.ARC)
public class LockScreenSettings extends SettingsPreferenceFragment implements public class LockScreenSettings extends SettingsPreferenceFragment implements
Preference.OnPreferenceChangeListener { Preference.OnPreferenceChangeListener {
private static final String AOD_SCHEDULE_KEY = "always_on_display_schedule";
Preference mAODPref;
@Override @Override
public void onCreate(Bundle icicle) { public void onCreate(Bundle icicle) {
@@ -76,11 +80,32 @@ public class LockScreenSettings extends SettingsPreferenceFragment implements
} catch (NameNotFoundException e) { } catch (NameNotFoundException e) {
e.printStackTrace(); e.printStackTrace();
} }
mAODPref = findPreference(AOD_SCHEDULE_KEY);
updateAlwaysOnSummary();
} }
@Override @Override
public void onResume() { public void onResume() {
super.onResume(); super.onResume();
updateAlwaysOnSummary();
}
private void updateAlwaysOnSummary() {
if (mAODPref == null) return;
int mode = Settings.Secure.getIntForUser(getActivity().getContentResolver(),
Settings.Secure.DOZE_ALWAYS_ON_AUTO_MODE, 0, UserHandle.USER_CURRENT);
switch (mode) {
case 0:
mAODPref.setSummary(R.string.disabled);
break;
case 1:
mAODPref.setSummary(R.string.night_display_auto_mode_twilight);
break;
case 2:
mAODPref.setSummary(R.string.night_display_auto_mode_custom);
break;
}
} }
public boolean onPreferenceChange(Preference preference, Object newValue) { public boolean onPreferenceChange(Preference preference, Object newValue) {