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="steps_unit">steps</string>
|
||||
|
||||
<!-- AOD Schedule -->
|
||||
<string name="always_on_display_schedule_title">Always on display schedule</string>
|
||||
<!-- AOD/Extra dim schedule -->
|
||||
<string name="extra_dim_schedule_title">Extra dim schedule</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_sunrise">Sunrise</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_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 android.app.settings.SettingsEnums;
|
||||
@@ -27,12 +32,14 @@ import android.content.Context;
|
||||
import android.hardware.display.ColorDisplayManager;
|
||||
import android.net.Uri;
|
||||
import android.os.Bundle;
|
||||
import android.os.UserHandle;
|
||||
import android.provider.Settings;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import androidx.annotation.VisibleForTesting;
|
||||
import androidx.preference.Preference;
|
||||
import androidx.preference.PreferenceCategory;
|
||||
import androidx.preference.TwoStatePreference;
|
||||
|
||||
@@ -59,10 +66,12 @@ public class ToggleReduceBrightColorsPreferenceFragment extends ToggleFeaturePre
|
||||
static final String KEY_SWITCH = "rbc_switch";
|
||||
private static final String REDUCE_BRIGHT_COLORS_ACTIVATED_KEY =
|
||||
Settings.Secure.REDUCE_BRIGHT_COLORS_ACTIVATED;
|
||||
private static final String KEY_SCHEDULE = "extra_dim_schedule";
|
||||
|
||||
private ReduceBrightColorsIntensityPreferenceController mRbcIntensityPreferenceController;
|
||||
private ReduceBrightColorsPersistencePreferenceController mRbcPersistencePreferenceController;
|
||||
private ColorDisplayManager mColorDisplayManager;
|
||||
private Preference mSchedulePref;
|
||||
|
||||
@Override
|
||||
protected void registerKeysToObserverCallback(
|
||||
@@ -96,8 +105,16 @@ public class ToggleReduceBrightColorsPreferenceFragment extends ToggleFeaturePre
|
||||
final View view = super.onCreateView(inflater, container, savedInstanceState);
|
||||
// Parent sets the title when creating the view, so set it after calling super
|
||||
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();
|
||||
updateFooterPreference();
|
||||
updateSchedulePreference();
|
||||
return view;
|
||||
}
|
||||
|
||||
@@ -111,6 +128,7 @@ public class ToggleReduceBrightColorsPreferenceFragment extends ToggleFeaturePre
|
||||
getPreferenceScreen().removePreference(persist);
|
||||
persist.setOrder(mShortcutPreference.getOrder() - 1);
|
||||
generalCategory.addPreference(persist);
|
||||
generalCategory.addPreference(mSchedulePref);
|
||||
}
|
||||
|
||||
private void updateFooterPreference() {
|
||||
@@ -119,10 +137,29 @@ public class ToggleReduceBrightColorsPreferenceFragment extends ToggleFeaturePre
|
||||
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
|
||||
public void onResume() {
|
||||
super.onResume();
|
||||
updateSwitchBarToggleSwitch();
|
||||
updateSchedulePreference();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user