diff --git a/powerbell/build.properties b/powerbell/build.properties index 2b963ef..be3f803 100644 --- a/powerbell/build.properties +++ b/powerbell/build.properties @@ -1,8 +1,8 @@ #Created by .winboll/winboll_app_build.gradle -#Wed Feb 04 11:07:22 HKT 2026 +#Sat Feb 28 12:14:20 GMT 2026 stageCount=9 libraryProject= baseVersion=15.15 publishVersion=15.15.8 -buildCount=0 +buildCount=3 baseBetaVersion=15.15.9 diff --git a/powerbell/src/main/java/cc/winboll/studio/powerbell/activities/SettingsActivity.java b/powerbell/src/main/java/cc/winboll/studio/powerbell/activities/SettingsActivity.java index 677e48d..fca94e6 100644 --- a/powerbell/src/main/java/cc/winboll/studio/powerbell/activities/SettingsActivity.java +++ b/powerbell/src/main/java/cc/winboll/studio/powerbell/activities/SettingsActivity.java @@ -25,7 +25,7 @@ import java.lang.reflect.Field; * 适配 API30,基于 Java7 开发 * @Author 豆包&ZhanGSKen * @Date 2025年11月27日14时26分00秒 - * @LastEditTime 2026年01月19日22时18分00秒 + * @LastEditTime 2026-02-28 * @Describe 应用设置窗口(主开关联动子开关启用/禁用,主开关关闭则子开关禁用并取消勾选) */ public class SettingsActivity extends WinBoLLActivity implements IWinBoLLActivity { @@ -39,6 +39,7 @@ public class SettingsActivity extends WinBoLLActivity implements IWinBoLLActivit private CheckBox cbChargeTts; // 充电TTS(主开关) private CheckBox cbUseageTtsBattary; // 用电TTS带电量提醒(子开关) private CheckBox cbChargeTtsBattary; // 充电TTS带电量提醒(子开关) + private CheckBox cbTtsWhenNotifyBattery; // 👉 新增:通知电量时同时播放TTS // ======================== 接口实现区 ========================= @Override @@ -96,6 +97,7 @@ public class SettingsActivity extends WinBoLLActivity implements IWinBoLLActivit cbChargeTts = findViewById(R.id.activitysettingsCheckBox2); cbUseageTtsBattary = findViewById(R.id.activitysettingsCheckBox3); cbChargeTtsBattary = findViewById(R.id.activitysettingsCheckBox4); + cbTtsWhenNotifyBattery = findViewById(R.id.activitysettingsCheckBox5); // 👉 新增绑定 LogUtils.d(TAG, "initTtsCheckBoxes: TTS复选框绑定完成"); } @@ -116,6 +118,7 @@ public class SettingsActivity extends WinBoLLActivity implements IWinBoLLActivit cbChargeTts.setChecked(chargeMainOpen); cbUseageTtsBattary.setChecked(bean.isEnableUseageTtsWithBattary()); cbChargeTtsBattary.setChecked(bean.isEnableChargeTtsWithBattary()); + cbTtsWhenNotifyBattery.setChecked(bean.isEnableTtsWhenNotifyBattery()); // 👉 新增赋值 cbUseageTtsBattary.setEnabled(useMainOpen); cbChargeTtsBattary.setEnabled(chargeMainOpen); @@ -138,12 +141,8 @@ public class SettingsActivity extends WinBoLLActivity implements IWinBoLLActivit public void onEnableUsePowerTts(View view) { boolean isChecked = cbUsePowerTts.isChecked(); LogUtils.d(TAG, "onEnableUsePowerTts: 用电TTS主开关点击,切换后状态=" + isChecked); - cbUsePowerTts.setChecked(isChecked); // 主开关联动子开关 cbUseageTtsBattary.setEnabled(isChecked); -// if (!isChecked) { -// cbUseageTtsBattary.setChecked(false); -// } // 保存配置 ThoughtfulServiceBean bean = getThoughtfulServiceBean(); bean.setIsEnableUsePowerTts(isChecked); @@ -157,12 +156,8 @@ public class SettingsActivity extends WinBoLLActivity implements IWinBoLLActivit public void onEnableChargeTts(View view) { boolean isChecked = cbChargeTts.isChecked(); LogUtils.d(TAG, "onEnableChargeTts: 充电TTS主开关点击,切换后状态=" + isChecked); - cbChargeTts.setChecked(isChecked); // 主开关联动子开关 cbChargeTtsBattary.setEnabled(isChecked); -// if (!isChecked) { -// cbChargeTtsBattary.setChecked(false); -// } // 保存配置 ThoughtfulServiceBean bean = getThoughtfulServiceBean(); bean.setIsEnableChargeTts(isChecked); @@ -176,7 +171,6 @@ public class SettingsActivity extends WinBoLLActivity implements IWinBoLLActivit public void onEnableUseageTtsWithBattary(View view) { boolean isChecked = cbUseageTtsBattary.isChecked(); LogUtils.d(TAG, "onEnableUseageTtsWithBattary: 用电TTS电量提醒开关点击,切换后状态=" + isChecked); - cbUseageTtsBattary.setChecked(isChecked); ThoughtfulServiceBean bean = getThoughtfulServiceBean(); bean.setIsEnableUseageTtsWithBattary(isChecked); ThoughtfulServiceBean.saveBean(this, bean); @@ -189,13 +183,24 @@ public class SettingsActivity extends WinBoLLActivity implements IWinBoLLActivit public void onEnableChargeTtsWithBattary(View view) { boolean isChecked = cbChargeTtsBattary.isChecked(); LogUtils.d(TAG, "onEnableChargeTtsWithBattary: 充电TTS电量提醒开关点击,切换后状态=" + isChecked); - cbChargeTtsBattary.setChecked(isChecked); ThoughtfulServiceBean bean = getThoughtfulServiceBean(); bean.setIsEnableChargeTtsWithBattary(isChecked); ThoughtfulServiceBean.saveBean(this, bean); LogUtils.d(TAG, "onEnableChargeTtsWithBattary: 充电TTS电量提醒状态保存完成"); } + /** + * 👉 新增:允许通知电量消息时同时播放TTS语音 + */ + public void onEnableTtsWhenNotifyBattery(View view) { + boolean isChecked = cbTtsWhenNotifyBattery.isChecked(); + LogUtils.d(TAG, "onEnableTtsWhenNotifyBattery: 通知电量时播TTS开关状态=" + isChecked); + ThoughtfulServiceBean bean = getThoughtfulServiceBean(); + bean.setIsEnableTtsWhenNotifyBattery(isChecked); + ThoughtfulServiceBean.saveBean(this, bean); + LogUtils.d(TAG, "onEnableTtsWhenNotifyBattery: 保存完成"); + } + // ======================== 工具方法区 ========================= /** * 获取配置Bean实例,避免重复代码 diff --git a/powerbell/src/main/java/cc/winboll/studio/powerbell/models/ThoughtfulServiceBean.java b/powerbell/src/main/java/cc/winboll/studio/powerbell/models/ThoughtfulServiceBean.java index b9f555e..0531a34 100644 --- a/powerbell/src/main/java/cc/winboll/studio/powerbell/models/ThoughtfulServiceBean.java +++ b/powerbell/src/main/java/cc/winboll/studio/powerbell/models/ThoughtfulServiceBean.java @@ -24,17 +24,19 @@ public class ThoughtfulServiceBean extends BaseBean implements Parcelable, Seria // JSON序列化字段常量 杜绝硬编码 public static final String JSON_FIELD_IS_ENABLE_CHARGE_TTS = "isEnableChargeTts"; public static final String JSON_FIELD_IS_ENABLE_USE_POWER_TTS = "isEnableUsePowerTts"; - // 新增字段JSON常量 public static final String JSON_FIELD_IS_ENABLE_USAGE_TTS_WITH_BATTERY = "isEnableUseageTtsWithBattary"; public static final String JSON_FIELD_IS_ENABLE_CHARGE_TTS_WITH_BATTERY = "isEnableChargeTtsWithBattary"; + // 👉 新增:通知电量消息时同时播放TTS + public static final String JSON_FIELD_IS_ENABLE_TTS_WHEN_NOTIFY_BATTERY = "isEnableTtsWhenNotifyBattery"; // ====================== 核心成员变量 - 私有封装 ====================== - private boolean isEnableChargeTts = false; // 是否启用 充电TTS贴心语音服务 - private boolean isEnableUsePowerTts = false; // 是否启用 用电TTS贴心语音服务 - private boolean isEnableUseageTtsWithBattary = false; // 用电TTS加入电量提醒 - private boolean isEnableChargeTtsWithBattary = false;// 充电TTS加入电量提醒 + private boolean isEnableChargeTts = false; // 是否启用 充电TTS贴心语音服务 + private boolean isEnableUsePowerTts = false; // 是否启用 用电TTS贴心语音服务 + private boolean isEnableUseageTtsWithBattary = false; // 用电TTS加入电量提醒 + private boolean isEnableChargeTtsWithBattary = false; // 充电TTS加入电量提醒 + private boolean isEnableTtsWhenNotifyBattery = false; // 👉 允许通知电量消息时同时播放TTS语音 - // ====================== Parcelable 静态创建器 (API30标准写法 必须public static final) ====================== + // ====================== Parcelable 静态创建器 ====================== public static final Creator CREATOR = new Creator() { @Override public ThoughtfulServiceBean createFromParcel(Parcel source) { @@ -48,45 +50,34 @@ public class ThoughtfulServiceBean extends BaseBean implements Parcelable, Seria } }; - // ====================== 构造方法区 (无参+有参+Parcel构造 全覆盖) ====================== - /** - * 无参构造 - JSON解析/反射实例化 必备 - */ + // ====================== 构造方法区 ====================== public ThoughtfulServiceBean() { LogUtils.d(TAG, "ThoughtfulServiceBean: 无参构造,初始化默认禁用所有TTS服务"); } - /** - * 全参构造 - 手动配置所有服务状态 - * @param isEnableChargeTts 充电TTS服务开关 - * @param isEnableUsePowerTts 用电TTS服务开关 - * @param isEnableUseageTtsWithBattary 用电TTS加电量提醒开关 - * @param isEnableChargeTtsWithBattary 充电TTS加电量提醒开关 - */ public ThoughtfulServiceBean(boolean isEnableChargeTts, boolean isEnableUsePowerTts, - boolean isEnableUseageTtsWithBattary, boolean isEnableChargeTtsWithBattary) { + boolean isEnableUseageTtsWithBattary, boolean isEnableChargeTtsWithBattary, + boolean isEnableTtsWhenNotifyBattery) { this.isEnableChargeTts = isEnableChargeTts; this.isEnableUsePowerTts = isEnableUsePowerTts; this.isEnableUseageTtsWithBattary = isEnableUseageTtsWithBattary; this.isEnableChargeTtsWithBattary = isEnableChargeTtsWithBattary; + this.isEnableTtsWhenNotifyBattery = isEnableTtsWhenNotifyBattery; LogUtils.d(TAG, "ThoughtfulServiceBean: 全参构造 | 充电TTS=" + isEnableChargeTts + " | 用电TTS=" + isEnableUsePowerTts - + " | 用电TTS加电量=" + isEnableUseageTtsWithBattary + " | 充电TTS加电量=" + isEnableChargeTtsWithBattary); + + " | 用电TTS加电量=" + isEnableUseageTtsWithBattary + " | 充电TTS加电量=" + isEnableChargeTtsWithBattary + + " | 通知电量时播TTS=" + isEnableTtsWhenNotifyBattery); } - /** - * Parcel反序列化构造 - Parcelable必备 私有私有化 - */ private ThoughtfulServiceBean(Parcel in) { this.isEnableChargeTts = in.readByte() != 0; this.isEnableUsePowerTts = in.readByte() != 0; - // 新增字段反序列化 this.isEnableUseageTtsWithBattary = in.readByte() != 0; this.isEnableChargeTtsWithBattary = in.readByte() != 0; - LogUtils.d(TAG, "ThoughtfulServiceBean: Parcel构造解析完成 | 充电TTS=" + isEnableChargeTts + " | 用电TTS=" + isEnableUsePowerTts - + " | 用电TTS加电量=" + isEnableUseageTtsWithBattary + " | 充电TTS加电量=" + isEnableChargeTtsWithBattary); + this.isEnableTtsWhenNotifyBattery = in.readByte() != 0; // 👉 新增反序列化 + LogUtils.d(TAG, "ThoughtfulServiceBean: Parcel构造解析完成"); } - // ====================== Getter/Setter 方法区 (封装成员变量 统一访问) ====================== + // ====================== Getter/Setter 方法区 ====================== public boolean isEnableChargeTts() { return isEnableChargeTts; } @@ -105,7 +96,6 @@ public class ThoughtfulServiceBean extends BaseBean implements Parcelable, Seria this.isEnableUsePowerTts = isEnableUsePowerTts; } - // 新增 用电TTS加入电量提醒 Getter/Setter public boolean isEnableUseageTtsWithBattary() { return isEnableUseageTtsWithBattary; } @@ -115,7 +105,6 @@ public class ThoughtfulServiceBean extends BaseBean implements Parcelable, Seria this.isEnableUseageTtsWithBattary = isEnableUseageTtsWithBattary; } - // 新增 充电TTS加入电量提醒 Getter/Setter public boolean isEnableChargeTtsWithBattary() { return isEnableChargeTtsWithBattary; } @@ -125,7 +114,17 @@ public class ThoughtfulServiceBean extends BaseBean implements Parcelable, Seria this.isEnableChargeTtsWithBattary = isEnableChargeTtsWithBattary; } - // ====================== 重写父类 BaseBean 核心方法 (JSON序列化/反序列化 业务核心) ====================== + // 👉 新增:通知电量时播放TTS + public boolean isEnableTtsWhenNotifyBattery() { + return isEnableTtsWhenNotifyBattery; + } + + public void setIsEnableTtsWhenNotifyBattery(boolean isEnableTtsWhenNotifyBattery) { + LogUtils.d(TAG, "setIsEnableTtsWhenNotifyBattery: 旧值=" + this.isEnableTtsWhenNotifyBattery + " | 新值=" + isEnableTtsWhenNotifyBattery); + this.isEnableTtsWhenNotifyBattery = isEnableTtsWhenNotifyBattery; + } + + // ====================== 重写父类 BaseBean 核心方法 ====================== @Override public String getName() { String className = ThoughtfulServiceBean.class.getName(); @@ -133,23 +132,17 @@ public class ThoughtfulServiceBean extends BaseBean implements Parcelable, Seria return className; } - /** - * JSON序列化 - 写入所有字段 适配持久化/网络传输 - */ @Override public void writeThisToJsonWriter(JsonWriter jsonWriter) throws IOException { super.writeThisToJsonWriter(jsonWriter); jsonWriter.name(JSON_FIELD_IS_ENABLE_CHARGE_TTS).value(this.isEnableChargeTts); jsonWriter.name(JSON_FIELD_IS_ENABLE_USE_POWER_TTS).value(this.isEnableUsePowerTts); - // 新增字段JSON序列化 jsonWriter.name(JSON_FIELD_IS_ENABLE_USAGE_TTS_WITH_BATTERY).value(this.isEnableUseageTtsWithBattary); jsonWriter.name(JSON_FIELD_IS_ENABLE_CHARGE_TTS_WITH_BATTERY).value(this.isEnableChargeTtsWithBattary); + jsonWriter.name(JSON_FIELD_IS_ENABLE_TTS_WHEN_NOTIFY_BATTERY).value(this.isEnableTtsWhenNotifyBattery); // 👉 新增JSON写入 LogUtils.d(TAG, "writeThisToJsonWriter: JSON序列化完成,所有TTS服务状态已写入"); } - /** - * JSON反序列化 - 读取字段生成实体 适配数据恢复 - */ @Override public BaseBean readBeanFromJsonReader(JsonReader jsonReader) throws IOException { ThoughtfulServiceBean bean = new ThoughtfulServiceBean(); @@ -163,13 +156,15 @@ public class ThoughtfulServiceBean extends BaseBean implements Parcelable, Seria case JSON_FIELD_IS_ENABLE_USE_POWER_TTS: bean.setIsEnableUsePowerTts(jsonReader.nextBoolean()); break; - // 新增字段反序列化 case JSON_FIELD_IS_ENABLE_USAGE_TTS_WITH_BATTERY: bean.setIsEnableUseageTtsWithBattary(jsonReader.nextBoolean()); break; case JSON_FIELD_IS_ENABLE_CHARGE_TTS_WITH_BATTERY: bean.setIsEnableChargeTtsWithBattary(jsonReader.nextBoolean()); break; + case JSON_FIELD_IS_ENABLE_TTS_WHEN_NOTIFY_BATTERY: + bean.setIsEnableTtsWhenNotifyBattery(jsonReader.nextBoolean()); // 👉 新增JSON读取 + break; default: jsonReader.skipValue(); LogUtils.w(TAG, "readBeanFromJsonReader: 跳过未知JSON字段 = " + fieldName); @@ -181,22 +176,19 @@ public class ThoughtfulServiceBean extends BaseBean implements Parcelable, Seria return bean; } - // ====================== 实现 Parcelable 接口方法 (组件间Intent传递必备 API30/Java7完美适配) ====================== + // ====================== Parcelable 接口方法 ====================== @Override public int describeContents() { - return 0; // 无文件描述符等特殊内容,固定返回0即可 + return 0; } - /** - * Parcel序列化 - boolean用byte存储(Java7/API30标准写法 避免兼容性问题) - */ @Override public void writeToParcel(Parcel dest, int flags) { dest.writeByte((byte) (isEnableChargeTts ? 1 : 0)); dest.writeByte((byte) (isEnableUsePowerTts ? 1 : 0)); - // 新增字段Parcel序列化 dest.writeByte((byte) (isEnableUseageTtsWithBattary ? 1 : 0)); dest.writeByte((byte) (isEnableChargeTtsWithBattary ? 1 : 0)); + dest.writeByte((byte) (isEnableTtsWhenNotifyBattery ? 1 : 0)); // 👉 新增Parcel写入 LogUtils.d(TAG, "writeToParcel: Parcel序列化完成,所有TTS服务状态已写入"); } diff --git a/powerbell/src/main/res/layout/activity_settings.xml b/powerbell/src/main/res/layout/activity_settings.xml index 4380fff..029bdac 100644 --- a/powerbell/src/main/res/layout/activity_settings.xml +++ b/powerbell/src/main/res/layout/activity_settings.xml @@ -123,6 +123,14 @@ + + +