RK Android5.1 亮度条、ContentObserver内容观察者模式

一.Setting 里面 亮度条弹窗

1.1.packages/apps/Settings/res/xml/display_settings.xml

1
2
3
4
5
6
<PreferenceScreen
        android:key="brightness"
        android:title="@string/brightness"
        settings:keywords="@string/keywords_display_brightness_level">
    <intent android:action="android.intent.action.SHOW_BRIGHTNESS_DIALOG" />
</PreferenceScreen>

1.2.frameworks/base/packages/SystemUI/AndroidManifest.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
<activity
    android:name=".settings.BrightnessDialog"
    android:label="@string/quick_settings_brightness_dialog_title"
    android:theme="@android:style/Theme.DeviceDefault.Dialog"
    android:finishOnCloseSystemDialogs="true"
    android:launchMode="singleInstance"
    android:excludeFromRecents="true"
    android:exported="true">
    <intent-filter>
        <action android:name="android.intent.action.SHOW_BRIGHTNESS_DIALOG" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

1.3.frameworks\base\packages\SystemUI\src\com\android\systemui\settings\BrightnessDialog.java  亮度条弹框

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class BrightnessDialog extends Activity {
 
    private BrightnessController mBrightnessController;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
 
        final Window window = getWindow();
 
        window.setGravity(Gravity.TOP);
        window.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
        window.requestFeature(Window.FEATURE_NO_TITLE);
        //布局文件
        setContentView(R.layout.quick_settings_brightness_dialog);
 
        final ImageView icon = (ImageView) findViewById(R.id.brightness_icon);
        //亮度条
        final ToggleSlider slider = (ToggleSlider) findViewById(R.id.brightness_slider);
        mBrightnessController = new BrightnessController(this, icon, slider);
    }

1.4. 全场重点来了 BrightnessController 获取设备最大的亮度和最低的亮度值、设置屏幕的亮度、保存和获取当前的亮度值和亮度调节模式  
ContentObserver 内容观察者 观察(捕捉)特定Uri引起的数据库的变化 继而做一些相应的处理
这就不用另写线程 去监听数据库的变化 更新UI

推荐的文章  Android中内容观察者的使用---- ContentObserver类详解

ContentObserver类介绍

1
2
3
4
5
6
7
8
构造方法 public void ContentObserver(Handler handler) 
      说明:所有   ContentObserver的派生类都需要调用该构造方法
   参数: handler  Handler对象。可以是主线程Handler(这时候可以更新UI 了),也可以是任何Handler对象。
 
常用方法
  void onChange(boolean selfChange)
      功能:当观察到的Uri发生变化时,回调该方法去处理。所有ContentObserver的派生类都需要重载该方法去处理逻辑。
      参数:selfChange

frameworks\base\packages\SystemUI\src\com\android\systemui\settings\BrightnessController.java  

ContentObserver to watch brightness   内部类 BrightnessObserver

onChange 更新亮度条

1
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
private class BrightnessObserver extends ContentObserver {
 
    private final Uri BRIGHTNESS_MODE_URI =
            Settings.System.getUriFor(Settings.System.SCREEN_BRIGHTNESS_MODE);
    private final Uri BRIGHTNESS_URI =
            Settings.System.getUriFor(Settings.System.SCREEN_BRIGHTNESS);
    private final Uri BRIGHTNESS_ADJ_URI =
            Settings.System.getUriFor(Settings.System.SCREEN_AUTO_BRIGHTNESS_ADJ);
 
    public BrightnessObserver(Handler handler) {
        super(handler);
    }
 
    @Override
    public void onChange(boolean selfChange) {
        onChange(selfChange, null);
    }
 
    @Override
    public void onChange(boolean selfChange, Uri uri) {
        if (selfChange) return;
        try {
            mExternalChange = true;
            if (BRIGHTNESS_MODE_URI.equals(uri)) {
                updateMode();
                updateSlider();
            } else if (BRIGHTNESS_URI.equals(uri) && !mAutomatic) {
                updateSlider();

Android灯光系统(3)——背光灯控制实现 刷新UI 

1
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
public BrightnessController(Context context, ImageView icon, ToggleSlider control) {
    mContext = context;
    mIcon = icon;
    mControl = control;
    mHandler = new Handler();
………………………………………………
@Override
public void onChanged(ToggleSlider view, boolean tracking, boolean automatic, int value) {
    updateIcon(mAutomatic);
    if (mExternalChange) return;
 
    if (!mAutomatic) {
        final int val = value + mMinimumBacklight;
        setBrightness(val);
    /*如果当前不是一直按着滑动块而是松手了的话就把那些数据写到数据库里面去。
    注意在滑动过程中是直接调用setBrightness(),而不是通过数据库来实现的。但是松手后
    才写入数据库的。
    */
        if (!tracking) {
            AsyncTask.execute(new Runnable() {
                    public void run() {
                        Settings.System.putIntForUser(mContext.getContentResolver(),
                                Settings.System.SCREEN_BRIGHTNESS, val,
                                UserHandle.USER_CURRENT);
                    }
                });
        }
    }  

 二.亮度调整显示“当前亮度值xxx”

 

 

2.1.Patch

1
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
diff --git a/frameworks/base/packages/SystemUI/res/layout/quick_settings_brightness_dialog.xml b/frameworks/base/packages/SystemUI/res/layout/quick_settings_brightness_dialog.xml
old mode 100644
new mode 100755
index a996260..8e030a1
--- a/frameworks/base/packages/SystemUI/res/layout/quick_settings_brightness_dialog.xml
+++ b/frameworks/base/packages/SystemUI/res/layout/quick_settings_brightness_dialog.xml
@@ -18,7 +18,12 @@
     android:paddingLeft="16dp"
     android:paddingRight="16dp"
     style="@style/BrightnessDialogContainer">
-
+   
+    <LinearLayout
+       android:layout_width="match_parent"
+   android:layout_height="wrap_content"
+       android:orientation="vertical">
+  
     <ImageView
         android:id="@+id/brightness_icon"
         android:layout_width="wrap_content"
@@ -31,10 +36,36 @@
  
     <com.android.systemui.settings.ToggleSlider
         android:id="@+id/brightness_slider"
-        android:layout_width="0dp"
+        android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        android:layout_gravity="center_vertical"
-        android:layout_weight="1"
+        android:layout_gravity="center"
         systemui:text="@string/status_bar_settings_auto_brightness_label" />
  
+    <LinearLayout
+       android:layout_width="match_parent"
+   android:layout_height="wrap_content"
+       android:orientation="horizontal"
+   android:gravity="center">
+  
+    <TextView
+        android:id="@+id/brightness_now_value"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+   android:text="@string/brightness_now_value"
+   android:textSize="16sp"
+   android:textColor="#FFFFFF"
+   />
+
+    <TextView
+        android:id="@+id/brightness_slider_value"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+   android:textSize="16sp"
+   android:textColor="#FFFFFF"/>
+  
+    </LinearLayout>
+      
+    </LinearLayout>
+          
+
 </LinearLayout>
diff --git a/frameworks/base/packages/SystemUI/res/values-zh-rCN/strings.xml b/frameworks/base/packages/SystemUI/res/values-zh-rCN/strings.xml
index 9cc642c..a54c4d0 100755
--- a/frameworks/base/packages/SystemUI/res/values-zh-rCN/strings.xml
+++ b/frameworks/base/packages/SystemUI/res/values-zh-rCN/strings.xml
@@ -437,4 +437,5 @@
     <string name="power_sub_close">关闭系统</string>
     <string name="power_sub_sleep">系统休眠</string>
     <string name="power_sub_reboot">重启系统</string>
+   <string name="brightness_now_value">当前屏幕亮度: </string>
 </resources>
diff --git a/frameworks/base/packages/SystemUI/res/values/strings.xml b/frameworks/base/packages/SystemUI/res/values/strings.xml
index d4d7d07..90f7b12 100755
--- a/frameworks/base/packages/SystemUI/res/values/strings.xml
+++ b/frameworks/base/packages/SystemUI/res/values/strings.xml
@@ -1003,4 +1003,5 @@
     <string name="power_sub_close">Shutdown</string>
     <string name="power_sub_sleep">Go to Sleep</string>
     <string name="power_sub_reboot">Reboot</string>
+   <string name="brightness_now_value">Current screen brightness: </string>
 </resources>
diff --git a/frameworks/base/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java b/frameworks/base/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java
old mode 100644
new mode 100755
index 4dacacf..c30625d
--- a/frameworks/base/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java
+++ b/frameworks/base/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java
@@ -106,7 +106,8 @@ public class QSPanel extends ViewGroup {
  
         mBrightnessController = new BrightnessController(getContext(),
                 (ImageView) findViewById(R.id.brightness_icon),
-                (ToggleSlider) findViewById(R.id.brightness_slider));
+                (ToggleSlider) findViewById(R.id.brightness_slider),
+               (TextView) findViewById(R.id.brightness_slider_value));
  
         mDetailDoneButton.setOnClickListener(new OnClickListener() {
             @Override
diff --git a/frameworks/base/packages/SystemUI/src/com/android/systemui/settings/BrightnessController.java b/frameworks/base/packages/SystemUI/src/com/android/systemui/settings/BrightnessController.java
old mode 100644
new mode 100755
index 946a3d1..84cfe50
--- a/frameworks/base/packages/SystemUI/src/com/android/systemui/settings/BrightnessController.java
+++ b/frameworks/base/packages/SystemUI/src/com/android/systemui/settings/BrightnessController.java
@@ -31,6 +31,7 @@ import android.os.UserHandle;
 import android.provider.Settings;
 import android.widget.CompoundButton;
 import android.widget.ImageView;
+import android.widget.TextView;
  
 import com.android.systemui.R;
  
@@ -51,6 +52,7 @@ public class BrightnessController implements ToggleSlider.Listener {
  
     private final Context mContext;
     private final ImageView mIcon;
+   private final TextView mText_brightness;
     private final ToggleSlider mControl;
     private final boolean mAutomaticAvailable;
     private final IPowerManager mPower;
@@ -133,10 +135,11 @@ public class BrightnessController implements ToggleSlider.Listener {
  
     }
  
-    public BrightnessController(Context context, ImageView icon, ToggleSlider control) {
+    public BrightnessController(Context context, ImageView icon, ToggleSlider control ,TextView text_brightness) {
         mContext = context;
         mIcon = icon;
         mControl = control;
+       mText_brightness = text_brightness;
         mHandler = new Handler();
         mUserTracker = new CurrentUserTracker(mContext) {
             @Override
@@ -301,6 +304,7 @@ public class BrightnessController implements ToggleSlider.Listener {
                     UserHandle.USER_CURRENT);
             mControl.setMax(mMaximumBacklight - mMinimumBacklight);
             mControl.setValue(value - mMinimumBacklight);
+           mText_brightness.setText(" "+value);
         }
     }
  
diff --git a/frameworks/base/packages/SystemUI/src/com/android/systemui/settings/BrightnessDialog.java b/frameworks/base/packages/SystemUI/src/com/android/systemui/settings/BrightnessDialog.java
old mode 100644
new mode 100755
index a1704ff..2a4a720
--- a/frameworks/base/packages/SystemUI/src/com/android/systemui/settings/BrightnessDialog.java
+++ b/frameworks/base/packages/SystemUI/src/com/android/systemui/settings/BrightnessDialog.java
@@ -27,6 +27,7 @@ import android.view.KeyEvent;
 import android.view.Window;
 import android.view.WindowManager;
 import android.widget.ImageView;
+import android.widget.TextView;
  
 import com.android.systemui.R;
  
@@ -49,7 +50,8 @@ public class BrightnessDialog extends Activity {
  
         final ImageView icon = (ImageView) findViewById(R.id.brightness_icon);
         final ToggleSlider slider = (ToggleSlider) findViewById(R.id.brightness_slider);
-        mBrightnessController = new BrightnessController(this, icon, slider);
+       final TextView brightness_value = (TextView) findViewById(R.id.brightness_slider_value);
+        mBrightnessController = new BrightnessController(this, icon, slider , brightness_value);
     }
  
     @Override

  

 

posted @   CrushGirl  阅读(237)  评论(0编辑  收藏  举报
(评论功能已被禁用)
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
历史上的今天:
2020-10-28 Android7.1 锁屏滑动无法解锁 Notification Keyguard 显示通知锁屏
点击右上角即可分享
微信分享提示