Skip to content

Commit 23e9c05

Browse files
committed
create README.md
1 parent 3a14ada commit 23e9c05

File tree

5 files changed

+371
-0
lines changed

5 files changed

+371
-0
lines changed

.idea/vcs.xml

+6
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

LICENSE

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
MIT License
2+
3+
Copyright (c) 2023 cjyyy
4+
5+
Permission is hereby granted, free of charge, to any person obtaining a copy
6+
of this software and associated documentation files (the "Software"), to deal
7+
in the Software without restriction, including without limitation the rights
8+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9+
copies of the Software, and to permit persons to whom the Software is
10+
furnished to do so, subject to the following conditions:
11+
12+
The above copyright notice and this permission notice shall be included in all
13+
copies or substantial portions of the Software.
14+
15+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21+
SOFTWARE.

README.md

+72
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
# 屏幕滤镜(类DC)
2+
3+
## 应用简介
4+
5+
对于 OLED 屏幕的手机,一般情况下,屏幕亮度越低,频闪越强。本应用控制屏幕具有较高的亮度,并通过给屏幕添加一层不透明度可调的黑色滤镜来调节实际亮度,从而实现低亮度下也有低频闪的效果。同时,当环境光照较高时,应用会自动关闭屏幕滤镜并打开系统自动亮度,从而使屏幕能够达到最大激发亮度。
6+
7+
本应用在开发时没有考虑兼容性,目前只能保证在我的手机上正常运行。我的手机系统是 MIUI14.
8+
9+
本应用参考了开源项目 https://www.coolapk.com/apk/com.omarea.filter
10+
11+
## 软件使用逻辑
12+
13+
### 主界面
14+
15+
打开软件,打开准备界面(提示提供相应权限)
16+
17+
软件主界面,有
18+
19+
- 屏幕滤镜开关(支持状态栏快捷设置)
20+
- 智能亮度开关(支持状态栏快捷设置)(关闭系统自动亮度,自己实现智能亮度)
21+
- 屏幕亮度设置拖动条(与系统状态栏亮度条同步)
22+
- 最低硬件亮度拖动条(最低硬件亮度应设置为手机屏幕关闭类 DC 调光的阈值)
23+
- 最高滤镜不透明度拖动条,可以调整夜间全黑环境下最舒适的屏幕亮度
24+
- 高光照阈值拖动条(光照达到阈值,打开系统自动亮度,使屏幕能够达到最大激发亮度)
25+
- 亮度-光照曲线设置界面开关
26+
27+
### 光照控制亮度逻辑
28+
29+
通过亮度-光照曲线来实现。点击主界面的亮度-光照曲线设置按钮,打开亮度-光照曲线设置界面。可以通过增减修改光照-亮度对应点来调整亮度-光照曲线。
30+
31+
智能亮度逻辑通过有限状态机实现。有光照平稳、光照突增、光照突减、超高光照、用户调整这几种状态。
32+
33+
光照平稳、光照突增、光照突减:根据亮度-光照曲线设置屏幕亮度 #TODO
34+
35+
高光照:打开系统自动亮度,使屏幕达到最大激发亮度
36+
37+
用户调整:在用户锁屏之前,或一定时间内,以用户调整的亮度为准 #TODO
38+
39+
40+
## 项目依赖
41+
42+
androidplot 库, https://github.com/halfhp/androidplot
43+
44+
可以直接用 Android Studio 打开项目。开发时使用的是 2022.2.1 版。
45+
46+
## 项目架构
47+
48+
### GlobalStatus
49+
50+
使项目各模块解耦合。当一个模块要调用另一个模块的方法时,必须通过 GlobalStatus。
51+
52+
### UI
53+
54+
与应用 UI 有关的模块位于 ui 文件夹下。
55+
56+
### FilterViewManager
57+
58+
应用的核心模块,负责管理屏幕滤镜。
59+
60+
### AppAccessibilityService
61+
62+
无障碍服务,用户启用无障碍功能时被创建
63+
64+
### BrightnessManager
65+
66+
实现光照控制亮度逻辑
67+
68+
光照-亮度对应点 (光照强度{[0,+inf] lux}, 屏幕亮度{[0,1]})
69+
70+
### QuickSetting
71+
72+
与状态栏磁贴服务有关的模块位于 quicksetting 文件夹下

其它/笔记.md

+85
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
## 光线传感器
2+
3+
https://blog.csdn.net/hello_1995/article/details/119890052
4+
5+
监听器
6+
7+
```java
8+
private class MySensorEventListener implements SensorEventListener {
9+
10+
@Override
11+
public void onAccuracyChanged(Sensor sensor, int accuracy) {
12+
Log.d("myLog", "onAccuracyChanged:" + sensor.getType() + "->" + accuracy);
13+
}
14+
15+
@Override
16+
public void onSensorChanged(SensorEvent sensorEvent) {
17+
if (sensorEvent.sensor.getType() == Sensor.TYPE_LIGHT){
18+
String msg = "lux: "+ sensorEvent.values[0];
19+
Log.d("myLog", msg);
20+
}
21+
}
22+
}
23+
```
24+
25+
进行监听
26+
27+
```java
28+
this.mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
29+
this.mMySensorEventListener = new MySensorEventListener();
30+
31+
if (mSensorManager != null){
32+
Sensor lightSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);
33+
if (lightSensor != null) {
34+
mSensorManager.registerListener(mMySensorEventListener, lightSensor, SensorManager.SENSOR_DELAY_NORMAL);
35+
}
36+
}
37+
```
38+
39+
注销传感器的监听器
40+
41+
```java
42+
@Override
43+
protected void onPause() {
44+
super.onPause();
45+
if (mSensorManager != null) {
46+
mSensorManager.unregisterListener(mMySensorEventListener);
47+
}
48+
}
49+
```
50+
51+
## 获取系统亮度
52+
53+
```java
54+
/**
55+
* 获取系统亮度, 屏幕亮度值范围(0-255)
56+
*/
57+
private int getScreenBrightness(Context context) {
58+
ContentResolver contentResolver = context.getContentResolver();
59+
int defVal = 125;
60+
return Settings.System.getInt(contentResolver,
61+
Settings.System.SCREEN_BRIGHTNESS, defVal);
62+
}
63+
```
64+
65+
调用时
66+
67+
```java
68+
getScreenBrightness(getApplicationContext())
69+
```
70+
71+
## 系统亮度设置
72+
73+
https://blog.csdn.net/MLQ8087/article/details/103704891
74+
75+
```java
76+
/**
77+
* 修改 Setting 中屏幕亮度值
78+
**/
79+
private void ModifySettingsScreenBrightness(Context context, int birghtessValue) {
80+
ContentResolver contentResolver = context.getContentResolver();
81+
Settings.System.putInt(contentResolver,
82+
Settings.System.SCREEN_BRIGHTNESS, birghtessValue);
83+
}
84+
```
85+

其它/说明.md

+187
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,187 @@
1+
## 依赖
2+
3+
https://github.com/halfhp/androidplot
4+
5+
## 软件使用逻辑
6+
7+
### 主界面
8+
9+
打开软件,打开准备界面(提示提供相应权限)(之后操作也要权限检查,不通过则放弃操作,且打开准备页面)
10+
11+
软件主界面,有
12+
13+
- 滤镜开关(支持状态栏快捷设置)
14+
- 智能亮度开关(支持状态栏快捷设置)(关闭系统自动亮度,自己实现智能亮度)
15+
- 最低硬件亮度拖动条(最低硬件亮度一般为手机屏幕关闭类 DC 调光的阈值)
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+
### MainActivity, MainUI
46+
47+
主界面
48+
49+
#### 启动时
50+
51+
检查权限,打开准备界面
52+
53+
读取存储的应用设置或默认设置,保存到 `GlobalStatus` (应用存储变量,`BrightnessManager`
54+
55+
### PreparatoryActivity
56+
57+
准备界面,使用户提供相应权限
58+
59+
### BrightnessPointActivity
60+
61+
用来设置亮度-光照曲线
62+
63+
通过 `GlobalStatus` 修改光照-亮度对应点列表,注意零光照点和高光照阈值点必须存在
64+
65+
66+
### FilterViewManager
67+
68+
管理屏幕滤镜
69+
70+
### FilterAccessibilityService
71+
72+
无障碍服务,用户启用无障碍功能时被创建
73+
74+
#### 启动时
75+
76+
创建 `FilterViewManager`,加入到 `GlobalStatus`
77+
78+
#### 运行时
79+
80+
监视光照,更新至 `GlobalStatus`,光照改变时调用 `brightnessManager.onLightChanged(float light)`
81+
82+
监视系统亮度,更新至 `GlobalStatus`,用户改变系统亮度时调用 `brightnessManager.onSystemBrightnessChangedByUser(float brightness)`
83+
84+
### GlobalStatus
85+
86+
全局变量、方法
87+
88+
#### 应用存储变量
89+
90+
- minHardwareBrightness: 最低硬件亮度,当高于此亮度时,屏幕应为类 DC 调光
91+
- maxFilterOpacity: 最高滤镜不透明度
92+
- highLightThreshold: 高光照阈值
93+
94+
95+
#### float light
96+
97+
当前传感器获得的光照强度,单位 lux
98+
99+
#### float userBrightness
100+
101+
当前用户设置的屏幕亮度,范围 [0,1]
102+
103+
#### void setFilterViewManager(FilterViewManager f)
104+
105+
#### void setBrightnessManager(BrightnessManager bm)
106+
107+
#### boolean isAccessibility()
108+
109+
判断是否具有足够的权限
110+
111+
#### void openPreparatoryActivity()
112+
113+
打开准备界面
114+
115+
#### void openFilter()
116+
117+
检查权限,打开滤镜
118+
119+
#### void closeFilter()
120+
121+
关闭滤镜
122+
123+
#### void setAlpha(float alpha)
124+
125+
调用 `FilterViewManager` 设置滤镜不透明度
126+
127+
`alpha` 取值 [0,1], 0 表示完全透明,1 表示完全不透明
128+
129+
<!-- #### void setBrightness(float brightness)
130+
131+
设置亮度。在用户手动调整亮度时使用。
132+
133+
`brightness` 取值 [0,1],0 表示最暗,1 表示最亮 -->
134+
135+
#### void openIntelligentBrightness()
136+
137+
检查权限,打开智能亮度
138+
139+
#### void closeIntelligentBrightness()
140+
141+
关闭智能亮度
142+
143+
#### list getBrightnessPointList()
144+
145+
返回光照-亮度对应点列表
146+
147+
#### void addBrightnessPoint(float light, float brightness)
148+
149+
添加光照-亮度对应点,同时更新应用存储
150+
151+
#### void delBrightnessPoint(int id)
152+
153+
删除光照-亮度对应点,同时更新应用存储
154+
155+
#### void setBrightnessPoint(int id, float light, float brightness)
156+
157+
设置光照-亮度对应点,同时更新应用存储
158+
159+
#### void onLightChanged(float light)
160+
161+
当传感器获取的光照强度改变时被调用,`light` 单位为 lux
162+
163+
当智能亮度开时,根据光照,计算得相应亮度,计算得相应系统亮度并设置,计算得相应滤镜不透明度并设置
164+
165+
#### void onSystemBrightnessChangedByUser(float brightness)
166+
167+
用户改变系统亮度时被调用
168+
169+
brightness 范围 [0,1]
170+
171+
### BrightnessManager
172+
173+
实现光照控制亮度逻辑
174+
175+
光照-亮度对应点 (光照强度{[0,+inf] lux}, 屏幕亮度{[0,1]})
176+
177+
### QuickSettingFilter
178+
179+
状态栏快速设置服务,开关屏幕滤镜
180+
181+
### QuickSettingScreenShot
182+
183+
状态栏快速设置服务,关闭屏幕滤镜,调用屏幕截图功能,再打开屏幕截图
184+
185+
### QuickSettingIntelligentBrightness
186+
187+
状态栏快速设置服务,开关智能亮度

0 commit comments

Comments
 (0)