Skip to content

Commit

Permalink
充电控制相关的细微调整
Browse files Browse the repository at this point in the history
  • Loading branch information
helloklf committed Aug 14, 2020
1 parent 25c8000 commit c221570
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 29 deletions.
51 changes: 28 additions & 23 deletions app/src/main/java/com/omarea/charger_booster/BatteryReceiver.kt
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,8 @@ class BatteryReceiver(private var service: Context, override val isAsync: Boolea
EventType.BATTERY_CHANGED, // 这个执行频率可能有点太高了,耗电
EventType.BATTERY_LOW,
EventType.POWER_CONNECTED,
EventType.POWER_DISCONNECTED -> true
EventType.POWER_DISCONNECTED,
EventType.CHARGE_CONFIG_CHANGED -> true
else -> false
}
}
Expand Down Expand Up @@ -278,35 +279,39 @@ class BatteryReceiver(private var service: Context, override val isAsync: Boolea
private fun setChargerLimitToValue(speedMa: Int, eventType: EventType, protectedMode: Boolean) {
val execMode = chargeConfig.getInt(SpfConfig.CHARGE_SPF_EXEC_MODE, SpfConfig.CHARGE_SPF_EXEC_MODE_DEFAULT)
try {
val required = when (execMode) {
// 如果目标是降低充电速度,则不比频繁尝试调节速度,只需要在电量变化或者插拔充电器时执行即可
SpfConfig.CHARGE_SPF_EXEC_MODE_SPEED_DOWN -> {
if (eventType != EventType.BATTERY_CHANGED) {
Log.d("@Scene", "CHARGE_SPF_EXEC_MODE_SPEED_DOWN > " + eventType.name)
val required = if (eventType == EventType.CHARGE_CONFIG_CHANGED) {
true
} else {
when (execMode) {
// 如果目标是降低充电速度,则不比频繁尝试调节速度,只需要在电量变化或者插拔充电器时执行即可
SpfConfig.CHARGE_SPF_EXEC_MODE_SPEED_DOWN -> {
if (eventType != EventType.BATTERY_CHANGED) {
Log.d("@Scene", "CHARGE_SPF_EXEC_MODE_SPEED_DOWN > " + eventType.name)
}
eventType == EventType.BATTERY_CAPACITY_CHANGED || eventType == EventType.POWER_CONNECTED || eventType == EventType.POWER_DISCONNECTED
}
eventType == EventType.BATTERY_CAPACITY_CHANGED || eventType == EventType.POWER_CONNECTED || eventType == EventType.POWER_DISCONNECTED
}
// 如果是暴力充电加速,则要尽可能高频率的执行速度调节,并且开启定时任务不断执行(除非已经进入动态调速保护阶段)
SpfConfig.CHARGE_SPF_EXEC_MODE_SPEED_FORCE -> {
if (!protectedMode) {
if (eventType != EventType.TIMER) {
startGovernorTimer()
// 如果是暴力充电加速,则要尽可能高频率的执行速度调节,并且开启定时任务不断执行(除非已经进入动态调速保护阶段)
SpfConfig.CHARGE_SPF_EXEC_MODE_SPEED_FORCE -> {
if (!protectedMode) {
if (eventType != EventType.TIMER) {
startGovernorTimer()
} else {
Log.d("@Scene", "Exec ForceQuickChargeTimer")
}
true
} else {
Log.d("@Scene", "Exec ForceQuickChargeTimer")
stopGovernorTimer()
// 如果已经进入充电保护阶段,还是要限制一下执行频率
!(protectedMode && (System.currentTimeMillis() - lastSetChargeLimit < 5000))
}
true
} else {
stopGovernorTimer()
}
// 如果是常规加速,则在每次电池状态发生辩护时都执行(除非已经进入动态调速保护阶段)
SpfConfig.CHARGE_SPF_EXEC_MODE_SPEED_UP -> {
// 如果已经进入充电保护阶段,还是要限制一下执行频率
!(protectedMode && (System.currentTimeMillis() - lastSetChargeLimit < 5000))
}
else -> false
}
// 如果是常规加速,则在每次电池状态发生辩护时都执行(除非已经进入动态调速保护阶段)
SpfConfig.CHARGE_SPF_EXEC_MODE_SPEED_UP -> {
// 如果已经进入充电保护阶段,还是要限制一下执行频率
!(protectedMode && (System.currentTimeMillis() - lastSetChargeLimit < 5000))
}
else -> false
}

if (required) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ public enum EventType {
BATTERY_CAPACITY_CHANGED, // 电池电量变化
BATTERY_CHANGED, // 电池状态变化
BATTERY_FULL, // 电池充满
CHARGE_CONFIG_CHANGED, // 充电控制配置改变
SCREEN_ON, // 屏幕打开
SCREEN_OFF, // 屏幕关闭
APP_SWITCH, // 应用切换
Expand Down
19 changes: 13 additions & 6 deletions app/src/main/java/com/omarea/vtools/activities/ActivityBattery.kt
Original file line number Diff line number Diff line change
Expand Up @@ -97,10 +97,10 @@ class ActivityBattery: ActivityBase() {
}, spf, battery_bp_level_desc))
settings_qc_limit.setOnSeekBarChangeListener(OnSeekBarChangeListener2(Runnable {
val level = spf.getInt(SpfConfig.CHARGE_SPF_QC_LIMIT, SpfConfig.CHARGE_SPF_QC_LIMIT_DEFAULT)
notifyConfigChanged()
if (spf.getBoolean(SpfConfig.CHARGE_SPF_QC_BOOSTER, false)) {
batteryUnits.setChargeInputLimit(level, this)
}
notifyConfigChanged()
}, spf, settings_qc_limit_desc))

if (!qcSettingSuupport) {
Expand Down Expand Up @@ -188,20 +188,23 @@ class ActivityBattery: ActivityBase() {
Scene.toast(R.string.battery_charge_resumed, Toast.LENGTH_LONG)
}

val nightModeGetUp = spf.getInt(SpfConfig.CHARGE_SPF_TIME_GET_UP, SpfConfig.CHARGE_SPF_TIME_GET_UP_DEFAULT)
battery_get_up.setText(String.format(getString(R.string.battery_night_mode_time), nightModeGetUp / 60, nightModeGetUp % 60))
battery_get_up.setText(minutes2Str(spf.getInt(SpfConfig.CHARGE_SPF_TIME_GET_UP, SpfConfig.CHARGE_SPF_TIME_GET_UP_DEFAULT)))
battery_get_up.setOnClickListener {
val nightModeGetUp = spf.getInt(SpfConfig.CHARGE_SPF_TIME_GET_UP, SpfConfig.CHARGE_SPF_TIME_GET_UP_DEFAULT)
TimePickerDialog(this.context, TimePickerDialog.OnTimeSetListener { view, hourOfDay, minute ->
spf.edit().putInt(SpfConfig.CHARGE_SPF_TIME_GET_UP, hourOfDay * 60 + minute).apply()
battery_get_up.setText(String.format(getString(R.string.battery_night_mode_time), hourOfDay, minute))
notifyConfigChanged()
}, nightModeGetUp / 60, nightModeGetUp % 60, true).show()
}
val nightModeSleep = spf.getInt(SpfConfig.CHARGE_SPF_TIME_SLEEP, SpfConfig.CHARGE_SPF_TIME_SLEEP_DEFAULT)
battery_sleep.setText(String.format(getString(R.string.battery_night_mode_time), nightModeSleep / 60, nightModeSleep % 60))

battery_sleep.setText(minutes2Str(spf.getInt(SpfConfig.CHARGE_SPF_TIME_SLEEP, SpfConfig.CHARGE_SPF_TIME_SLEEP_DEFAULT)))
battery_sleep.setOnClickListener {
val nightModeSleep = spf.getInt(SpfConfig.CHARGE_SPF_TIME_SLEEP, SpfConfig.CHARGE_SPF_TIME_SLEEP_DEFAULT)
TimePickerDialog(this.context, TimePickerDialog.OnTimeSetListener { view, hourOfDay, minute ->
spf.edit().putInt(SpfConfig.CHARGE_SPF_TIME_SLEEP, hourOfDay * 60 + minute).apply()
battery_sleep.setText(String.format(getString(R.string.battery_night_mode_time), hourOfDay, minute))
notifyConfigChanged()
}, nightModeSleep / 60, nightModeSleep % 60, true).show()
}
battery_night_mode.isChecked = spf.getBoolean(SpfConfig.CHARGE_SPF_NIGHT_MODE, false)
Expand All @@ -217,6 +220,10 @@ class ActivityBattery: ActivityBase() {
}
}

private fun minutes2Str(minutes:Int): String {
return String.format(getString(R.string.battery_night_mode_time), minutes / 60, minutes % 60)
}

private var myHandler: Handler = Handler(Looper.getMainLooper())
private var timer: Timer? = null
private lateinit var batteryMAH: String
Expand Down Expand Up @@ -419,7 +426,7 @@ class ActivityBattery: ActivityBase() {

private fun notifyConfigChanged() {
Thread(Runnable {
EventBus.publish(EventType.BATTERY_CHANGED)
EventBus.publish(EventType.CHARGE_CONFIG_CHANGED)
}).start()
}

Expand Down

0 comments on commit c221570

Please sign in to comment.