安卓11双屏双背光修改方法

安卓11上调双屏异显功能,系统驱动默认支持双背光功能,老一点的系统不支持双背光驱动,所以老版本的双屏异显都是同时控制2个屏的背光,客户也没做特别要求,新版本客户有这个需求了,所以就想办法去实现;底层已经出现了2个背光节点,但是上层就没有做这个功能,硬件上2个背光也是分开的,默认双屏点亮后系统只能调默认原生的那个背光,自己修改节点的背光要想办法去实现,不说了,直接上货:

1.从系统状态栏滑竿调整背光的代码开始追起,

复制代码
  frameworks/base/packages/SystemUI/src/com/android/systemui/settings/BrightnessController.java
  public void onChanged(ToggleSlider toggleSlider, boolean tracking, boolean automatic,
            int value, boolean stopTracking) ->
          final float valFloat = convertGammaToLinearFloat(value,
                minBacklight, maxBacklight);
        if (stopTracking) {
            // TODO(brightnessfloat): change to use float value instead.
            MetricsLogger.action(mContext, metric,
                    BrightnessSynchronizer.brightnessFloatToInt(mContext, valFloat));

        }
       setBrightness(valFloat);
    private void setBrightness(float brightness) {
        mDisplayManager.setTemporaryBrightness(brightness);
    }
->
frameworks/base/core/java/android/hardware/display/DisplayManager.java
    public void setTemporaryBrightness(float brightness) {
        mGlobal.setTemporaryBrightness(brightness);
    }
->   
frameworks/base/core/java/android/hardware/display/DisplayManagerGlobal.java
    public void setTemporaryBrightness(float brightness) {
        try {
            mDm.setTemporaryBrightness(brightness);
        } catch (RemoteException ex) {
            throw ex.rethrowFromSystemServer();
        }
    }

2.中间代码有兴趣的自己追,我不追了,最终会调用到hal层里面,修改补丁如下:

复制代码
Index: hardware/rockchip/light_aidl/Android.bp
===================================================================
--- hardware/rockchip/light_aidl/Android.bp	(revision 844)
+++ hardware/rockchip/light_aidl/Android.bp	(working copy)
@@ -7,6 +7,7 @@
     shared_libs: [
         "libbase",
         "liblog",
+        "libcutils",   //加这个是为了在cpp文件调用property接口
         "libbinder_ndk",
         "android.hardware.light-ndk_platform",
     ],
Index: hardware/rockchip/light_aidl/Lights.cpp
===================================================================
--- hardware/rockchip/light_aidl/Lights.cpp	(revision 844)
+++ hardware/rockchip/light_aidl/Lights.cpp	(working copy)
@@ -23,6 +23,7 @@
 
 #include <aidl/android/hardware/light/LightType.h>
 #include <aidl/android/hardware/light/FlashMode.h>
+#include <cutils/properties.h>
 
 using namespace std;
 
@@ -54,9 +55,19 @@
 }
 
 const char* getDriverPath(LightType type) {
+
+
     switch (type) {
         case LightType::BACKLIGHT:
-            return "/sys/class/backlight/backlight/brightness";
+			char value[PROPERTY_VALUE_MAX];
+			property_get("persist.sys.backlight", value, "");
+
+			if(!strcmp(value,"1")){
+		          return "/sys/class/backlight/backlight1/brightness";
+			}
+			else{
+				  return "/sys/class/backlight/backlight/brightness";
+			}
         case LightType::BUTTONS:
             return "/sys/class/leds/button-backlight/brightness";
         case LightType::BATTERY:
相关推荐
alexhilton11 小时前
面向开发者的系统设计:像建筑师一样思考
android·kotlin·android jetpack
CYRUS_STUDIO20 小时前
用 Frida 控制 Android 线程:kill 命令、挂起与恢复全解析
android·linux·逆向
CYRUS_STUDIO20 小时前
Frida 实战:Android JNI 数组 (jobjectArray) 操作全流程解析
android·逆向
用户091 天前
Gradle Cache Entries 深度探索
android·java·kotlin
循环不息优化不止1 天前
安卓 View 绘制机制深度解析
android
叽哥1 天前
Kotlin学习第 9 课:Kotlin 实战应用:从案例到项目
android·java·kotlin
雨白1 天前
Java 线程通信基础:interrupt、wait 和 notifyAll 详解
android·java
诺诺Okami2 天前
Android Framework-Launcher-UI和组件
android
潘潘潘2 天前
Android线程间通信机制Handler介绍
android
潘潘潘2 天前
Android动态链接库So的加载
android