Android13_SystemUI下拉框新增音量控制条

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

一、必备知识

  • 在Android12 版本上面已经完成了功能的实现,目前是在Android13
    版本实现此功能,可以参考上一篇文章相关的必备基础知识和实现方式Android12实现SystemUI下拉框新增音量控制条
  • 在Android12 基础上对比实现方式,来实现Android13 版本上面的功能

二、源码分析对比

源码对比Android12,

  • 音量条功能实现本身是参考下拉框已知的brightness 模块开发,所以需要对brightness模块熟悉;
  • SystemUI下拉QS、QQS这些组件包括其它组件是怎么添加到系统里面去,怎么展示的,这个逻辑很重要,也需要和Android12 对比下

1.brightness模块分析对比

Android12源码地址:http://xrefandroid.com/android-12.0.0_r34/xref/frameworks/base/packages/SystemUI/src/com/android/systemui/settings/brightness/
在这里插入图片描述
Android13源码地址:http://xrefandroid.com/android-13.0.0_r83/xref/frameworks/base/packages/SystemUI/src/com/android/systemui/settings/brightness/
在这里插入图片描述
每个类的定义和作用已经在Android12 中分析过,这里最大的一个类改名了,改的很有意义:
BrightnessSlider.java -> BrightnessSliderController.java ,控制类就是控制类,见名知义!

2.statusbar/phone 对应模块对比

Android13 中 CentralSurfacesImpl 类 替代了StatusBar 类。

对比初始化类声明

如下:一个用继承实现基本功能,一个用接口实现功能

StatusBar.java  


 public class StatusBar extends SystemUI implements DemoMode,
          ActivityStarter, KeyguardStateController.Callback,
          OnHeadsUpChangedListener, CommandQueue.Callbacks,
                    ColorExtractor.OnColorsChangedListener, ConfigurationListener,
          StatusBarStateController.StateListener,
          LifecycleOwner, BatteryController.BatteryStateChangeCallback,
          ActivityLaunchAnimator.Callback {
      public static final boolean MULTIUSER_DEBUG = false;


CentralSurfacesImpl.java 

public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {

CentralSurfaces.java 
public interface CentralSurfaces extends Dumpable, ActivityStarter, LifecycleOwner {

对比构造方法

如下,构造方法的描述都是一摸一样的,这两个类核心功能一致的,初始化功能和SystemUI入口
在这里插入图片描述
在这里插入图片描述
找到了初始化地方,音量条实现方式参考Android12 版本,此功能就很容易实现了。

三、源码修改

详细说明如下,参考修改文件和新增文件即可完成功能,实现需求
修改文件:
vendor/mediatek/proprietary/packages/apps/SystemUI/AndroidManifest.xml
vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/classifier/Classifier.java
vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/qs/QSAnimator.java
vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/qs/QSPanel.java
vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/qs/QSPanelController.java
vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/settings/brightness/BrightnessSliderController.java
vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java

新增文件:
vendor/mediatek/proprietary/packages/apps/SystemUI/res/drawable-hdpi/icon_volume_test.png
vendor/mediatek/proprietary/packages/apps/SystemUI/res/drawable-mdpi/icon_volume_test.png
vendor/mediatek/proprietary/packages/apps/SystemUI/res/drawable-xhdpi/icon_volume_test.png
vendor/mediatek/proprietary/packages/apps/SystemUI/res/drawable-xxhdpi/icon_volume_test.png
vendor/mediatek/proprietary/packages/apps/SystemUI/res/drawable-xxxhdpi/icon_volume_test.png
vendor/mediatek/proprietary/packages/apps/SystemUI/res/drawable/volume_progress_drawable.xml
vendor/mediatek/proprietary/packages/apps/SystemUI/res/drawable/volume_progress_full_drawable.xml
vendor/mediatek/proprietary/packages/apps/SystemUI/res/layout/quick_settings_volume_dialog.xml
vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/settings/volume/VolumeController.java
vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/settings/volume/VolumeSliderController.java
vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/settings/volume/VolumeSliderView.java
vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/util/ApplicationContextProvider.kt
vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/util/ContextProvider.java
vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/util/SoundUtils.kt

具体实现方式对比Android12 ,实现参考方式一模一样。

四、相关资源

RK Android12 SystemUI SystemUI源码方便调试
源码在线调试平台
RK/MTK Android13版本可参考修改源码

  • 15
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android 12的SystemUI下拉框中的亮度的显示隐藏流程如下: 1. 下拉通知栏时,SystemUI会发送一个通知栏展开的广播,应用可以通过监听该广播来响应下拉通知栏的事件。 2. 在通知栏展开的回调方法中,应用可以根据当前的亮度调节状态来判断是否需要显示亮度。 3. 如果需要显示亮度,则可以获取亮度的控件引用,并设置其可见性为可见。如果不需要显示亮度,则将其可见性设置为不可见。 4. 当通知栏被收起时,SystemUI会发送一个通知栏收起的广播,应用可以通过监听该广播来响应通知栏收起的事件。 5. 在通知栏收起的回调方法中,应用可以将亮度的可见性设置为不可见。 具体实现步骤可以参考以下代码示例: ``` public class MyNotificationListener extends NotificationListenerService { private SeekBar mBrightnessSeekBar; @Override public void onNotificationPosted(StatusBarNotification sbn) { // 检测到通知栏展开事件 if (sbn.getNotification().fullScreenIntent != null) { // 获取亮度调节状态 boolean isAdjustBrightness = isAdjustBrightness(sbn); // 如果需要显示亮度 if (isAdjustBrightness) { // 获取亮度控件的引用 mBrightnessSeekBar = findViewById(R.id.brightness_seekbar); // 设置亮度的可见性为可见 mBrightnessSeekBar.setVisibility(View.VISIBLE); } } } @Override public void onNotificationRemoved(StatusBarNotification sbn) { // 检测到通知栏收起事件 if (sbn.getNotification().fullScreenIntent != null) { // 如果亮度控件存在,将其可见性设置为不可见 if (mBrightnessSeekBar != null) { mBrightnessSeekBar.setVisibility(View.GONE); } } } // 判断是否需要显示亮度 private boolean isAdjustBrightness(StatusBarNotification sbn) { Bundle extras = sbn.getNotification().extras; int flags = extras.getInt(Notification.EXTRA_FLAGS); return (flags & Notification.FLAG_AUTO_BRIGHTNESS) == 0 && (flags & Notification.FLAG_HIGH_PRIORITY) != 0; } } ``` 需要注意的是,具体实现可能会根据不同的设备厂商或Android版本而有所不同,需要根据具体情况进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值