From d2ddfedc962caf0d6153f0898ad7ce7a5d05b718 Mon Sep 17 00:00:00 2001 From: ZhanGSKen Date: Tue, 16 Dec 2025 21:16:34 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4=E5=BD=93=E5=89=8D=E7=94=B5?= =?UTF-8?q?=E9=87=8F=E5=88=9D=E5=A7=8B=E5=8C=96=E6=97=B6=E7=9A=84=E9=BB=98?= =?UTF-8?q?=E8=AE=A4=E5=80=BC=E3=80=82=E5=A4=84=E7=90=86bean=E7=B1=BB?= =?UTF-8?q?=E5=BA=8F=E5=88=97=E5=8C=96=E9=97=AE=E9=A2=98=EF=BC=8C=E6=9C=AA?= =?UTF-8?q?=E8=B0=83=E8=AF=95=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- powerbell/build.properties | 4 +- .../studio/powerbell/MainActivity.java | 12 +- .../powerbell/models/AppConfigBean.java | 180 ++++++++++-------- .../ControlCenterServiceReceiver.java | 2 +- .../receivers/GlobalApplicationReceiver.java | 2 +- .../services/ControlCenterService.java | 12 +- .../powerbell/utils/AppConfigUtils.java | 32 ++-- .../powerbell/views/BatteryDrawable.java | 2 +- 8 files changed, 138 insertions(+), 108 deletions(-) diff --git a/powerbell/build.properties b/powerbell/build.properties index a55538b..e2ad5b9 100644 --- a/powerbell/build.properties +++ b/powerbell/build.properties @@ -1,8 +1,8 @@ #Created by .winboll/winboll_app_build.gradle -#Tue Dec 16 20:17:03 HKT 2025 +#Tue Dec 16 13:12:57 GMT 2025 stageCount=9 libraryProject= baseVersion=15.14 publishVersion=15.14.8 -buildCount=0 +buildCount=4 baseBetaVersion=15.14.9 diff --git a/powerbell/src/main/java/cc/winboll/studio/powerbell/MainActivity.java b/powerbell/src/main/java/cc/winboll/studio/powerbell/MainActivity.java index 3522405..4f829b4 100644 --- a/powerbell/src/main/java/cc/winboll/studio/powerbell/MainActivity.java +++ b/powerbell/src/main/java/cc/winboll/studio/powerbell/MainActivity.java @@ -297,7 +297,7 @@ public class MainActivity extends WinBoLLActivity { if (mViewHolder == null || mAppConfigUtils == null) return; int nChargeReminderValue = mAppConfigUtils.getChargeReminderValue(); - int nUsegeReminderValue = mAppConfigUtils.getUsegeReminderValue(); + int nUsegeReminderValue = mAppConfigUtils.getUsageReminderValue(); int nCurrentValue = mAppConfigUtils.getCurrentValue(); if (mViewHolder.llLeftSeekBar != null && mViewHolder.llRightSeekBar != null && mDrawableFrame != null) { @@ -327,7 +327,7 @@ public class MainActivity extends WinBoLLActivity { mViewHolder.chargeReminderSeekBar.setProgress(nChargeReminderValue); } if (mViewHolder.cbIsEnableChargeReminder != null) { - mViewHolder.cbIsEnableChargeReminder.setChecked(mAppConfigUtils.getIsEnableChargeReminder()); + mViewHolder.cbIsEnableChargeReminder.setChecked(mAppConfigUtils.isEnableChargeReminder()); } if (mViewHolder.tvUsegeReminderValue != null) { @@ -338,7 +338,7 @@ public class MainActivity extends WinBoLLActivity { mViewHolder.usegeReminderSeekBar.setProgress(nUsegeReminderValue); } if (mViewHolder.cbIsEnableUsegeReminder != null) { - mViewHolder.cbIsEnableUsegeReminder.setChecked(mAppConfigUtils.getIsEnableUsegeReminder()); + mViewHolder.cbIsEnableUsegeReminder.setChecked(mAppConfigUtils.isEnableUsageReminder()); } if (mViewHolder.tvCurrentValue != null) { @@ -368,7 +368,7 @@ public class MainActivity extends WinBoLLActivity { mViewHolder.cbIsEnableChargeReminder.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - mAppConfigUtils.setIsEnableChargeReminder(mViewHolder.cbIsEnableChargeReminder.isChecked()); + mAppConfigUtils.setEnableChargeReminder(mViewHolder.cbIsEnableChargeReminder.isChecked()); } }); } @@ -380,7 +380,7 @@ public class MainActivity extends WinBoLLActivity { mViewHolder.cbIsEnableUsegeReminder.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - mAppConfigUtils.setIsEnableUsegeReminder(mViewHolder.cbIsEnableUsegeReminder.isChecked()); + mAppConfigUtils.setEnableUsageReminder(mViewHolder.cbIsEnableUsegeReminder.isChecked()); } }); } @@ -589,7 +589,7 @@ public class MainActivity extends WinBoLLActivity { public void onStopTrackingTouch(SeekBar seekBar) { if (mAppConfigUtils == null || mViewHolder == null || mViewHolder.tvUsegeReminderValue == null) return; int nUsegeReminderValue = ((VerticalSeekBar) seekBar)._mnProgress; - mAppConfigUtils.setUsegeReminderValue(nUsegeReminderValue); + mAppConfigUtils.setUsageReminderValue(nUsegeReminderValue); mViewHolder.tvUsegeReminderValue.setText(String.valueOf(nUsegeReminderValue) + "%"); } } diff --git a/powerbell/src/main/java/cc/winboll/studio/powerbell/models/AppConfigBean.java b/powerbell/src/main/java/cc/winboll/studio/powerbell/models/AppConfigBean.java index a6becc3..60eb13e 100644 --- a/powerbell/src/main/java/cc/winboll/studio/powerbell/models/AppConfigBean.java +++ b/powerbell/src/main/java/cc/winboll/studio/powerbell/models/AppConfigBean.java @@ -1,95 +1,115 @@ package cc.winboll.studio.powerbell.models; -/** - * @Author ZhanGSKen - * @Date 2024/04/29 17:24:53 - * @Describe 应用运行参数类 - */ import android.util.JsonReader; import android.util.JsonWriter; import cc.winboll.studio.libappbase.BaseBean; import java.io.IOException; import java.io.Serializable; +/** + * @Author ZhanGSKen&豆包大模型 + * @Date 2024/04/29 17:24:53 + * @Describe 应用运行参数类(电池提醒配置、电量状态等) + */ public class AppConfigBean extends BaseBean implements Serializable { + // ====================== 核心修复:序列化版本号(固定不变,解决崩溃) ====================== + private static final long serialVersionUID = -2588138142254163296L; // 直接用崩溃日志中的流版本号 - transient public static final String TAG = "AppConfigBean"; + // ====================== 常量定义(默认值抽离,统一管理) ====================== + public static final String TAG = "AppConfigBean"; + // 默认配置常量(避免魔法值,后续修改更便捷) + private static final boolean DEFAULT_ENABLE_USAGE_REMINDER = false; + private static final int DEFAULT_USAGE_REMINDER_VALUE = 10; // 低电量提醒阈值(默认10%) + private static final boolean DEFAULT_ENABLE_CHARGE_REMINDER = false; + private static final int DEFAULT_CHARGE_REMINDER_VALUE = 100; // 满电提醒阈值(默认100%) + private static final int DEFAULT_REMINDER_INTERVAL_TIME = 5000; // 提醒间隔(默认5秒) + private static final boolean DEFAULT_IS_CHARGING = false; // 默认未充电 + private static final int DEFAULT_CURRENT_VALUE = 100; // 默认满电 - boolean isEnableUsegeReminder = false; - int usegeReminderValue = 45; - boolean isEnableChargeReminder = false; - int chargeReminderValue = 100; - // 铃声提醒间隔时间。. - int reminderIntervalTime = 5000; - // 电池是否正在充电。 - boolean isCharging = false; - // 电池当前电量。. - int currentValue = -1; + // ====================== 成员变量(规范命名+访问控制,transient排除无需序列化字段) ====================== + // 低电量提醒开关 + private boolean isEnableUsageReminder = DEFAULT_ENABLE_USAGE_REMINDER; + // 低电量提醒阈值(百分比) + private int usageReminderValue = DEFAULT_USAGE_REMINDER_VALUE; + // 满电提醒开关 + private boolean isEnableChargeReminder = DEFAULT_ENABLE_CHARGE_REMINDER; + // 满电提醒阈值(百分比) + private int chargeReminderValue = DEFAULT_CHARGE_REMINDER_VALUE; + // 铃声提醒间隔时间(毫秒) + private int reminderIntervalTime = DEFAULT_REMINDER_INTERVAL_TIME; + // 电池充电状态(瞬时状态,无需序列化,加transient) + private transient boolean isCharging = DEFAULT_IS_CHARGING; + // 当前电池电量(瞬时状态,无需序列化,加transient) + private transient int currentValue = DEFAULT_CURRENT_VALUE; + // ====================== 构造方法(简化逻辑,与默认值保持一致) ====================== public AppConfigBean() { - setChargeReminderValue(100); - setIsEnableChargeReminder(false); - setUsegeReminderValue(10); - setIsEnableUsegeReminder(false); - setReminderIntervalTime(5000); + // 直接复用常量默认值,无需重复赋值(构造方法逻辑极简) } - public void setReminderIntervalTime(int reminderIntervalTime) { - this.reminderIntervalTime = reminderIntervalTime; + // ====================== Getter/Setter(规范命名+参数校验,避免非法值) ====================== + public boolean isEnableUsageReminder() { + return isEnableUsageReminder; } - public int getReminderIntervalTime() { - return reminderIntervalTime; + public void setEnableUsageReminder(boolean enableUsageReminder) { + isEnableUsageReminder = enableUsageReminder; } - public void setIsCharging(boolean isCharging) { - this.isCharging = isCharging; + public int getUsageReminderValue() { + return usageReminderValue; } - public boolean isCharging() { - return isCharging; - } - - public void setCurrentValue(int currentValue) { - this.currentValue = currentValue; - } - - public int getCurrentValue() { - return currentValue; - } - - public void setIsEnableUsegeReminder(boolean isEnableUsegeReminder) { - this.isEnableUsegeReminder = isEnableUsegeReminder; - } - - public boolean isEnableUsegeReminder() { - return isEnableUsegeReminder; - } - - public void setUsegeReminderValue(int usegeReminderValue) { - this.usegeReminderValue = usegeReminderValue; - } - - public int getUsegeReminderValue() { - return usegeReminderValue; - } - - public void setIsEnableChargeReminder(boolean isEnableChargeReminder) { - this.isEnableChargeReminder = isEnableChargeReminder; + public void setUsageReminderValue(int usageReminderValue) { + // 校验:电量阈值限制在0-100之间,避免非法值导致业务异常 + this.usageReminderValue = Math.min(Math.max(usageReminderValue, 0), 100); } public boolean isEnableChargeReminder() { return isEnableChargeReminder; } - public void setChargeReminderValue(int chargeReminderValue) { - this.chargeReminderValue = chargeReminderValue; + public void setEnableChargeReminder(boolean enableChargeReminder) { + isEnableChargeReminder = enableChargeReminder; } public int getChargeReminderValue() { return chargeReminderValue; } + public void setChargeReminderValue(int chargeReminderValue) { + // 校验:电量阈值限制在0-100之间 + this.chargeReminderValue = Math.min(Math.max(chargeReminderValue, 0), 100); + } + + public int getReminderIntervalTime() { + return reminderIntervalTime; + } + + public void setReminderIntervalTime(int reminderIntervalTime) { + // 校验:间隔时间不小于1秒(1000ms),避免过短触发频繁提醒 + this.reminderIntervalTime = Math.max(reminderIntervalTime, 1000); + } + + // 瞬时状态字段:仅保留Get/Set,无序列化影响 + public boolean isCharging() { + return isCharging; + } + + public void setCharging(boolean charging) { + isCharging = charging; + } + + public int getCurrentValue() { + return currentValue; + } + + public void setCurrentValue(int currentValue) { + // 校验:当前电量限制在0-100之间 + this.currentValue = Math.min(Math.max(currentValue, 0), 100); + } + + // ====================== 父类方法重写(补全JSON序列化逻辑,兼容所有配置字段) ====================== @Override public String getName() { return AppConfigBean.class.getName(); @@ -98,11 +118,12 @@ public class AppConfigBean extends BaseBean implements Serializable { @Override public void writeThisToJsonWriter(JsonWriter jsonWriter) throws IOException { super.writeThisToJsonWriter(jsonWriter); - AppConfigBean bean = this; - jsonWriter.name("isEnableUsegeReminder").value(bean.isEnableUsegeReminder()); - jsonWriter.name("usegeReminderValue").value(bean.getUsegeReminderValue()); - jsonWriter.name("isEnableChargeReminder").value(bean.isEnableChargeReminder()); - jsonWriter.name("chargeReminderValue").value(bean.getChargeReminderValue()); + // 仅序列化「配置类字段」,瞬时状态(isCharging/currentValue)不序列化 + jsonWriter.name("isEnableUsageReminder").value(isEnableUsageReminder()); + jsonWriter.name("usageReminderValue").value(getUsageReminderValue()); + jsonWriter.name("isEnableChargeReminder").value(isEnableChargeReminder()); + jsonWriter.name("chargeReminderValue").value(getChargeReminderValue()); + jsonWriter.name("reminderIntervalTime").value(getReminderIntervalTime()); // 补全之前遗漏的间隔时间序列化 } @Override @@ -111,20 +132,29 @@ public class AppConfigBean extends BaseBean implements Serializable { jsonReader.beginObject(); while (jsonReader.hasNext()) { String name = jsonReader.nextName(); - if (name.equals("isEnableUsegeReminder")) { - bean.setIsEnableUsegeReminder(jsonReader.nextBoolean()); - } else if (name.equals("usegeReminderValue")) { - bean.setUsegeReminderValue(jsonReader.nextInt()); - } else if (name.equals("isEnableChargeReminder")) { - bean.setIsEnableChargeReminder(jsonReader.nextBoolean()); - } else if (name.equals("chargeReminderValue")) { - bean.setChargeReminderValue(jsonReader.nextInt()); - } else { - jsonReader.skipValue(); + switch (name) { + case "isEnableUsageReminder": + bean.setEnableUsageReminder(jsonReader.nextBoolean()); + break; + case "usageReminderValue": + bean.setUsageReminderValue(jsonReader.nextInt()); + break; + case "isEnableChargeReminder": + bean.setEnableChargeReminder(jsonReader.nextBoolean()); + break; + case "chargeReminderValue": + bean.setChargeReminderValue(jsonReader.nextInt()); + break; + case "reminderIntervalTime": + bean.setReminderIntervalTime(jsonReader.nextInt()); // 补全间隔时间反序列化 + break; + default: + jsonReader.skipValue(); // 未知字段跳过,避免解析崩溃 + break; } } - // 结束 JSON 对象 jsonReader.endObject(); return bean; } } + diff --git a/powerbell/src/main/java/cc/winboll/studio/powerbell/receivers/ControlCenterServiceReceiver.java b/powerbell/src/main/java/cc/winboll/studio/powerbell/receivers/ControlCenterServiceReceiver.java index 0d94d76..421d26d 100644 --- a/powerbell/src/main/java/cc/winboll/studio/powerbell/receivers/ControlCenterServiceReceiver.java +++ b/powerbell/src/main/java/cc/winboll/studio/powerbell/receivers/ControlCenterServiceReceiver.java @@ -50,7 +50,7 @@ public class ControlCenterServiceReceiver extends BroadcastReceiver { appConfigUtils.loadAppConfigBean(); AppConfigBean appConfigBean = appConfigUtils.mAppConfigBean; appConfigBean.setCurrentValue(nTheQuantityOfElectricity); - appConfigBean.setIsCharging(isCharging); + appConfigBean.setCharging(isCharging); mwrService.get().startRemindThread(appConfigBean); // 保存电池报告 diff --git a/powerbell/src/main/java/cc/winboll/studio/powerbell/receivers/GlobalApplicationReceiver.java b/powerbell/src/main/java/cc/winboll/studio/powerbell/receivers/GlobalApplicationReceiver.java index 0053657..49455ea 100644 --- a/powerbell/src/main/java/cc/winboll/studio/powerbell/receivers/GlobalApplicationReceiver.java +++ b/powerbell/src/main/java/cc/winboll/studio/powerbell/receivers/GlobalApplicationReceiver.java @@ -35,7 +35,7 @@ public class GlobalApplicationReceiver extends BroadcastReceiver { // 先设置好新电池状态标志 boolean isCharging = BatteryUtils.isCharging(intent); if (_mIsCharging != isCharging) { - mAppConfigUtils.setIsCharging(isCharging); + mAppConfigUtils.setCharging(isCharging); } int nTheQuantityOfElectricity = BatteryUtils.getTheQuantityOfElectricity(intent); if (_mnTheQuantityOfElectricityOld != nTheQuantityOfElectricity) { diff --git a/powerbell/src/main/java/cc/winboll/studio/powerbell/services/ControlCenterService.java b/powerbell/src/main/java/cc/winboll/studio/powerbell/services/ControlCenterService.java index 18ab00e..471da4c 100644 --- a/powerbell/src/main/java/cc/winboll/studio/powerbell/services/ControlCenterService.java +++ b/powerbell/src/main/java/cc/winboll/studio/powerbell/services/ControlCenterService.java @@ -132,9 +132,9 @@ public class ControlCenterService extends Service { String getValuesString() { String szReturn = "Usege: "; - szReturn += mAppConfigUtils.getIsEnableUsegeReminder() ? Integer.toString(mAppConfigUtils.getUsegeReminderValue()) : "?"; + szReturn += mAppConfigUtils.isEnableUsageReminder() ? Integer.toString(mAppConfigUtils.getUsageReminderValue()) : "?"; szReturn += "% Charge: "; - szReturn += mAppConfigUtils.getIsEnableChargeReminder() ? Integer.toString(mAppConfigUtils.getChargeReminderValue()) : "?"; + szReturn += mAppConfigUtils.isEnableChargeReminder() ? Integer.toString(mAppConfigUtils.getChargeReminderValue()) : "?"; szReturn += "%\nCurrent: " + Integer.toString(mAppConfigUtils.getCurrentValue()) + "%"; return szReturn; } @@ -185,9 +185,9 @@ public class ControlCenterService extends Service { } else { // 提醒进程正在进行中就更新状态后退出 mRemindThread.setChargeReminderValue(appConfigBean.getChargeReminderValue()); - mRemindThread.setUsegeReminderValue(appConfigBean.getUsegeReminderValue()); + mRemindThread.setUsegeReminderValue(appConfigBean.getUsageReminderValue()); mRemindThread.setIsEnableChargeReminder(appConfigBean.isEnableChargeReminder()); - mRemindThread.setIsEnableUsegeReminder(appConfigBean.isEnableUsegeReminder()); + mRemindThread.setIsEnableUsegeReminder(appConfigBean.isEnableUsageReminder()); mRemindThread.setSleepTime(appConfigBean.getReminderIntervalTime()); mRemindThread.setIsCharging(appConfigBean.isCharging()); mRemindThread.setQuantityOfElectricity(appConfigBean.getCurrentValue()); @@ -196,12 +196,12 @@ public class ControlCenterService extends Service { } } mRemindThread.setChargeReminderValue(appConfigBean.getChargeReminderValue()); - mRemindThread.setUsegeReminderValue(appConfigBean.getUsegeReminderValue()); + mRemindThread.setUsegeReminderValue(appConfigBean.getUsageReminderValue()); mRemindThread.setSleepTime(appConfigBean.getReminderIntervalTime()); mRemindThread.setIsCharging(appConfigBean.isCharging()); mRemindThread.setQuantityOfElectricity(appConfigBean.getCurrentValue()); mRemindThread.setIsEnableChargeReminder(appConfigBean.isEnableChargeReminder()); - mRemindThread.setIsEnableUsegeReminder(appConfigBean.isEnableUsegeReminder()); + mRemindThread.setIsEnableUsegeReminder(appConfigBean.isEnableUsageReminder()); mRemindThread.start(); //LogUtils.d(TAG, "mRemindThread.start()"); } diff --git a/powerbell/src/main/java/cc/winboll/studio/powerbell/utils/AppConfigUtils.java b/powerbell/src/main/java/cc/winboll/studio/powerbell/utils/AppConfigUtils.java index c336350..6d25e5e 100644 --- a/powerbell/src/main/java/cc/winboll/studio/powerbell/utils/AppConfigUtils.java +++ b/powerbell/src/main/java/cc/winboll/studio/powerbell/utils/AppConfigUtils.java @@ -93,22 +93,22 @@ public class AppConfigUtils { return bean.isEnableService(); } - public void setIsEnableChargeReminder(boolean isEnableChargeReminder) { - mAppConfigBean.setIsEnableChargeReminder(isEnableChargeReminder); + public void setEnableChargeReminder(boolean isEnableChargeReminder) { + mAppConfigBean.setEnableChargeReminder(isEnableChargeReminder); saveConfigData(MainActivity._mMainActivity); } - public boolean getIsEnableChargeReminder() { + public boolean isEnableChargeReminder() { return mAppConfigBean.isEnableChargeReminder(); } - public void setIsEnableUsegeReminder(boolean isEnableUsegeReminder) { - mAppConfigBean.setIsEnableUsegeReminder(isEnableUsegeReminder); + public void setEnableUsageReminder(boolean isEnableUsegeReminder) { + mAppConfigBean.setEnableUsageReminder(isEnableUsegeReminder); saveConfigData(MainActivity._mMainActivity); } - public boolean getIsEnableUsegeReminder() { - return mAppConfigBean.isEnableUsegeReminder(); + public boolean isEnableUsageReminder() { + return mAppConfigBean.isEnableUsageReminder(); } public void setChargeReminderValue(int value) { @@ -120,17 +120,17 @@ public class AppConfigUtils { return mAppConfigBean.getChargeReminderValue(); } - public void setUsegeReminderValue(int value) { - mAppConfigBean.setUsegeReminderValue(value); + public void setUsageReminderValue(int value) { + mAppConfigBean.setUsageReminderValue(value); saveConfigData(MainActivity._mMainActivity); } - public int getUsegeReminderValue() { - return mAppConfigBean.getUsegeReminderValue(); + public int getUsageReminderValue() { + return mAppConfigBean.getUsageReminderValue(); } - public void setIsCharging(boolean isCharging) { - mAppConfigBean.setIsCharging(isCharging); + public void setCharging(boolean isCharging) { + mAppConfigBean.setCharging(isCharging); } public boolean isCharging() { @@ -162,9 +162,9 @@ public class AppConfigUtils { bean = new AppConfigBean(); AppConfigBean.saveBean(mContext, mAppConfigBean); } - mAppConfigBean.setIsEnableUsegeReminder(bean.isEnableUsegeReminder()); - mAppConfigBean.setUsegeReminderValue(bean.getUsegeReminderValue()); - mAppConfigBean.setIsEnableChargeReminder(bean.isEnableChargeReminder()); + mAppConfigBean.setEnableUsageReminder(bean.isEnableUsageReminder()); + mAppConfigBean.setUsageReminderValue(bean.getUsageReminderValue()); + mAppConfigBean.setEnableChargeReminder(bean.isEnableChargeReminder()); mAppConfigBean.setChargeReminderValue(bean.getChargeReminderValue()); } diff --git a/powerbell/src/main/java/cc/winboll/studio/powerbell/views/BatteryDrawable.java b/powerbell/src/main/java/cc/winboll/studio/powerbell/views/BatteryDrawable.java index fc04c9d..722925c 100644 --- a/powerbell/src/main/java/cc/winboll/studio/powerbell/views/BatteryDrawable.java +++ b/powerbell/src/main/java/cc/winboll/studio/powerbell/views/BatteryDrawable.java @@ -14,7 +14,7 @@ public class BatteryDrawable extends Drawable { // 电量颜色画笔 final Paint mPaint; // 电量值 - int mnValue = 1; + int mnValue = 100; // @int color : 电量颜色 //