在Settings中的dispaly项中显示护眼模式
在\vendor\mediatek\proprietary\packages\apps\MtkSettings\res\xml\display_settings.xml中找到夜间模式的对应的条目
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:settings="http://schemas.android.com/apk/res/com.android.settings"
android:title="@string/display_settings"
settings:keywords="@string/keywords_display">
....
<com.android.settings.display.NightDisplayPreference
android:key="night_display"
android:title="@string/eye_care_title"
android:fragment="com.android.settings.display.NightDisplaySettings"
android:widgetLayout="@null"
settings:widgetLayout="@null"
settings:keywords="@string/keywords_display_night_display" />
...
</PreferenceScreen>
通过搜索关键词 android:key="night_display" 找到相关的代码
\vendor\mediatek\proprietary\packages\apps\MtkSettings\src\com\android\settings\display\NightDisplayPreferenceController.java
package com.android.settings.display;
import android.content.Context;
import com.android.internal.app.NightDisplayController;
import com.android.settings.core.PreferenceControllerMixin;
import com.android.settingslib.core.AbstractPreferenceController;
public class NightDisplayPreferenceController extends AbstractPreferenceController implements
PreferenceControllerMixin {
private static final String KEY_NIGHT_DISPLAY = "night_display";
public NightDisplayPreferenceController(Context context) {
super(context);
}
@Override
public boolean isAvailable() {
return NightDisplayController.isAvailable(mContext);
}
@Override
public String getPreferenceKey() {
return KEY_NIGHT_DISPLAY;
}
}
通过上面代码中的NightDisplayController.isAvailable(mContext);可以判断是否显示,定位到\frameworks\base\core\java\com\android\internal\app\NightDisplayController.java
/**
/**
* Returns {@code true} if Night display is supported by the device.
*/
public static boolean isAvailable(Context context) {
return context.getResources().getBoolean(R.bool.config_nightDisplayAvailable);
}
/frameworks\base\core\res\res\values\config.xml
//护眼模式是否开启
<!-- Boolean indicating whether the HWC setColorTransform function can be performed efficiently
in hardware. -->
<bool name="config_setColorTransformAccelerated">false</bool>
<!-- Control whether Night display is available. This should only be enabled on devices
that have a HWC implementation that can apply the matrix passed to setColorTransform
without impacting power, performance, and app compatibility (e.g. protected content). -->
<bool name="config_nightDisplayAvailable">@bool/config_setColorTransformAccelerated</bool>
\vendor\mediatek\proprietary\packages\apps\MtkSettings\AndroidManifest.xml
<activity android:name="Settings$NightDisplaySettingsActivity"
--- android:label="@string/night_display_title"
+++ android:label="@string/eye_care_title"
android:enabled="@*android:bool/config_nightDisplayAvailable"
--- android:icon="@drawable/ic_settings_night_display"
+++ android:icon="@drawable/ic_qs_ear_on"
android:taskAffinity="">
...
</activity>
<activity android:name="Settings$NightDisplaySuggestionActivity"
android:enabled="@*android:bool/config_nightDisplayAvailable"
android:taskAffinity=""
---android:icon="@drawable/ic_settings_night_display"
+++android:icon="@drawable/ic_qs_ear_on">
...
\vendor\mediatek\proprietary\packages\apps\MtkSettings\res\values\strings.xml
+++<string name="eye_care_title">Eye Care</string>
+++ <string name="condition_eye_care_title">Eye Care is on</string>
+++ <string name="eye_care_display_text">Eye Care tints your screen amber. This makes it easier to look at your screen or read in dim light, and may help you fall asleep more easily.</string>
\vendor\mediatek\proprietary\packages\apps\MtkSettings\res\values-zh-rCN\strings.xml
+++<string name="eye_care_title">护眼模式</string>
+++ <string name="condition_eye_care_title">“护眼模式”已开启</string>
+++ <string name="eye_care_display_text">护眼模式会将您的屏幕色调调为琥珀色,可让您在光线昏暗的环境下更舒适地查看屏幕或阅读文字,并有助您入睡。</string>
\vendor\mediatek\proprietary\packages\apps\MtkSettings\res\xml\display_settings.xml
<com.android.settings.display.NightDisplayPreference
android:key="night_display"
---android:title="@string/night_display_title"
+++android:title="@string/eye_care_title"
android:fragment="com.android.settings.display.NightDisplaySettings"
android:widgetLayout="@null"
settings:widgetLayout="@null"
settings:keywords="@string/keywords_display_night_display" />
\vendor\mediatek\proprietary\packages\apps\MtkSettings\res\xml\night_display_settings.xml
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android"
---android:title="@string/night_display_title"
+++android:title="@string/eye_care_title">
.......
</PreferenceScreen>
\vendor\mediatek\proprietary\packages\apps\MtkSettings\src\com\android\settings\dashboard\conditional\NightDisplayCondition.java
public final class NightDisplayCondition extends Condition
implements NightDisplayController.Callback {
private NightDisplayController mController;
...
@Override
public Icon getIcon() {
--- return Icon.createWithResource(mManager.getContext(), R.drawable.ic_settings_night_display);
+++return Icon.createWithResource(mManager.getContext(), R.drawable.ic_qs_ear_on);
}
@Override
public CharSequence getTitle() {
--- return mManager.getContext().getString(R.string.condition_night_display_title);
+++ return mManager.getContext().getString(R.string.condition_eye_care_title);
}
@Override
public CharSequence getSummary() {
return mManager.getContext().getString(R.string.condition_night_display_summary);
}
@Override
public CharSequence[] getActions() {
return new CharSequence[] { mManager.getContext().getString(R.string.condition_turn_off) };
}
@Override
public void onPrimaryClick() {
--- Utils.startWithFragment(mManager.getContext(), NightDisplaySettings.class.getName(), null,
--- null, 0, R.string.night_display_title, null, MetricsEvent.DASHBOARD_SUMMARY);
+++Utils.startWithFragment(mManager.getContext(), NightDisplaySettings.class.getName(), null,
null, 0, R.string.eye_care_title, null, MetricsEvent.DASHBOARD_SUMMARY);
}
...
}
\vendor\mediatek\proprietary\packages\apps\MtkSettings\src\com\android\settings\display\NightDisplaySettings.java
@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
super.onCreatePreferences(savedInstanceState, rootKey);
// Load the preferences from xml.
addPreferencesFromResource(R.xml.night_display_settings);
---mFooterPreferenceMixin.createFooterPreference().setTitle(R.string.night_display_text);
+++mFooterPreferenceMixin.createFooterPreference().setTitle(R.string.eye_care_display_text);
mAutoModePreference = (DropDownPreference) findPreference(KEY_NIGHT_DISPLAY_AUTO_MODE);
mStartTimePreference = findPreference(KEY_NIGHT_DISPLAY_START_TIME);
...
在下拉菜单新增护眼模式快捷方式
\vendor\mediatek\proprietary\packages\apps\SystemUI\res\values\strings.xml
+++<string name="quick_settings_eye_care_label">Eye Care</string>
\vendor\mediatek\proprietary\packages\apps\SystemUI\res\values-zh-rCN\strings.xml
+++<string name="quick_settings_eye_care_label">护眼模式</string>
\vendor\mediatek\proprietary\packages\apps\SystemUI\src\com\android\systemui\qs\tiles\NightDisplayTile.java
@Override
protected void handleUpdateState(BooleanState state, Object arg) {
final boolean isActivated = mController.isActivated();
state.value = isActivated;
--- /*state.label = state.contentDescription =
--- mContext.getString(R.string.quick_settings_night_display_label);
--- state.icon = ResourceIcon.get(R.drawable.ic_qs_night_display_on);*/
+++ state.label = state.contentDescription =
+++ mContext.getString(R.string.quick_settings_eye_care_label);
+++ if(isActivated){
+++ state.icon = ResourceIcon.get(R.drawable.ic_qs_eye_on);
+++ }else {
+++ state.icon = ResourceIcon.get(R.drawable.ic_qs_eye_off);
+++ }
state.expandedAccessibilityClassName = Switch.class.getName();
state.state = state.value ? Tile.STATE_ACTIVE : Tile.STATE_INACTIVE;
}
\vendor\mediatek\proprietary\packages\apps\SystemUI\res\values\config.xml
<!-- The default tiles to display in QuickSettings -->
<string name="quick_settings_tiles_default" translatable="false">
wifi,bt,dnd,flashlight,rotation,battery,cell,airplane,supershot,screenrecorder,cast,night
</string>
<!-- Tiles native to System UI. Order should match "quick_settings_tiles_default" -->
<string name="quick_settings_tiles_stock" translatable="false">
wifi,cell,battery,dnd,flashlight,rotation,bt,airplane,location,hotspot,inversion,saver,work,cast,night
</string>