Răsfoiți Sursa

修复跟随系统时弹框背景色无法切换的问题

chendeben 1 an în urmă
părinte
comite
98b3fa01ec

+ 13 - 3
entry/src/main/ets/MyAbilityStage.ets

@@ -7,6 +7,11 @@ export default class MyAbilityStage extends AbilityStage {
     try {
       // 保存当前颜色模式到 AppStorage
       AppStorage.setOrCreate('currentColorMode', this.context.config.colorMode);
+      hilog.info(0x0000, 'Heanup', '当前 colorMode'+this.context.config.colorMode);
+      // 确保 themeMode 有初始值(0: 跟随系统)
+      if (AppStorage.get('themeMode') === undefined) {
+        AppStorage.setOrCreate('themeMode', 0);
+      }
     } catch (err) {
       hilog.error(0x0000, 'Heanup', 'Failed to initialize color mode: %{public}s', err.message);
     }
@@ -14,9 +19,14 @@ export default class MyAbilityStage extends AbilityStage {
 
   async onConfigurationUpdate(newConfig: import('@ohos.app.ability.Configuration').Configuration): Promise<void> {
     try {
-      // 更新颜色模式到 AppStorage
-      AppStorage.setOrCreate('currentColorMode', newConfig.colorMode);
-      hilog.info(0x0000, 'Heanup', 'the newConfig.colorMode is %{public}s', JSON.stringify(newConfig.colorMode) ?? '');
+      // 只有 themeMode 为 0(跟随系统)时才更新颜色模式到 AppStorage
+      const themeMode = AppStorage.get<number>('themeMode') ?? 0;
+      if (themeMode === 0) {
+        AppStorage.setOrCreate('currentColorMode', newConfig.colorMode);
+        hilog.info(0x0000, 'Heanup', 'the newConfig.colorMode is %{public}s', JSON.stringify(newConfig.colorMode) ?? '');
+      } else {
+        hilog.info(0x0000, 'Heanup', 'themeMode != 0, skip updating colorMode');
+      }
     } catch (err) {
       hilog.error(0x0000, 'Heanup', 'Failed to update color mode: %{public}s', err.message);
     }

+ 0 - 3
entry/src/main/ets/pages/NewIndex.ets

@@ -117,9 +117,6 @@ struct NewIndex{
   /** 记录上一次点击返回键的时间戳,用于双击退出 */
   private  backTime:number=0;
 
-  @State isDarkMode: boolean = false;
-  private storage: dataStorage.Storage | undefined = undefined;
-
   /**
    * 返回键处理逻辑:
    * - 如果不是根目录或有历史记录,发送广播通知更新列表

+ 9 - 1
entry/src/main/ets/pages/SettingPage.ets

@@ -151,10 +151,17 @@ export struct SettingPage {
     const savedDarkMode = PreferencesUtil.getBooleanSync(SettingPage.IS_DARK_MODE, false);
     this.isDarkMode = savedDarkMode;
     this.currentMode = savedDarkMode ? ConfigurationConstant.ColorMode.COLOR_MODE_DARK : ConfigurationConstant.ColorMode.COLOR_MODE_LIGHT;
-    this.themeMode = PreferencesUtil.getNumberSync(SettingPage.THEME_MODE, 0)
+    // 优先从 AppStorage 读取 themeMode
+    const appStorageThemeMode = AppStorage.get<number>('themeMode');
+    if (appStorageThemeMode !== undefined) {
+      this.themeMode = appStorageThemeMode;
+    } else {
+      this.themeMode = PreferencesUtil.getNumberSync(SettingPage.THEME_MODE, 0)
+    }
     this.applyThemeMode(this.themeMode)
     AppStorage.setOrCreate('currentColorMode', this.currentMode);
     AppStorage.setOrCreate('isDarkMode', this.isDarkMode);
+    AppStorage.setOrCreate('themeMode', this.themeMode);
   }
 
   // 监听颜色模式变化
@@ -180,6 +187,7 @@ export struct SettingPage {
     AppStorage.setOrCreate('currentColorMode', colorMode)
     AppStorage.setOrCreate('isDarkMode', colorMode === ConfigurationConstant.ColorMode.COLOR_MODE_DARK)
     PreferencesUtil.putSync(SettingPage.THEME_MODE, mode)
+    AppStorage.setOrCreate('themeMode', mode)
     // 只有强制浅色/深色时才主动设置
     const context = getContext(this) as common.UIAbilityContext
     context.getApplicationContext().setColorMode(colorMode)

+ 6 - 7
entry/src/main/ets/view/LocalMusic.ets

@@ -170,19 +170,14 @@ export struct LocalMusic {
   @State isShowHistory:boolean = true //是否显示最近播放
   @State isCustomizeBg: boolean = false //自定义背景界面
   @State customizeBgPath: string | undefined = '';
-  @State isDarkMode: boolean = false
+  @State isDarkMode: boolean = AppStorage.get<number>('currentColorMode')===ConfigurationConstant.ColorMode.COLOR_MODE_DARK
   @StorageProp('currentColorMode') @Watch('onColorModeChange') currentMode: number =
     ConfigurationConstant.ColorMode.COLOR_MODE_LIGHT;
 
 
   onColorModeChange() {
-    this.isDarkMode = this.currentMode === ConfigurationConstant.ColorMode.COLOR_MODE_DARK
-    if (this.currentMode == ConfigurationConstant.ColorMode.COLOR_MODE_LIGHT) {
-      //当前为浅色模式,资源初始化逻辑
+    this.isDarkMode=AppStorage.get<number>('currentColorMode')===ConfigurationConstant.ColorMode.COLOR_MODE_DARK
 
-    } else {
-      //当前为深色模式,资源初始化逻辑
-    }
   }
 
   onModeChange() {
@@ -8020,6 +8015,10 @@ function cutPopupBuilder(dataBu: BubbleBean) {
       color: "#22FFFFFF"
     })
   }
+  .height(300)
+  .padding({
+    bottom:30
+  })
 
 }
 

+ 1 - 0
entry/src/main/module.json5

@@ -4,6 +4,7 @@
     "type": "entry",
     "description": "$string:module_desc",
     "mainElement": "EntryAbility",
+    "srcEntry": "./ets/MyAbilityStage.ets",
     "deviceTypes": [
       "phone",
       "tablet",