Quellcode durchsuchen

Merge branch 'master' into feature/桌面卡片-抽离ijkplayer播放控制

chendeben vor 1 Jahr
Ursprung
Commit
ecbe2a08c8

+ 23 - 0
entry/src/main/ets/common/util/MediaTable.ets

@@ -241,6 +241,11 @@ export default class MediaTable {
       obj.genre  = resultSet.getString(resultSet.getColumnIndex('genre'));
       obj.genre  = resultSet.getString(resultSet.getColumnIndex('genre'));
       obj.track  = resultSet.getString(resultSet.getColumnIndex('track'));
       obj.track  = resultSet.getString(resultSet.getColumnIndex('track'));
 
 
+      obj.bits_per_raw_sample  = resultSet.getString(resultSet.getColumnIndex('bits_per_raw_sample'));
+      obj.channels  = resultSet.getString(resultSet.getColumnIndex('channels'));
+      obj.channel_layout  = resultSet.getString(resultSet.getColumnIndex('channel_layout'));
+      obj.start_time  = resultSet.getString(resultSet.getColumnIndex('start_time'));
+
       const valueBucket: relationalStore.ValuesBucket = obj
       const valueBucket: relationalStore.ValuesBucket = obj
       // Step 4: 执行更新
       // Step 4: 执行更新
       const updatePredicates = new relationalStore.RdbPredicates(RdbUtils.MEDIA_TABLE.tableName);
       const updatePredicates = new relationalStore.RdbPredicates(RdbUtils.MEDIA_TABLE.tableName);
@@ -567,6 +572,11 @@ export default class MediaTable {
     item.genre = safeGet('genre');
     item.genre = safeGet('genre');
     item.track = safeGet('track');
     item.track = safeGet('track');
 
 
+    item.bits_per_raw_sample = safeGet('bits_per_raw_sample');
+    item.channels = safeGet('channels');
+    item.channel_layout = safeGet('channel_layout');
+    item.start_time = safeGet('start_time');
+
     return item;
     return item;
   }
   }
 
 
@@ -661,5 +671,18 @@ function generateBucket(item: VideoItem): relationalStore.ValuesBucket {
     obj.track = item.track;
     obj.track = item.track;
   }
   }
 
 
+  if(item.bits_per_raw_sample){
+    obj.bits_per_raw_sample = item.bits_per_raw_sample;
+  }
+  if(item.channels){
+    obj.channels = item.channels;
+  }
+  if(item.channel_layout){
+    obj.channel_layout = item.channel_layout;
+  }
+  if(item.start_time){
+    obj.start_time = item.start_time;
+  }
+
   return obj;
   return obj;
 }
 }

+ 12 - 1
entry/src/main/ets/common/util/RdbUtils.ets

@@ -70,12 +70,18 @@ export default class RdbUtils {
       '        genre TEXT,\n' +
       '        genre TEXT,\n' +
       '        track TEXT,\n' +
       '        track TEXT,\n' +
 
 
+      '        bits_per_raw_sample TEXT,\n' +
+      '        channels TEXT,\n' +
+      '        channel_layout TEXT,\n' +
+      '        start_time TEXT,\n' +
+
       '        mimeType TEXT' +
       '        mimeType TEXT' +
       ')',
       ')',
     columns: ['id', 'name', 'filePath','mtype', 'videoSize', 'cTime','size', 'artist', 'album',
     columns: ['id', 'name', 'filePath','mtype', 'videoSize', 'cTime','size', 'artist', 'album',
       'fileName','parentPath','isFav','pixelMapPath','pixelMapToString',
       'fileName','parentPath','isFav','pixelMapPath','pixelMapToString',
       'duration',   'sampleRate','playCount',  'lastPlayedStr', 'trackCount',
       'duration',   'sampleRate','playCount',  'lastPlayedStr', 'trackCount',
-      'lyricContent','md5Str','extra_json','pyStr','bit_rate','probe_score','year','nb_streams','nb_programs','genre','track','mimeType']
+      'lyricContent','md5Str','extra_json','pyStr','bit_rate','probe_score','year','nb_streams','nb_programs',
+      'genre','track',  'bits_per_raw_sample','channels',  'channel_layout','start_time',  'mimeType']
   };
   };
 
 
   constructor(tableName: string, sqlCreateTable: string, columns: Array<string>) {
   constructor(tableName: string, sqlCreateTable: string, columns: Array<string>) {
@@ -158,6 +164,11 @@ export default class RdbUtils {
             'genre': 'TEXT',
             'genre': 'TEXT',
             'track': 'TEXT',
             'track': 'TEXT',
 
 
+            'bits_per_raw_sample': 'TEXT',
+            'channels': 'TEXT',
+            'channel_layout': 'TEXT',
+            'start_time': 'TEXT',
+
           };
           };
           
           
           // 逐个添加列,不依赖于检查结果
           // 逐个添加列,不依赖于检查结果

+ 7 - 0
entry/src/main/ets/common/util/UserUtil.ets

@@ -350,10 +350,12 @@ export default class UserUtil {
           let hasActiveSubscription = false;
           let hasActiveSubscription = false;
           let subscriptionName = '';
           let subscriptionName = '';
           let subscriptionEndDate = '';
           let subscriptionEndDate = '';
+          let plan_id = '';
           if (subInfo && subInfo.has_active_subscription && subInfo.subscriptions && subInfo.subscriptions.length > 0) {
           if (subInfo && subInfo.has_active_subscription && subInfo.subscriptions && subInfo.subscriptions.length > 0) {
             hasActiveSubscription = true;
             hasActiveSubscription = true;
             subscriptionName = subInfo.subscriptions[0].plan_name;
             subscriptionName = subInfo.subscriptions[0].plan_name;
             subscriptionEndDate = subInfo.subscriptions[0].end_date;
             subscriptionEndDate = subInfo.subscriptions[0].end_date;
+            plan_id = subInfo.subscriptions[0].plan_id
           }
           }
           // 保存登录状态
           // 保存登录状态
           PreferencesUtil.putSync('isLogin', true);
           PreferencesUtil.putSync('isLogin', true);
@@ -364,6 +366,11 @@ export default class UserUtil {
           PreferencesUtil.putSync('subscriptionEndDate', subscriptionEndDate);
           PreferencesUtil.putSync('subscriptionEndDate', subscriptionEndDate);
           PreferencesUtil.putSync('hasActiveSubscription', hasActiveSubscription);
           PreferencesUtil.putSync('hasActiveSubscription', hasActiveSubscription);
           PreferencesUtil.putSync('userToken', json.data.system_info?.token || '');
           PreferencesUtil.putSync('userToken', json.data.system_info?.token || '');
+          if(plan_id=='1'){
+            PreferencesUtil.putSync('isForever', true);
+          }else{
+            PreferencesUtil.putSync('isForever', false);
+          }
           return json.data;
           return json.data;
         } else {
         } else {
           return null;
           return null;

+ 23 - 6
entry/src/main/ets/common/util/Utility.ets

@@ -67,6 +67,12 @@ interface FFprobeStream {
   sample_rate?: string; // 采样率
   sample_rate?: string; // 采样率
   bit_rate?: string;    // 比特率
   bit_rate?: string;    // 比特率
   disposition?: StreamDisposition;  // 添加disposition属性
   disposition?: StreamDisposition;  // 添加disposition属性
+
+  bits_per_raw_sample?: string;  // 位深
+  channels?: string; // 声道数
+  channel_layout?: string;    // 声道布局
+  start_time?: string;  // 起始播放
+
 }
 }
 
 
 interface StreamDisposition {
 interface StreamDisposition {
@@ -138,10 +144,8 @@ export class Utility {
     let isNoble = false
     let isNoble = false
     if(StrUtil.isNotEmpty(expireDate)){
     if(StrUtil.isNotEmpty(expireDate)){
       if(expireDate===VipPage.FOREVER_DATE){
       if(expireDate===VipPage.FOREVER_DATE){
-        PreferencesUtil.putSync('isForever',true)
         isNoble = true
         isNoble = true
       }else{
       }else{
-        PreferencesUtil.putSync('isForever',false)
         const currentDate = new Date();
         const currentDate = new Date();
         const targetDate = DateUtil.getFormatDate(expireDate)
         const targetDate = DateUtil.getFormatDate(expireDate)
 
 
@@ -814,22 +818,29 @@ export class Utility {
         },
         },
       }).then(async () => {
       }).then(async () => {
         try {
         try {
-          let videoItem:VideoItem = new VideoItem('',inputPath,inputPath,type,0,'')
           const metadata: FFprobeMetadata = JSON.parse(outputJson);
           const metadata: FFprobeMetadata = JSON.parse(outputJson);
           const format = metadata.format;
           const format = metadata.format;
           console.log(`onecold outputJson:${outputJson}`);
           console.log(`onecold outputJson:${outputJson}`);
           let file = fs.openSync(inputPath, fs.OpenMode.READ_ONLY | fs.OpenMode.CREATE)
           let file = fs.openSync(inputPath, fs.OpenMode.READ_ONLY | fs.OpenMode.CREATE)
           console.info('readMetaInfoFFmpeg asset file.path: ', file.path);
           console.info('readMetaInfoFFmpeg asset file.path: ', file.path);
-          videoItem = new VideoItem(file.name,inputPath,inputPath,type,0,'')
+          let videoItem = new VideoItem(file.name,inputPath,inputPath,type,0,'')
           await fs.stat(file.fd).then(async (stat: fs.Stat) => {
           await fs.stat(file.fd).then(async (stat: fs.Stat) => {
 
 
             // 获取音频流的采样率
             // 获取音频流的采样率
-            let sampleRate = '';
+            let sampleRate:string|undefined = '';
+            let bits_per_raw_sample:string|undefined = '';
+            let channels:string|undefined = '';
+            let channel_layout:string|undefined = '';
+            let start_time:string|undefined = '';
             if (metadata.streams  && metadata.streams.length  > 0) {
             if (metadata.streams  && metadata.streams.length  > 0) {
               // 查找第一个音频流
               // 查找第一个音频流
               const audioStream = metadata.streams.find(stream  => StrUtil.isNotEmpty(stream.sample_rate));
               const audioStream = metadata.streams.find(stream  => StrUtil.isNotEmpty(stream.sample_rate));
-              if (audioStream&&audioStream.sample_rate)  {
+              if (audioStream)  {
                 sampleRate = audioStream.sample_rate;
                 sampleRate = audioStream.sample_rate;
+                bits_per_raw_sample = audioStream.bits_per_raw_sample
+                channel_layout = audioStream.channel_layout
+                channels = audioStream.channels
+                start_time = audioStream.start_time
               }
               }
             }
             }
 
 
@@ -892,6 +903,12 @@ export class Utility {
             videoItem.lyricContent  = tags.LYRICS || tags.lyrics  ||  tags.USLT || tags.UNSYNCEDLYRICS || '';
             videoItem.lyricContent  = tags.LYRICS || tags.lyrics  ||  tags.USLT || tags.UNSYNCEDLYRICS || '';
             videoItem.genre  = tags.genre||tags.GENRE|| Utility.resourceToString(context, $r('app.string.unknown'));
             videoItem.genre  = tags.genre||tags.GENRE|| Utility.resourceToString(context, $r('app.string.unknown'));
             videoItem.track  = tags.track||tags.TRACK|| Utility.resourceToString(context, $r('app.string.unknown'));
             videoItem.track  = tags.track||tags.TRACK|| Utility.resourceToString(context, $r('app.string.unknown'));
+
+            videoItem.bits_per_raw_sample = bits_per_raw_sample ||'1'
+            videoItem.channel_layout = channel_layout || ''
+            videoItem.channels = channels ||'0'
+            videoItem.start_time = start_time || '00:00'
+
             videoItem.mimeType = format.format_name
             videoItem.mimeType = format.format_name
             // 检查是否有封面图片流
             // 检查是否有封面图片流
             const hasCover = metadata.streams.some(stream  =>
             const hasCover = metadata.streams.some(stream  =>

+ 16 - 2
entry/src/main/ets/entryability/EntryAbility.ets

@@ -105,7 +105,7 @@ export default class EntryAbility extends UIAbility {
     // UI上下文对象,用于获取窗口信息
     // UI上下文对象,用于获取窗口信息
     private uiContext?: UIContext;
     private uiContext?: UIContext;
     // private awareness: smartMobilityCommon.SmartMobilityAwareness = smartMobilityCommon.getSmartMobilityAwareness();
     // private awareness: smartMobilityCommon.SmartMobilityAwareness = smartMobilityCommon.getSmartMobilityAwareness();
-    private awareness: smartMobilityCommon.SmartMobilityAwareness|undefined = canIUse("SystemCapability.SmartOptimizer.SmartMobility")?smartMobilityCommon.getSmartMobilityAwareness():undefined;
+    private awareness: smartMobilityCommon.SmartMobilityAwareness|undefined = canIUse("SystemCapability.CarService.DistributedEngine")?smartMobilityCommon.getSmartMobilityAwareness():undefined;
 
 
     /**
     /**
      * 窗口尺寸变化回调函数
      * 窗口尺寸变化回调函数
@@ -150,6 +150,15 @@ export default class EntryAbility extends UIAbility {
         }
         }
 
 
     }
     }
+    onDisplayIdChange=(displayId: number)=> {
+        let curDisplay = display.getDisplayByIdSync(displayId);
+        console.info('twocold curDisplay 2 = '+curDisplay.name);
+        if(curDisplay.name =='HiCar'||curDisplay.name =='SuperLauncher'){
+            AppStorage.setOrCreate('curDisplayIsHiCar', true);
+        }else{
+            AppStorage.setOrCreate('curDisplayIsHiCar', false);
+        }
+    }
 
 
     async onCreate(want:Want, launchParam:AbilityConstant.LaunchParam) {
     async onCreate(want:Want, launchParam:AbilityConstant.LaunchParam) {
         AppUtil.init(this.context);
         AppUtil.init(this.context);
@@ -314,6 +323,7 @@ export default class EntryAbility extends UIAbility {
 
 
             LogUtil.info('onecold  topRectHeight = '+topRectHeight);
             LogUtil.info('onecold  topRectHeight = '+topRectHeight);
             windowClass.on('avoidAreaChange', this.onAvoidAreaChange)
             windowClass.on('avoidAreaChange', this.onAvoidAreaChange)
+            windowClass.on('displayIdChange', this.onDisplayIdChange)
         })
         })
 
 
 
 
@@ -385,9 +395,13 @@ export default class EntryAbility extends UIAbility {
 
 
 
 
     getHiCarStatus(){
     getHiCarStatus(){
+        if (!this.awareness){
+            this.awareness=canIUse("SystemCapability.CarService.DistributedEngine")?smartMobilityCommon.getSmartMobilityAwareness():undefined;
+        }
+        console.log('enter getHiCarStatus,awareness:'+JSON.stringify(this.awareness));
         if(this.awareness){
         if(this.awareness){
             // this.awareness = smartMobilityCommon.getSmartMobilityAwareness();
             // this.awareness = smartMobilityCommon.getSmartMobilityAwareness();
-
+            console.log('enter awareness');
             // 业务类型
             // 业务类型
             let types: smartMobilityCommon.SmartMobilityType[] = [smartMobilityCommon.SmartMobilityType.HICAR];
             let types: smartMobilityCommon.SmartMobilityType[] = [smartMobilityCommon.SmartMobilityType.HICAR];
             // 获取出行业务连接状态
             // 获取出行业务连接状态

+ 2 - 1
entry/src/main/ets/pages/NewIndex.ets

@@ -416,7 +416,8 @@ struct NewIndex {
       bottomRight: 20
       bottomRight: 20
     })
     })
     // .backgroundColor($r('app.color.silvery'))
     // .backgroundColor($r('app.color.silvery'))
-    .backgroundColor($r('app.color.index_background'))
+    // .backgroundColor($r('app.color.index_background'))
+    .backgroundColor($r('app.color.user_center_card_background'))
     .alignItems(HorizontalAlign.Start)
     .alignItems(HorizontalAlign.Start)
     .translate({ x: this.offsetX, y: 0, z: 0 })
     .translate({ x: this.offsetX, y: 0, z: 0 })
     .transition({ type: TransitionType.Insert, translate: { x: -DisplayUtil.getWidth(), y: 0 } })
     .transition({ type: TransitionType.Insert, translate: { x: -DisplayUtil.getWidth(), y: 0 } })

+ 85 - 46
entry/src/main/ets/pages/ScanFilePage.ets

@@ -232,8 +232,8 @@ export struct ScanFilePage{
                 this.mainCanvasRenderingContext.imageSmoothingQuality = 'medium'
                 this.mainCanvasRenderingContext.imageSmoothingQuality = 'medium'
               })
               })
           }
           }
-          .transition(TransitionEffect.move(TransitionEdge.BOTTOM)
-            .animation({ duration: 380, curve: Curve.Ease,delay:30 }))
+          .transition(TransitionEffect.move(TransitionEdge.END)
+            .animation({ duration: 380, curve: Curve.Ease,delay:300 }))
 
 
           Text(this.strText)
           Text(this.strText)
             .height(50)
             .height(50)
@@ -242,21 +242,35 @@ export struct ScanFilePage{
             .fontWeight(480)
             .fontWeight(480)
             .visibility(this.textVisi)
             .visibility(this.textVisi)
 
 
-          Button($r('app.string.start_scan'), { type: ButtonType.Capsule, stateEffect: false })
+          Button({ type: ButtonType.Capsule, stateEffect: true }) {
+            Row(){
+              SymbolGlyph($r('sys.symbol.magnifyingglass'))
+                .fontSize(22)
+                .fontColor([Color.White])
+              Text($r('app.string.start_scan'))
+                .margin({ left: 8 })
+                .fontSize(18)
+                .fontColor(Color.White)
+                .fontWeight(480)
+                .textAlign(TextAlign.Center)
+            }
+            .justifyContent(FlexAlign.Center)
+          }
+          .width(180)
+          .height(55)
+          .clickEffect({level:ClickEffectLevel.LIGHT, scale: 0.5})
+          .margin({ top: 10, bottom: 10 })
+          .backgroundColor(this.themeColor)
+          .enabled(this.isStart ?false:true)
+          .onClick(() => {
+            this.doOptimize(false)
+
+          })
+          .alignSelf(ItemAlign.Center)
+          .transition(TransitionEffect.move(TransitionEdge.END)
+            .animation({ duration: 380, curve: Curve.Ease,delay:300 }))
 
 
-            .width(180)
-            .height(55)
-            .clickEffect({level:ClickEffectLevel.LIGHT, scale: 0.5})
-            .margin({ top: 10, bottom: 10 })
-            .backgroundColor(this.themeColor)
-            .enabled(this.isStart ?false:true)
-            .onClick(() => {
-              this.doOptimize(false)
 
 
-            })
-            .alignSelf(ItemAlign.Center)
-            .transition(TransitionEffect.move(TransitionEdge.BOTTOM)
-              .animation({ duration: 380, curve: Curve.Ease,delay:30 }))
 
 
           Column() {
           Column() {
             Row() {
             Row() {
@@ -327,46 +341,71 @@ export struct ScanFilePage{
           .margin({ left:25,right: 25,top:20,bottom:20  })
           .margin({ left:25,right: 25,top:20,bottom:20  })
           .borderRadius(20)
           .borderRadius(20)
           .justifyContent(FlexAlign.Center)
           .justifyContent(FlexAlign.Center)
-          .transition(TransitionEffect.move(TransitionEdge.BOTTOM)
-            .animation({ duration: 380, curve: Curve.Ease,delay:60 }))
+          .transition(TransitionEffect.move(TransitionEdge.END)
+            .animation({ duration: 380, curve: Curve.Ease,delay:300 }))
 
 
           Row() {
           Row() {
 
 
+            Button({ type: ButtonType.Capsule, stateEffect: true }) {
+              Row(){
+                SymbolGlyph($r('sys.symbol.picture'))
+                  .fontSize(19)
+                  .fontColor([Color.White])
+                Text($r('app.string.onekey_cover'))
+                  .margin({ left: 4 })
+                  .fontSize(15)
+                  .fontColor(Color.White)
+                  .fontWeight(480)
+                  .textAlign(TextAlign.Center)
+              }
+              .justifyContent(FlexAlign.Center)
+            }
+            .width(150)
+            .height(55)
+            .clickEffect({level:ClickEffectLevel.LIGHT, scale: 0.5})
+            .margin({ top: 10, bottom: 10,right:10 })
+            .backgroundColor(this.themeColor)
+            .enabled(this.isStartCover ?false:true)
+            .onClick(() => {
+              if(PreferencesUtil.getStringSync('COVER_API','')===''){
+                this.showTipsDialog()
+                return
+              }
+              this.doOptimize(true)
 
 
-            Button($r('app.string.onekey_cover'), { type: ButtonType.Capsule, stateEffect: false })
-              .width(150)
-              .height(55)
-              .clickEffect({level:ClickEffectLevel.LIGHT, scale: 0.5})
-              .margin({ top: 10, bottom: 10,right:10 })
-              .backgroundColor(this.themeColor)
-              .enabled(this.isStartCover ?false:true)
-              .onClick(() => {
-                if(PreferencesUtil.getStringSync('COVER_API','')===''){
-                  this.showTipsDialog()
-                  return
-                }
-                this.doOptimize(true)
-
-              })
-              .alignSelf(ItemAlign.Center)
+            })
+            .alignSelf(ItemAlign.Center)
 
 
-            Button($r('app.string.sync_data'), { type: ButtonType.Capsule, stateEffect: false })
-              .width(150)
-              .height(55)
-              .clickEffect({level:ClickEffectLevel.LIGHT, scale: 0.5})
-              .margin({ left:10,top: 10, bottom: 10 })
-              .backgroundColor(this.themeColor)
-              .enabled(this.isStartSync ?false:true)
-              .onClick(() => {
-                this.doSyncData()
+            Button({ type: ButtonType.Capsule, stateEffect: true }) {
+              Row(){
+                SymbolGlyph($r('sys.symbol.arrow_counterclockwise'))
+                  .fontSize(19)
+                  .fontColor([Color.White])
+                Text($r('app.string.sync_data'))
+                  .margin({ left: 4 })
+                  .fontSize(15)
+                  .fontColor(Color.White)
+                  .fontWeight(480)
+                  .textAlign(TextAlign.Center)
+              }
+              .justifyContent(FlexAlign.Center)
+            }
+            .width(150)
+            .height(55)
+            .clickEffect({level:ClickEffectLevel.LIGHT, scale: 0.5})
+            .margin({ top: 10, bottom: 10,right:10 })
+            .backgroundColor(this.themeColor)
+            .enabled(this.isStartSync ?false:true)
+            .onClick(() => {
+              this.doSyncData()
 
 
-              })
-              .alignSelf(ItemAlign.Center)
+            })
+            .alignSelf(ItemAlign.Center)
 
 
 
 
           }
           }
-          .transition(TransitionEffect.move(TransitionEdge.BOTTOM)
-            .animation({ duration: 380, curve: Curve.Ease,delay:90 }))
+          .transition(TransitionEffect.move(TransitionEdge.END)
+            .animation({ duration: 380, curve: Curve.Ease,delay:300 }))
 
 
         }
         }
 
 

+ 241 - 86
entry/src/main/ets/pages/SettingPage.ets

@@ -389,11 +389,10 @@ export struct SettingPage {
       // 主题色分组卡片
       // 主题色分组卡片
       Column() {
       Column() {
         Row() {
         Row() {
+          SymbolGlyph($r('sys.symbol.paintpalette'))
+            .fontSize(20)
+            .fontColor([this.themeColor])
 
 
-          Image($r('app.media.theme'))
-            .width(20)
-            .height(20)
-            .fillColor(this.themeColor)
           Text('主题色')
           Text('主题色')
             .fontSize(15)
             .fontSize(15)
             .fontWeight(500)
             .fontWeight(500)
@@ -576,9 +575,15 @@ export struct SettingPage {
             Line().width('100%').height(0.3).backgroundColor($r('app.color.index_tab_unselected_font_color'))
             Line().width('100%').height(0.3).backgroundColor($r('app.color.index_tab_unselected_font_color'))
             // 主题设置弹框入口
             // 主题设置弹框入口
             Button({ type: ButtonType.Normal, stateEffect: true }) {
             Button({ type: ButtonType.Normal, stateEffect: true }) {
+
               Row() {
               Row() {
+                SymbolGlyph($r('sys.symbol.sun_max'))
+                  .fontSize(20)
+                  .fontColor([this.themeColor])
+                  .alignSelf(ItemAlign.Center)
+                  .margin({ left: 15 })
                 Text('主题设置')
                 Text('主题设置')
-                  .margin({ left: 18 })
+                  .margin({ left: 8 })
                   .fontSize(15)
                   .fontSize(15)
                   .fontColor(Color.Gray)
                   .fontColor(Color.Gray)
                   .fontWeight(480)
                   .fontWeight(480)
@@ -614,8 +619,13 @@ export struct SettingPage {
             Line().width('100%').height(0.3).backgroundColor($r('app.color.index_tab_unselected_font_color'))
             Line().width('100%').height(0.3).backgroundColor($r('app.color.index_tab_unselected_font_color'))
             Button({ type: ButtonType.Normal, stateEffect: true }) {
             Button({ type: ButtonType.Normal, stateEffect: true }) {
               Row() {
               Row() {
+                SymbolGlyph($r('sys.symbol.paintpalette'))
+                  .fontSize(20)
+                  .fontColor([this.themeColor])
+                  .alignSelf(ItemAlign.Center)
+                  .margin({ left: 15 })
                 Text('自定义背景')
                 Text('自定义背景')
-                  .margin({ left: 18 })
+                  .margin({ left: 8 })
                   .fontSize(15)
                   .fontSize(15)
                   .fontColor(Color.Gray)
                   .fontColor(Color.Gray)
                   .fontWeight(480)
                   .fontWeight(480)
@@ -653,36 +663,41 @@ export struct SettingPage {
             Line().width('100%').height(0.3).backgroundColor($r('app.color.index_tab_unselected_font_color'))
             Line().width('100%').height(0.3).backgroundColor($r('app.color.index_tab_unselected_font_color'))
 
 
             // 滚动隐藏'
             // 滚动隐藏'
-            Row() {
-              Text('滚动隐藏')
-                .margin({ left: 18 })
-                .fontSize(15)
-                .fontColor(Color.Gray)
-                .fontWeight(480)
-                .layoutWeight(1)
-              Toggle({ type: ToggleType.Switch, isOn: this.isScrollHide })
-                .selectedColor(this.themeColor)
-                .switchPointColor(Color.White)
-                .clickEffect({level:ClickEffectLevel.LIGHT, scale: 0.5})
-                .margin({ right: 18 })
-                .onChange((checked: boolean) => {
-                  this.isScrollHide = checked;
-                  PreferencesUtil.put(SettingPage.IS_SCROLL_HIDE, this.isScrollHide)
-                  this.sendChangeEvent()
-                })
-                .width(50)
-                .height(30);
-            }
-            .height(55)
-            .visibility(Visibility.None)
-            .clickEffect({ level: ClickEffectLevel.HEAVY })
-
-            Line().width('100%').height(0.3).backgroundColor($r('app.color.index_tab_unselected_font_color'))
-              .visibility(Visibility.None)
+            // Row() {
+            //   Text('滚动隐藏')
+            //     .margin({ left: 18 })
+            //     .fontSize(15)
+            //     .fontColor(Color.Gray)
+            //     .fontWeight(480)
+            //     .layoutWeight(1)
+            //   Toggle({ type: ToggleType.Switch, isOn: this.isScrollHide })
+            //     .selectedColor(this.themeColor)
+            //     .switchPointColor(Color.White)
+            //     .clickEffect({level:ClickEffectLevel.LIGHT, scale: 0.5})
+            //     .margin({ right: 18 })
+            //     .onChange((checked: boolean) => {
+            //       this.isScrollHide = checked;
+            //       PreferencesUtil.put(SettingPage.IS_SCROLL_HIDE, this.isScrollHide)
+            //       this.sendChangeEvent()
+            //     })
+            //     .width(50)
+            //     .height(30);
+            // }
+            // .height(55)
+            // .visibility(Visibility.None)
+            // .clickEffect({ level: ClickEffectLevel.HEAVY })
+            //
+            // Line().width('100%').height(0.3).backgroundColor($r('app.color.index_tab_unselected_font_color'))
+            //   .visibility(Visibility.None)
             // 网格布局
             // 网格布局
             Row() {
             Row() {
-              Text('网格模式')
-                .margin({ left: 18 })
+              SymbolGlyph($r('sys.symbol.square_grid_2x2'))
+                .fontSize(20)
+                .fontColor([this.themeColor])
+                .alignSelf(ItemAlign.Center)
+                .margin({ left: 15 })
+              Text('卡片模式')
+                .margin({ left: 8 })
                 .fontSize(15)
                 .fontSize(15)
                 .fontColor(Color.Gray)
                 .fontColor(Color.Gray)
                 .fontWeight(480)
                 .fontWeight(480)
@@ -705,8 +720,13 @@ export struct SettingPage {
             Line().width('100%').height(0.3).backgroundColor($r('app.color.index_tab_unselected_font_color'))
             Line().width('100%').height(0.3).backgroundColor($r('app.color.index_tab_unselected_font_color'))
             // 封面方形
             // 封面方形
             Row() {
             Row() {
+              SymbolGlyph($r('sys.symbol.rectangle'))
+                .fontSize(20)
+                .fontColor([this.themeColor])
+                .alignSelf(ItemAlign.Center)
+                .margin({ left: 15 })
               Text('封面方形')
               Text('封面方形')
-                .margin({ left: 18 })
+                .margin({ left: 8 })
                 .fontSize(15)
                 .fontSize(15)
                 .fontColor(Color.Gray)
                 .fontColor(Color.Gray)
                 .fontWeight(480)
                 .fontWeight(480)
@@ -730,8 +750,13 @@ export struct SettingPage {
             Line().width('100%').height(0.3).backgroundColor($r('app.color.index_tab_unselected_font_color'))
             Line().width('100%').height(0.3).backgroundColor($r('app.color.index_tab_unselected_font_color'))
             //播放列表透明
             //播放列表透明
             Row() {
             Row() {
+              SymbolGlyph($r('sys.symbol.circle_lefthalf_inset_filled'))
+                .fontSize(20)
+                .fontColor([this.themeColor])
+                .alignSelf(ItemAlign.Center)
+                .margin({ left: 15 })
               Text('播放列表背景透明')
               Text('播放列表背景透明')
-                .margin({ left: 18 })
+                .margin({ left: 8 })
                 .fontSize(15)
                 .fontSize(15)
                 .fontColor(Color.Gray)
                 .fontColor(Color.Gray)
                 .fontWeight(480)
                 .fontWeight(480)
@@ -756,8 +781,13 @@ export struct SettingPage {
 
 
             // 网格封面大
             // 网格封面大
             Row() {
             Row() {
+              SymbolGlyph($r('sys.symbol.picture'))
+                .fontSize(20)
+                .fontColor([this.themeColor])
+                .alignSelf(ItemAlign.Center)
+                .margin({ left: 15 })
               Text('列表封面大小')
               Text('列表封面大小')
-                .margin({ left: 18 })
+                .margin({ left: 8 })
                 .fontSize(15)
                 .fontSize(15)
                 .fontColor(Color.Gray)
                 .fontColor(Color.Gray)
                 .fontWeight(480)
                 .fontWeight(480)
@@ -784,8 +814,13 @@ export struct SettingPage {
             Line().width('100%').height(0.3).backgroundColor($r('app.color.index_tab_unselected_font_color'))
             Line().width('100%').height(0.3).backgroundColor($r('app.color.index_tab_unselected_font_color'))
             // 封面顶部
             // 封面顶部
             Row() {
             Row() {
+              SymbolGlyph($r('sys.symbol.arrowshape_up'))
+                .fontSize(20)
+                .fontColor([this.themeColor])
+                .alignSelf(ItemAlign.Center)
+                .margin({ left: 15 })
               Text('封面顶部')
               Text('封面顶部')
-                .margin({ left: 18 })
+                .margin({ left: 8 })
                 .fontSize(15)
                 .fontSize(15)
                 .fontColor(Color.Gray)
                 .fontColor(Color.Gray)
                 .fontWeight(480)
                 .fontWeight(480)
@@ -815,8 +850,13 @@ export struct SettingPage {
                 })
                 })
               // 封面顶部
               // 封面顶部
               Row() {
               Row() {
+                SymbolGlyph($r('sys.symbol.shutter_photo'))
+                  .fontSize(20)
+                  .fontColor([this.themeColor])
+                  .alignSelf(ItemAlign.Center)
+                  .margin({ left: 15 })
                 Text('顶部大封面')
                 Text('顶部大封面')
-                  .margin({ left: 18 })
+                  .margin({ left: 8 })
                   .fontSize(15)
                   .fontSize(15)
                   .fontColor(Color.Gray)
                   .fontColor(Color.Gray)
                   .fontWeight(480)
                   .fontWeight(480)
@@ -850,8 +890,13 @@ export struct SettingPage {
 
 
             // 切歌动画效果
             // 切歌动画效果
             Row() {
             Row() {
+              SymbolGlyph($r('sys.symbol.music'))
+                .fontSize(20)
+                .fontColor([this.themeColor])
+                .alignSelf(ItemAlign.Center)
+                .margin({ left: 15 })
               Text('切歌动画效果')
               Text('切歌动画效果')
-                .margin({ left: 18 })
+                .margin({ left: 8 })
                 .fontSize(15)
                 .fontSize(15)
                 .fontColor(Color.Gray)
                 .fontColor(Color.Gray)
                 .fontWeight(480)
                 .fontWeight(480)
@@ -876,8 +921,13 @@ export struct SettingPage {
 
 
             // 圆形播放按钮
             // 圆形播放按钮
             Row() {
             Row() {
+              SymbolGlyph($r('sys.symbol.circle'))
+                .fontSize(20)
+                .fontColor([this.themeColor])
+                .alignSelf(ItemAlign.Center)
+                .margin({ left: 15 })
               Text('圆形播放按钮')
               Text('圆形播放按钮')
-                .margin({ left: 18 })
+                .margin({ left: 8 })
                 .fontSize(15)
                 .fontSize(15)
                 .fontColor(Color.Gray)
                 .fontColor(Color.Gray)
                 .fontWeight(480)
                 .fontWeight(480)
@@ -929,8 +979,13 @@ export struct SettingPage {
             Line().width('100%').height(0.3).backgroundColor($r('app.color.index_tab_unselected_font_color'))
             Line().width('100%').height(0.3).backgroundColor($r('app.color.index_tab_unselected_font_color'))
             // 启动时播放
             // 启动时播放
             Row() {
             Row() {
+              SymbolGlyph($r('sys.symbol.play_circle'))
+                .fontSize(20)
+                .fontColor([this.themeColor])
+                .alignSelf(ItemAlign.Center)
+                .margin({ left: 15 })
               Text('启动时播放')
               Text('启动时播放')
-                .margin({ left: 18 })
+                .margin({ left: 8 })
                 .fontSize(15)
                 .fontSize(15)
                 .fontColor(Color.Gray)
                 .fontColor(Color.Gray)
                 .fontWeight(480)
                 .fontWeight(480)
@@ -954,8 +1009,13 @@ export struct SettingPage {
             Line().width('100%').height(0.3).backgroundColor($r('app.color.index_tab_unselected_font_color'))
             Line().width('100%').height(0.3).backgroundColor($r('app.color.index_tab_unselected_font_color'))
             // 列表是否可左滑
             // 列表是否可左滑
             Row() {
             Row() {
+              SymbolGlyph($r('sys.symbol.indentation_left'))
+                .fontSize(20)
+                .fontColor([this.themeColor])
+                .alignSelf(ItemAlign.Center)
+                .margin({ left: 15 })
               Text('列表是否可左滑')
               Text('列表是否可左滑')
-                .margin({ left: 18 })
+                .margin({ left: 8 })
                 .fontSize(15)
                 .fontSize(15)
                 .fontColor(Color.Gray)
                 .fontColor(Color.Gray)
                 .fontWeight(480)
                 .fontWeight(480)
@@ -978,8 +1038,13 @@ export struct SettingPage {
             Line().width('100%').height(0.3).backgroundColor($r('app.color.index_tab_unselected_font_color'))
             Line().width('100%').height(0.3).backgroundColor($r('app.color.index_tab_unselected_font_color'))
             // 记住播放进度
             // 记住播放进度
             Row() {
             Row() {
+              SymbolGlyph($r('sys.symbol.rectangle_split_3x1'))
+                .fontSize(20)
+                .fontColor([this.themeColor])
+                .alignSelf(ItemAlign.Center)
+                .margin({ left: 15 })
               Text('记住最后一首进度')
               Text('记住最后一首进度')
-                .margin({ left: 18 })
+                .margin({ left: 8 })
                 .fontSize(15)
                 .fontSize(15)
                 .fontColor(Color.Gray)
                 .fontColor(Color.Gray)
                 .fontWeight(480)
                 .fontWeight(480)
@@ -1003,8 +1068,13 @@ export struct SettingPage {
             Line().width('100%').height(0.3).backgroundColor($r('app.color.index_tab_unselected_font_color'))
             Line().width('100%').height(0.3).backgroundColor($r('app.color.index_tab_unselected_font_color'))
             // 记忆播放
             // 记忆播放
             Row() {
             Row() {
+              SymbolGlyph($r('sys.symbol.route_plan'))
+                .fontSize(20)
+                .fontColor([this.themeColor])
+                .alignSelf(ItemAlign.Center)
+                .margin({ left: 15 })
               Text('记忆播放')
               Text('记忆播放')
-                .margin({ left: 18 })
+                .margin({ left: 8 })
                 .fontSize(15)
                 .fontSize(15)
                 .fontColor(Color.Gray)
                 .fontColor(Color.Gray)
                 .fontWeight(480)
                 .fontWeight(480)
@@ -1030,8 +1100,13 @@ export struct SettingPage {
 
 
             // 长按默认倍数
             // 长按默认倍数
             Row() {
             Row() {
+              SymbolGlyph($r('sys.symbol.timer'))
+                .fontSize(20)
+                .fontColor([this.themeColor])
+                .alignSelf(ItemAlign.Center)
+                .margin({ left: 15 })
               Text('长按默认倍数')
               Text('长按默认倍数')
-                .margin({ left: 18 })
+                .margin({ left: 8 })
                 .fontSize(15)
                 .fontSize(15)
                 .fontColor(Color.Gray)
                 .fontColor(Color.Gray)
                 .fontWeight(480)
                 .fontWeight(480)
@@ -1068,8 +1143,13 @@ export struct SettingPage {
             Line().width('100%').height(0.3).backgroundColor($r('app.color.index_tab_unselected_font_color'))
             Line().width('100%').height(0.3).backgroundColor($r('app.color.index_tab_unselected_font_color'))
             // 默认排序模式
             // 默认排序模式
             Row() {
             Row() {
+              SymbolGlyph($r('sys.symbol.text_and_arrow_down'))
+                .fontSize(20)
+                .fontColor([this.themeColor])
+                .alignSelf(ItemAlign.Center)
+                .margin({ left: 15 })
               Text('默认排序模式')
               Text('默认排序模式')
-                .margin({ left: 18 })
+                .margin({ left: 8 })
                 .fontSize(15)
                 .fontSize(15)
                 .fontColor(Color.Gray)
                 .fontColor(Color.Gray)
                 .fontWeight(480)
                 .fontWeight(480)
@@ -1100,8 +1180,13 @@ export struct SettingPage {
             Line().width('100%').height(0.3).backgroundColor($r('app.color.index_tab_unselected_font_color'))
             Line().width('100%').height(0.3).backgroundColor($r('app.color.index_tab_unselected_font_color'))
             // 保存播放模式
             // 保存播放模式
             Row() {
             Row() {
+              SymbolGlyph($r('sys.symbol.clock'))
+                .fontSize(20)
+                .fontColor([this.themeColor])
+                .alignSelf(ItemAlign.Center)
+                .margin({ left: 15 })
               Text('保存播放模式')
               Text('保存播放模式')
-                .margin({ left: 18 })
+                .margin({ left: 8 })
                 .fontSize(15)
                 .fontSize(15)
                 .fontColor(Color.Gray)
                 .fontColor(Color.Gray)
                 .fontWeight(480)
                 .fontWeight(480)
@@ -1124,8 +1209,13 @@ export struct SettingPage {
             Line().width('100%').height(0.3).backgroundColor($r('app.color.index_tab_unselected_font_color'))
             Line().width('100%').height(0.3).backgroundColor($r('app.color.index_tab_unselected_font_color'))
               .visibility(Visibility.None)
               .visibility(Visibility.None)
             Row() {
             Row() {
+              SymbolGlyph($r('sys.symbol.sun_max'))
+                .fontSize(20)
+                .fontColor([this.themeColor])
+                .alignSelf(ItemAlign.Center)
+                .margin({ left: 15 })
               Text('与其他应用同时播放')
               Text('与其他应用同时播放')
-                .margin({ left: 18 })
+                .margin({ left: 8 })
                 .fontSize(15)
                 .fontSize(15)
                 .fontColor(Color.Gray)
                 .fontColor(Color.Gray)
                 .fontWeight(480)
                 .fontWeight(480)
@@ -1149,8 +1239,13 @@ export struct SettingPage {
             Line().width('100%').height(0.3).backgroundColor($r('app.color.index_tab_unselected_font_color'))
             Line().width('100%').height(0.3).backgroundColor($r('app.color.index_tab_unselected_font_color'))
             // 播放背景随音乐封面
             // 播放背景随音乐封面
             Row() {
             Row() {
+              SymbolGlyph($r('sys.symbol.paperplane'))
+                .fontSize(20)
+                .fontColor([this.themeColor])
+                .alignSelf(ItemAlign.Center)
+                .margin({ left: 15 })
               Text('播放背景随音乐封面')
               Text('播放背景随音乐封面')
-                .margin({ left: 18 })
+                .margin({ left: 8 })
                 .fontSize(15)
                 .fontSize(15)
                 .fontColor(Color.Gray)
                 .fontColor(Color.Gray)
                 .fontWeight(480)
                 .fontWeight(480)
@@ -1236,8 +1331,13 @@ export struct SettingPage {
 
 
 
 
       Row() {
       Row() {
+        SymbolGlyph($r('sys.symbol.text_clipboard'))
+          .fontSize(20)
+          .fontColor([this.themeColor])
+          .alignSelf(ItemAlign.Center)
+          .margin({ left: 15 })
         Text('显示分类导航')
         Text('显示分类导航')
-          .margin({ left: 18 })
+          .margin({ left: 8 })
           .fontSize(15)
           .fontSize(15)
           .fontColor(Color.Gray)
           .fontColor(Color.Gray)
           .fontWeight(480)
           .fontWeight(480)
@@ -1261,8 +1361,13 @@ export struct SettingPage {
       Line().width('100%').height(0.3).backgroundColor($r('app.color.index_tab_unselected_font_color'))
       Line().width('100%').height(0.3).backgroundColor($r('app.color.index_tab_unselected_font_color'))
 
 
       Row() {
       Row() {
+        SymbolGlyph($r('sys.symbol.label'))
+          .fontSize(20)
+          .fontColor([this.themeColor])
+          .alignSelf(ItemAlign.Center)
+          .margin({ left: 15 })
         Text('显示播放全部')
         Text('显示播放全部')
-          .margin({ left: 18 })
+          .margin({ left: 8 })
           .fontSize(15)
           .fontSize(15)
           .fontColor(Color.Gray)
           .fontColor(Color.Gray)
           .fontWeight(480)
           .fontWeight(480)
@@ -1286,8 +1391,13 @@ export struct SettingPage {
       Line().width('100%').height(0.3).backgroundColor($r('app.color.index_tab_unselected_font_color'))
       Line().width('100%').height(0.3).backgroundColor($r('app.color.index_tab_unselected_font_color'))
       // 显示私密音频
       // 显示私密音频
       Row() {
       Row() {
+        SymbolGlyph($r('sys.symbol.lock'))
+          .fontSize(20)
+          .fontColor([this.themeColor])
+          .alignSelf(ItemAlign.Center)
+          .margin({ left: 15 })
         Text('显示私密音频')
         Text('显示私密音频')
-          .margin({ left: 18 })
+          .margin({ left: 8 })
           .fontSize(15)
           .fontSize(15)
           .fontColor(Color.Gray)
           .fontColor(Color.Gray)
           .fontWeight(480)
           .fontWeight(480)
@@ -1311,8 +1421,13 @@ export struct SettingPage {
       Line().width('100%').height(0.3).backgroundColor($r('app.color.index_tab_unselected_font_color'))
       Line().width('100%').height(0.3).backgroundColor($r('app.color.index_tab_unselected_font_color'))
       // 播放页单行歌词
       // 播放页单行歌词
       Row() {
       Row() {
+        SymbolGlyph($r('sys.symbol.close_sidebar'))
+          .fontSize(20)
+          .fontColor([this.themeColor])
+          .alignSelf(ItemAlign.Center)
+          .margin({ left: 15 })
         Text('播放页单行歌词')
         Text('播放页单行歌词')
-          .margin({ left: 18 })
+          .margin({ left: 8 })
           .fontSize(15)
           .fontSize(15)
           .fontColor(Color.Gray)
           .fontColor(Color.Gray)
           .fontWeight(480)
           .fontWeight(480)
@@ -1337,8 +1452,13 @@ export struct SettingPage {
 
 
       // 二级菜单新风格
       // 二级菜单新风格
       Row() {
       Row() {
+        SymbolGlyph($r('sys.symbol.satellite_map'))
+          .fontSize(20)
+          .fontColor([this.themeColor])
+          .alignSelf(ItemAlign.Center)
+          .margin({ left: 15 })
         Text('二级菜单新风格')
         Text('二级菜单新风格')
-          .margin({ left: 18 })
+          .margin({ left: 8 })
           .fontSize(15)
           .fontSize(15)
           .fontColor(Color.Gray)
           .fontColor(Color.Gray)
           .fontWeight(480)
           .fontWeight(480)
@@ -1362,8 +1482,13 @@ export struct SettingPage {
       Line().width('100%').height(0.3).backgroundColor($r('app.color.index_tab_unselected_font_color'))
       Line().width('100%').height(0.3).backgroundColor($r('app.color.index_tab_unselected_font_color'))
       // 播放页返回键
       // 播放页返回键
       Row() {
       Row() {
+        SymbolGlyph($r('sys.symbol.arrow_left'))
+          .fontSize(20)
+          .fontColor([this.themeColor])
+          .alignSelf(ItemAlign.Center)
+          .margin({ left: 15 })
         Text('显示播放页返回键')
         Text('显示播放页返回键')
-          .margin({ left: 18 })
+          .margin({ left: 8 })
           .fontSize(15)
           .fontSize(15)
           .fontColor(Color.Gray)
           .fontColor(Color.Gray)
           .fontWeight(480)
           .fontWeight(480)
@@ -1385,35 +1510,45 @@ export struct SettingPage {
       .clickEffect({ level: ClickEffectLevel.HEAVY })
       .clickEffect({ level: ClickEffectLevel.HEAVY })
 
 
       Line().width('100%').height(0.3).backgroundColor($r('app.color.index_tab_unselected_font_color'))
       Line().width('100%').height(0.3).backgroundColor($r('app.color.index_tab_unselected_font_color'))
-      // 自动隐藏进度条两侧的按钮
-      Row() {
-        Text('自动隐藏进度条两侧的按钮')
-          .margin({ left: 18 })
-          .fontSize(15)
-          .fontColor(Color.Gray)
-          .fontWeight(480)
-          .layoutWeight(1)
-        Toggle({ type: ToggleType.Switch, isOn: this.is_auto_hide_progress })
-          .selectedColor(this.themeColor)
-          .switchPointColor(Color.White)
-          .margin({ right: 18 })
-          .clickEffect({level:ClickEffectLevel.LIGHT, scale: 0.5})
-          .onChange((checked: boolean) => {
-            this.is_auto_hide_progress = checked;
-            PreferencesUtil.put(SettingPage.IS_AUTO_HIDE_PROGRESS, this.is_auto_hide_progress)
-            this.sendChangeEvent()
-          })
-          .width(50)
-          .height(30);
-      }
-      .height(55)
-      .clickEffect({ level: ClickEffectLevel.HEAVY })
-
-      Line().width('100%').height(0.3).backgroundColor($r('app.color.index_tab_unselected_font_color'))
+      // // 自动隐藏进度条两侧的按钮
+      // Row() {
+      //   SymbolGlyph($r('sys.symbol.sun_max'))
+      //     .fontSize(20)
+      //     .fontColor([this.themeColor])
+      //     .alignSelf(ItemAlign.Center)
+      //     .margin({ left: 15 })
+      //   Text('自动隐藏进度条两侧的按钮')
+      //     .margin({ left: 8 })
+      //     .fontSize(15)
+      //     .fontColor(Color.Gray)
+      //     .fontWeight(480)
+      //     .layoutWeight(1)
+      //   Toggle({ type: ToggleType.Switch, isOn: this.is_auto_hide_progress })
+      //     .selectedColor(this.themeColor)
+      //     .switchPointColor(Color.White)
+      //     .margin({ right: 18 })
+      //     .clickEffect({level:ClickEffectLevel.LIGHT, scale: 0.5})
+      //     .onChange((checked: boolean) => {
+      //       this.is_auto_hide_progress = checked;
+      //       PreferencesUtil.put(SettingPage.IS_AUTO_HIDE_PROGRESS, this.is_auto_hide_progress)
+      //       this.sendChangeEvent()
+      //     })
+      //     .width(50)
+      //     .height(30);
+      // }
+      // .height(55)
+      // .clickEffect({ level: ClickEffectLevel.HEAVY })
+      //
+      // Line().width('100%').height(0.3).backgroundColor($r('app.color.index_tab_unselected_font_color'))
       // 显示我的收藏
       // 显示我的收藏
       Row() {
       Row() {
+        SymbolGlyph($r('sys.symbol.heart'))
+          .fontSize(20)
+          .fontColor([this.themeColor])
+          .alignSelf(ItemAlign.Center)
+          .margin({ left: 15 })
         Text('显示我的收藏')
         Text('显示我的收藏')
-          .margin({ left: 18 })
+          .margin({ left: 8 })
           .fontSize(15)
           .fontSize(15)
           .fontColor(Color.Gray)
           .fontColor(Color.Gray)
           .fontWeight(480)
           .fontWeight(480)
@@ -1437,8 +1572,13 @@ export struct SettingPage {
       Line().width('100%').height(0.3).backgroundColor($r('app.color.index_tab_unselected_font_color'))
       Line().width('100%').height(0.3).backgroundColor($r('app.color.index_tab_unselected_font_color'))
       // 显示最近播放
       // 显示最近播放
       Row() {
       Row() {
+        SymbolGlyph($r('sys.symbol.clock'))
+          .fontSize(20)
+          .fontColor([this.themeColor])
+          .alignSelf(ItemAlign.Center)
+          .margin({ left: 15 })
         Text('显示最近播放')
         Text('显示最近播放')
-          .margin({ left: 18 })
+          .margin({ left: 8 })
           .fontSize(15)
           .fontSize(15)
           .fontColor(Color.Gray)
           .fontColor(Color.Gray)
           .fontWeight(480)
           .fontWeight(480)
@@ -1479,8 +1619,13 @@ export struct SettingPage {
     Button({ type: ButtonType.Capsule, stateEffect: true }) {
     Button({ type: ButtonType.Capsule, stateEffect: true }) {
       Column() {
       Column() {
         Row() {
         Row() {
+          SymbolGlyph($r('sys.symbol.hand_draw'))
+            .fontSize(20)
+            .fontColor([this.themeColor])
+            .alignSelf(ItemAlign.Center)
+            .margin({ left: 15 })
           Text('设置教程:')
           Text('设置教程:')
-            .margin({ left: 18 })
+            .margin({ left: 8 })
             .fontSize(15)
             .fontSize(15)
             .fontColor(Color.Gray)
             .fontColor(Color.Gray)
             .fontWeight(480)
             .fontWeight(480)
@@ -1532,8 +1677,13 @@ export struct SettingPage {
       // 歌词API
       // 歌词API
       Button({ type: ButtonType.Normal, stateEffect: true }) {
       Button({ type: ButtonType.Normal, stateEffect: true }) {
         Row() {
         Row() {
+          SymbolGlyph($r('sys.symbol.lightbulb'))
+            .fontSize(20)
+            .fontColor([this.themeColor])
+            .alignSelf(ItemAlign.Center)
+            .margin({ left: 15 })
           Text('歌词:')
           Text('歌词:')
-            .margin({ left: 18, right: 6 })
+            .margin({ left: 8, right: 6 })
             .fontSize(15)
             .fontSize(15)
             .fontColor(Color.Gray)
             .fontColor(Color.Gray)
           Text(this.lyricApiUrl)
           Text(this.lyricApiUrl)
@@ -1561,8 +1711,13 @@ export struct SettingPage {
       // 封面API
       // 封面API
       Button({ type: ButtonType.Normal, stateEffect: true }) {
       Button({ type: ButtonType.Normal, stateEffect: true }) {
         Row() {
         Row() {
+          SymbolGlyph($r('sys.symbol.picture'))
+            .fontSize(20)
+            .fontColor([this.themeColor])
+            .alignSelf(ItemAlign.Center)
+            .margin({ left: 15 })
           Text('封面:')
           Text('封面:')
-            .margin({ left: 18, right: 6 })
+            .margin({ left: 8, right: 6 })
             .fontSize(15)
             .fontSize(15)
             .fontColor(Color.Gray)
             .fontColor(Color.Gray)
           Text(this.coverApiUrl)
           Text(this.coverApiUrl)

+ 1 - 0
entry/src/main/ets/pages/UserCenter.ets

@@ -560,6 +560,7 @@ export struct UserCenter {
                 PreferencesUtil.putSync('subscriptionEndDate', '');
                 PreferencesUtil.putSync('subscriptionEndDate', '');
                 PreferencesUtil.putSync('hasActiveSubscription', false);
                 PreferencesUtil.putSync('hasActiveSubscription', false);
                 PreferencesUtil.putSync('userToken', '');
                 PreferencesUtil.putSync('userToken', '');
+                PreferencesUtil.putSync('isForever', false);
                 emitter.emit({ eventId: 1001 }, {})
                 emitter.emit({ eventId: 1001 }, {})
                 ToastUtil.showToast('已退出登录')
                 ToastUtil.showToast('已退出登录')
               })
               })

+ 101 - 40
entry/src/main/ets/view/LocalMusic.ets

@@ -5500,37 +5500,25 @@ export struct LocalMusic {
             Image(StrUtil.isEmpty(currentItem.pixelMapPath) ? $r('app.media.music_red') :
             Image(StrUtil.isEmpty(currentItem.pixelMapPath) ? $r('app.media.music_red') :
             currentItem.pixelMapPath)
             currentItem.pixelMapPath)
               .fillColor(this.themeColor)
               .fillColor(this.themeColor)
-              .height(33)
-              .width(33)
-              .borderRadius('100%')
-              .clip(true)
+              .height(80)
+              .width(80)
+              .borderRadius(10)
               .opacity(this.opacityItem)// 绑定透明度
               .opacity(this.opacityItem)// 绑定透明度
-              .margin({ left: 20 })
+              .margin({ left: 22 })
           }
           }
-          .width('15%')
+
 
 
           Column() {
           Column() {
             Column() {
             Column() {
               Text(currentItem.name)
               Text(currentItem.name)
-                .fontSize(14)
+                .fontSize(16)
                 .maxLines(1)
                 .maxLines(1)
                 .animation({
                 .animation({
                   duration: 555,
                   duration: 555,
                   curve: 'Linear',
                   curve: 'Linear',
                 })
                 })
-
                 .fontColor($r('app.color.text_color'))
                 .fontColor($r('app.color.text_color'))
-                .margin({ left: 10 })
-              Row() {
-                Text(StrUtil.isEmpty(currentItem.artist) ? currentItem.cTime :
-                  currentItem.artist + '  ' + currentItem?.album)
-                  .fontSize(11)
-                  .padding({ top: 8 })
-                  .fontColor($r('app.color.text_color'))
-                  .margin({ left: 10 })
-
-              }
-
+                .margin({ left: 15 })
             }
             }
             .height('100%')
             .height('100%')
             .width('100%')
             .width('100%')
@@ -5542,12 +5530,12 @@ export struct LocalMusic {
 
 
         }
         }
         .width('100%')
         .width('100%')
-        .height(58)
+        .height(90)
 
 
         .justifyContent(FlexAlign.SpaceBetween)
         .justifyContent(FlexAlign.SpaceBetween)
 
 
         Row() {
         Row() {
-          Text('歌手名:')
+          Text('艺术家:')
             .fontSize(14)
             .fontSize(14)
             .fontColor($r('app.color.text_color'))
             .fontColor($r('app.color.text_color'))
             .margin({ left: 22 })
             .margin({ left: 22 })
@@ -5624,6 +5612,66 @@ export struct LocalMusic {
         .margin({ top: 10, bottom: 10 })
         .margin({ top: 10, bottom: 10 })
         .justifyContent(FlexAlign.Start)
         .justifyContent(FlexAlign.Start)
 
 
+        Row() {
+          Text('位深:')
+            .fontSize(14)
+            .fontColor($r('app.color.text_color'))
+            .margin({ left: 22 })
+          Text(`${currentItem.bits_per_raw_sample} bits`)
+            .fontSize(14)
+            .margin({ left: 10 })
+            .fontColor($r('app.color.text_color'))
+            .layoutWeight(1)
+        }
+        .width('100%')
+        .margin({ top: 10, bottom: 10 })
+        .justifyContent(FlexAlign.Start)
+
+        Row() {
+          Text('声道:')
+            .fontSize(14)
+            .fontColor($r('app.color.text_color'))
+            .margin({ left: 22 })
+          Text(`${currentItem.channels}`)
+            .fontSize(14)
+            .margin({ left: 10 })
+            .fontColor($r('app.color.text_color'))
+            .layoutWeight(1)
+        }
+        .width('100%')
+        .margin({ top: 10, bottom: 10 })
+        .justifyContent(FlexAlign.Start)
+
+        Row() {
+          Text('声道布局:')
+            .fontSize(14)
+            .fontColor($r('app.color.text_color'))
+            .margin({ left: 22 })
+          Text(`${currentItem.channel_layout}`)
+            .fontSize(14)
+            .margin({ left: 10 })
+            .fontColor($r('app.color.text_color'))
+            .layoutWeight(1)
+        }
+        .width('100%')
+        .margin({ top: 10, bottom: 10 })
+        .justifyContent(FlexAlign.Start)
+
+        Row() {
+          Text('起始播放点:')
+            .fontSize(14)
+            .fontColor($r('app.color.text_color'))
+            .margin({ left: 22 })
+          Text(`${currentItem.start_time}`)
+            .fontSize(14)
+            .margin({ left: 10 })
+            .fontColor($r('app.color.text_color'))
+            .layoutWeight(1)
+        }
+        .width('100%')
+        .margin({ top: 10, bottom: 10 })
+        .justifyContent(FlexAlign.Start)
+
         Row() {
         Row() {
           Text('风格:')
           Text('风格:')
             .fontSize(14)
             .fontSize(14)
@@ -6416,6 +6464,10 @@ export struct LocalMusic {
   }
   }
 
 
   //是否是Pura X外屏,或者小屏幕,手机横屏
   //是否是Pura X外屏,或者小屏幕,手机横屏
+  /**
+   * 是否是Pura X外屏,或者小屏幕,手机横屏
+   * @returns
+   */
   isCoverOpacity() {
   isCoverOpacity() {
     if (this.isPuraWP()) {
     if (this.isPuraWP()) {
       return true
       return true
@@ -6443,6 +6495,9 @@ export struct LocalMusic {
     LogUtil.info('hicar isPhoneLan height= ' + this.windowHeight);
     LogUtil.info('hicar isPhoneLan height= ' + this.windowHeight);
     LogUtil.info(`twocold  hicarWindow size: ${this.windowWidth}x${this.windowHeight}, this.isHiCarStatus: ${this.isHiCarStatus}`);
     LogUtil.info(`twocold  hicarWindow size: ${this.windowWidth}x${this.windowHeight}, this.isHiCarStatus: ${this.isHiCarStatus}`);
     LogUtil.info(`twocold  hicar Window size: ${this.windowWidth}x${this.windowHeight}, isHiCarSmall: ${this.isHiCarSmall()}`);
     LogUtil.info(`twocold  hicar Window size: ${this.windowWidth}x${this.windowHeight}, isHiCarSmall: ${this.isHiCarSmall()}`);
+    if (this.isHiCarKuanBianPing()) {
+      return true
+    }
     if (this.isHiCar()) {
     if (this.isHiCar()) {
       return false
       return false
     }
     }
@@ -6460,19 +6515,22 @@ export struct LocalMusic {
 
 
   //是不是1920x720的hicar的屏幕分辨率
   //是不是1920x720的hicar的屏幕分辨率
   isHiCarKuanBianPing(){
   isHiCarKuanBianPing(){
+    if(!this.isHiCar()){
+      return false
+    }
     const hiCarAspectRatios: HiCarAspectRatio[] = [
     const hiCarAspectRatios: HiCarAspectRatio[] = [
       { ratio: 1920 / 720, name: "1920x720" },
       { ratio: 1920 / 720, name: "1920x720" },
     ];
     ];
     const currentRatio: number = this.windowWidth / this.windowHeight;
     const currentRatio: number = this.windowWidth / this.windowHeight;
     const RATIO_TOLERANCE: number = 0.18; // 宽高比容差
     const RATIO_TOLERANCE: number = 0.18; // 宽高比容差
-    LogUtil.info('twocold currentRatio = ' + currentRatio)
+    LogUtil.info('twocold isHiCarKuanBianPing currentRatio = ' + currentRatio)
 
 
     for (const hiCarRatio of hiCarAspectRatios) {
     for (const hiCarRatio of hiCarAspectRatios) {
-      LogUtil.info('twocold hiCarRatio= ' + hiCarRatio.ratio)
-      LogUtil.info('twocold Math.abs(currentRatio - hiCarRatio.ratio)= ' + Math.abs(currentRatio - hiCarRatio.ratio))
+      LogUtil.info('twocold isHiCarKuanBianPing hiCarRatio= ' + hiCarRatio.ratio)
+      LogUtil.info('twocold isHiCarKuanBianPing Math.abs(currentRatio - hiCarRatio.ratio)= ' + Math.abs(currentRatio - hiCarRatio.ratio))
       if (Math.abs(currentRatio - hiCarRatio.ratio) <= RATIO_TOLERANCE) {
       if (Math.abs(currentRatio - hiCarRatio.ratio) <= RATIO_TOLERANCE) {
         // LogUtil.info(`HiCar detected: ${hiCarRatio.name}, actual: ${this.windowWidth}x${this.windowHeight}`);
         // LogUtil.info(`HiCar detected: ${hiCarRatio.name}, actual: ${this.windowWidth}x${this.windowHeight}`);
-        return true&&this.isHiCar();
+        return true;
       }
       }
     }
     }
 
 
@@ -6482,25 +6540,27 @@ export struct LocalMusic {
 
 
   //是不是hicar的屏幕分辨率
   //是不是hicar的屏幕分辨率
   isHiCarSmall() {
   isHiCarSmall() {
-
+    if(!this.isHiCar()){
+      return false
+    }
     if(this.windowWidth>1800&&this.windowHeight>=1200)//大屏幕可以Grid
     if(this.windowWidth>1800&&this.windowHeight>=1200)//大屏幕可以Grid
       return false
       return false
 
 
     const hiCarAspectRatios: HiCarAspectRatio[] = [
     const hiCarAspectRatios: HiCarAspectRatio[] = [
       { ratio: 800 / 480, name: "800x480" },
       { ratio: 800 / 480, name: "800x480" },
       { ratio: 1280 / 720, name: "1280x720" },
       { ratio: 1280 / 720, name: "1280x720" },
-      { ratio: 1920 / 720, name: "1920x720" },
     ];
     ];
     const currentRatio: number = this.windowWidth / this.windowHeight;
     const currentRatio: number = this.windowWidth / this.windowHeight;
     const RATIO_TOLERANCE: number = 0.18; // 宽高比容差
     const RATIO_TOLERANCE: number = 0.18; // 宽高比容差
-    LogUtil.info('twocold currentRatio = ' + currentRatio)
+    LogUtil.info('twocold isHiCarSmall currentRatio = ' + currentRatio)
 
 
     for (const hiCarRatio of hiCarAspectRatios) {
     for (const hiCarRatio of hiCarAspectRatios) {
-      LogUtil.info('twocold hiCarRatio= ' + hiCarRatio.ratio)
-      LogUtil.info('twocold Math.abs(currentRatio - hiCarRatio.ratio)= ' + Math.abs(currentRatio - hiCarRatio.ratio))
+      LogUtil.info('twocold isHiCarSmall hiCarRatio= ' + hiCarRatio.ratio)
+      LogUtil.info('twocold isHiCarSmall Math.abs(currentRatio - hiCarRatio.ratio)= ' + Math.abs(currentRatio - hiCarRatio.ratio))
+      LogUtil.info('twocold isHiCarSmall isHiCarStatus= ' + this.isHiCarStatus);
       if (Math.abs(currentRatio - hiCarRatio.ratio) <= RATIO_TOLERANCE) {
       if (Math.abs(currentRatio - hiCarRatio.ratio) <= RATIO_TOLERANCE) {
         // LogUtil.info(`HiCar detected: ${hiCarRatio.name}, actual: ${this.windowWidth}x${this.windowHeight}`);
         // LogUtil.info(`HiCar detected: ${hiCarRatio.name}, actual: ${this.windowWidth}x${this.windowHeight}`);
-        return true&&this.isHiCarStatus;
+        return true;
       }
       }
     }
     }
 
 
@@ -7472,9 +7532,10 @@ export struct LocalMusic {
 
 
         if (this.isPhoneLan()) {
         if (this.isPhoneLan()) {
           Column() {
           Column() {
-            this.playCenterView()
+            this.playProgressView()
+            // this.playCenterView()
           }
           }
-          .margin({ bottom: 20, right: this.currentLyricAlignMode == 0 ? 0 : 30 })
+          .margin({ bottom: 30, right: this.currentLyricAlignMode == 0 ? 0 : 30 })
         }
         }
       }
       }
       .position({
       .position({
@@ -7662,7 +7723,7 @@ export struct LocalMusic {
             })
             })
 
 
         }
         }
-        .padding({ right: 7,left:28 })
+        .padding({ right: 7,left:14 })
         Row(){
         Row(){
           Text(this.currentTime)
           Text(this.currentTime)
             .fontSize(10)
             .fontSize(10)
@@ -7674,7 +7735,7 @@ export struct LocalMusic {
             .fontColor(Color.White)
             .fontColor(Color.White)
         }
         }
         .justifyContent(FlexAlign.Start)
         .justifyContent(FlexAlign.Start)
-        .padding({ right: 18,left:35 })
+        .padding({ right: 18,left:36 })
       }
       }
 
 
 
 
@@ -7839,7 +7900,7 @@ export struct LocalMusic {
         curve: 'ease-in-out' // 可选动画曲线
         curve: 'ease-in-out' // 可选动画曲线
       })
       })
       .backgroundColor(Color.Transparent)
       .backgroundColor(Color.Transparent)
-      .margin({ left: 20, right: 10 })
+      .margin({  right: 10 })
       .clickEffect({ level: ClickEffectLevel.LIGHT, scale: 0.5 })
       .clickEffect({ level: ClickEffectLevel.LIGHT, scale: 0.5 })
       .onClick(async () => {
       .onClick(async () => {
         this.setLoopMode()
         this.setLoopMode()
@@ -8030,7 +8091,7 @@ export struct LocalMusic {
             this.musicNameInfo(false)
             this.musicNameInfo(false)
           } else {
           } else {
             Image(StrUtil.isEmpty(this.cover) ? this.imageLabel : this.cover)
             Image(StrUtil.isEmpty(this.cover) ? this.imageLabel : this.cover)
-              .height(this.isHiCarSmall()?(this.isHiCarKuanBianPing()?140:220):(this.isCoverOpacity() ? 250 : this.isCoverRectangle ? 320 : 162))
+              .height(this.isHiCarSmall()?(this.isHiCarKuanBianPing()?140:px2vp(this.windowHeight)*0.38):(this.isCoverOpacity() ? 250 : this.isCoverRectangle ? 320 : 162))
               .objectFit(this.isCoverRectangle ? ImageFit.Contain : ImageFit.Auto)
               .objectFit(this.isCoverRectangle ? ImageFit.Contain : ImageFit.Auto)
               .alt(this.imageLabel)
               .alt(this.imageLabel)
               .margin({ right: 20, left: 20 })
               .margin({ right: 20, left: 20 })
@@ -8112,10 +8173,10 @@ export struct LocalMusic {
       }
       }
       if (this.isPhoneLan()) {
       if (this.isPhoneLan()) {
         Column() {
         Column() {
-
-          this.playProgressView()
+          this.playCenterView()
+          // this.playProgressView()
         }
         }
-        .position({ left: 40, bottom: 48 })
+        .position({ left: 28, bottom: 38 })
 
 
       } else {
       } else {
         this.BottomControl()
         this.BottomControl()

+ 7 - 0
entry/src/main/ets/viewmodel/VideoItem.ets

@@ -57,6 +57,13 @@ export class VideoItem  {
   genre?:string//风格
   genre?:string//风格
   track?:string//音轨号
   track?:string//音轨号
 
 
+  bits_per_raw_sample?:string//位深
+  channels?:string//声道数
+  channel_layout?:string//声道布局:stereo为标准立体声(左+右)
+  start_time?:string//起始时间:
+
+
+
   constructor(name: string, id: string, filePath: string, type:number,videoSize:number,cTime: string,pixelMap?: image.PixelMap,
   constructor(name: string, id: string, filePath: string, type:number,videoSize:number,cTime: string,pixelMap?: image.PixelMap,
     size?: string,pixelMapPath?: string,artist?: string,album?: string,fileName?: string, lastPlayed?:Date) {
     size?: string,pixelMapPath?: string,artist?: string,album?: string,fileName?: string, lastPlayed?:Date) {
     this.name = name;
     this.name = name;