根据需求,需要对当前的自动模式的逻辑进行更改,先描述一下具体需求:
在自动调节模式下:
- 当光线发生变化的时候,需要在seekBar显示当前的亮度值
- 自动模式还可以通过手动调整,并且调整之后当前亮度可以保持,不会立即被自动调节覆盖。
- 对比机上SeekBar对应当前亮度有变化过程,也就是缓慢增加或者减少。
了解清楚需求后,那么需要先了解当前的逻辑的实现,再对当前的逻辑进行修改,否则就会存在各种未考虑的问题,了解当前的逻辑后根据具体需求,整理出需要修改的问题点,一个一个地解决,保证每个步骤的可行性,那么最后的集成就不会有什么明显的错误存在。
android系统默认的自动模式的逻辑。
需要了解这一块需要先找个巨人的肩膀站一下,例如: Android屏幕亮度调节 通过该博客可以完全了解到当前的自动模式的调节逻辑,先不说自动模式当前亮度值的计算,当前亮度的计算需要从另外的blog中进行了解,毕竟计算方法直接看代码比较难懂,可以去找找,之前看的一篇blog,找不到地址了。
那么对自动模式的逻辑进行简单描述一下吧,这样就比较容易理解。
- 在切换调节模式的时候,配置光线传感器,开始工作,开始采集需要的数据。
- 采集到足够的数量的数据,通过系列的计算,根据光照值与亮度的表,取出光照值对应的屏幕亮度。
- 在计算出当前亮度之后,通过回调,更新当前亮度,并且更新电池计算、屏保亮度等信息。
在自动模式下,显示亮度是:当前亮度与权重的运算的值,具体怎么运算,我没看怎么懂,在通知栏中亮度的SeekBar对应的值是权重,滑动SeekBar实现当前亮度值进行微调,微调值adj的范围是[-1,1],在实际使用中是:(adj + 1)/2。所以在原生的逻辑中,是不能直接获取当前亮度、改变当前亮度值,改变亮度还可以通过上面提到的权重。
需求:修改自动模式的亮度显示
本来是打算在算法上进行动手的,事实上,对该算法不熟悉,并不能进行有效、安全的修改,那么只能往上走了,通过修改最终计算出亮度的回调,实现保存当前的亮度值、修改当前的亮度值,权重则为默认值,不进行修改。
下面有一个简单的流程图,是我们修改的目标,前提是:亮度调节处于自动模式,简单描述涉及到的关键点,并不全面。
紧接着从两个层次来分解,上层:当前亮度的显示,下一层逻辑:亮度的调节,开始实现步骤:
当前亮度的显示:
前提条件是:亮度调节模式是自动模式。
a)在数据库添加一个字段:screen_auto_brightness,保存自动模式下的当前亮度值。
b)通知栏的SeekBar滑动回调:手动改变,将当前的值传递到亮度调节的逻辑中,并且保存到数据库中。
c)在亮度自动改变的情况下:当前光照值改变,触发计算出新的亮度,更新到数据库中,通过ContentObserver实现实时更新当前亮度值。
d) 在亮度自动改变的情况下:得到的亮度值是最终的亮度值,中间没有变化过程,SeekBar需要添加一个缓慢变化过程,通过Handler实现以1为单位的渐变过程。
SystemUI中处理当前亮度的逻辑,就是显示当前刻度。
1)处理SeekBar显示,以及变化效果。
frameworks/base/packages/SystemUI/src/com/android/systemui/settings/BrightnessController.java1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174public class BrightnessController implements ToggleSlider.Listener {
//add by yangfujin@wind-mobi.com in 2017-06-21 for feature 167590 start
/**
* 更新SeekBar的最大值
* {@link android.provider.Settings.System#SCREEN_AUTO_BRIGHTNESS} uses the range [0, 255].
* Using this factor, it is converted to [0, BRIGHTNESS_ADJ_RESOLUTION] for the SeekBar.
*/
private static final float BRIGHTNESS_ADJ_RESOLUTION = 255;//default value 2048
···
private boolean autoChange = false;//区分自动模式下,手动改变还是自动改变的标识
private static final int MSG_CHANGE_BRIGHTNESS = 100;//update slider
private static final long DELAY_CHANGE = 30;//update slider 30ms
//添加这个Handler为了实现SeekBar进度缓慢变化过程,而不像原生逻辑,直接跳跃一大段,亮度直接变得很亮
private Handler brightnessHandler =new Handler() {
public void handleMessage(Message msg) {
super.handleMessage(msg);
if(msg.obj instanceof Integer){
int brigness = (int)msg.obj;
if(mControl.getValue() != brigness){
//mControl.getValue()获取当前SeekBar当前刻度,比较目标值和当前刻度,若目标值比当前大,那么就缓慢增加,反之。
final int newBrigness = mControl.getValue() - brigness > 0 ?
(mControl.getValue() -1 ) : (mControl.getValue() + 1 );
//update slide
mControl.setValue(newBrigness);
//再次发送延时消息,实现一点点增加或者减少
brightnessHandler.removeMessages(MSG_CHANGE_BRIGHTNESS);
Message msgUpdate = brightnessHandler.obtainMessage(MSG_CHANGE_BRIGHTNESS,brigness);
brightnessHandler.sendMessageDelayed(msgUpdate,DELAY_CHANGE);
} else {
//当前值与目标值相等,更新标识,完成此次更新
autoChange = false;
}
}
}
};
//add by yangfujin@wind-mobi.com in 2017-06-21 for feature 167590 end
/** ContentObserver to watch brightness **/
private class BrightnessObserver extends ContentObserver {
···
private final Uri BRIGHTNESS_ADJ_URI =
Settings.System.getUriFor(Settings.System.SCREEN_AUTO_BRIGHTNESS_ADJ);
//add by yangfujin@wind-mobi.com in 2017-06-21 for feature 167590 start
//获取新添加的字段的URI,作为实时监听值的变化
private final Uri SCREEN_AUTO_BRIGHTNESS_URI =
Settings.System.getUriFor(Settings.System.SCREEN_AUTO_BRIGHTNESS);
//add by yangfujin@wind-mobi.com in 2017-06-21 for feature 167590 end
//监听到对应字段的值发生改变,理应更新对应的状态
public void onChange(boolean selfChange, Uri uri) {
···
} else if (BRIGHTNESS_ADJ_URI.equals(uri) && mAutomatic) {
updateSlider();
//add by yangfujin@wind-mobi.com in 2017-06-21 for feature 167590 start
//数据改变,进行更新显示的数据
}else if (SCREEN_AUTO_BRIGHTNESS_URI.equals(uri) && mAutomatic) {
autoChange = true;//为了区分是自动模式当前亮度改变的标识
updateSlider();//更新SeekBar当前进度
//add by yangfujin@wind-mobi.com in 2017-06-21 for feature 167590 end
}else {
updateMode();
updateSlider();
}
···
}
public void startObserving() {
···
cr.registerContentObserver(
BRIGHTNESS_ADJ_URI,
false, this, UserHandle.USER_ALL);
//add by yangfujin@wind-mobi.com in 2017-06-21 for feature 167590 start
//开始监听对应的URI
cr.registerContentObserver(
SCREEN_AUTO_BRIGHTNESS_URI,
false, this, UserHandle.USER_ALL);
//add by yangfujin@wind-mobi.com in 2017-06-21 for feature 167590 end
}
public void stopObserving() {
final ContentResolver cr = mContext.getContentResolver();
cr.unregisterContentObserver(this);
}
}
public void onChanged(ToggleSlider view, boolean tracking, boolean automatic, int value,
boolean stopTracking) {
if (!mAutomatic) {
···
} else {
//modified by yangfujin@wind-mobi.com in 2017-06-21 for feature 167590 start
//移除原来的逻辑
//final float adj = value / (BRIGHTNESS_ADJ_RESOLUTION / 2f) - 1;
if(autoChange) return;
//modified by yangfujin@wind-mobi.com in 2017-06-21 for feature 167590 end
if (stopTracking) {
MetricsLogger.action(mContext, MetricsEvent.ACTION_BRIGHTNESS_AUTO, value);
}
//modified by yangfujin@wind-mobi.com in 2017-06-21 for feature 167590 start
setBrigness(value);//添加新的逻辑,也就是将当前值传到亮度调节的逻辑中
/*setBrightnessAdj(adj);*/ //移除原来的逻辑
//modified by yangfujin@wind-mobi.com in 2017-06-21 for feature 167590 end
if (!tracking) {
AsyncTask.execute(new Runnable() {
public void run() {
//modified by yangfujin@wind-mobi.com in 2017-06-21 for feature 167590 start
//replace SCREEN_AUTO_BRIGHTNESS_ADJ by SCREEN_AUTO_BRIGHTNESS
//自动模式,手动调节亮度,保存当前亮度值到数据库中
Settings.System.putIntForUser(mContext.getContentResolver(),
Settings.System.SCREEN_AUTO_BRIGHTNESS, value,
UserHandle.USER_CURRENT);
//modified by yangfujin@wind-mobi.com in 2017-06-21 for feature 167590 end
}
});
}
}
···
}
/**
* 将当前亮度值传到调节当前亮度的逻辑中
* add by yangfujin@wind-mobi.com in 2017-06-21 for feature 167590 start
* add for auto-brightness manual change
*/
private void setBrigness(int brightness) {
try {
mPower.setTemporaryScreenAutoBrightnessSettingOverride(brightness);
} catch (RemoteException ex) {
Log.e(TAG,"in auto-brightness setBrigness failed ,Error "+ex);
}
}
//add by yangfujin@wind-mobi.com in 2017-06-21 for feature 167590 end
/** Fetch the brightness from the system settings and update the slider */
private void updateSlider() {
if (mAutomatic) {//当前为自动模式
//modified by yangfujin@wind-mobi.com in 2017-06-21 for feature 167590 start
/* 移除原来的逻辑
float value = Settings.System.getFloatForUser(mContext.getContentResolver(),
Settings.System.SCREEN_AUTO_BRIGHTNESS_ADJ, 0,
UserHandle.USER_CURRENT);
mControl.setMax((int) BRIGHTNESS_ADJ_RESOLUTION);
mControl.setValue((int) ((value + 1) * BRIGHTNESS_ADJ_RESOLUTION / 2f));
*/
//获取当前亮度
int value = Settings.System.getIntForUser(mContext.getContentResolver(),
Settings.System.SCREEN_AUTO_BRIGHTNESS, 0,
UserHandle.USER_CURRENT);
mControl.setMax((int) BRIGHTNESS_ADJ_RESOLUTION);//更新最大值
if(autoChange){//是否是自动模式下改变当前亮度值
//这里为了实现seekBar一点点增加的效果,亮度变化过程需要一个小变化率
brightnessHandler.removeMessages(MSG_CHANGE_BRIGHTNESS);
Message msg = brightnessHandler.obtainMessage(MSG_CHANGE_BRIGHTNESS,value);
brightnessHandler.sendMessageDelayed(msg,DELAY_CHANGE);
} else {
//直接更新当前进度
mControl.setValue(value);
}
//modified by yangfujin@wind-mobi.com in 2017-06-21 for feature 167590 end
} else {
···
}
}
····
}
2)需要添加获取SeekBar当前值的方法。
frameworks/base/packages/SystemUI/src/com/android/systemui/settings/ToggleSlider.java1
2
3
4
5
6
7
8
9public class ToggleSlider extends RelativeLayout {
···
//add by yangfujin@wind-mobi.com in 2017-06-21 for feature 167590 start
public int getValue(){
return mSlider.getProgress();
}
//add by yangfujin@wind-mobi.com in 2017-06-21 for feature 167590 end
···
}
亮度的调节:
a)从SystemUI传递到services,原来的逻辑使用的是跨进程通信,那么我们也在直接添加一个方法,不对原来的逻辑进行修改。
b)自动模式下,存储当前亮度值,数据库添加一个字段,在system表中。
下面开始具体的步骤:
1)传值是通过一个对象的形式进行传递,那么这里在这个类中添加两个字段。
frameworks/base/core/java/android/hardware/display/DisplayManagerInternal.java1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56public abstract class DisplayManagerInternal {
···
//add by yangfujin@wind-mobi.com in 2017-06-21 for feature 167590
/**
* The desired screen brightness in the range 0 (minimum / off) to 255 (brightest).
* current brightness when auto-brightness enable
*/
public int autoModeScreenBrightness;//当前亮度值
/**
* The desired screen brightness when auto-brightness enable,change by user {true},other {false}
*/
public boolean autoModeManualOp;//作为手动改变亮度的标识
//add by yangfujin@wind-mobi.com in 2017-06-21 for feature 167590 end
···
//下面需要完善这个类中的其他方法
public DisplayPowerRequest() {
···
dozeScreenState = Display.STATE_UNKNOWN;
//add by yangfujin@wind-mobi.com in 2017-06-21 for feature 167590 start
autoModeScreenBrightness = PowerManager.BRIGHTNESS_ON;
autoModeManualOp = false;
//add by yangfujin@wind-mobi.com in 2017-06-21 for feature 167590 end
}
···
public void copyFrom(DisplayPowerRequest other) {
···
useTwilight = other.useTwilight;
//add by yangfujin@wind-mobi.com in 2017-06-21 for feature 167590 start
autoModeScreenBrightness = other.autoModeScreenBrightness;
autoModeManualOp = other.autoModeManualOp;
//add by yangfujin@wind-mobi.com in 2017-06-21 for feature 167590 end
}
public boolean equals(DisplayPowerRequest other) {
return other != null
···
&& useTwilight == other.useTwilight
//add by yangfujin@wind-mobi.com in 2017-06-21 for feature 167590 start
&& autoModeScreenBrightness == other.autoModeScreenBrightness
&& autoModeManualOp == other.autoModeManualOp;
//add by yangfujin@wind-mobi.com in 2017-06-21 for feature 167590 end
}
public String toString() {
return "policy=" + policyToString(policy)
···
+ ", useTwilight=" + useTwilight
//add by yangfujin@wind-mobi.com in 2017-06-21 for feature 167590 start
+ ",autoModeScreenBrightness="+autoModeScreenBrightness
+",autoModeManualOp="+autoModeManualOp;
//add by yangfujin@wind-mobi.com in 2017-06-21 for feature 167590 end
}
···
}
2)添加一个传递值的方法
frameworks/base/core/java/android/os/IPowerManager.aidl1
2
3
4
5
6
7
8interface IPowerManager{
···
//添加方法,上层向service传值,传递自动模式当前亮度值
//add by yangfujin@wind-mobi.com in 2017-06-21 for feature 167590 start
void setTemporaryScreenAutoBrightnessSettingOverride(int brightness);
//add by yangfujin@wind-mobi.com in 2017-06-21 for feature 167590 end
···
}
3)覆写上面添加的方法
frameworks/base/services/core/java/com/android/server/power/PowerManagerService.java1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77public final class PowerManagerService extends SystemService
implements Watchdog.Monitor {
···
//add by yangfujin@wind-mobi.com in 2017-06-21 for feature 167590
//添加临时值,作为保存SystemUI传下来的值
// The screen brightness adjustment setting override from the settings
// application to temporarily adjust the auto-brightness adjustment factor
//in the rang 0 .. 255
// Use NaN to disable.
private int mTemporaryScreenAutoBrightnessSettingOverride = -1;
···
private boolean updateDisplayPowerStateLocked(int dirty) {
···
mDisplayPowerRequest.lowPowerMode = mLowPowerModeEnabled;
mDisplayPowerRequest.boostScreenBrightness = mScreenBrightnessBoostInProgress;
mDisplayPowerRequest.useTwilight = mBrightnessUseTwilight;
//add by yangfujin@wind-mobi.com in 2017-06-21 for feature 167590 start
mDisplayPowerRequest.autoModeManualOp = false;//调用这个方法的都不是手动改变的,手动改变的亮度的是另外一个方法
//add by yangfujin@wind-mobi.com in 2017-06-21 for feature 167590 end
}
/**
* 自动模式,手动调节执行的方法
* add by yangfujin@wind-mobi.com in 2017-06-21 for feature 167590
* change backlight by user when in auto-brightness,rang 0..255
* @param brightness The overridden brightness.
*/
private void setTemporaryScreenAutoBrightnessSettingOverrideInternal(int brightness) {
synchronized (mLock) {
// Note: This condition handles NaN because NaN is not equal to any other
// value, including itself.
if (mTemporaryScreenAutoBrightnessSettingOverride != brightness) {
mTemporaryScreenAutoBrightnessSettingOverride = brightness;
//验证传过来的亮度值是否是有效的
if(!isValidBrightness(mTemporaryScreenAutoBrightnessSettingOverride)){
mTemporaryScreenAutoBrightnessSettingOverride = mScreenBrightnessSetting;
}
//更新亮度值
mDisplayPowerRequest.autoModeScreenBrightness = mTemporaryScreenAutoBrightnessSettingOverride;
//上层只有自动模式下才会调用这个,下面两个值写死
mDisplayPowerRequest.useAutoBrightness = true;//当前模式:自动模式
mDisplayPowerRequest.autoModeManualOp = true;//自动模式下,手动改变
//update brightness
mDisplayReady = mDisplayManagerInternal.requestPowerState(mDisplayPowerRequest,
mRequestWaitForNegativeProximity);//传递该对象,更新亮度
}
}
}
/**
* 覆写AIDL中的方法
* add by yangfujin@wind-mobi.com in 2017-06-21 for feature 167590
* Used by the settings application and brightness control widgets to
* temporarily override the current screen auto-brightness brightness setting so that the
* user can observe the effect of an intended settings change without applying
* it immediately.
*
* The override will be canceled when the setting value is next updated.
*
* @param adj The overridden brightness, or Float.NaN to disable the override.
*
* @see android.provider.Settings.System#SCREEN_AUTO_BRIGHTNESS
*/
// Binder call
public void setTemporaryScreenAutoBrightnessSettingOverride(int brightness){
mContext.enforceCallingOrSelfPermission(
android.Manifest.permission.DEVICE_POWER, null);
final long ident = Binder.clearCallingIdentity();
try {
setTemporaryScreenAutoBrightnessSettingOverrideInternal(brightness);
} finally {
Binder.restoreCallingIdentity(ident);
}
}
4)数据库中添加一个字段
frameworks/base/core/java/android/provider/Settings.java1
2
3
4
5
6
7
8
9
10
11
12
13
14
15public final class Settings {
···
public static final class System extends NameValueTable {
···
//add by yangfujin@wind-mobi.com in 2017-06-21 for feature 167590 start
/**
* in auto-brightness mode,user change current backbrightness
* rang 0..255
* @hide
*/
public static final String SCREEN_AUTO_BRIGHTNESS = "screen_auto_brightness";
//add by yangfujin@wind-mobi.com in 2017-06-21 for feature 167590 end
···
}
}
5)更新亮度。
frameworks/base/services/core/java/com/android/server/display/DisplayPowerController.java1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85final class DisplayPowerController implements AutomaticBrightnessController.Callbacks {
···
//add by yangfujin@wind-mobi.com in 2017-06-21 for feature 167590 start
//for manial change brightness,shuold delay for auto change
private boolean shouldDelay ;//作为手动改变亮度后的标识
private static final int MSG_AUTO_MODE_MANUAL_CHANGE = 201;
private static final long MSG_DELAY_DURATION = 3 * 1000L;//3s延时,意思是:当手动改变之后,3s内不接受光线传感器接收值变化引起亮度的改变,这样可以实现在当前光线环境下,保持手动调节的亮度
//add by yangfujin@wind-mobi.com in 2017-06-21 for feature 167590 end
···
private void updatePowerState() {
···
if (mPowerRequest.boostScreenBrightness
&& brightness != PowerManager.BRIGHTNESS_OFF) {
brightness = PowerManager.BRIGHTNESS_ON;
}
// Apply auto-brightness.
boolean slowChange = false;
//add by yangfujin@wind-mobi.com in 2017-06-21 for feature 167590 start
//标识:自动模式下,改变亮度应该使用小速率,慢慢变化,配合SeekBar缓慢滑动
boolean isManualChange = false;//for brigness change rate
//add by yangfujin@wind-mobi.com in 2017-06-21 for feature 167590 end
if (brightness < 0) {
if (autoBrightnessEnabled) {
//modified by yangfujin@wind-mobi.com in 2017-06-21 for feature 167590 start
if(mPowerRequest.autoModeManualOp) {//手动调节下
brightness = mPowerRequest.autoModeScreenBrightness;//上层SystemUI传递下来的亮度值
shouldDelay = true;//手动改变,那么应该3s内不接受光线传感器光线变化的回调
isManualChange = true;//应该时候小速率,实现与SeekBar同步,亮度与SeekBar速率的配合
mHandler.removeMessages(MSG_AUTO_MODE_MANUAL_CHANGE);//3s后改变shouldDelay值
mHandler.sendEmptyMessageDelayed(MSG_AUTO_MODE_MANUAL_CHANGE,MSG_DELAY_DURATION);
} else {
isManualChange = false;
if(!shouldDelay){//没有手动调节过,立马接收光感的变化引起的亮度变化;若调节过,则需要等3s,shouldDelay =false
brightness = mAutomaticBrightnessController.getAutomaticScreenBrightness();
Settings.System.putIntForUser(mContext.getContentResolver(),
Settings.System.SCREEN_AUTO_BRIGHTNESS, brightness,
UserHandle.USER_CURRENT);
}else{//在手动调节过,3s内还是显示手动调节的亮度,这里会有回调因为屏保、电池相关状态更新
brightness = mPowerRequest.autoModeScreenBrightness;
}
}
//modified by yangfujin@wind-mobi.com in 2017-06-21 for feature 167590 end
}
if (brightness >= 0) {
// Use current auto-brightness value and slowly adjust to changes.
brightness = clampScreenBrightness(brightness);
//modified by yangfujin@wind-mobi.com in 2017-06-21 for feature 167590 start
// add isManualChange,为了低速率改变亮度
if (mAppliedAutoBrightness && !autoBrightnessAdjustmentChanged && !isManualChange) {
slowChange = true; // slowly adapt to auto-brightness
}
//modified by yangfujin@wind-mobi.com in 2017-06-21 for feature 167590 end
mAppliedAutoBrightness = true;
} else {
mAppliedAutoBrightness = false;
}
} else {
mAppliedAutoBrightness = false;
}
}
···
private final class DisplayControllerHandler extends Handler {
public DisplayControllerHandler(Looper looper) {
super(looper, null, true /*async*/);
}
public void handleMessage(Message msg) {
switch (msg.what) {
···
case MSG_PROTECT_LOW_DIMMING:
handleProtectLowDimming();
break;
//add by by yangfujin@wind-mobi.com in 2017-06-21 for feature 167590 start
case MSG_AUTO_MODE_MANUAL_CHANGE:
//3s更新该值,为了防止抖动,刚手动调节完,环境光改变这么巧引起背光变化,那就会有很明显的闪烁
shouldDelay = false;
break;
//add by yangfujin@wind-mobi.com in 2017-06-21 for feature 167590 end
}
}
}
}
总结
这里是通过修改自动模式的上层代码,实现手动调节当前亮度,而不是调节权重值,并且可以显示当前亮度,对原来的逻辑不进行大的修改,只是增加了一些小的方法块。亮度调节这块的逻辑比较复杂,涉及到的情况比较多,所以修改起来比较难,需要耐心读懂这部分的逻辑,若修改有问题,可能会导致屏幕闪烁,或者屏幕亮度被调到到最亮或最暗,还有自动模式下,手动调节亮度闪烁,这是我踩过的坑。