Android9.0背光调节曲线变化改为线性变化

平台:RK3288-9.0

需求:背光调节,曲线变化改为线性变化,范围限制在60-255

由于Android自带的背光调节是曲线变化,前面70%左右背光都很暗,调节进度条没有明显变化,最后30%变化特别特别大,一瞬间就很刺眼了,用户体验很差,所以客户要求改为线性变化,且限制背光范围在60~255 这样保证进度条设置最低时不至于黑屏。

要求0%对应背光值60 , 50%背光值158左右,100%背光值255

diff --git a/packages/SettingsLib/src/com/android/settingslib/display/BrightnessUtils.java b/packages/SettingsLib/src/com/android/settingslib/display/BrightnessUtils.java
index 55723f9d8ed..e4295b9470b 100644
--- a/packages/SettingsLib/src/com/android/settingslib/display/BrightnessUtils.java
+++ b/packages/SettingsLib/src/com/android/settingslib/display/BrightnessUtils.java
@@ -20,8 +20,8 @@ import android.util.MathUtils;
 
 public class BrightnessUtils {
 
-    public static final int GAMMA_SPACE_MAX = 1023;
-
+    //public static final int GAMMA_SPACE_MAX = 1023;
+	public static final int GAMMA_SPACE_MAX = 195;
     // Hybrid Log Gamma constant values
     private static final float R = 0.5f;
     private static final float A = 0.17883277f;
@@ -61,7 +61,8 @@ public class BrightnessUtils {
 
         // HLG is normalized to the range [0, 12], so we need to re-normalize to the range [0, 1]
         // in order to derive the correct setting value.
-        return Math.round(MathUtils.lerp(min, max, ret / 12));
+        //return Math.round(MathUtils.lerp(min, max, ret / 12));
+   	    return val;
     }
 
     /**
@@ -95,7 +96,7 @@ public class BrightnessUtils {
         } else {
             ret = A * MathUtils.log(normalizedVal - B) + C;
         }
-
-        return Math.round(MathUtils.lerp(0, GAMMA_SPACE_MAX, ret));
+	    return val;
+        //return Math.round(MathUtils.lerp(0, GAMMA_SPACE_MAX, ret));
     }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/settings/BrightnessController.java b/packages/SystemUI/src/com/android/systemui/settings/BrightnessController.java
index 2902cb48e7e..8d782197181 100755
--- a/packages/SystemUI/src/com/android/systemui/settings/BrightnessController.java
+++ b/packages/SystemUI/src/com/android/systemui/settings/BrightnessController.java
@@ -224,9 +224,13 @@ public class BrightnessController implements ToggleSlider.Listener {
                 val = Settings.System.getIntForUser(mContext.getContentResolver(),
                         Settings.System.SCREEN_BRIGHTNESS, mDefaultBacklight,
                         UserHandle.USER_CURRENT);
+				
             }
-            mHandler.obtainMessage(MSG_UPDATE_SLIDER, val, inVrMode ? 1 : 0).sendToTarget();
+            //Add by jackly 20221021
+            int mVal = val - 60;
+            Log.d(TAG,"mUpdateSliderRunnable,screenBrightness = " + val + " seekBar = " + mVal);
+            mHandler.obtainMessage(MSG_UPDATE_SLIDER, mVal, inVrMode ? 1 : 0).sendToTarget();
         }
     };
 
@@ -380,18 +384,20 @@ public class BrightnessController implements ToggleSlider.Listener {
             setting = Settings.System.SCREEN_BRIGHTNESS;
         }

 
         if (stopTracking) {
             MetricsLogger.action(mContext, metric, val);
         }
-
-        setBrightness(val);
+        //Add by jackly 20221021
+        final int mVal = val + 60;
+        Log.d(TAG, "onChanged, seekBar = " + val + " screenBrightness = " + mVal);
+        setBrightness(mVal);
         if (!tracking) {
             AsyncTask.execute(new Runnable() {
                     public void run() {
                         Settings.System.putIntForUser(mContext.getContentResolver(),
-                                setting, val, UserHandle.USER_CURRENT);
+                                setting, mVal, UserHandle.USER_CURRENT);
                     }
                 });
         }
@@ -437,16 +443,16 @@ public class BrightnessController implements ToggleSlider.Listener {
         }
     }

 
 
@@ -479,7 +485,8 @@ public class BrightnessController implements ToggleSlider.Listener {
             min = mMinimumBacklight;
             max = mMaximumBacklight;
         }
-        if (val == convertGammaToLinearExt(mControl.getValue(), min, max)) {
+        Log.d(TAG, "updateSlider, val = " + val + " seekBar = " + mControl.getValue());
+        if (val == convertGammaToLinear(mControl.getValue(), min, max)) {
             // If we have more resolution on the slider than we do in the actual setting, then
             // multiple slider positions will map to the same setting value. Thus, if we see a
             // setting value here that maps to the current slider position, we don't bother to
@@ -487,7 +494,7 @@ public class BrightnessController implements ToggleSlider.Listener {
             // change to the user even though it isn't one.
             return;
         }

         animateSliderTo(sliderVal);
     }
 

修改BrightnessUtils里面曲线变化的方法,不做数据处理,直接返回原本的value值

背光调节范围是60~255,所以把seekBar的最大值设置在195这样进度值就是0~195

在调节seekBar之后,onChange里面获取到进度值之后,加60再设置到背光值和保存到数据库。

手动修改数据库背光值之后,观察者也会获取到背光值变化,通知seekBar进度变化,所以要减去60再设置到seekBar

Settings修改比较简单,获取到背光值后减去一个60就是实际的进度值,根据进度条的最大值计算百分比

diff --git a/src/com/android/settings/display/BrightnessLevelPreferenceController.java b/src/com/android/settings/display/BrightnessLevelPreferenceController.java
index 5d4cc6c83e..f427995cfa 100755
--- a/src/com/android/settings/display/BrightnessLevelPreferenceController.java
+++ b/src/com/android/settings/display/BrightnessLevelPreferenceController.java
@@ -132,19 +132,23 @@ public class BrightnessLevelPreferenceController extends AbstractPreferenceContr
                     System.SCREEN_BRIGHTNESS_FOR_VR, mMaxBrightness),
                     mMinVrBrightness, mMaxVrBrightness);
         } else {
-            value = convertLinearToGammaExt(Settings.System.getInt(mContentResolver,
+            value = convertLinearToGamma(Settings.System.getInt(mContentResolver,
                     System.SCREEN_BRIGHTNESS, mMinBrightness),
                     mMinBrightness, mMaxBrightness);
             Log.d(TAG,"convertLinearToGamma, value="+value);
         }
-        return getPercentage(value, 0, GAMMA_SPACE_MAX);
+        //Add by jackly 20221021
+        int mValue = value - 60;
+        Log.d(TAG, "getCurrentBrightness, screenBrightness = " + value + " seekBar = " + mValue);
+        return getPercentage(mValue, 0, GAMMA_SPACE_MAX);
+        //return getPercentage(value, 0, GAMMA_SPACE_MAX);
     }
 
-    private final int convertLinearToGammaExt(int val, int min, int max) {
+    /*private final int convertLinearToGammaExt(int val, int min, int max) {
         // For some reason, HLG normalizes to the range [0, 12] rather than [0, 1]
         final float normalizedVal = MathUtils.norm(0, max, val);
         return (int) (normalizedVal*GAMMA_SPACE_MAX);
-    }
+    }*/
 
 
     private double getPercentage(double value, int min, int max) {
@@ -154,8 +158,6 @@ public class BrightnessLevelPreferenceController extends AbstractPreferenceContr
         if (value < min) {
             return 0.0;
         }

         return (value - min) / (max - min);
     }
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值