Created
June 30, 2022 07:06
-
-
Save adithya2306/ff2462ff56dd46406c7b3c24a8a93ac2 to your computer and use it in GitHub Desktop.
AutomaticBrightnessControllerImpl from MIUI 13 (lisa)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.android.server.display; | |
import android.content.Context; | |
import android.content.res.Resources; | |
import android.content.res.TypedArray; | |
import android.hardware.Sensor; | |
import android.hardware.SensorEvent; | |
import android.hardware.SensorEventListener; | |
import android.hardware.SensorManager; | |
import android.hardware.camera2.CameraManager; | |
import android.os.Handler; | |
import android.os.PowerManager; | |
import android.os.RemoteException; | |
import android.os.ServiceManager; | |
import android.os.SystemClock; | |
import android.os.SystemProperties; | |
import android.util.MathUtils; | |
import android.util.Slog; | |
import android.util.Spline; | |
import android.view.IRotationWatcher; | |
import android.view.IWindowManager; | |
import com.android.internal.display.BrightnessSynchronizer; | |
import com.android.server.magicwin.MiuiMagicWinAnimation; | |
import java.io.PrintWriter; | |
import miui.os.Build; | |
import miui.os.DeviceFeature; | |
import miui.util.FeatureParser; | |
/* loaded from: classes.dex */ | |
public class AutomaticBrightnessControllerImpl extends AutomaticBrightnessControllerStub { | |
private static final int ALS_FOV; | |
private static final float ASSISTSENSOR_BRIGHTENINGRATIO = 2.0f; | |
private static final float ASSISTSENSOR_BRIGHTENING_MINTHRES = 5.0f; | |
private static final float ASSISTSENSOR_DARKENINGRATIO = 0.2f; | |
private static final float ASSISTSENSOR_DATA_THRESHOLD; | |
private static final long ASSISTSENSOR_DEBOUNCETIME = 10000; | |
private static final float ASSISTSENSOR_MAXTHRES; | |
private static final int ASSIST_SENSOR_TYPE = 33171055; | |
private static final int AUTOBRIGHTNESS_RATE_SLOW; | |
private static final String AUTO_BRIGHTNESS_DEBUG = "sys.sensor.autobacklight.dbg"; | |
private static final int BRIGHTNESS_12BIT = 4095; | |
private static final float BRIGHTNESS_DARK; | |
private static final float BRIGHTNESS_DARK_RAMPRATE; | |
private static final int BRIGHTNESS_IN_BRIGHTENING = 2; | |
private static final int BRIGHTNESS_IN_DARKENING = 1; | |
private static final int BRIGHTNESS_IN_STABLE = 0; | |
private static final boolean BRIGHTNESS_RATE_ADJUSTIBLE; | |
private static final float DARKENING_HYSTERESIS_FOVTOSEVENTY; | |
private static final float DARKENING_HYSTERESIS_SEVENTYTONINETY; | |
private static final float DARKENING_HYSTERESIS_ZEROTOFOV; | |
private static boolean DEBUG = false; | |
private static final int DYNAMIC_DARKENING_DEBOUNCE1; | |
private static final int DYNAMIC_DARKENING_DEBOUNCE2; | |
private static final int DYNAMIC_DARKENING_DEFAULTDEBOUNCE; | |
private static final float DYNAMIC_DARKENING_LUXTHRESHOLD; | |
private static final float HBM_BRIGHTENING_DEBOUNCE; | |
private static final float HBM_BRIGHTENING_LUX; | |
private static final float HBM_BRIGHTENING_THRES; | |
private static final int HBM_BRIGHTNESS_ON; | |
private static final float HBM_BRIGHTNESS_ON_FLOAT; | |
private static final float HBM_DARKENING_DEBOUNCE; | |
private static final float HBM_DARKENING_LUX; | |
private static final float HBM_DARKENING_THRES; | |
private static final float HBM_MAX_NIT; | |
private static final float HBM_START_LUX; | |
private static final boolean HBM_SUPPORT_DIMMING; | |
private static final float HIGHANGLE_THRESHOLD; | |
private static final int HIGHEST_LUX = 8000; | |
private static final boolean IS_UMI_0B_DISPLAY_PANEL; | |
private static final float MOTIONSENSOR_STATIC_LUXTHRESHOLD; | |
private static final int MOTIONSENSOR_TYPE = 33171039; | |
private static final int MOTION_MOVE = 1; | |
private static final int MOTION_STATIC = 2; | |
private static final int MOTION_STATIC_ROTATE = 3; | |
private static final int MSG_ROTATION_CHANGE = 1001; | |
private static final int MSG_ROTATION_CHANGE_DURATION_MILLIS = 30; | |
private static final float NIT_LEVEL = 40.0f; | |
private static final float NIT_LEVEL1 = 35.0f; | |
private static final float NIT_LEVEL2 = 87.450005f; | |
private static final float NIT_LEVEL3 = 265.0f; | |
private static final int NORMAL_BRIGHTNESS_ON; | |
private static final String OLED_PANEL_ID; | |
private static final int PROXIMITY_NEGATIVE = 0; | |
private static final int PROXIMITY_POSITIVE = 1; | |
private static final int PROXIMITY_UNKNOWN = -1; | |
private static final int RATE_LEVEL = 40; | |
private static final int SENSOR_TYPE_LIGHT_SECONDARY = 33171081; | |
private static final int SKIP_DEBOUNCE; | |
private static final boolean SKIP_DEBOUNCE_ENABLED; | |
private static final float SKIP_LUX_DEBOUNCE1; | |
private static final float SKIP_LUX_DEBOUNCE2; | |
private static final int SLOW_RATIO; | |
private static final boolean SMD_EFFECT_STATUS; | |
private static final boolean SUPPORT_HBM; | |
private static final String TAG = "AutomaticBrightnessControllerImpl"; | |
private static final float TIME_1 = 0.0f; | |
private static final float TIME_2 = 0.8f; | |
private static final float TIME_3 = 1.8f; | |
private static final float TIME_4 = 4.0f; | |
private static final float TIME_5 = 24.0f; | |
private static final int TORCHCLOSEDELAY = 1000; | |
private static final float TYPICAL_PROXIMITY_THRESHOLD = 5.0f; | |
private static final boolean USE_ACCELEROMETER_ENABLED; | |
private static final boolean USE_ASSISTSENSOR_ENABLED; | |
private static final boolean USE_DAEMON_SENSOR_POLICY; | |
private static final boolean USE_DYNAMIC_DEBOUNCE; | |
private static final boolean USE_FOLD_ENABLED; | |
private static final boolean USE_MOTIONSENSOR_ENABLED; | |
private static final boolean USE_PROXIMITY_ENABLED; | |
private static final boolean WAIT_FOR_AUTOBRIGHTNESS; | |
private static final int WAIT_TIME; | |
private static final float[] mALevels; | |
private static final float[] mBLevels; | |
private static final float[] mNitsLevels; | |
private static final float[] sHbmLuxLevels; | |
private Spline HBM_AUTO_BRIGHTNESS_SPLINE; | |
private Spline HBM_NITTOBACKLIGHT_SPLINE; | |
private Sensor mAccelerometer; | |
private Sensor mAssistSensor; | |
private CameraManager mCameraManager; | |
private Context mContext; | |
public DaemonSensorPolicy mDaemonSensorPolicy; | |
private boolean mHDRState; | |
private Handler mHandler; | |
public boolean mIsAutoBrightnessByApplicationAnimationEnable; | |
private boolean mIsAutoBrightnessByApplicationRateEnable; | |
private boolean mLastHdrState; | |
private float mMaxNitsProperty; | |
private Sensor mMotionSensor; | |
private boolean mNeedBrightening; | |
private Sensor mProximitySensor; | |
private float mProximityThreshold; | |
private float mRealLux; | |
private RotationWatcher mRotationWatcher; | |
private boolean mRotationWatcherOn; | |
private SensorManager mSensorManager; | |
private float mStableLux; | |
private IWindowManager mWindowManager; | |
private int mProximity = -1; | |
private boolean mProximitySensorEnabled = false; | |
private float mAngleXYToHorizon = MiuiMagicWinAnimation.INVALID_THRESHOLD; | |
private boolean mAccSensorEnabled = false; | |
private boolean mAmbientLuxFirstEvent = false; | |
private boolean mSlowChange = false; | |
private float mStartBrightness = -1.0f; | |
private boolean mAutomaticBrightnessEnable = false; | |
private float mFirstLux = -1.0f; | |
private float mLastLux = -1.0f; | |
private int mBrightnessStatus = 0; | |
private boolean mMotionSensorEnabled = false; | |
private int mMotionStatus = 1; | |
private boolean mAssistSensorEnabled = false; | |
private float mAssistSensorData = -1.0f; | |
private float mAssistDarkeningThres = -1.0f; | |
private float mAssistBrighteningThres = -1.0f; | |
private long mAssistSensorTime = -1; | |
private float mCurrentLux = -1.0f; | |
private long mDynamicEnvStartTime = 0; | |
private boolean mIsTorchOpen = false; | |
private long mTorchCloseTime = 0; | |
private long mHbmEnterStartTs = 0; | |
private long mHbmExitStartTs = 0; | |
private boolean mHbmStatus = false; | |
private float mSpeedingRatio = MiuiMagicWinAnimation.INVALID_THRESHOLD; | |
private float mLastSettingBrightness = Float.NaN; | |
private float mBrighteningRatio = Resources.getSystem().getFloat(285671463); | |
private boolean mSupportHdr = Resources.getSystem().getBoolean(285540416); | |
private int mRotation = 0; | |
private Sensor mSecLightSensor = null; | |
private final boolean IS_SUPPORT_AUTOBRIGHTNESS_BY_APPLICATION_CATEGORY = FeatureParser.getBoolean("support_autobrightness_by_application_category", false); | |
private final boolean IS_INTERNAL_BUILD = Build.IS_INTERNATIONAL_BUILD; | |
private final float SLOW_RATE_TIME = 10.0f; | |
private final float FAST_RATE_TIME = 5.0f; | |
private final float AUTOBRIGHTNESS_BY_APPLICATION_MIN_RATE = 0.01f; | |
private float mAutoBrightnessByApplicationRate = MiuiMagicWinAnimation.INVALID_THRESHOLD; | |
private final CameraManager.TorchCallback mTorchCallback = new CameraManager.TorchCallback() { // from class: com.android.server.display.AutomaticBrightnessControllerImpl.1 | |
@Override // android.hardware.camera2.CameraManager.TorchCallback | |
public void onTorchModeUnavailable(String cameraId) { | |
AutomaticBrightnessControllerImpl.this.mIsTorchOpen = true; | |
} | |
@Override // android.hardware.camera2.CameraManager.TorchCallback | |
public void onTorchModeChanged(String cameraId, boolean enabled) { | |
if (enabled) { | |
AutomaticBrightnessControllerImpl.this.mIsTorchOpen = true; | |
return; | |
} | |
if (AutomaticBrightnessControllerImpl.this.mIsTorchOpen) { | |
AutomaticBrightnessControllerImpl.this.mTorchCloseTime = System.currentTimeMillis(); | |
} | |
AutomaticBrightnessControllerImpl.this.mIsTorchOpen = false; | |
} | |
}; | |
private SensorEventListener mSensorListener = new SensorEventListener() { // from class: com.android.server.display.AutomaticBrightnessControllerImpl.2 | |
@Override // android.hardware.SensorEventListener | |
public void onSensorChanged(SensorEvent event) { | |
switch (event.sensor.getType()) { | |
case 1: | |
AutomaticBrightnessControllerImpl.this.onAccelerometerSensorChanged(event); | |
return; | |
case 8: | |
AutomaticBrightnessControllerImpl.this.onProximitySensorChanged(event); | |
return; | |
case AutomaticBrightnessControllerImpl.MOTIONSENSOR_TYPE /* 33171039 */: | |
AutomaticBrightnessControllerImpl.this.onMotionSensorChanged(event); | |
return; | |
case AutomaticBrightnessControllerImpl.ASSIST_SENSOR_TYPE /* 33171055 */: | |
AutomaticBrightnessControllerImpl.this.onAssistSensorChanged(event); | |
return; | |
default: | |
return; | |
} | |
} | |
@Override // android.hardware.SensorEventListener | |
public void onAccuracyChanged(Sensor sensor, int accuracy) { | |
} | |
}; | |
static { | |
USE_PROXIMITY_ENABLED = Resources.getSystem().getBoolean(285540374) && !DeviceFeature.hasSupportAudioPromity(); | |
USE_ACCELEROMETER_ENABLED = Resources.getSystem().getBoolean(285540369); | |
SKIP_DEBOUNCE_ENABLED = Resources.getSystem().getBoolean(285540375); | |
SKIP_DEBOUNCE = Resources.getSystem().getInteger(285933596); | |
SKIP_LUX_DEBOUNCE1 = Resources.getSystem().getInteger(285933627); | |
SKIP_LUX_DEBOUNCE2 = Resources.getSystem().getInteger(285933628); | |
DARKENING_HYSTERESIS_ZEROTOFOV = Resources.getSystem().getInteger(285933637) / 10.0f; | |
DARKENING_HYSTERESIS_FOVTOSEVENTY = Resources.getSystem().getInteger(285933604) / 10.0f; | |
DARKENING_HYSTERESIS_SEVENTYTONINETY = Resources.getSystem().getInteger(285933625) / 10.0f; | |
ALS_FOV = Resources.getSystem().getInteger(285933594); | |
HIGHANGLE_THRESHOLD = Resources.getSystem().getInteger(285933595); | |
SLOW_RATIO = Resources.getSystem().getInteger(285933631); | |
WAIT_FOR_AUTOBRIGHTNESS = Resources.getSystem().getBoolean(285540420); | |
WAIT_TIME = Resources.getSystem().getInteger(285933636); | |
String str = SystemProperties.get("ro.boot.oled_panel_id", ""); | |
OLED_PANEL_ID = str; | |
IS_UMI_0B_DISPLAY_PANEL = "0B".equals(str) && ("umi".equals(android.os.Build.DEVICE) || "umiin".equals(android.os.Build.DEVICE)); | |
ASSISTSENSOR_MAXTHRES = Resources.getSystem().getInteger(285933576); | |
USE_DYNAMIC_DEBOUNCE = Resources.getSystem().getBoolean(285540371); | |
USE_MOTIONSENSOR_ENABLED = Resources.getSystem().getBoolean(285540373); | |
USE_ASSISTSENSOR_ENABLED = Resources.getSystem().getBoolean(285540370); | |
DYNAMIC_DARKENING_DEBOUNCE1 = Resources.getSystem().getInteger(285933602); | |
DYNAMIC_DARKENING_DEBOUNCE2 = Resources.getSystem().getInteger(285933603); | |
SMD_EFFECT_STATUS = Resources.getSystem().getBoolean(285540413); | |
DYNAMIC_DARKENING_DEFAULTDEBOUNCE = Resources.getSystem().getInteger(285933600); | |
ASSISTSENSOR_DATA_THRESHOLD = Resources.getSystem().getInteger(285933577); | |
MOTIONSENSOR_STATIC_LUXTHRESHOLD = Resources.getSystem().getInteger(285933615); | |
DYNAMIC_DARKENING_LUXTHRESHOLD = Resources.getSystem().getInteger(285933601); | |
AUTOBRIGHTNESS_RATE_SLOW = Resources.getSystem().getInteger(285933578); | |
BRIGHTNESS_RATE_ADJUSTIBLE = Resources.getSystem().getBoolean(285540366); | |
BRIGHTNESS_DARK = Resources.getSystem().getInteger(285933580) / 1000.0f; | |
BRIGHTNESS_DARK_RAMPRATE = Resources.getSystem().getInteger(285933581) / 1000.0f; | |
mNitsLevels = new float[]{800.0f, 251.0f, 150.0f, 100.0f, 70.0f, 50.0f, NIT_LEVEL, 30.0f, 28.5f}; | |
mALevels = new float[]{800.0f, 569.48f, 344.89f, 237.75f, 179.71f, 135.19f, 113.59f, 62.84f, 676.87f}; | |
mBLevels = new float[]{0.9887f, 0.992f, 0.995f, 0.9965f, 0.9973f, 0.9979f, 0.9982f, 0.999f, 0.996f}; | |
SUPPORT_HBM = Resources.getSystem().getBoolean(285540415); | |
HBM_SUPPORT_DIMMING = Resources.getSystem().getBoolean(285540386); | |
float[] floatArray = getFloatArray(Resources.getSystem().obtainTypedArray(285409305)); | |
sHbmLuxLevels = floatArray; | |
HBM_START_LUX = floatArray[0]; | |
HBM_BRIGHTENING_THRES = Resources.getSystem().getInteger(285933609) / 1000.0f; | |
HBM_DARKENING_THRES = Resources.getSystem().getInteger(285933612) / 1000.0f; | |
HBM_BRIGHTENING_DEBOUNCE = Resources.getSystem().getInteger(285933607); | |
HBM_DARKENING_DEBOUNCE = Resources.getSystem().getInteger(285933610); | |
HBM_MAX_NIT = Resources.getSystem().getInteger(285933613); | |
HBM_BRIGHTENING_LUX = Resources.getSystem().getInteger(285933608); | |
HBM_DARKENING_LUX = Resources.getSystem().getInteger(285933611); | |
int i = (1 << DeviceFeature.BACKLIGHT_BIT) - 1; | |
NORMAL_BRIGHTNESS_ON = i; | |
int i2 = 1 << DeviceFeature.HBMBACKLIGHT_BIT; | |
HBM_BRIGHTNESS_ON = i2; | |
HBM_BRIGHTNESS_ON_FLOAT = i2 / i; | |
USE_FOLD_ENABLED = Resources.getSystem().getBoolean(285540372); | |
USE_DAEMON_SENSOR_POLICY = FeatureParser.getBoolean("use_daemon_sensor_policy", true); | |
} | |
/* JADX WARN: Removed duplicated region for block: B:29:0x0076 */ | |
/* | |
Code decompiled incorrectly, please refer to instructions dump. | |
*/ | |
private boolean needToUpdateAssistSensorData() { | |
boolean ret; | |
if (DEBUG) { | |
Slog.i(TAG, "USE_ASSISTSENSOR_ENABLED=" + USE_ASSISTSENSOR_ENABLED + ", mAssistSensorTime=" + this.mAssistSensorTime); | |
} | |
boolean z = USE_ASSISTSENSOR_ENABLED; | |
if (!z || this.mAssistSensorTime == -1) { | |
return false; | |
} | |
long currTime = SystemClock.uptimeMillis(); | |
long deltaTime = currTime - this.mAssistSensorTime; | |
float f = this.mAssistBrighteningThres; | |
if (f != -1.0f) { | |
float f2 = this.mAssistDarkeningThres; | |
if (f2 != -1.0f) { | |
float f3 = this.mAssistSensorData; | |
if ((f3 > f || f3 < f2) && checkAssistSensorValid() && this.mAssistSensorData < ASSISTSENSOR_MAXTHRES && deltaTime > 10000 && !isMotionStaticRotate()) { | |
ret = true; | |
if (DEBUG) { | |
Slog.i(TAG, "USE_ASSISTSENSOR_ENABLED=" + z + ", mAssistSensorTime=" + this.mAssistSensorTime + ", currTime=" + currTime + ", deltaTime=" + deltaTime + ", mAssistSensorData=" + this.mAssistSensorData + ", mAssistBrighteningThres=" + this.mAssistBrighteningThres + ", mAssistDarkeningThres=" + this.mAssistDarkeningThres + ", ret=" + ret); | |
} | |
return ret; | |
} | |
} | |
} | |
ret = false; | |
if (DEBUG) { | |
} | |
return ret; | |
} | |
public Sensor getSecLightSensor() { | |
return this.mSecLightSensor; | |
} | |
public void initialize(SensorManager sensorManager, Context context, Handler handler) { | |
this.mHandler = handler; | |
this.mSensorManager = sensorManager; | |
this.mRotationWatcher = new RotationWatcher(); | |
this.mWindowManager = IWindowManager.Stub.asInterface(ServiceManager.getService("window")); | |
if (USE_FOLD_ENABLED) { | |
this.mSecLightSensor = this.mSensorManager.getDefaultSensor(SENSOR_TYPE_LIGHT_SECONDARY); | |
} | |
if (USE_PROXIMITY_ENABLED) { | |
Sensor defaultSensor = this.mSensorManager.getDefaultSensor(8); | |
this.mProximitySensor = defaultSensor; | |
if (defaultSensor != null) { | |
this.mProximityThreshold = Math.min(defaultSensor.getMaximumRange(), 5.0f); | |
} | |
} | |
if (USE_ACCELEROMETER_ENABLED) { | |
this.mAccelerometer = this.mSensorManager.getDefaultSensor(1); | |
} | |
if (USE_MOTIONSENSOR_ENABLED) { | |
this.mMotionSensor = this.mSensorManager.getDefaultSensor(MOTIONSENSOR_TYPE); | |
} | |
if (USE_ASSISTSENSOR_ENABLED) { | |
this.mAssistSensor = this.mSensorManager.getDefaultSensor(ASSIST_SENSOR_TYPE); | |
} | |
AutomaticBrightnessTouchHelper.initialize(); | |
getMaxNit(); | |
getSpeedingRatio(); | |
this.mContext = context; | |
CameraManager cameraManager = (CameraManager) context.getSystemService("camera"); | |
this.mCameraManager = cameraManager; | |
Handler handler2 = this.mHandler; | |
if (handler2 != null) { | |
cameraManager.registerTorchCallback(this.mTorchCallback, handler2); | |
} | |
this.mDaemonSensorPolicy = new DaemonSensorPolicy(this.mContext, sensorManager, handler.getLooper(), this); | |
try { | |
this.HBM_AUTO_BRIGHTNESS_SPLINE = Spline.createSpline(getFloatArray(Resources.getSystem().obtainTypedArray(285409305)), getFloatArray(Resources.getSystem().obtainTypedArray(285409306))); | |
Slog.i(TAG, "HBM_AUTO_BRIGHTNESS_SPLINE: " + this.HBM_AUTO_BRIGHTNESS_SPLINE); | |
this.HBM_NITTOBACKLIGHT_SPLINE = Spline.createSpline(getFloatArray(Resources.getSystem().obtainTypedArray(285409306)), getFloatArray(Resources.getSystem().obtainTypedArray(285409304))); | |
Slog.i(TAG, "HBM_NITTOBACKLIGHT_SPLINE: " + this.HBM_NITTOBACKLIGHT_SPLINE); | |
} catch (IllegalArgumentException e) { | |
Slog.w(TAG, "HBM_NITTOBACKLIGHT_SPLINE not support"); | |
} | |
} | |
public float configure(boolean enable, float screenAutoBrightness) { | |
setSensorEnabled(enable); | |
if (USE_DAEMON_SENSOR_POLICY) { | |
this.mDaemonSensorPolicy.notifyAutoBrightnessState(enable); | |
} | |
AutomaticBrightnessTouchHelper.configure(enable, this.mContext); | |
if (!enable && this.mAutomaticBrightnessEnable) { | |
this.mAutomaticBrightnessEnable = false; | |
this.mFirstLux = -1.0f; | |
this.mLastLux = -1.0f; | |
this.mCurrentLux = -1.0f; | |
this.mBrightnessStatus = 0; | |
this.mDynamicEnvStartTime = 0L; | |
this.mHbmEnterStartTs = 0L; | |
this.mHbmExitStartTs = 0L; | |
this.mHbmStatus = false; | |
this.mLastSettingBrightness = Float.NaN; | |
} else if (enable && !this.mAutomaticBrightnessEnable) { | |
this.mAutomaticBrightnessEnable = true; | |
} | |
return screenAutoBrightness; | |
} | |
private void setSensorEnabled(boolean enable) { | |
if (USE_PROXIMITY_ENABLED) { | |
setProximitySensorEnabled(enable); | |
} | |
if (USE_ACCELEROMETER_ENABLED) { | |
setAccSensorEnabled(enable); | |
} | |
if (USE_MOTIONSENSOR_ENABLED) { | |
setMotionSensorEnabled(enable); | |
} | |
if (USE_ASSISTSENSOR_ENABLED) { | |
setAssistSensorEnabled(enable); | |
} | |
} | |
private void setProximitySensorEnabled(boolean enable) { | |
if (enable && !this.mProximitySensorEnabled) { | |
Slog.i(TAG, "setProximitySensorEnabled enable"); | |
this.mProximitySensorEnabled = true; | |
this.mSensorManager.registerListener(this.mSensorListener, this.mProximitySensor, 3); | |
} else if (!enable && this.mProximitySensorEnabled) { | |
Slog.i(TAG, "setProximitySensorEnabled disable"); | |
this.mProximitySensorEnabled = false; | |
this.mProximity = -1; | |
this.mSensorManager.unregisterListener(this.mSensorListener, this.mProximitySensor); | |
} | |
} | |
private void setAccSensorEnabled(boolean enable) { | |
if (enable && !this.mAccSensorEnabled) { | |
Slog.i(TAG, "setAccSensorEnabled enable"); | |
this.mAccSensorEnabled = true; | |
this.mSensorManager.registerListener(this.mSensorListener, this.mAccelerometer, 3); | |
} else if (!enable && this.mAccSensorEnabled) { | |
Slog.i(TAG, "setAccSensorEnabled disable"); | |
this.mAccSensorEnabled = false; | |
this.mSensorManager.unregisterListener(this.mSensorListener, this.mAccelerometer); | |
} | |
} | |
private void setMotionSensorEnabled(boolean enable) { | |
if (enable && !this.mMotionSensorEnabled) { | |
Slog.i(TAG, "setMotionSensorEnabled enable"); | |
this.mMotionSensorEnabled = true; | |
this.mSensorManager.registerListener(this.mSensorListener, this.mMotionSensor, 3); | |
} else if (!enable && this.mMotionSensorEnabled) { | |
Slog.i(TAG, "setMotionSensorEnabled disable"); | |
this.mMotionSensorEnabled = false; | |
this.mMotionStatus = 1; | |
this.mSensorManager.unregisterListener(this.mSensorListener, this.mMotionSensor); | |
} | |
} | |
private void setAssistSensorEnabled(boolean enable) { | |
if (enable && !this.mAssistSensorEnabled) { | |
Slog.i(TAG, "setAssistSensorEnabled enable"); | |
this.mAssistSensorEnabled = true; | |
this.mSensorManager.registerListener(this.mSensorListener, this.mAssistSensor, 3); | |
} else if (!enable && this.mAssistSensorEnabled) { | |
Slog.i(TAG, "setAssistSensorEnabled disable"); | |
this.mAssistSensorEnabled = false; | |
this.mAssistSensorData = -1.0f; | |
this.mAssistSensorTime = -1L; | |
this.mSensorManager.unregisterListener(this.mSensorListener, this.mAssistSensor); | |
} | |
} | |
public void onProximitySensorChanged(SensorEvent event) { | |
if (this.mProximitySensorEnabled) { | |
SystemClock.uptimeMillis(); | |
float distance = event.values[0]; | |
boolean positive = distance >= MiuiMagicWinAnimation.INVALID_THRESHOLD && distance < this.mProximityThreshold; | |
if (positive) { | |
this.mProximity = 1; | |
} else { | |
this.mProximity = 0; | |
} | |
} | |
} | |
public void onAccelerometerSensorChanged(SensorEvent event) { | |
if (this.mAccSensorEnabled) { | |
float[] values = event.values; | |
float ax = values[0]; | |
float ay = values[1]; | |
float az = values[2]; | |
double g = Math.sqrt((ax * ax) + (ay * ay) + (az * az)); | |
double cos = az / g; | |
if (cos > 1.0d) { | |
cos = 1.0d; | |
} else if (cos < -1.0d) { | |
cos = -1.0d; | |
} | |
double angle = (Math.acos(cos) * 180.0d) / 3.141592653589793d; | |
this.mAngleXYToHorizon = (float) angle; | |
if (DEBUG) { | |
Slog.d(TAG, "Auto-brightness acc: x=" + ax + ", y=" + ay + ", z=" + az + ", xyz=" + g + ", angle=" + angle + ", angle_xyTohorizon" + this.mAngleXYToHorizon); | |
} | |
} | |
} | |
public void onMotionSensorChanged(SensorEvent event) { | |
if (this.mMotionSensorEnabled) { | |
this.mMotionStatus = (int) event.values[0]; | |
if (DEBUG) { | |
Slog.i(TAG, "Auto-brightness motion status: " + this.mMotionStatus); | |
} | |
} | |
} | |
public void onAssistSensorChanged(SensorEvent event) { | |
if (this.mAssistSensorEnabled) { | |
this.mAssistSensorData = event.values[0]; | |
if (DEBUG) { | |
Slog.i(TAG, "Auto-brightness assistsensor lux: " + this.mAssistSensorData); | |
} | |
} | |
} | |
/* loaded from: classes.dex */ | |
public class RotationWatcher extends IRotationWatcher.Stub { | |
RotationWatcher() { | |
AutomaticBrightnessControllerImpl.this = this$0; | |
} | |
public void onRotationChanged(int rotation) throws RemoteException { | |
AutomaticBrightnessControllerImpl.this.mRotation = rotation; | |
if (AutomaticBrightnessControllerImpl.DEBUG) { | |
Slog.d(AutomaticBrightnessControllerImpl.TAG, "onRotationChanged:rotation=" + rotation); | |
} | |
AutomaticBrightnessControllerImpl.this.mHandler.sendMessageDelayed(AutomaticBrightnessControllerImpl.this.mHandler.obtainMessage(AutomaticBrightnessControllerImpl.MSG_ROTATION_CHANGE, Integer.valueOf(rotation)), 30L); | |
} | |
} | |
private void registerRotationListener() { | |
try { | |
this.mWindowManager.watchRotation(this.mRotationWatcher, 0); | |
this.mRotationWatcherOn = true; | |
} catch (RemoteException e) { | |
e.printStackTrace(); | |
} | |
} | |
private void unregisterRotationListener() { | |
try { | |
this.mWindowManager.removeRotationWatcher(this.mRotationWatcher); | |
this.mRotationWatcherOn = false; | |
} catch (RemoteException e) { | |
e.printStackTrace(); | |
} | |
} | |
public boolean checkProximityStatus(float lux, boolean luxValid) { | |
if (AutomaticBrightnessTouchHelper.checkTouchStatus(lux, luxValid)) { | |
return true; | |
} | |
if (DEBUG || !luxValid) { | |
Slog.i(TAG, "mProximity=" + this.mProximity + ", lux=" + lux); | |
} | |
if (this.mFirstLux == -1.0f) { | |
this.mFirstLux = lux; | |
} | |
if (USE_PROXIMITY_ENABLED && this.mProximity == 1 && luxValid) { | |
Slog.i(TAG, "drop the lightsensor event! lux=" + lux); | |
return true; | |
} | |
this.mRealLux = lux; | |
return false; | |
} | |
float getCurrentRealLux() { | |
return this.mRealLux; | |
} | |
float getCurrentLux(float ambientlux) { | |
if (DEBUG) { | |
Slog.i(TAG, "mRealLux = " + this.mRealLux + ", ambientlux = " + ambientlux); | |
} | |
float f = this.mRealLux; | |
if (f >= TIME_2 * ambientlux && f <= 1.2f * ambientlux) { | |
return f; | |
} | |
return ambientlux; | |
} | |
boolean checkAssistSensorValid() { | |
if (USE_ASSISTSENSOR_ENABLED) { | |
float f = this.mAssistSensorData; | |
if (f != -1.0f && f < ASSISTSENSOR_DATA_THRESHOLD && !this.mIsTorchOpen && System.currentTimeMillis() - this.mTorchCloseTime > 1000) { | |
return true; | |
} | |
return false; | |
} | |
return false; | |
} | |
/* JADX WARN: Code restructure failed: missing block: B:5:0x000b, code lost: | |
if (r1 > r6) goto L7; | |
*/ | |
/* | |
Code decompiled incorrectly, please refer to instructions dump. | |
*/ | |
public float getCurrentLux(float lux, float maxLux, float minLux) { | |
float f; | |
if (checkAssistSensorValid()) { | |
f = this.mAssistSensorData; | |
} | |
f = lux; | |
float currLux = f; | |
float f2 = this.mAssistSensorData; | |
if (currLux == f2) { | |
this.mAssistDarkeningThres = 0.2f * f2; | |
float f3 = ASSISTSENSOR_BRIGHTENINGRATIO * f2; | |
this.mAssistBrighteningThres = f3; | |
if (f3 < f2 + 5.0f) { | |
this.mAssistBrighteningThres = f2 + 5.0f; | |
} | |
this.mAssistSensorTime = SystemClock.uptimeMillis(); | |
} else { | |
this.mAssistSensorTime = -1L; | |
} | |
this.mCurrentLux = currLux; | |
if (lux != currLux || DEBUG) { | |
Slog.i(TAG, "maxLux=" + maxLux + ", minLux=" + minLux + ", lux=" + lux + ", mAssistSensorData=" + this.mAssistSensorData + ", mAssistDarkeningThres=" + this.mAssistDarkeningThres + ", mAssistBrighteningThres=" + this.mAssistBrighteningThres + ", mAssistSensorTime=" + this.mAssistSensorTime + ", currLux=" + currLux + ", mBrightnessStatus=" + this.mBrightnessStatus); | |
} | |
return currLux; | |
} | |
public void checkBrightening(float lux, float brightenThreshold, float darkThreshold) { | |
if (lux > brightenThreshold) { | |
this.mBrightnessStatus = 2; | |
this.mDynamicEnvStartTime = SystemClock.uptimeMillis(); | |
} else if (lux < darkThreshold) { | |
this.mBrightnessStatus = 1; | |
this.mDynamicEnvStartTime = SystemClock.uptimeMillis(); | |
} else { | |
this.mBrightnessStatus = 0; | |
} | |
} | |
boolean checkDynamicDebounce() { | |
long currTime = SystemClock.uptimeMillis(); | |
long deltaTime = currTime - this.mDynamicEnvStartTime; | |
if (DEBUG) { | |
Slog.i(TAG, "mDynamicEnvStartTime=" + this.mDynamicEnvStartTime + ", deltaTime=" + deltaTime + ", currTime=" + currTime); | |
} | |
if (this.mDynamicEnvStartTime == 0 || deltaTime > 2000) { | |
return true; | |
} | |
return false; | |
} | |
int checkMotionStatus() { | |
if (USE_MOTIONSENSOR_ENABLED) { | |
int i = this.mMotionStatus; | |
if (i == 2 || i == 3) { | |
return i; | |
} | |
return 0; | |
} | |
return 0; | |
} | |
public boolean isMotionStaticRotate() { | |
if (SMD_EFFECT_STATUS && checkMotionStatus() == 3) { | |
return true; | |
} | |
return false; | |
} | |
/* JADX WARN: Removed duplicated region for block: B:32:0x005d */ | |
/* | |
Code decompiled incorrectly, please refer to instructions dump. | |
*/ | |
public long updateDarkeningDebounce(float lux, float maxLux, float minLux) { | |
long darkeningDebounce; | |
if (checkMotionStatus() == 3) { | |
float f = this.mCurrentLux; | |
if (f < MOTIONSENSOR_STATIC_LUXTHRESHOLD && f != -1.0f && checkDynamicDebounce()) { | |
darkeningDebounce = DYNAMIC_DARKENING_DEBOUNCE1; | |
if (DEBUG) { | |
Slog.i(TAG, "DarkeningLightDebounce=" + darkeningDebounce + ", mMotionStatus = " + this.mMotionStatus + ", mCurrentLux = " + this.mCurrentLux); | |
} | |
return darkeningDebounce; | |
} | |
} | |
if (checkMotionStatus() == 2) { | |
float f2 = this.mCurrentLux; | |
if (f2 < MOTIONSENSOR_STATIC_LUXTHRESHOLD && f2 != -1.0f && checkDynamicDebounce()) { | |
darkeningDebounce = DYNAMIC_DARKENING_DEBOUNCE2; | |
if (DEBUG) { | |
} | |
return darkeningDebounce; | |
} | |
} | |
if (USE_DYNAMIC_DEBOUNCE) { | |
float f3 = this.mCurrentLux; | |
if (f3 < DYNAMIC_DARKENING_LUXTHRESHOLD && f3 != -1.0f && checkDynamicDebounce()) { | |
darkeningDebounce = DYNAMIC_DARKENING_DEBOUNCE2; | |
if (DEBUG) { | |
} | |
return darkeningDebounce; | |
} | |
} | |
darkeningDebounce = DYNAMIC_DARKENING_DEFAULTDEBOUNCE; | |
if (DEBUG) { | |
} | |
return darkeningDebounce; | |
} | |
public float getDarkenThreshold(float darkThreshold, float brightenThreshold, float lux) { | |
float mAmbientDarkeningThreshold = darkThreshold; | |
float f = this.mAngleXYToHorizon; | |
if (f > HIGHANGLE_THRESHOLD) { | |
mAmbientDarkeningThreshold *= 1.0f - DARKENING_HYSTERESIS_SEVENTYTONINETY; | |
} else if (f > ALS_FOV) { | |
mAmbientDarkeningThreshold *= 1.0f - DARKENING_HYSTERESIS_FOVTOSEVENTY; | |
} | |
Slog.i(TAG, "AmbientLux=" + lux + ", mAmbientDarkeningThreshold=" + mAmbientDarkeningThreshold + ", mAmbientBrighteningThreshold=" + brightenThreshold + ", angle_xytohorizon=" + this.mAngleXYToHorizon); | |
return mAmbientDarkeningThreshold; | |
} | |
public boolean checkSkipDebounceStatus(long enableTime, long time, float lux) { | |
if (DEBUG) { | |
Slog.d(TAG, "checkSkipDebounceStatus, enableTime=" + enableTime + ", time=" + time + ", SKIP_DEBOUNCE_ENABLED=" + SKIP_DEBOUNCE_ENABLED + ", SKIP_DEBOUNCE=" + SKIP_DEBOUNCE + ", enableTime=" + enableTime + ", mLastLux=" + this.mLastLux + ", mFirstLux=" + this.mFirstLux + ", lux=" + lux); | |
} | |
if (SKIP_DEBOUNCE_ENABLED && SKIP_DEBOUNCE + enableTime >= time) { | |
float f = this.mLastLux; | |
if (f == -1.0f || (f != -1.0f && lux > f + SKIP_LUX_DEBOUNCE2 && lux > this.mFirstLux + SKIP_LUX_DEBOUNCE1)) { | |
this.mAmbientLuxFirstEvent = true; | |
Slog.i(TAG, "skip debounce!"); | |
this.mLastLux = lux; | |
return true; | |
} | |
} | |
if (SKIP_DEBOUNCE + enableTime >= time && this.mAmbientLuxFirstEvent && lux == this.mLastLux) { | |
return needToUpdateAssistSensorData(); | |
} | |
this.mAmbientLuxFirstEvent = false; | |
this.mLastLux = lux; | |
if (this.mRealLux == lux && lux != MiuiMagicWinAnimation.INVALID_THRESHOLD) { | |
this.mStableLux = lux; | |
} | |
return needToUpdateAssistSensorData(); | |
} | |
public boolean isAmbientLuxFirstEvent() { | |
return this.mAmbientLuxFirstEvent; | |
} | |
public int changeBrightness(float lux, int brightness) { | |
int temp_brightness = brightness; | |
int maxBrightness = NORMAL_BRIGHTNESS_ON; | |
boolean z = SUPPORT_HBM; | |
if (z && HBM_SUPPORT_DIMMING && lux > HBM_START_LUX) { | |
if (DEBUG) { | |
Slog.d(TAG, "lux: " + lux + " brightness: " + brightness); | |
} | |
temp_brightness = Math.min(Math.round(this.HBM_NITTOBACKLIGHT_SPLINE.interpolate(this.HBM_AUTO_BRIGHTNESS_SPLINE.interpolate(lux))) + brightness, NORMAL_BRIGHTNESS_ON + HBM_BRIGHTNESS_ON); | |
if (DEBUG) { | |
Slog.d(TAG, "after modify: lux: " + lux + " brightness: " + temp_brightness); | |
} | |
} else if (z && !HBM_SUPPORT_DIMMING) { | |
long currTime = SystemClock.uptimeMillis(); | |
long deltaTime = 0; | |
if (brightness == maxBrightness && lux > HBM_BRIGHTENING_LUX) { | |
this.mHbmExitStartTs = 0L; | |
long j = this.mHbmEnterStartTs; | |
deltaTime = currTime - j; | |
if (j == 0) { | |
this.mHbmEnterStartTs = currTime; | |
} else if (((float) deltaTime) > HBM_BRIGHTENING_DEBOUNCE) { | |
this.mHbmStatus = true; | |
temp_brightness = HBM_BRIGHTNESS_ON + brightness; | |
} | |
} else if (this.mHbmStatus && lux < HBM_DARKENING_LUX) { | |
this.mHbmEnterStartTs = 0L; | |
long j2 = this.mHbmExitStartTs; | |
deltaTime = currTime - j2; | |
if (j2 == 0) { | |
this.mHbmExitStartTs = currTime; | |
} else if (((float) deltaTime) > HBM_DARKENING_DEBOUNCE) { | |
this.mHbmStatus = false; | |
} else { | |
temp_brightness = HBM_BRIGHTNESS_ON + brightness; | |
} | |
} else { | |
this.mHbmEnterStartTs = 0L; | |
} | |
if (DEBUG) { | |
Slog.i(TAG, "changeBrightness: brightness: " + brightness + ", lux: " + lux + ", mHbmEnterStartTs=" + this.mHbmEnterStartTs + ", mHbmExitStartTs=" + this.mHbmExitStartTs + ", mHbmStatus=" + this.mHbmStatus + ", deltaTime=" + deltaTime + ", temp_brightness=" + temp_brightness); | |
} | |
} else if (lux >= 8000.0f) { | |
return maxBrightness; | |
} | |
return temp_brightness; | |
} | |
public void updateSlowChangeStatus(boolean slowChange, float startBrightness) { | |
this.mSlowChange = slowChange; | |
this.mStartBrightness = startBrightness; | |
if (DEBUG) { | |
Slog.d(TAG, "updateSlowChangeStatus: " + this.mSlowChange + ", startBrightness: " + this.mStartBrightness); | |
} | |
} | |
void getMaxNit() { | |
this.mMaxNitsProperty = Float.parseFloat(SystemProperties.get("persist.vendor.max.brightness", "0")); | |
if (DEBUG) { | |
Slog.d(TAG, "maxNit: " + this.mMaxNitsProperty); | |
} | |
} | |
void getSpeedingRatio() { | |
this.mSpeedingRatio = Float.parseFloat(SystemProperties.get("sys.sensor.speedingratio", "0")); | |
if (DEBUG) { | |
Slog.d(TAG, "mSpeedingRatio: " + this.mSpeedingRatio); | |
} | |
} | |
public float getCeilingLimitValue(float maxvalue) { | |
if (SUPPORT_HBM && this.mAutomaticBrightnessEnable) { | |
return brightnessIntToFloat(this.mContext, NORMAL_BRIGHTNESS_ON + HBM_BRIGHTNESS_ON); | |
} | |
return maxvalue; | |
} | |
float convertToNit(float brightness) { | |
if (SUPPORT_HBM && brightness > 1.0f && DeviceFeature.HBMBACKLIGHT_BIT > 0) { | |
float nit = this.mMaxNitsProperty + (((brightness - 1.0f) * HBM_MAX_NIT) / HBM_BRIGHTNESS_ON_FLOAT); | |
return nit; | |
} | |
float nit2 = brightness * this.mMaxNitsProperty; | |
return nit2; | |
} | |
/* JADX WARN: Removed duplicated region for block: B:16:0x002f */ | |
/* | |
Code decompiled incorrectly, please refer to instructions dump. | |
*/ | |
float convertToBrightness(float nit) { | |
float brightness = MiuiMagicWinAnimation.INVALID_THRESHOLD; | |
if (SUPPORT_HBM && nit > this.mMaxNitsProperty && DeviceFeature.HBMBACKLIGHT_BIT > 0) { | |
float f = HBM_MAX_NIT; | |
if (f > MiuiMagicWinAnimation.INVALID_THRESHOLD) { | |
brightness = (((nit - this.mMaxNitsProperty) * HBM_BRIGHTNESS_ON_FLOAT) / f) + 1.0f; | |
if (DEBUG) { | |
Slog.d(TAG, "nit: " + nit + ", mMaxNitsProperty: " + this.mMaxNitsProperty + ", HBM_MAX_NIT: " + HBM_MAX_NIT); | |
} | |
return brightness; | |
} | |
} | |
float f2 = this.mMaxNitsProperty; | |
if (f2 > MiuiMagicWinAnimation.INVALID_THRESHOLD) { | |
brightness = nit / f2; | |
} | |
if (DEBUG) { | |
} | |
return brightness; | |
} | |
int getIndex(float nit) { | |
int index = 1; | |
while (true) { | |
float[] fArr = mNitsLevels; | |
if (fArr.length <= index || nit >= fArr[index]) { | |
break; | |
} | |
index++; | |
} | |
if (DEBUG) { | |
Slog.d(TAG, "nit: " + nit + ", index: " + index); | |
} | |
return index - 1; | |
} | |
float getTime(float nit, int index) { | |
float a = mALevels[index]; | |
float b = mBLevels[index]; | |
float time = (MathUtils.log(nit / a) / MathUtils.log(b)) / TIME_5; | |
if (DEBUG) { | |
Slog.d(TAG, "time: " + time + ", a: " + a + ", b: " + b); | |
} | |
return MathUtils.abs(time); | |
} | |
float getDarkeningRate(float brightness) { | |
float rate; | |
float nit = convertToNit(brightness); | |
int index = getIndex(nit); | |
float f = mALevels[index] * TIME_5; | |
float[] fArr = mBLevels; | |
float rate2 = MathUtils.abs(f * MathUtils.pow(fArr[index], getTime(nit, index) * TIME_5) * MathUtils.log(fArr[index])); | |
if (SUPPORT_HBM && nit > this.mMaxNitsProperty) { | |
rate = (((this.mSpeedingRatio + 1.0f) * rate2) * HBM_BRIGHTNESS_ON_FLOAT) / HBM_MAX_NIT; | |
} else { | |
rate = rate2 / this.mMaxNitsProperty; | |
} | |
int i = NORMAL_BRIGHTNESS_ON; | |
if (i < 4095 && nit <= NIT_LEVEL) { | |
rate = NIT_LEVEL / i; | |
} else if (IS_UMI_0B_DISPLAY_PANEL && nit <= NIT_LEVEL) { | |
rate = 80.0f / i; | |
} | |
if (DEBUG) { | |
Slog.d(TAG, "rate: " + rate + ", mSpeedingRatio: " + this.mSpeedingRatio); | |
} | |
return rate; | |
} | |
float getExpRate(float begin, float end, float nit, float time1, float time2) { | |
float a = MathUtils.log(end / begin) / (time2 - time1); | |
float b = MathUtils.log(end) - (a * time2); | |
float t = (MathUtils.log(nit) - b) / a; | |
float ret = MathUtils.exp((a * t) + b) * a; | |
if (SUPPORT_HBM && nit > this.mMaxNitsProperty) { | |
return (HBM_BRIGHTNESS_ON_FLOAT * ret) / HBM_MAX_NIT; | |
} | |
return ret / this.mMaxNitsProperty; | |
} | |
float getBrighteningRate(float brightness, float startBrightness, float tgtBrightness) { | |
float nit = convertToNit(brightness); | |
float startnit = convertToNit(startBrightness); | |
float tgtnit = convertToNit(tgtBrightness); | |
if (startnit < NIT_LEVEL1) { | |
if (tgtnit < NIT_LEVEL1) { | |
float ret = (tgtBrightness - startBrightness) / TIME_4; | |
return ret; | |
} else if (tgtnit < NIT_LEVEL3) { | |
if (nit < NIT_LEVEL1) { | |
float ret2 = (convertToBrightness(NIT_LEVEL1) - startBrightness) / TIME_3; | |
return ret2; | |
} | |
float ret3 = getExpRate(NIT_LEVEL1, tgtnit, nit, TIME_3, TIME_4); | |
return ret3; | |
} else if (nit < NIT_LEVEL1) { | |
float ret4 = (convertToBrightness(NIT_LEVEL1) - startBrightness) / TIME_2; | |
return ret4; | |
} else if (nit < NIT_LEVEL2) { | |
float ret5 = getExpRate(NIT_LEVEL1, NIT_LEVEL2, nit, TIME_2, TIME_3); | |
return ret5; | |
} else { | |
float ret6 = getExpRate(NIT_LEVEL2, tgtnit, nit, TIME_3, TIME_4); | |
return ret6; | |
} | |
} else if (startnit < NIT_LEVEL3) { | |
if (tgtnit < NIT_LEVEL3) { | |
float ret7 = getExpRate(startnit, tgtnit, nit, MiuiMagicWinAnimation.INVALID_THRESHOLD, TIME_4); | |
return ret7; | |
} else if (nit < NIT_LEVEL2) { | |
float ret8 = getExpRate(startnit, NIT_LEVEL2, nit, MiuiMagicWinAnimation.INVALID_THRESHOLD, TIME_3); | |
return ret8; | |
} else { | |
float ret9 = getExpRate(NIT_LEVEL2, tgtnit, nit, TIME_3, TIME_4); | |
return ret9; | |
} | |
} else { | |
float ret10 = getExpRate(startnit, tgtnit, nit, MiuiMagicWinAnimation.INVALID_THRESHOLD, TIME_4); | |
return ret10; | |
} | |
} | |
public float computeFloatRate(float rate, float currBrightness, float tgtBrightness) { | |
float ret = rate; | |
if (BRIGHTNESS_RATE_ADJUSTIBLE && this.mAutomaticBrightnessEnable && this.mSlowChange) { | |
if (rate == MiuiMagicWinAnimation.INVALID_THRESHOLD) { | |
ret = MiuiMagicWinAnimation.INVALID_THRESHOLD; | |
} else if (this.mAmbientLuxFirstEvent) { | |
ret = rate; | |
} else if (isAutoBrightnessByApplicationRateEnable()) { | |
ret = getAutobrightnessByApplicationRate(currBrightness, tgtBrightness, ret); | |
} else { | |
float f = this.mStartBrightness; | |
ret = f < tgtBrightness ? getBrighteningRate(currBrightness, f, tgtBrightness) : getDarkeningRate(currBrightness); | |
} | |
} | |
if (DEBUG) { | |
Slog.i(TAG, "computeFloatRate: in rate=" + rate + ", out rate=" + ret); | |
} | |
return ret; | |
} | |
public float brightnessIntToFloat(Context context, int brightnessInt) { | |
PowerManager pm = (PowerManager) context.getSystemService(PowerManager.class); | |
float pmMinBrightness = pm.getBrightnessConstraint(0); | |
float pmMaxBrightness = pm.getBrightnessConstraint(1); | |
int minBrightnessInt = Math.round(BrightnessSynchronizer.brightnessFloatToIntRange(pmMinBrightness)); | |
Math.round(BrightnessSynchronizer.brightnessFloatToIntRange(pmMaxBrightness)); | |
if (!SUPPORT_HBM || !this.mAutomaticBrightnessEnable) { | |
return BrightnessSynchronizer.brightnessIntToFloat(brightnessInt); | |
} | |
if (brightnessInt == 0) { | |
return -1.0f; | |
} | |
if (brightnessInt == -1) { | |
return Float.NaN; | |
} | |
float brightnessFlt = MathUtils.lerp(pmMinBrightness, pmMaxBrightness, MathUtils.lerpInv(minBrightnessInt, NORMAL_BRIGHTNESS_ON, brightnessInt)); | |
if (DEBUG) { | |
Slog.d(TAG, "brightnessIntToFloat: int: " + brightnessInt + ", float: " + brightnessFlt); | |
} | |
return brightnessFlt; | |
} | |
public int brightnessFloatToInt(Context context, float brightnessFloat) { | |
PowerManager pm = (PowerManager) context.getSystemService(PowerManager.class); | |
float pmMinBrightness = pm.getBrightnessConstraint(0); | |
float pmMaxBrightness = pm.getBrightnessConstraint(1); | |
int minBrightnessInt = Math.round(BrightnessSynchronizer.brightnessFloatToIntRange(pmMinBrightness)); | |
Math.round(BrightnessSynchronizer.brightnessFloatToIntRange(pmMaxBrightness)); | |
if (!SUPPORT_HBM || !this.mAutomaticBrightnessEnable) { | |
return BrightnessSynchronizer.brightnessFloatToInt(brightnessFloat); | |
} | |
if (BrightnessSynchronizer.floatEquals(brightnessFloat, -1.0f)) { | |
return 0; | |
} | |
if (Float.isNaN(brightnessFloat)) { | |
return -1; | |
} | |
int brightnessInt = Math.round(MathUtils.lerp(minBrightnessInt, NORMAL_BRIGHTNESS_ON, MathUtils.lerpInv(pmMinBrightness, pmMaxBrightness, brightnessFloat))); | |
if (DEBUG) { | |
Slog.d(TAG, "brightnessFloatToInt: float: " + brightnessFloat + ", int: " + brightnessInt); | |
} | |
return brightnessInt; | |
} | |
public boolean needToUpdateSetting(float brightnessState) { | |
if (!SUPPORT_HBM || brightnessState <= 1.0f || Float.isNaN(this.mLastSettingBrightness) || (this.mLastSettingBrightness < 1.0f && brightnessState >= 1.0f)) { | |
this.mLastSettingBrightness = brightnessState; | |
if (DEBUG) { | |
Slog.d(TAG, "need to update setting: " + brightnessState + ", mLastSettingBrightness: " + this.mLastSettingBrightness); | |
return true; | |
} | |
return true; | |
} else if (DEBUG) { | |
Slog.d(TAG, "do not need to update setting: " + brightnessState + ", mLastSettingBrightness: " + this.mLastSettingBrightness); | |
return false; | |
} else { | |
return false; | |
} | |
} | |
public boolean isSlowChangeForHdr(boolean isAutoMode, boolean slowChange) { | |
int i; | |
boolean z = true; | |
if (!this.mHDRState || ((i = this.mRotation) != 1 && i != 3)) { | |
z = false; | |
} | |
boolean hdrState = z; | |
this.mNeedBrightening = false; | |
if (!this.mSupportHdr) { | |
return slowChange; | |
} | |
if (this.mLastHdrState != hdrState) { | |
this.mNeedBrightening = hdrState; | |
slowChange = false; | |
this.mLastHdrState = hdrState; | |
} else if (hdrState) { | |
this.mNeedBrightening = hdrState; | |
slowChange = isAutoMode; | |
this.mLastHdrState = hdrState; | |
} | |
if (DEBUG) { | |
Slog.d(TAG, "getSlowChangeForHdr: mRotation=" + this.mRotation + ", isAutoMode=" + isAutoMode + ", hdr=" + this.mHDRState + ", hdrState=" + hdrState + ", slowChange=" + slowChange); | |
} | |
return slowChange; | |
} | |
public void setHDRState(boolean hdrState) { | |
this.mHDRState = hdrState; | |
} | |
public float getBrighteningRatio() { | |
return this.mBrighteningRatio; | |
} | |
public boolean isSupportHDR() { | |
return this.mSupportHdr; | |
} | |
public void setRotationWatcherEnabledIfNeeded() { | |
boolean z = this.mSupportHdr; | |
if (z && !this.mRotationWatcherOn) { | |
registerRotationListener(); | |
} else if (this.mRotationWatcherOn && !z) { | |
unregisterRotationListener(); | |
} | |
} | |
public boolean shouldApplyHDR() { | |
return this.mNeedBrightening && checkRatioValid(this.mBrighteningRatio); | |
} | |
private boolean checkRatioValid(float ratio) { | |
if (ratio < MiuiMagicWinAnimation.INVALID_THRESHOLD) { | |
return false; | |
} | |
return true; | |
} | |
public void dump(PrintWriter pw) { | |
DEBUG = isDebuggable(); | |
pw.println(" USE_PROXIMITY_ENABLED=" + USE_PROXIMITY_ENABLED); | |
pw.println(" DARKENING_HYSTERESIS_ZEROTOFOV=" + DARKENING_HYSTERESIS_ZEROTOFOV); | |
pw.println(" DARKENING_HYSTERESIS_FOVTOSEVENTY=" + DARKENING_HYSTERESIS_FOVTOSEVENTY); | |
pw.println(" DARKENING_HYSTERESIS_SEVENTYTONINETY=" + DARKENING_HYSTERESIS_SEVENTYTONINETY); | |
pw.println(" ALS_FOV=" + ALS_FOV); | |
pw.println(" HIGHANGLE_THRESHOLD=" + HIGHANGLE_THRESHOLD); | |
pw.println(" SKIP_DEBOUNCE_ENABLED=" + SKIP_DEBOUNCE_ENABLED); | |
pw.println(" SKIP_DEBOUNCE=" + SKIP_DEBOUNCE); | |
pw.println(" SKIP_LUX_DEBOUNCE1=" + SKIP_LUX_DEBOUNCE1); | |
pw.println(" SKIP_LUX_DEBOUNCE2=" + SKIP_LUX_DEBOUNCE2); | |
pw.println(" USE_ACCELEROMETER_ENABLED=" + USE_ACCELEROMETER_ENABLED); | |
pw.println(" BACKLIGHT_BIT=" + DeviceFeature.BACKLIGHT_BIT); | |
pw.println(" AUTOBRIGHTNESS_RATE_SLOW=" + AUTOBRIGHTNESS_RATE_SLOW); | |
pw.println(" BRIGHTNESS_RATE_ADJUSTIBLE=" + BRIGHTNESS_RATE_ADJUSTIBLE); | |
pw.println(" BRIGHTNESS_DARK=" + BRIGHTNESS_DARK); | |
pw.println(" BRIGHTNESS_DARK_RAMPRATE=" + BRIGHTNESS_DARK_RAMPRATE); | |
pw.println(" SLOW_RATIO=" + SLOW_RATIO); | |
pw.println(" WAIT_FOR_AUTOBRIGHTNESS=" + WAIT_FOR_AUTOBRIGHTNESS); | |
pw.println(" WAIT_TIME=" + WAIT_TIME); | |
pw.println(" MAX_NIT=" + this.mMaxNitsProperty); | |
pw.println(" HBM_AUTO_BRIGHTNESS_SPLINE=" + this.HBM_AUTO_BRIGHTNESS_SPLINE); | |
pw.println(" HBM_NITTOBACKLIGHT_SPLINE=" + this.HBM_NITTOBACKLIGHT_SPLINE); | |
pw.println(" SUPPORT_HBM=" + SUPPORT_HBM); | |
pw.println(" HBM_SUPPORT_DIMMING=" + HBM_SUPPORT_DIMMING); | |
pw.println(" HBM_BITS=" + DeviceFeature.HBMBACKLIGHT_BIT); | |
pw.println(" HBM_MAX_NIT=" + HBM_MAX_NIT); | |
pw.println(" HBM_BRIGHTNESS_ON=" + HBM_BRIGHTNESS_ON); | |
pw.println(" HBM_BRIGHTNESS_ON_FLOAT=" + HBM_BRIGHTNESS_ON_FLOAT); | |
pw.println(" mBrighteningRatio=" + this.mBrighteningRatio); | |
pw.println(" mSupportHdr=" + this.mSupportHdr); | |
AutomaticBrightnessTouchHelper.dump(pw, DEBUG); | |
this.mDaemonSensorPolicy.dump(pw); | |
DEBUG = DisplayDebugConfig.DEBUG_ABC; | |
} | |
boolean isDebuggable() { | |
return SystemProperties.getBoolean(AUTO_BRIGHTNESS_DEBUG, false); | |
} | |
private static float[] getFloatArray(TypedArray array) { | |
int length = array.length(); | |
float[] floatArray = new float[length]; | |
for (int i = 0; i < length; i++) { | |
floatArray[i] = array.getFloat(i, Float.NaN); | |
} | |
array.recycle(); | |
return floatArray; | |
} | |
public boolean isSupportAutobrightnessByApplicationCategory() { | |
return this.IS_SUPPORT_AUTOBRIGHTNESS_BY_APPLICATION_CATEGORY && !this.IS_INTERNAL_BUILD; | |
} | |
public void setAutoBrightnessByApplicationRateEnable(boolean enable) { | |
this.mIsAutoBrightnessByApplicationRateEnable = isSupportAutobrightnessByApplicationCategory() && enable; | |
} | |
public void setAutoBrightnessByApplicationAnimationEnable(boolean enable) { | |
this.mIsAutoBrightnessByApplicationAnimationEnable = enable; | |
} | |
public boolean isAutoBrightnessByApplicationAnimationEnable() { | |
return this.mIsAutoBrightnessByApplicationAnimationEnable; | |
} | |
public boolean isAutoBrightnessByApplicationRateEnable() { | |
return this.mIsAutoBrightnessByApplicationRateEnable; | |
} | |
public void addUserDataPointByApplication(float lux, float brightness, String packageName, BrightnessMappingStrategy mapper) { | |
if (mapper instanceof MiuiPhysicalBrightnessMappingStrategy) { | |
MiuiPhysicalBrightnessMappingStrategy brightnessMapper = (MiuiPhysicalBrightnessMappingStrategy) mapper; | |
brightnessMapper.addUserDataPoint(lux, brightness, packageName); | |
return; | |
} | |
mapper.addUserDataPoint(lux, brightness); | |
} | |
public float getBrightnessByApplication(float lux, String packageName, int category, BrightnessMappingStrategy mapper, float value) { | |
if (mapper instanceof MiuiPhysicalBrightnessMappingStrategy) { | |
MiuiPhysicalBrightnessMappingStrategy brightnessMapper = (MiuiPhysicalBrightnessMappingStrategy) mapper; | |
return brightnessMapper.getBrightness(lux, packageName); | |
} | |
return mapper.getBrightness(lux, packageName, category); | |
} | |
public float getAutobrightnessByApplicationRate(float currentBrightness, float targetBrightness, float rate) { | |
if (isAutoBrightnessByApplicationAnimationEnable()) { | |
if (targetBrightness > currentBrightness) { | |
float diffBrightness = targetBrightness - currentBrightness; | |
if (diffBrightness > currentBrightness) { | |
this.mAutoBrightnessByApplicationRate = diffBrightness / 10.0f; | |
} else { | |
this.mAutoBrightnessByApplicationRate = diffBrightness / 5.0f; | |
} | |
} else { | |
float diffBrightness2 = currentBrightness - targetBrightness; | |
if (diffBrightness2 > targetBrightness) { | |
this.mAutoBrightnessByApplicationRate = diffBrightness2 / 10.0f; | |
} else { | |
this.mAutoBrightnessByApplicationRate = diffBrightness2 / 5.0f; | |
} | |
} | |
setAutoBrightnessByApplicationAnimationEnable(false); | |
} | |
return MathUtils.max(this.mAutoBrightnessByApplicationRate, 0.01f); | |
} | |
public float fillInLuxFromDaemonSensor() { | |
if (!USE_DAEMON_SENSOR_POLICY) { | |
return Float.NaN; | |
} | |
float lux = this.mDaemonSensorPolicy.getMainLightSensorLux(); | |
if (USE_ASSISTSENSOR_ENABLED) { | |
this.mAssistSensorData = this.mDaemonSensorPolicy.getDaemonSensorValue(ASSIST_SENSOR_TYPE); | |
} | |
return lux; | |
} | |
public void stop() { | |
setSensorEnabled(false); | |
this.mDaemonSensorPolicy.stop(); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment