package com.oplus.engineermode.lights.base;
import android.content.Context;
import android.hardware.camera2.CameraAccessException;
import android.hardware.camera2.CameraCharacteristics;
import android.hardware.camera2.CameraManager;
import android.os.OplusPropertyList;
import android.os.PowerManager;
import android.provider.Settings;
import android.provider.Settings.System;
import android.text.TextUtils;
import android.view.Window;
import android.view.WindowManager;
import com.oplus.engineermode.device.config.DevicesFeatureOptions;
import com.oplus.engineermode.display.sdk.OplusDisplayPanelFeature;
import com.oplus.engineermode.display.sdk.constants.DisplayID;
import com.oplus.engineermode.display.sdk.constants.DisplayPanelFeatureID;
import com.oplus.engineermode.core.sdk.utils.Log;
import com.oplus.engineermode.misc.sdk.utils.OplusMiscHelper;
import com.oplus.engineermode.util.OplusFeatureConfigManager;
import com.oplus.engineermode.core.sdk.utils.ReflectionHelper;
import com.oplus.engineermode.core.sdk.utils.SystemProperties;
public final class LightsManager {
/*
public static final int DEFAULT_BREATHLIGHT_COLOR = 0xFFFFFFFF;
public static final int DEFAULT_BREATHLIGHT_COLOR_RED = 0xFFFF0000;
public static final int DEFAULT_BREATHLIGHT_COLOR_GREEN = 0xFF00FF00;
public static final int DEFAULT_BREATHLIGHT_COLOR_BLUE = 0xFF0000FF;
public static final int DEFAULT_BREATHLIGHT_COLOR_OFF = 0xFF000000;
public static final int DEFAULT_BREATHLIGHT_BRIGHTNESS = 0x000000FF;
*/
public static final int BIT_16 = 16;
public static final int BIT_8 = 8;
public static final int BREATH_LIGHT_ON = 500;
public static final int BREATH_LIGHT_OFF = 500;
public static final int BREATH_LIGHT_BRIGHTNESS = 5;
public static final int BREATH_LIGHT_TR1 = 11;
public static final int BREATH_LIGHT_TOFF = 14;
public static final int BREATH_LIGHT_FREQ = 3;
public static final int BREATH_LIGHT_DUTY = 5;
public static final int DEFAULT_BUTTONLIGHT_BRIGHTNESS = 255;
public static final float WM_OVERRIDE_BRIGHTNESS_DISABLE = -1.0f;
public static final float WM_OVERRIDE_BRIGHTNESS_BRIGHT_RATIO = 1.0f;
public static final boolean TORCH_SWITCH_ON = true;
public static final boolean TORCH_SWITCH_OFF = false;
/*
public static final int BREATH_LIGHT_BRIGHTNESS = 50;
public static final int BREATH_LIGHT_BREATH = 51;
public static final int BREATH_LIGHT_DELAY_ON = 52;
public static final int BREATH_LIGHT_DELAY_OFF = 53;
public static final int BREATH_LIGHT_STATUS_LEDS = 54;
public static final int BREATH_LIGHT_BLINKS = 55;
*/
/*RGB lights*/
public static final int RED_BREATH_LIGHT = 0;
public static final int GREEN_BREATH_LIGHT = 1;
public static final int BLUE_BREATH_LIGHT = 2;
public static final int WHITE_BREATH_LIGHT = 3;
public static final int WHITE_MIXTURE_BREATH_LIGHT = 4;
public static final int MIXTURE_1_BREATH_LIGHT = 5;
public static final int MIXTURE_2_BREATH_LIGHT = 6;
public static final int MIXTURE_3_BREATH_LIGHT = 7;
/*red brightness & trigger*/
public static final int RED_BREATH_LIGHT_SUPPORT = 180;
public static final int RED_BREATH_LIGHT_BRIGHTNESS = 185;
public static final int RED_BREATH_LIGHT_TRIGGER = 186;
/*red time mode*/
//public static final int RED_BREATH_LIGHT_DELAY_ON = 52;
//public static final int RED_BREATH_LIGHT_DELAY_OFF = 53;
/*red breath mode*/
//public static final int RED_BREATH_LIGHT_TR1 = 54;
//public static final int RED_BREATH_LIGHT_TOFF = 55;
/*red pwm mode*/
//public static final int RED_BREATH_LIGHT_FREQ = 56;
//public static final int RED_BREATH_LIGHT_DUTY = 57;
/*red breath mode2*/
//public static final int RED_BREATH_LIGHT_TF1 = 58;
//public static final int RED_BREATH_LIGHT_TON = 59;
/*green brightness & trigger*/
public static final int GREEN_BREATH_LIGHT_BRIGHTNESS = 205;
public static final int GREEN_BREATH_LIGHT_TRIGGER = 206;
/*green time mode*/
//public static final int GREEN_BREATH_LIGHT_DELAY_ON = 62;
//public static final int GREEN_BREATH_LIGHT_DELAY_OFF = 63;
/*green breath mode*/
//public static final int GREEN_BREATH_LIGHT_TR1 = 64;
//public static final int GREEN_BREATH_LIGHT_TOFF = 65;
/*green pwm mode*/
//public static final int GREEN_BREATH_LIGHT_FREQ = 66;
//public static final int GREEN_BREATH_LIGHT_DUTY = 67;
/*green breath mode2*/
//public static final int GREEN_BREATH_LIGHT_TF1 = 68;
//public static final int GREEN_BREATH_LIGHT_TON = 69;
/*blue brightness & trigger*/
public static final int BLUE_BREATH_LIGHT_BRIGHTNESS = 225;
public static final int BLUE_BREATH_LIGHT_TRIGGER = 226;
/*blue time mode*/
//public static final int BLUE_BREATH_LIGHT_DELAY_ON = 72;
//public static final int BLUE_BREATH_LIGHT_DELAY_OFF = 73;
/*blue breath mode*/
//public static final int BLUE_BREATH_LIGHT_TR1 = 74;
//public static final int BLUE_BREATH_LIGHT_TOFF = 75;
/*blue pwm mode*/
//public static final int BLUE_BREATH_LIGHT_FREQ = 76;
//public static final int BLUE_BREATH_LIGHT_DUTY = 77;
/*blue breath mode2*/
//public static final int BLUE_BREATH_LIGHT_TF1 = 78;
//public static final int BLUE_BREATH_LIGHT_TON = 79;
/*white brightness & trigger*/
public static final int WHITE_BREATH_LIGHT_BRIGHTNESS = 245;
public static final int WHITE_BREATH_LIGHT_TRIGGER = 246;
public static final String BREATH_MODE_CC = "cc_mode";
public static final String BREATH_MODE_BREATH = "breath_mode";
public static final String BREATH_MODE_MARQUEE = "marquee_mode";
private static final String BREATH_MODE_TIMER = "timer";
private static final String BREATH_MODE_PWM = "pwm_mode";
private static final String METHOD_GET_MAX_BRIGHTNESS = "getMaxBrightness";
private static final String METHOD_GET_DEFAULT_BRIGHTNESS = "getDefaultBrightness";
private static final String METHOD_GET_MIN_BRIGHTNESS = "getMinBrightness";
private static final String METHOD_GET_BRIGHTNESS_BY_NIT = "getDisplaysBrightnessByNit";
private static final String CLASS_ANDROID_OS_POWER_MANAGER = "android.os.OplusPowerManager";
private static final String TAG = "LightsManager";
private static final boolean DEBUG = true;
private static final String OPLUS_GHBM_MODE = "display_gloableHBM_settings";
private static final String PROPERTY_RO_BRIGHTNESS_MODE_EXP_PER_20 = "ro.display.brightness.mode.exp.per_20";
private static final String PROPERTY_RO_BRIGHTNESS_MODE = "ro.display.brightness.brightness.mode";
private static final int BRIGHTNESS_MODE_LINEAR = 0;
private static final int BRIGHTNESS_MODE_EXP = 1;
private PowerManager mPowerManager;
private boolean mMultiBitsSupport;
private Context mContext;
public LightsManager(Context context) {
mContext = context;
mPowerManager = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
mMultiBitsSupport = OplusFeatureConfigManager.isDisplayMultiBitsDimmingSupport();
}
public static int getLcdBrightnessMode(Context context) {
return Settings.System.getInt(context.getContentResolver(), System.SCREEN_BRIGHTNESS_MODE, System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC);
}
public static boolean setLcdBrightnessMode(Context context, int mode) {
return Settings.System.putInt(context.getContentResolver(), System.SCREEN_BRIGHTNESS_MODE, mode);
}
public static int getGlobalHighBrightnessMode(Context context) {
return Settings.Secure.getInt(context.getContentResolver(), OPLUS_GHBM_MODE, 1);
}
public static boolean setGlobalHighBrightnessMode(Context context, int mode) {
return Settings.Secure.putInt(context.getContentResolver(), OPLUS_GHBM_MODE, mode);
}
public int getLcdBacklightDefaultBrightnessLevel() {
if (mMultiBitsSupport) {
try {
Class<?> OplusPowerManager = Class.forName(CLASS_ANDROID_OS_POWER_MANAGER);
Object oplusPowerManager = OplusPowerManager.getDeclaredConstructor().newInstance();
Object defaultLevel = ReflectionHelper
.callDeclaredMethod(oplusPowerManager, CLASS_ANDROID_OS_POWER_MANAGER, METHOD_GET_DEFAULT_BRIGHTNESS, null, null);
if (defaultLevel != null) {
return (int) defaultLevel;
}
} catch (Exception e) {
Log.i(TAG, "getLcdBacklightDefaultBrightnessLevel : " + e.getMessage());
}
}
return mPowerManager.getDefaultScreenBrightnessSetting();
}
public int getLcdBacklightMinimumBrightnessLevel() {
if (mMultiBitsSupport) {
try {
Class<?> OplusPowerManager = Class.forName(CLASS_ANDROID_OS_POWER_MANAGER);
Object oplusPowerManager = OplusPowerManager.getDeclaredConstructor().newInstance();
Object minLevel = ReflectionHelper
.callDeclaredMethod(oplusPowerManager, CLASS_ANDROID_OS_POWER_MANAGER, METHOD_GET_MIN_BRIGHTNESS, null, null);
if (minLevel != null) {
return (int) minLevel;
}
} catch (Exception e) {
Log.i(TAG, "getLcdBacklightMinimumBrightnessLevel : " + e.getMessage());
}
}
return mPowerManager.getMinimumScreenBrightnessSetting();
}
public int getLcdBacklightMaximumBrightnessLevel() {
if (mMultiBitsSupport) {
try {
Class<?> OplusPowerManager = Class.forName(CLASS_ANDROID_OS_POWER_MANAGER);
Object oplusPowerManager = OplusPowerManager.getDeclaredConstructor().newInstance();
Object maxLevel = ReflectionHelper
.callDeclaredMethod(oplusPowerManager, CLASS_ANDROID_OS_POWER_MANAGER, METHOD_GET_MAX_BRIGHTNESS, null, null);
if (maxLevel != null) {
return (int) maxLevel;
}
} catch (Exception e) {
Log.i(TAG, "getLcdBacklightMaximumBrightnessLevel : " + e.getMessage());
}
}
return mPowerManager.getMaximumScreenBrightnessSetting();
}
public float getWindowManagerBrightnessOverrideDimRatio() {
return getLcdBacklightMinimumBrightnessLevel() / (float) getLcdBacklightMaximumBrightnessLevel();
}
public float getWindowManagerBrightnessOverrideDefaultRatio() {
return getLcdBacklightDefaultBrightnessLevel() / (float) getLcdBacklightMaximumBrightnessLevel();
}
public void setCurrentWindowBrightness(Window window, float ratio) {
WindowManager.LayoutParams localLayoutParams = window.getAttributes();
localLayoutParams.screenBrightness = ratio;
window.setAttributes(localLayoutParams);
}
public static int getBreathLightMaxBrightness() {
return OplusMiscHelper.getBreathLightMaxBrightness();
}
public static boolean isSingleColorSupport() {
return OplusMiscHelper.isSingleColorSupport();
}
public static boolean isMarqueeSupport() {
return OplusMiscHelper.isMarqueeSupport();
}
public void setBreathLightBrightness(int color, int brightness) {
if (DEBUG) {
Log.i(TAG, "setBreathLightOn color = " + color + " brightness = " + brightness);
}
switch (color) {
case RED_BREATH_LIGHT:
OplusMiscHelper.setBreathLightStatus(RED_BREATH_LIGHT_BRIGHTNESS, String.valueOf(brightness));
break;
case GREEN_BREATH_LIGHT:
OplusMiscHelper.setBreathLightStatus(GREEN_BREATH_LIGHT_BRIGHTNESS, String.valueOf(brightness));
break;
case BLUE_BREATH_LIGHT:
OplusMiscHelper.setBreathLightStatus(BLUE_BREATH_LIGHT_BRIGHTNESS, String.valueOf(brightness));
break;
case WHITE_BREATH_LIGHT:
OplusMiscHelper.setWhiteBreathLightStatus(WHITE_BREATH_LIGHT_BRIGHTNESS, String.valueOf(brightness));
break;
default:
break;
}
}
public void setBreathLightOn(int color, int brightness) {
if (DEBUG) {
Log.i(TAG, "setBreathLightOn color = " + color + " brightness = " + brightness);
}
switch (color) {
case RED_BREATH_LIGHT:
if (brightness == 0) {
OplusMiscHelper.setBreathLightStatus(RED_BREATH_LIGHT_BRIGHTNESS, String.valueOf(brightness));
OplusMiscHelper.setBreathLightStatus(RED_BREATH_LIGHT_TRIGGER, BREATH_MODE_CC);
} else {
OplusMiscHelper.setBreathLightStatus(RED_BREATH_LIGHT_TRIGGER, BREATH_MODE_CC);
OplusMiscHelper.setBreathLightStatus(RED_BREATH_LIGHT_BRIGHTNESS, String.valueOf(brightness));
}
break;
case GREEN_BREATH_LIGHT:
if (brightness == 0) {
OplusMiscHelper.setBreathLightStatus(GREEN_BREATH_LIGHT_BRIGHTNESS, String.valueOf(brightness));
OplusMiscHelper.setBreathLightStatus(GREEN_BREATH_LIGHT_TRIGGER, BREATH_MODE_CC);
} else {
OplusMiscHelper.setBreathLightStatus(GREEN_BREATH_LIGHT_TRIGGER, BREATH_MODE_CC);
OplusMiscHelper.setBreathLightStatus(GREEN_BREATH_LIGHT_BRIGHTNESS, String.valueOf(brightness));
}
break;
case BLUE_BREATH_LIGHT:
if (brightness == 0) {
OplusMiscHelper.setBreathLightStatus(BLUE_BREATH_LIGHT_BRIGHTNESS, String.valueOf(brightness));
OplusMiscHelper.setBreathLightStatus(BLUE_BREATH_LIGHT_TRIGGER, BREATH_MODE_CC);
} else {
OplusMiscHelper.setBreathLightStatus(BLUE_BREATH_LIGHT_TRIGGER, BREATH_MODE_CC);
OplusMiscHelper.setBreathLightStatus(BLUE_BREATH_LIGHT_BRIGHTNESS, String.valueOf(brightness));
}
break;
case WHITE_BREATH_LIGHT:
if (brightness == 0) {
OplusMiscHelper.setWhiteBreathLightStatus(WHITE_BREATH_LIGHT_BRIGHTNESS, String.valueOf(brightness));
OplusMiscHelper.setWhiteBreathLightStatus(WHITE_BREATH_LIGHT_TRIGGER, BREATH_MODE_CC);
} else {
OplusMiscHelper.setWhiteBreathLightStatus(WHITE_BREATH_LIGHT_TRIGGER, BREATH_MODE_CC);
OplusMiscHelper.setWhiteBreathLightStatus(WHITE_BREATH_LIGHT_BRIGHTNESS, String.valueOf(brightness));
}
break;
case WHITE_MIXTURE_BREATH_LIGHT:
OplusMiscHelper.setMixtureBreathLightStatus(RED_BREATH_LIGHT_TRIGGER, BREATH_MODE_CC);
OplusMiscHelper.setMixtureBreathLightStatus(GREEN_BREATH_LIGHT_TRIGGER, BREATH_MODE_CC);
OplusMiscHelper.setMixtureBreathLightStatus(BLUE_BREATH_LIGHT_TRIGGER, BREATH_MODE_CC);
OplusMiscHelper.setMixtureBreathLightStatus(WHITE_BREATH_LIGHT_TRIGGER, BREATH_MODE_CC);
OplusMiscHelper.setMixtureBreathLightStatus(RED_BREATH_LIGHT_BRIGHTNESS, String.valueOf(51));
OplusMiscHelper.setMixtureBreathLightStatus(GREEN_BREATH_LIGHT_BRIGHTNESS, String.valueOf(26));
OplusMiscHelper.setMixtureBreathLightStatus(BLUE_BREATH_LIGHT_BRIGHTNESS, String.valueOf(15));
OplusMiscHelper.setMixtureBreathLightStatus(WHITE_BREATH_LIGHT_BRIGHTNESS, String.valueOf(160));
break;
case MIXTURE_1_BREATH_LIGHT:
OplusMiscHelper.setMixtureBreathLightStatus(RED_BREATH_LIGHT_TRIGGER, BREATH_MODE_CC);
OplusMiscHelper.setMixtureBreathLightStatus(GREEN_BREATH_LIGHT_TRIGGER, BREATH_MODE_CC);
OplusMiscHelper.setMixtureBreathLightStatus(BLUE_BREATH_LIGHT_TRIGGER, BREATH_MODE_CC);
OplusMiscHelper.setMixtureBreathLightStatus(WHITE_BREATH_LIGHT_TRIGGER, BREATH_MODE_CC);
OplusMiscHelper.setMixtureBreathLightStatus(RED_BREATH_LIGHT_BRIGHTNESS, String.valueOf(131));
OplusMiscHelper.setMixtureBreathLightStatus(GREEN_BREATH_LIGHT_BRIGHTNESS, String.valueOf(58));
OplusMiscHelper.setMixtureBreathLightStatus(BLUE_BREATH_LIGHT_BRIGHTNESS, String.valueOf(0));
OplusMiscHelper.setMixtureBreathLightStatus(WHITE_BREATH_LIGHT_BRIGHTNESS, String.valueOf(0));
break;
case MIXTURE_2_BREATH_LIGHT:
OplusMiscHelper.setMixtureBreathLightStatus(RED_BREATH_LIGHT_TRIGGER, BREATH_MODE_CC);
OplusMiscHelper.setMixtureBreathLightStatus(GREEN_BREATH_LIGHT_TRIGGER, BREATH_MODE_CC);
OplusMiscHelper.setMixtureBreathLightStatus(BLUE_BREATH_LIGHT_TRIGGER, BREATH_MODE_CC);
OplusMiscHelper.setMixtureBreathLightStatus(WHITE_BREATH_LIGHT_TRIGGER, BREATH_MODE_CC);
OplusMiscHelper.setMixtureBreathLightStatus(RED_BREATH_LIGHT_BRIGHTNESS, String.valueOf(0));
OplusMiscHelper.setMixtureBreathLightStatus(GREEN_BREATH_LIGHT_BRIGHTNESS, String.valueOf(102));
OplusMiscHelper.setMixtureBreathLightStatus(BLUE_BREATH_LIGHT_BRIGHTNESS, String.valueOf(62));
OplusMiscHelper.setMixtureBreathLightStatus(WHITE_BREATH_LIGHT_BRIGHTNESS, String.valueOf(0));
break;
case MIXTURE_3_BREATH_LIGHT:
OplusMiscHelper.setMixtureBreathLightStatus(RED_BREATH_LIGHT_TRIGGER, BREATH_MODE_CC);
OplusMiscHelper.setMixtureBreathLightStatus(GREEN_BREATH_LIGHT_TRIGGER, BREATH_MODE_CC);
OplusMiscHelper.setMixtureBreathLightStatus(BLUE_BREATH_LIGHT_TRIGGER, BREATH_MODE_CC);
OplusMiscHelper.setMixtureBreathLightStatus(WHITE_BREATH_LIGHT_TRIGGER, BREATH_MODE_CC);
OplusMiscHelper.setMixtureBreathLightStatus(RED_BREATH_LIGHT_BRIGHTNESS, String.valueOf(79));
OplusMiscHelper.setMixtureBreathLightStatus(GREEN_BREATH_LIGHT_BRIGHTNESS, String.valueOf(0));
OplusMiscHelper.setMixtureBreathLightStatus(BLUE_BREATH_LIGHT_BRIGHTNESS, String.valueOf(81));
OplusMiscHelper.setMixtureBreathLightStatus(WHITE_BREATH_LIGHT_BRIGHTNESS, String.valueOf(0));
break;
default:
break;
}
}
public void setBreathLightBreath(int color, int brightness/*, int tr1, int toff*/) {
if (DEBUG) {
Log.i(TAG, "setBreathLightBreath color = " + color + " brightness = " + brightness/* +
" tr1 = " + tr1 + " toff = " + toff*/);
}
switch (color) {
case RED_BREATH_LIGHT:
if (brightness == 0) {
OplusMiscHelper.setBreathLightStatus(RED_BREATH_LIGHT_BRIGHTNESS, String.valueOf(brightness));
OplusMiscHelper.setBreathLightStatus(RED_BREATH_LIGHT_TRIGGER, BREATH_MODE_BREATH);
/*OplusMiscHelper.setBreathLightStatus(RED_BREATH_LIGHT_TOFF, String.valueOf(toff));
OplusMiscHelper.setBreathLightStatus(RED_BREATH_LIGHT_TR1, String.valueOf(tr1));*/
} else {
OplusMiscHelper.setBreathLightStatus(RED_BREATH_LIGHT_TRIGGER, BREATH_MODE_BREATH);
/*OplusMiscHelper.setBreathLightStatus(RED_BREATH_LIGHT_TOFF, String.valueOf(toff));
OplusMiscHelper.setBreathLightStatus(RED_BREATH_LIGHT_TR1, String.valueOf(tr1));*/
OplusMiscHelper.setBreathLightStatus(RED_BREATH_LIGHT_BRIGHTNESS, String.valueOf(brightness));
}
break;
case GREEN_BREATH_LIGHT:
if (brightness == 0) {
OplusMiscHelper.setBreathLightStatus(GREEN_BREATH_LIGHT_BRIGHTNESS, String.valueOf(brightness));
OplusMiscHelper.setBreathLightStatus(GREEN_BREATH_LIGHT_TRIGGER, BREATH_MODE_BREATH);
/*OplusMiscHelper.setBreathLightStatus(GREEN_BREATH_LIGHT_TOFF, String.valueOf(toff));
OplusMiscHelper.setBreathLightStatus(GREEN_BREATH_LIGHT_TR1, String.valueOf(tr1));*/
} else {
OplusMiscHelper.setBreathLightStatus(GREEN_BREATH_LIGHT_TRIGGER, BREATH_MODE_BREATH);
/*OplusMiscHelper.setBreathLightStatus(GREEN_BREATH_LIGHT_TOFF, String.valueOf(toff));
OplusMiscHelper.setBreathLightStatus(GREEN_BREATH_LIGHT_TR1, String.valueOf(tr1));*/
OplusMiscHelper.setBreathLightStatus(GREEN_BREATH_LIGHT_BRIGHTNESS, String.valueOf(brightness));
}
break;
case BLUE_BREATH_LIGHT:
if (brightness == 0) {
OplusMiscHelper.setBreathLightStatus(BLUE_BREATH_LIGHT_BRIGHTNESS, String.valueOf(brightness));
OplusMiscHelper.setBreathLightStatus(BLUE_BREATH_LIGHT_TRIGGER, BREATH_MODE_BREATH);
/*OplusMiscHelper.setBreathLightStatus(BLUE_BREATH_LIGHT_TOFF, String.valueOf(toff));
OplusMiscHelper.setBreathLightStatus(BLUE_BREATH_LIGHT_TR1, String.valueOf(tr1));*/
} else {
OplusMiscHelper.setBreathLightStatus(BLUE_BREATH_LIGHT_TRIGGER, BREATH_MODE_BREATH);
/*OplusMiscHelper.setBreathLightStatus(BLUE_BREATH_LIGHT_TOFF, String.valueOf(toff));
OplusMiscHelper.setBreathLightStatus(BLUE_BREATH_LIGHT_TR1, String.valueOf(tr1));*/
OplusMiscHelper.setBreathLightStatus(BLUE_BREATH_LIGHT_BRIGHTNESS, String.valueOf(brightness));
}
break;
case WHITE_BREATH_LIGHT:
if (DevicesFeatureOptions.isWhiteLightSupport()) {
if (brightness == 0) {
OplusMiscHelper.setWhiteBreathLightStatus(WHITE_BREATH_LIGHT_BRIGHTNESS, String.valueOf(brightness));
OplusMiscHelper.setWhiteBreathLightStatus(WHITE_BREATH_LIGHT_TRIGGER, BREATH_MODE_BREATH);
} else {
OplusMiscHelper.setWhiteBreathLightStatus(WHITE_BREATH_LIGHT_TRIGGER, BREATH_MODE_BREATH);
OplusMiscHelper.setWhiteBreathLightStatus(WHITE_BREATH_LIGHT_BRIGHTNESS, String.valueOf(brightness));
}
break;
}
default:
break;
}
}
public void setBreathLightTimerBlink(int color, int brightness/*, int onMS, int offMS*/) {
if (DEBUG) {
Log.i(TAG, "setBreathLightTimerBlink color = " + color + " brightness = " + brightness/* +
" onMS = " + onMS + " offMS = " + offMS*/);
}
/*if ((onMS == 0) || (offMS == 0)) {
Log.i(TAG, "invalid on or off MS");
return;
}*/
switch (color) {
case RED_BREATH_LIGHT:
if (brightness == 0) {
OplusMiscHelper.setBreathLightStatus(RED_BREATH_LIGHT_BRIGHTNESS, String.valueOf(brightness));
OplusMiscHelper.setBreathLightStatus(RED_BREATH_LIGHT_TRIGGER, BREATH_MODE_TIMER);
/*OplusMiscHelper.setBreathLightStatus(RED_BREATH_LIGHT_DELAY_ON, String.valueOf(onMS));
OplusMiscHelper.setBreathLightStatus(RED_BREATH_LIGHT_DELAY_OFF, String.valueOf(offMS));*/
} else {
OplusMiscHelper.setBreathLightStatus(RED_BREATH_LIGHT_TRIGGER, BREATH_MODE_TIMER);
/*OplusMiscHelper.setBreathLightStatus(RED_BREATH_LIGHT_DELAY_ON, String.valueOf(onMS));
OplusMiscHelper.setBreathLightStatus(RED_BREATH_LIGHT_DELAY_OFF, String.valueOf(offMS));*/
OplusMiscHelper.setBreathLightStatus(RED_BREATH_LIGHT_BRIGHTNESS, String.valueOf(brightness));
}
break;
case GREEN_BREATH_LIGHT:
if (brightness == 0) {
OplusMiscHelper.setBreathLightStatus(GREEN_BREATH_LIGHT_BRIGHTNESS, String.valueOf(brightness));
OplusMiscHelper.setBreathLightStatus(GREEN_BREATH_LIGHT_TRIGGER, BREATH_MODE_TIMER);
/*OplusMiscHelper.setBreathLightStatus(GREEN_BREATH_LIGHT_DELAY_ON, String.valueOf(onMS));
OplusMiscHelper.setBreathLightStatus(GREEN_BREATH_LIGHT_DELAY_OFF, String.valueOf(offMS));*/
} else {
OplusMiscHelper.setBreathLightStatus(GREEN_BREATH_LIGHT_TRIGGER, BREATH_MODE_TIMER);
/*OplusMiscHelper.setBreathLightStatus(GREEN_BREATH_LIGHT_DELAY_ON, String.valueOf(onMS));
OplusMiscHelper.setBreathLightStatus(GREEN_BREATH_LIGHT_DELAY_OFF, String.valueOf(offMS));*/
OplusMiscHelper.setBreathLightStatus(GREEN_BREATH_LIGHT_BRIGHTNESS, String.valueOf(brightness));
}
break;
case BLUE_BREATH_LIGHT:
if (brightness == 0) {
OplusMiscHelper.setBreathLightStatus(BLUE_BREATH_LIGHT_BRIGHTNESS, String.valueOf(brightness));
OplusMiscHelper.setBreathLightStatus(BLUE_BREATH_LIGHT_TRIGGER, BREATH_MODE_TIMER);
/*OplusMiscHelper.setBreathLightStatus(BLUE_BREATH_LIGHT_DELAY_ON, String.valueOf(onMS));
OplusMiscHelper.setBreathLightStatus(BLUE_BREATH_LIGHT_DELAY_OFF, String.valueOf(offMS));*/
} else {
OplusMiscHelper.setBreathLightStatus(BLUE_BREATH_LIGHT_TRIGGER, BREATH_MODE_TIMER);
/*OplusMiscHelper.setBreathLightStatus(BLUE_BREATH_LIGHT_DELAY_ON, String.valueOf(onMS));
OplusMiscHelper.setBreathLightStatus(BLUE_BREATH_LIGHT_DELAY_OFF, String.valueOf(offMS));*/
OplusMiscHelper.setBreathLightStatus(BLUE_BREATH_LIGHT_BRIGHTNESS, String.valueOf(brightness));
}
break;
case WHITE_BREATH_LIGHT:
if (brightness == 0) {
OplusMiscHelper.setWhiteBreathLightStatus(WHITE_BREATH_LIGHT_BRIGHTNESS, String.valueOf(brightness));
OplusMiscHelper.setWhiteBreathLightStatus(WHITE_BREATH_LIGHT_TRIGGER, BREATH_MODE_TIMER);
} else {
OplusMiscHelper.setWhiteBreathLightStatus(WHITE_BREATH_LIGHT_TRIGGER, BREATH_MODE_TIMER);
OplusMiscHelper.setWhiteBreathLightStatus(WHITE_BREATH_LIGHT_BRIGHTNESS, String.valueOf(brightness));
}
break;
default:
break;
}
}
public void setBreathLightPwmBlink(int color, int brightness/*, int freq, int duty*/) {
if (DEBUG) {
Log.i(TAG, "setBreathLightPwmBlink color = " + color + " brightness = " + brightness/* +
" freq = " + freq + " duty = " + duty*/);
}
switch (color) {
case RED_BREATH_LIGHT:
if (brightness == 0) {
OplusMiscHelper.setBreathLightStatus(RED_BREATH_LIGHT_BRIGHTNESS, String.valueOf(brightness));
OplusMiscHelper.setBreathLightStatus(RED_BREATH_LIGHT_TRIGGER, BREATH_MODE_PWM);
/*OplusMiscHelper.setBreathLightStatus(RED_BREATH_LIGHT_FREQ, String.valueOf(freq));
OplusMiscHelper.setBreathLightStatus(RED_BREATH_LIGHT_DUTY, String.valueOf(duty));*/
} else {
OplusMiscHelper.setBreathLightStatus(RED_BREATH_LIGHT_TRIGGER, BREATH_MODE_PWM);
/*OplusMiscHelper.setBreathLightStatus(RED_BREATH_LIGHT_FREQ, String.valueOf(freq));
OplusMiscHelper.setBreathLightStatus(RED_BREATH_LIGHT_DUTY, String.valueOf(duty));*/
OplusMiscHelper.setBreathLightStatus(RED_BREATH_LIGHT_BRIGHTNESS, String.valueOf(brightness));
}
break;
case GREEN_BREATH_LIGHT:
if (brightness == 0) {
OplusMiscHelper.setBreathLightStatus(GREEN_BREATH_LIGHT_BRIGHTNESS, String.valueOf(brightness));
OplusMiscHelper.setBreathLightStatus(GREEN_BREATH_LIGHT_TRIGGER, BREATH_MODE_PWM);
/*OplusMiscHelper.setBreathLightStatus(GREEN_BREATH_LIGHT_FREQ, String.valueOf(freq));
OplusMiscHelper.setBreathLightStatus(GREEN_BREATH_LIGHT_DUTY, String.valueOf(duty));*/
} else {
OplusMiscHelper.setBreathLightStatus(GREEN_BREATH_LIGHT_TRIGGER, BREATH_MODE_PWM);
/*OplusMiscHelper.setBreathLightStatus(GREEN_BREATH_LIGHT_FREQ, String.valueOf(freq));
OplusMiscHelper.setBreathLightStatus(GREEN_BREATH_LIGHT_DUTY, String.valueOf(duty));*/
OplusMiscHelper.setBreathLightStatus(GREEN_BREATH_LIGHT_BRIGHTNESS, String.valueOf(brightness));
}
break;
case BLUE_BREATH_LIGHT:
if (brightness == 0) {
OplusMiscHelper.setBreathLightStatus(BLUE_BREATH_LIGHT_BRIGHTNESS, String.valueOf(brightness));
OplusMiscHelper.setBreathLightStatus(BLUE_BREATH_LIGHT_TRIGGER, BREATH_MODE_PWM);
/*OplusMiscHelper.setBreathLightStatus(BLUE_BREATH_LIGHT_FREQ, String.valueOf(freq));
OplusMiscHelper.setBreathLightStatus(BLUE_BREATH_LIGHT_DUTY, String.valueOf(duty));*/
} else {
OplusMiscHelper.setBreathLightStatus(BLUE_BREATH_LIGHT_TRIGGER, BREATH_MODE_PWM);
/*OplusMiscHelper.setBreathLightStatus(BLUE_BREATH_LIGHT_FREQ, String.valueOf(freq));
OplusMiscHelper.setBreathLightStatus(BLUE_BREATH_LIGHT_DUTY, String.valueOf(duty));*/
OplusMiscHelper.setBreathLightStatus(BLUE_BREATH_LIGHT_BRIGHTNESS, String.valueOf(brightness));
}
break;
case WHITE_BREATH_LIGHT:
if (brightness == 0) {
OplusMiscHelper.setWhiteBreathLightStatus(WHITE_BREATH_LIGHT_BRIGHTNESS, String.valueOf(brightness));
OplusMiscHelper.setWhiteBreathLightStatus(WHITE_BREATH_LIGHT_TRIGGER, BREATH_MODE_PWM);
} else {
OplusMiscHelper.setWhiteBreathLightStatus(WHITE_BREATH_LIGHT_TRIGGER, BREATH_MODE_PWM);
OplusMiscHelper.setWhiteBreathLightStatus(WHITE_BREATH_LIGHT_BRIGHTNESS, String.valueOf(brightness));
}
break;
default:
break;
}
}
public void setBreathLightOff(int color) {
//if (DEBUG) {
Log.i(TAG, "setBreathLightOff color = " + color);
//}
switch (color) {
case RED_BREATH_LIGHT:
OplusMiscHelper.setBreathLightStatus(RED_BREATH_LIGHT_TRIGGER, BREATH_MODE_CC);
OplusMiscHelper.setBreathLightStatus(RED_BREATH_LIGHT_BRIGHTNESS, String.valueOf(0));
break;
case GREEN_BREATH_LIGHT:
OplusMiscHelper.setBreathLightStatus(GREEN_BREATH_LIGHT_TRIGGER, BREATH_MODE_CC);
OplusMiscHelper.setBreathLightStatus(GREEN_BREATH_LIGHT_BRIGHTNESS, String.valueOf(0));
break;
case BLUE_BREATH_LIGHT:
OplusMiscHelper.setBreathLightStatus(BLUE_BREATH_LIGHT_TRIGGER, BREATH_MODE_CC);
OplusMiscHelper.setBreathLightStatus(BLUE_BREATH_LIGHT_BRIGHTNESS, String.valueOf(0));
break;
case WHITE_BREATH_LIGHT:
OplusMiscHelper.setWhiteBreathLightStatus(WHITE_BREATH_LIGHT_TRIGGER, BREATH_MODE_CC);
OplusMiscHelper.setWhiteBreathLightStatus(WHITE_BREATH_LIGHT_BRIGHTNESS, String.valueOf(0));
break;
case WHITE_MIXTURE_BREATH_LIGHT:
case MIXTURE_1_BREATH_LIGHT:
case MIXTURE_2_BREATH_LIGHT:
case MIXTURE_3_BREATH_LIGHT:
OplusMiscHelper.setMixtureBreathLightStatus(RED_BREATH_LIGHT_TRIGGER, BREATH_MODE_CC);
OplusMiscHelper.setMixtureBreathLightStatus(GREEN_BREATH_LIGHT_TRIGGER, BREATH_MODE_CC);
OplusMiscHelper.setMixtureBreathLightStatus(BLUE_BREATH_LIGHT_TRIGGER, BREATH_MODE_CC);
OplusMiscHelper.setMixtureBreathLightStatus(WHITE_BREATH_LIGHT_TRIGGER, BREATH_MODE_CC);
OplusMiscHelper.setMixtureBreathLightStatus(RED_BREATH_LIGHT_BRIGHTNESS, String.valueOf(0));
OplusMiscHelper.setMixtureBreathLightStatus(GREEN_BREATH_LIGHT_BRIGHTNESS, String.valueOf(0));
OplusMiscHelper.setMixtureBreathLightStatus(BLUE_BREATH_LIGHT_BRIGHTNESS, String.valueOf(0));
OplusMiscHelper.setMixtureBreathLightStatus(WHITE_BREATH_LIGHT_BRIGHTNESS, String.valueOf(0));
break;
default:
break;
}
}
public void setBreathLightOff() {
if (DEBUG) {
Log.i(TAG, "setBreathLightOff");
}
OplusMiscHelper.setBreathLightStatus(RED_BREATH_LIGHT_TRIGGER, BREATH_MODE_CC);
OplusMiscHelper.setBreathLightStatus(GREEN_BREATH_LIGHT_TRIGGER, BREATH_MODE_CC);
OplusMiscHelper.setBreathLightStatus(BLUE_BREATH_LIGHT_TRIGGER, BREATH_MODE_CC);
OplusMiscHelper.setWhiteBreathLightStatus(WHITE_BREATH_LIGHT_TRIGGER, BREATH_MODE_CC);
OplusMiscHelper.setBreathLightStatus(RED_BREATH_LIGHT_BRIGHTNESS, String.valueOf(0));
OplusMiscHelper.setBreathLightStatus(GREEN_BREATH_LIGHT_BRIGHTNESS, String.valueOf(0));
OplusMiscHelper.setBreathLightStatus(BLUE_BREATH_LIGHT_BRIGHTNESS, String.valueOf(0));
OplusMiscHelper.setWhiteBreathLightStatus(WHITE_BREATH_LIGHT_BRIGHTNESS, String.valueOf(0));
}
public void setButtonLightOn(int brightness) {
if (DEBUG) {
Log.i(TAG, "setButtonLightOn brightness = " + Integer.toHexString(brightness));
}
//TODO
}
public void setButtonLightOff() {
if (DEBUG) {
Log.i(TAG, "setButtonLightOff");
}
//TODO
}
public void setTorchState(boolean state) {
if (DEBUG) {
Log.i(TAG, "setTorchOn state = " + state);
}
try {
String availableCameraId = null;
CameraManager cameraManager = (CameraManager) mContext.getSystemService(Context.CAMERA_SERVICE);
if (cameraManager != null) {
for (String cameraId : cameraManager.getCameraIdList()) {
Boolean flashAvailable = cameraManager.getCameraCharacteristics(cameraId).
get(CameraCharacteristics.FLASH_INFO_AVAILABLE);
if (Boolean.TRUE.equals(flashAvailable)) {
availableCameraId = cameraId;
break;
}
}
if (availableCameraId != null) {
cameraManager.setTorchMode(availableCameraId, state);
} else {
Log.e(TAG, "can not find available camera id");
}
} else {
Log.e(TAG, "get camera service failed");
}
} catch (CameraAccessException e) {
Log.e(TAG, e.getMessage());
}
}
public int getLcdBackLightBrightnessFromNode() {
return OplusDisplayPanelFeature.getDisplayPanelFeatureValueAsInt(DisplayPanelFeatureID.OMMDPMAX_BRIGHTNESS.getId());
}
public void setLcdBackLightBrightness(Context context, int nBrightness) {
Log.i(TAG, "setLcdBackLightBrightness : " + nBrightness);
if (mMultiBitsSupport) {
Settings.System.putString(context.getContentResolver(), Settings.System.SCREEN_BRIGHTNESS, Integer.toString(nBrightness));
} else {
Settings.System.putInt(context.getContentResolver(), Settings.System.SCREEN_BRIGHTNESS, nBrightness);
}
}
public int getLcdBackLightBrightness(Context context) {
int brightness = -1;
if (mMultiBitsSupport) {
final String content = Settings.System.getString(context.getContentResolver(), Settings.System.SCREEN_BRIGHTNESS);
if (!TextUtils.isEmpty(content)) {
try {
return Integer.parseInt(content);
} catch (NumberFormatException e) {
Log.i(TAG, "getLcdBackLightBrightness e : " + e.getMessage());
}
}
} else {
brightness = Settings.System.getInt(context.getContentResolver(), Settings.System.SCREEN_BRIGHTNESS, 0);
}
Log.i(TAG, "getLcdBackLightBrightness : " + brightness);
return brightness;
}
public int getTwentyPercentBrightnessLevel() {
int brightness = -1;
if (SystemProperties.getInt(OplusPropertyList.PROPETY_BRIGHTNESS_MODE, BRIGHTNESS_MODE_LINEAR) == BRIGHTNESS_MODE_EXP) {
final float[] brightnessByNit = getDisplaysBrightnessByNit(100);
if (brightnessByNit != null) {
brightness = (int) brightnessByNit[0];
Log.e(TAG, "getTwentyPercentBrightnessLevel brightness by 100 nits = " + brightness);
}
}
if (brightness == -1) {
brightness = (int) (0.2f * getLcdBacklightMaximumBrightnessLevel());
}
return brightness;
}
public float getTwentyPercentBrightnessRatio() {
float ratio = 0.2f;
if (SystemProperties.getInt(OplusPropertyList.PROPETY_BRIGHTNESS_MODE, BRIGHTNESS_MODE_LINEAR) == BRIGHTNESS_MODE_EXP) {
final float[] brightnessByNit = getDisplaysBrightnessByNit(100);
if (brightnessByNit != null) {
final int brightness = (int) brightnessByNit[0];
Log.e(TAG, "getTwentyPercentBrightnessRatio brightness by 100 nits = " + brightness);
if (brightness != -1) {
ratio = brightness * 1.0f / getLcdBacklightMaximumBrightnessLevel();
}
}
}
return ratio;
}
public float[] getDisplaysBrightnessByNit(final float nit) {
try {
Class<?> OplusPowerManager = Class.forName(CLASS_ANDROID_OS_POWER_MANAGER);
Object oplusPowerManager = OplusPowerManager.getDeclaredConstructor().newInstance();
Object brightness = ReflectionHelper
.callDeclaredMethod(oplusPowerManager, CLASS_ANDROID_OS_POWER_MANAGER, METHOD_GET_BRIGHTNESS_BY_NIT, new Class[]{float.class},
new Object[]{nit});
if (brightness != null) {
return (float[]) brightness;
}
} catch (Exception e) {
Log.i(TAG, "getDisplaysBrightnessByNit : " + e.getMessage());
}
return null;
}
public float getBrightnessRatioByNit(final DisplayID displayID, final float nit) {
final float[] brightnessByNit = getDisplaysBrightnessByNit(nit);
if (brightnessByNit != null) {
final int max = getLcdBacklightMaximumBrightnessLevel();
float brightness = brightnessByNit[displayID.ordinal()];
return (brightness / max);
} else if ((brightnessByNit == null) && (OplusDisplayPanelFeature.isColorCaliDualBrightnessSupport())) {
return 0.20f;
}
return -1.0f;
}
}