Settings: Introduce AutoDimService [2/2]
Exactly like AutoAODService but for REDUCE_BRIGHT_COLORS_ACTIVATED Signed-off-by: mukesh22584 <mks22584@gmail.com>
This commit is contained in:
@@ -275,9 +275,10 @@
|
|||||||
<string name="max_alarm_volume_title">Alarms</string>
|
<string name="max_alarm_volume_title">Alarms</string>
|
||||||
<string name="steps_unit">steps</string>
|
<string name="steps_unit">steps</string>
|
||||||
|
|
||||||
<!-- AOD Schedule -->
|
<!-- AOD/Extra dim schedule -->
|
||||||
<string name="always_on_display_schedule_title">Always on display schedule</string>
|
<string name="extra_dim_schedule_title">Extra dim schedule</string>
|
||||||
<string name="string_disabled">Disabled</string>
|
<string name="string_disabled">Disabled</string>
|
||||||
|
<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_sunset">Sunset</string>
|
||||||
<string name="always_on_display_schedule_sunrise">Sunrise</string>
|
<string name="always_on_display_schedule_sunrise">Sunrise</string>
|
||||||
<string name="always_on_display_schedule_mixed_sunset">Turns on from sunset till a time</string>
|
<string name="always_on_display_schedule_mixed_sunset">Turns on from sunset till a time</string>
|
||||||
|
|||||||
37
res/xml/extra_dim_schedule.xml
Normal file
37
res/xml/extra_dim_schedule.xml
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!-- Copyright (C) 2023 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"
|
||||||
|
xmlns:settings="http://schemas.android.com/apk/res/com.android.settings"
|
||||||
|
android:title="@string/extra_dim_schedule_title">
|
||||||
|
|
||||||
|
<org.evolution.settings.preferences.SecureSettingListPreference
|
||||||
|
android:key="extra_dim_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="extra_dim_auto_since"
|
||||||
|
android:title="@string/night_display_start_time_title" />
|
||||||
|
|
||||||
|
<Preference
|
||||||
|
android:key="extra_dim_auto_till"
|
||||||
|
android:title="@string/night_display_end_time_title" />
|
||||||
|
|
||||||
|
</PreferenceScreen>
|
||||||
@@ -0,0 +1,197 @@
|
|||||||
|
/*
|
||||||
|
* 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.android.settings.accessibility;
|
||||||
|
|
||||||
|
import static com.android.internal.util.evolution.AutoSettingConsts.MODE_DISABLED;
|
||||||
|
import static com.android.internal.util.evolution.AutoSettingConsts.MODE_NIGHT;
|
||||||
|
import static com.android.internal.util.evolution.AutoSettingConsts.MODE_TIME;
|
||||||
|
import static com.android.internal.util.evolution.AutoSettingConsts.MODE_MIXED_SUNSET;
|
||||||
|
import static com.android.internal.util.evolution.AutoSettingConsts.MODE_MIXED_SUNRISE;
|
||||||
|
|
||||||
|
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.dashboard.DashboardFragment;
|
||||||
|
import com.android.settings.R;
|
||||||
|
import com.android.settings.search.BaseSearchIndexProvider;
|
||||||
|
import com.android.settingslib.search.SearchIndexable;
|
||||||
|
|
||||||
|
import org.evolution.settings.preferences.SecureSettingListPreference;
|
||||||
|
|
||||||
|
import java.time.format.DateTimeFormatter;
|
||||||
|
import java.time.LocalTime;
|
||||||
|
|
||||||
|
@SearchIndexable
|
||||||
|
public class ExtraDimScheduleFragment extends DashboardFragment implements
|
||||||
|
Preference.OnPreferenceClickListener, Preference.OnPreferenceChangeListener {
|
||||||
|
|
||||||
|
private static final String TAG = "ExtraDimScheduleFragment";
|
||||||
|
private static final String MODE_KEY = "extra_dim_auto_mode";
|
||||||
|
private static final String SINCE_PREF_KEY = "extra_dim_auto_since";
|
||||||
|
private static final String TILL_PREF_KEY = "extra_dim_auto_till";
|
||||||
|
|
||||||
|
private SecureSettingListPreference mModePref;
|
||||||
|
private Preference mSincePref;
|
||||||
|
private Preference mTillPref;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected int getPreferenceScreenResId() {
|
||||||
|
return R.xml.extra_dim_schedule;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onCreate(Bundle icicle) {
|
||||||
|
super.onCreate(icicle);
|
||||||
|
|
||||||
|
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, MODE_DISABLED, UserHandle.USER_CURRENT);
|
||||||
|
mModePref = findPreference(MODE_KEY);
|
||||||
|
mModePref.setValue(String.valueOf(mode));
|
||||||
|
mModePref.setSummary(mModePref.getEntry());
|
||||||
|
mModePref.setOnPreferenceChangeListener(this);
|
||||||
|
|
||||||
|
updateTimeEnablement(mode);
|
||||||
|
updateTimeSummary(mode);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onPreferenceChange(Preference preference, Object objValue) {
|
||||||
|
int value = Integer.parseInt((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);
|
||||||
|
updateTimeSummary(value);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onPreferenceClick(Preference preference) {
|
||||||
|
String[] times = getCustomTimeSetting();
|
||||||
|
boolean isSince = preference == mSincePref;
|
||||||
|
int hour, minute;
|
||||||
|
TimePickerDialog.OnTimeSetListener listener = (view, hourOfDay, minute1) -> {
|
||||||
|
updateTimeSetting(isSince, hourOfDay, minute1);
|
||||||
|
};
|
||||||
|
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.EXTRA_DIM_AUTO_TIME, UserHandle.USER_CURRENT);
|
||||||
|
if (value == null || value.equals("")) value = "20:00,07:00";
|
||||||
|
return value.split(",", 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void updateTimeEnablement(int mode) {
|
||||||
|
mSincePref.setEnabled(mode == MODE_TIME || mode == MODE_MIXED_SUNRISE);
|
||||||
|
mTillPref.setEnabled(mode == MODE_TIME || mode == MODE_MIXED_SUNSET);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void updateTimeSummary(int mode) {
|
||||||
|
updateTimeSummary(getCustomTimeSetting(), mode);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void updateTimeSummary(String[] times, int mode) {
|
||||||
|
if (mode == MODE_DISABLED) {
|
||||||
|
mSincePref.setSummary("-");
|
||||||
|
mTillPref.setSummary("-");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mode == MODE_NIGHT) {
|
||||||
|
mSincePref.setSummary(R.string.always_on_display_schedule_sunset);
|
||||||
|
mTillPref.setSummary(R.string.always_on_display_schedule_sunrise);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
String outputFormat = DateFormat.is24HourFormat(getContext()) ? "HH:mm" : "hh:mm a";
|
||||||
|
DateTimeFormatter outputFormatter = DateTimeFormatter.ofPattern(outputFormat);
|
||||||
|
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm");
|
||||||
|
LocalTime sinceDT = LocalTime.parse(times[0], formatter);
|
||||||
|
LocalTime tillDT = LocalTime.parse(times[1], formatter);
|
||||||
|
|
||||||
|
if (mode == MODE_MIXED_SUNSET) {
|
||||||
|
mSincePref.setSummary(R.string.always_on_display_schedule_sunset);
|
||||||
|
mTillPref.setSummary(tillDT.format(outputFormatter));
|
||||||
|
} else if (mode == MODE_MIXED_SUNRISE) {
|
||||||
|
mTillPref.setSummary(R.string.always_on_display_schedule_sunrise);
|
||||||
|
mSincePref.setSummary(sinceDT.format(outputFormatter));
|
||||||
|
} else {
|
||||||
|
mSincePref.setSummary(sinceDT.format(outputFormatter));
|
||||||
|
mTillPref.setSummary(tillDT.format(outputFormatter));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
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.EXTRA_DIM_AUTO_TIME,
|
||||||
|
times[0] + "," + times[1], UserHandle.USER_CURRENT);
|
||||||
|
updateTimeSummary(times, Integer.parseInt(mModePref.getValue()));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getMetricsCategory() {
|
||||||
|
return MetricsProto.MetricsEvent.EVOLVER;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected String getLogTag() {
|
||||||
|
return TAG;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
|
||||||
|
new BaseSearchIndexProvider(R.xml.extra_dim_schedule);
|
||||||
|
}
|
||||||
@@ -18,6 +18,11 @@ package com.android.settings.accessibility;
|
|||||||
|
|
||||||
import static com.android.internal.accessibility.AccessibilityShortcutController.REDUCE_BRIGHT_COLORS_COMPONENT_NAME;
|
import static com.android.internal.accessibility.AccessibilityShortcutController.REDUCE_BRIGHT_COLORS_COMPONENT_NAME;
|
||||||
import static com.android.internal.accessibility.AccessibilityShortcutController.REDUCE_BRIGHT_COLORS_TILE_SERVICE_COMPONENT_NAME;
|
import static com.android.internal.accessibility.AccessibilityShortcutController.REDUCE_BRIGHT_COLORS_TILE_SERVICE_COMPONENT_NAME;
|
||||||
|
import static com.android.internal.util.evolution.AutoSettingConsts.MODE_DISABLED;
|
||||||
|
import static com.android.internal.util.evolution.AutoSettingConsts.MODE_NIGHT;
|
||||||
|
import static com.android.internal.util.evolution.AutoSettingConsts.MODE_TIME;
|
||||||
|
import static com.android.internal.util.evolution.AutoSettingConsts.MODE_MIXED_SUNSET;
|
||||||
|
import static com.android.internal.util.evolution.AutoSettingConsts.MODE_MIXED_SUNRISE;
|
||||||
import static com.android.settings.accessibility.AccessibilityStatsLogUtils.logAccessibilityServiceEnabled;
|
import static com.android.settings.accessibility.AccessibilityStatsLogUtils.logAccessibilityServiceEnabled;
|
||||||
|
|
||||||
import android.app.settings.SettingsEnums;
|
import android.app.settings.SettingsEnums;
|
||||||
@@ -27,12 +32,14 @@ import android.content.Context;
|
|||||||
import android.hardware.display.ColorDisplayManager;
|
import android.hardware.display.ColorDisplayManager;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
import android.os.UserHandle;
|
||||||
import android.provider.Settings;
|
import android.provider.Settings;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
|
|
||||||
import androidx.annotation.VisibleForTesting;
|
import androidx.annotation.VisibleForTesting;
|
||||||
|
import androidx.preference.Preference;
|
||||||
import androidx.preference.PreferenceCategory;
|
import androidx.preference.PreferenceCategory;
|
||||||
import androidx.preference.TwoStatePreference;
|
import androidx.preference.TwoStatePreference;
|
||||||
|
|
||||||
@@ -59,10 +66,12 @@ public class ToggleReduceBrightColorsPreferenceFragment extends ToggleFeaturePre
|
|||||||
static final String KEY_SWITCH = "rbc_switch";
|
static final String KEY_SWITCH = "rbc_switch";
|
||||||
private static final String REDUCE_BRIGHT_COLORS_ACTIVATED_KEY =
|
private static final String REDUCE_BRIGHT_COLORS_ACTIVATED_KEY =
|
||||||
Settings.Secure.REDUCE_BRIGHT_COLORS_ACTIVATED;
|
Settings.Secure.REDUCE_BRIGHT_COLORS_ACTIVATED;
|
||||||
|
private static final String KEY_SCHEDULE = "extra_dim_schedule";
|
||||||
|
|
||||||
private ReduceBrightColorsIntensityPreferenceController mRbcIntensityPreferenceController;
|
private ReduceBrightColorsIntensityPreferenceController mRbcIntensityPreferenceController;
|
||||||
private ReduceBrightColorsPersistencePreferenceController mRbcPersistencePreferenceController;
|
private ReduceBrightColorsPersistencePreferenceController mRbcPersistencePreferenceController;
|
||||||
private ColorDisplayManager mColorDisplayManager;
|
private ColorDisplayManager mColorDisplayManager;
|
||||||
|
private Preference mSchedulePref;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void registerKeysToObserverCallback(
|
protected void registerKeysToObserverCallback(
|
||||||
@@ -96,8 +105,16 @@ public class ToggleReduceBrightColorsPreferenceFragment extends ToggleFeaturePre
|
|||||||
final View view = super.onCreateView(inflater, container, savedInstanceState);
|
final View view = super.onCreateView(inflater, container, savedInstanceState);
|
||||||
// Parent sets the title when creating the view, so set it after calling super
|
// Parent sets the title when creating the view, so set it after calling super
|
||||||
mToggleServiceSwitchPreference.setTitle(R.string.reduce_bright_colors_switch_title);
|
mToggleServiceSwitchPreference.setTitle(R.string.reduce_bright_colors_switch_title);
|
||||||
|
|
||||||
|
mSchedulePref = new Preference(getPrefContext());
|
||||||
|
mSchedulePref.setKey(KEY_SCHEDULE);
|
||||||
|
mSchedulePref.setTitle(getText(R.string.extra_dim_schedule_title));
|
||||||
|
mSchedulePref.setFragment("com.android.settings.accessibility.ExtraDimScheduleFragment");
|
||||||
|
|
||||||
|
getPreferenceScreen().addPreference(mTopIntroPreference);
|
||||||
updateGeneralCategoryOrder();
|
updateGeneralCategoryOrder();
|
||||||
updateFooterPreference();
|
updateFooterPreference();
|
||||||
|
updateSchedulePreference();
|
||||||
return view;
|
return view;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -111,6 +128,7 @@ public class ToggleReduceBrightColorsPreferenceFragment extends ToggleFeaturePre
|
|||||||
getPreferenceScreen().removePreference(persist);
|
getPreferenceScreen().removePreference(persist);
|
||||||
persist.setOrder(mShortcutPreference.getOrder() - 1);
|
persist.setOrder(mShortcutPreference.getOrder() - 1);
|
||||||
generalCategory.addPreference(persist);
|
generalCategory.addPreference(persist);
|
||||||
|
generalCategory.addPreference(mSchedulePref);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateFooterPreference() {
|
private void updateFooterPreference() {
|
||||||
@@ -119,10 +137,29 @@ public class ToggleReduceBrightColorsPreferenceFragment extends ToggleFeaturePre
|
|||||||
mFooterPreferenceController.displayPreference(getPreferenceScreen());
|
mFooterPreferenceController.displayPreference(getPreferenceScreen());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void updateSchedulePreference() {
|
||||||
|
if (mSchedulePref == null) return;
|
||||||
|
int mode = Settings.Secure.getIntForUser(getActivity().getContentResolver(),
|
||||||
|
Settings.Secure.EXTRA_DIM_AUTO_MODE, 0, UserHandle.USER_CURRENT);
|
||||||
|
switch (mode) {
|
||||||
|
default:
|
||||||
|
case MODE_DISABLED:
|
||||||
|
mSchedulePref.setSummary(R.string.string_disabled);
|
||||||
|
break;
|
||||||
|
case MODE_NIGHT:
|
||||||
|
mSchedulePref.setSummary(R.string.night_display_auto_mode_twilight);
|
||||||
|
break;
|
||||||
|
case MODE_TIME:
|
||||||
|
mSchedulePref.setSummary(R.string.night_display_auto_mode_custom);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onResume() {
|
public void onResume() {
|
||||||
super.onResume();
|
super.onResume();
|
||||||
updateSwitchBarToggleSwitch();
|
updateSwitchBarToggleSwitch();
|
||||||
|
updateSchedulePreference();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
Reference in New Issue
Block a user