Merge #789 into sdk602patch0626 from refs/changes/789/head 805/target/1
author罗正 <1732036298@qq.com>
Tue, 27 Aug 2024 10:11:48 +0000 (10:11 +0000)
committersnickersun@163.com <accounts_62b90f7fcf51ade33b6f628e@mail.teambition.com>
Tue, 27 Aug 2024 10:11:48 +0000 (10:11 +0000)
Code review from 罗正

* refs/changes/789/head: (21 commits squashed)

  - 更改下拉蓝牙图标
    添加睡眠图标更新函数,还未适配接口等待联调

  - 1.修复applist心率图标大小不一致问题,修复卡片管理图片为透明背景
    2.将applist中勿扰,卡片管理,更换表盘,省电模式移动到setting

  - Merge branch &#39;sdk602patch0626&#39; of https://codeup.aliyun.com/64191456b9581d62e8f81ac0/FD230 into sdk602patch0626

  - 添加按键拦截功能(目前只在function键双击添加),若intercept_slice_ids数组中有给定的VIEWID则不触发该事件

  - 修复设置视图死机问题

  - 语言界面第一次启动逻辑修改

  - 录音界面修改

  - 解决指南针Slice内存泄漏

  - 修复勿扰模式Slice图标消失问题

  - 修复a2dp连接时候音乐播放器界面刷新死机问题

  - Merge branch &#39;sdk602patch0626&#39; of https://codeup.aliyun.com/64191456b9581d62e8f81ac0/FD230 into sdk602patch0626

  - Merge branch &#39;sdk602patch0626&#39; of https://codeup.aliyun.com/64191456b9581d62e8f81ac0/FD230 into sdk602patch0626

  - ConfigModel中取消保存系统音量和通话音量

  - 解决点击4G开关点击死机问题

  - Merge branch &#39;sdk602patch0626&#39; of https://codeup.aliyun.com/64191456b9581d62e8f81ac0/FD230 into sdk602patch0626

  - 1.下拉菜单添加更新蓝牙,4G图标状态函数
    2.开启和关闭蓝牙和4G和勿扰操作类似,都为未开启进入视图开启,关闭则可直接快捷关闭

  - Merge branch &#39;sdk602patch0626&#39; of https://codeup.aliyun.com/64191456b9581d62e8f81ac0/FD230 into sdk602patch0626

  - 解决在产测界面拦截不了按键双击问题

  - Merge branch &#39;sdk602patch0626&#39; of https://codeup.aliyun.com/64191456b9581d62e8f81ac0/FD230 into sdk602patch0626

  - 实现开关机录音保存显示录音时间

  - Merge branch &#39;sdk602patch0626&#39; of https://codeup.aliyun.com/64191456b9581d62e8f81ac0/FD230 into sdk602patch0626

Signed-off-by: 罗正 <1732036298@qq.com>
Reviewed-by: snickersun@163.com <accounts_62b90f7fcf51ade33b6f628e@mail.teambition.com>
Merged-by: snickersun@163.com <accounts_62b90f7fcf51ade33b6f628e@mail.teambition.com>
link: https://codeup.aliyun.com/64191456b9581d62e8f81ac0/FD230/change/789
35 files changed:
code/sdk/application/wearable/fd230app/nativelauncher/include/UiConfig.h
code/sdk/application/wearable/fd230app/nativeui/compass/src/MainCompassView.cpp
code/sdk/application/wearable/fd230app/nativeui/dnotdisturb/src/DnotDisturbView.cpp
code/sdk/application/wearable/fd230app/nativeui/main/include/dropdown/DropDownCardPage1.h
code/sdk/application/wearable/fd230app/nativeui/main/src/VolumeSettingPresenter.cpp
code/sdk/application/wearable/fd230app/nativeui/main/src/dropdown/DropDownCardPage1.cpp
code/sdk/application/wearable/fd230app/nativeui/networkandcall/src/NetworkAndCallPresenter.cpp
code/sdk/application/wearable/fd230app/nativeui/player/src/PlayersPresenter.cpp
code/sdk/application/wearable/fd230app/nativeui/rebootandshutdown/src/RebootAndShutdownModel.cpp
code/sdk/application/wearable/fd230app/nativeui/record/include/RecordDeleteView.h
code/sdk/application/wearable/fd230app/nativeui/record/include/RecordListView.h
code/sdk/application/wearable/fd230app/nativeui/record/include/RecordingModel.h
code/sdk/application/wearable/fd230app/nativeui/record/include/RecordingPresenter.h
code/sdk/application/wearable/fd230app/nativeui/record/include/RecordingView.h
code/sdk/application/wearable/fd230app/nativeui/record/src/RecordDeleteView.cpp
code/sdk/application/wearable/fd230app/nativeui/record/src/RecordGoingView.cpp
code/sdk/application/wearable/fd230app/nativeui/record/src/RecordListView.cpp
code/sdk/application/wearable/fd230app/nativeui/record/src/RecordingListitemView.cpp
code/sdk/application/wearable/fd230app/nativeui/record/src/RecordingModel.cpp
code/sdk/application/wearable/fd230app/nativeui/record/src/RecordingPlayerView.cpp
code/sdk/application/wearable/fd230app/nativeui/record/src/RecordingPresenter.cpp
code/sdk/application/wearable/fd230app/nativeui/record/src/RecordingView.cpp
code/sdk/application/wearable/fd230app/nativeui/record/src/RecordingVolumeSettingView.cpp
code/sdk/application/wearable/fd230app/nativeui/soundandvibration/include/SoundAndVibrationVolumeSettingC.h
code/sdk/application/wearable/fd230app/nativeui/soundandvibration/src/CallVolumeView.cpp
code/sdk/application/wearable/fd230app/nativeui/soundandvibration/src/SoundAndVibrationVolumeSettingPresenter.cpp
code/sdk/application/wearable/fd230app/nativeui/soundandvibration/src/SystemVolumeView.cpp
code/sdk/application/wearable/service/ble_service/blemoder/bletest.cpp
code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/record/animator1.bin [deleted file]
code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/record/animator2.bin [deleted file]
code/sdk/drivers/peripheral/config/include/ConfigModel.h
code/sdk/drivers/peripheral/config/include/ConfigModelC.h
code/sdk/drivers/peripheral/config/src/ConfigModel.cpp
code/sdk/drivers/peripheral/utils/custom_utils.c
code/sdk/drivers/peripheral/utils/custom_utils.h

index c6e3a74..e5a5847 100644 (file)
@@ -235,8 +235,6 @@ namespace OHOS
     static constexpr const char *PNG_ALIPAY_YSE_ICON = APP_RES_PATH "/alipay/yes.bin";
     static constexpr const char *PNG_ALIPAY_NO_ICON = APP_RES_PATH "/alipay/no.bin";
     /* ----------------------------------- 录音 ----------------------------------- */
-    static constexpr const char *PNG_ANIMATOR1_IMAGE = APP_RES_PATH "/record/animator1.bin";
-    static constexpr const char *PNG_ANIMATOR2_IMAGE = APP_RES_PATH "/record/animator2.bin";
     static constexpr const char *PNG_RECORD1_IMAGE = APP_RES_PATH "/record/RECORD1.bin";
     static constexpr const char *PNG_RECORD2_IMAGE = APP_RES_PATH "/record/RECORD2.bin";
     static constexpr const char *PNG_RECORD3_IMAGE = APP_RES_PATH "/record/RECORD3.bin";
index fc7fe9b..20709ab 100644 (file)
@@ -2,7 +2,7 @@
  * @Author: luozheng 1732036298@qq.com
  * @Date: 2024-01-29 15:37:44
  * @LastEditors: luozheng 1732036298@qq.com
- * @LastEditTime: 2024-06-27 11:06:05
+ * @LastEditTime: 2024-08-26 14:28:20
  * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/compass/src/MainCompassView.cpp
  */
 
index a0cd8b8..7dea6f5 100644 (file)
@@ -2,7 +2,7 @@
  * @Author: luozheng 1732036298@qq.com
  * @Date: 2024-04-10 11:58:21
  * @LastEditors: luozheng 1732036298@qq.com
- * @LastEditTime: 2024-08-10 10:59:45
+ * @LastEditTime: 2024-08-26 17:39:08
  * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/dnotdisturb/src/DnotDisturbView.cpp
  */
 #include "dnotdisturb/include/DnotDisturbView.h"
index c72d98d..e569d97 100644 (file)
@@ -2,7 +2,7 @@
  * @Author: luozheng 1732036298@qq.com
  * @Date: 2024-08-21 11:54:00
  * @LastEditors: luozheng 1732036298@qq.com
- * @LastEditTime: 2024-08-24 10:15:32
+ * @LastEditTime: 2024-08-26 20:21:33
  * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/main/include/dropdown/DropDownCardPage1.h
  */
 #ifndef __DROPDOWN_CARD_PAGE1_H__
@@ -49,6 +49,8 @@ namespace OHOS
         void ClearAll();
 
         UIToggleButton *GetDropDownCardPage1_ToggleButton(int index);
+        void UpdateBTState(bool state);
+        void Updat4GState(bool state);
         void UpdateDnotdisturbState(bool state);
         void UpdateSleepModelState(bool state);
 
index 1e067da..da0b478 100644 (file)
@@ -120,12 +120,10 @@ void VolumeSliderEventListener::ChangeVolume(VolumeChangeStatus status)
 
     if (playerCoefficients == VOLUMEPLAYERS) {
         BtAndLocalVolumeSet(volumeSettingView->sounding);  /*蓝牙耳机音乐调节*/
-        ConfigModel::GetInstance()->SetSystemVolume(volumeSettingView->sounding);/*将设置的音量保存到系统音量*/
     }
     if (playerCoefficients == VOLUMEPHONE || playerCoefficients == VOLUMEPHONENOTIFY) {
         unsigned char volumeValue = (unsigned char) ((double) (volumeSettingView->sounding * CALL_VOLUME_MAX) / (VOLUME_MAX - VOLUME_MIN)); // 音量转换
         SetSpeakerVolume(volumeValue);
-        ConfigModel::GetInstance()->SetCallVolume(volumeSettingView->sounding);/*将设置的音量保存到通话音量*/
     }
 }
 
index 87e58c3..c7c2232 100644 (file)
@@ -2,7 +2,7 @@
  * @Author: luozheng 1732036298@qq.com
  * @Date: 2024-08-21 11:54:00
  * @LastEditors: luozheng 1732036298@qq.com
- * @LastEditTime: 2024-08-24 10:19:09
+ * @LastEditTime: 2024-08-26 20:29:37
  * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/main/src/dropdown/DropDownCardPage1.cpp
  */
 #include "main/include/dropdown/DropDownCardPage1.h"
@@ -76,25 +76,28 @@ namespace OHOS
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "DropDownCardPage1::OnClick %s ", view.GetViewId());
         if (viewId == DROPDOWN_BT_TOGGLEBUTTON_VIEWID) // 蓝牙开关
         {
-            state = toggleButton[DropDownCardPage1::toggleButton_BT]->GetState();
-            NativeAbility::GetInstance().EnterSlice(VIEW_CLASSIC_BLUETOOTH);
+            if (ConfigModel::GetInstance()->GetClassicBlueToothState() == false)
+            {
+                NativeAbility::GetInstance().EnterSlice(VIEW_CLASSIC_BLUETOOTH);
+            }
+            else
+            {
+                state = toggleButton[DropDownCardPage1::toggleButton_BT]->GetState();
+                UpdateBTState(state);
+                ConfigModel::GetInstance()->SetClassicBlueToothState(state);
+            }
         }
         else if (viewId == DROPDOWN_4G_TOGGLEBUTTON_VIEWID) // 4G开关
         {
-            state = toggleButton[DropDownCardPage1::toggleButton_4G]->GetState();
-            if (state)
+            if (ConfigModel::GetInstance()->GetCat1_4Gability() == false)
             {
-                uapi_set4GCapability(true);
-                ConfigModel::GetInstance()->SetCat1_4Gability(uapi_cat1_get_power_stat());
+                NativeAbility::GetInstance().EnterSlice(VIEW_NETWORKANDCALL);
             }
             else
             {
-#if defined(A5133_DEMO_CLIENT) || defined(A5133_DEMO_SERVER)
-                uapi_set4GCapability(true);
-#else
-                uapi_set4GCapability(false);
-#endif
-                ConfigModel::GetInstance()->SetCat1_4Gability(uapi_cat1_get_power_stat());
+                state = toggleButton[DropDownCardPage1::toggleButton_4G]->GetState();
+                Updat4GState(state);
+                ConfigModel::GetInstance()->SetCat1_4Gability(state);
             }
         }
         else if (viewId == DROPDOWN_ALIPAY_TOGGLEBUTTON_VIEWID) // 支付宝
@@ -181,8 +184,8 @@ namespace OHOS
         bool state_dnotdisturb = DnotDisturbModel::GetInstance().GetDoNotDisturbModeEnabled();
 
         ToggleButtonConfig toggleButtonConfig[] = {
-            {0, 0, 100, 100, DROPDOWN_BT_TOGGLEBUTTON_VIEWID, DROPDOWN_BT_IMAGE, DROPDOWN_BT_IMAGE, true, true},
-            {110, 0, 100, 100, DROPDOWN_4G_TOGGLEBUTTON_VIEWID, DROPDOWN_4G_ON_IMAGE, DROPDOWN_4G_OFF_IMAGE, true, state_4g},
+            {0, 0, 100, 100, DROPDOWN_BT_TOGGLEBUTTON_VIEWID, state_bt ? DROPDOWN_BT_CONNECT_IMAGE : DROPDOWN_BT_DISCONNECT_IMAGE, state_bt ? DROPDOWN_BT_CONNECT_IMAGE : DROPDOWN_BT_DISCONNECT_IMAGE, true, state_bt},
+            {110, 0, 100, 100, DROPDOWN_4G_TOGGLEBUTTON_VIEWID, state_4g ? DROPDOWN_4G_ON_IMAGE : DROPDOWN_4G_OFF_IMAGE, state_4g ? DROPDOWN_4G_ON_IMAGE : DROPDOWN_4G_OFF_IMAGE, true, state_4g},
             {220, 0, 100, 100, DROPDOWN_ALIPAY_TOGGLEBUTTON_VIEWID, DROPDOWN_ALIPAY_IMAGE, DROPDOWN_ALIPAY_IMAGE, true, true},
             {330, 0, 100, 100, DROPDOWN_SAVEPOWER_TOGGLEBUTTON_VIEWID, state_savepower ? DROPDOWN_SAVEPOWER_ON_IMAGE : DROPDOWN_SAVEPOWER_OFF_IMAGE, state_savepower ? DROPDOWN_SAVEPOWER_ON_IMAGE : DROPDOWN_SAVEPOWER_OFF_IMAGE, true, state_savepower},
             {55, 100, 100, 100, DROPDOWN_SLEEP_TOGGLEBUTTON_VIEWID, state_sleep ? DROPDOWN_SLEEP_ON_IMAGE : DROPDOWN_SLEEP_OFF_IMAGE, state_sleep ? DROPDOWN_SLEEP_ON_IMAGE : DROPDOWN_SLEEP_OFF_IMAGE, true, state_sleep},
@@ -223,6 +226,24 @@ namespace OHOS
         return toggleButton[index];
     }
 
+    void DropDownCardPage1::UpdateBTState(bool state)
+    {
+        if (toggleButton[DropDownCardPage1::toggleButton_BT] != nullptr)
+        {
+            const char *ImageSrc = state ? DROPDOWN_BT_CONNECT_IMAGE : DROPDOWN_BT_DISCONNECT_IMAGE;
+            toggleButton[DropDownCardPage1::toggleButton_BT]->SetImages(ImageSrc, ImageSrc);
+        }
+    }
+
+    void DropDownCardPage1::Updat4GState(bool state)
+    {
+        if (toggleButton[DropDownCardPage1::toggleButton_4G] != nullptr)
+        {
+            const char *ImageSrc = state ? DROPDOWN_4G_ON_IMAGE : DROPDOWN_4G_OFF_IMAGE;
+            toggleButton[DropDownCardPage1::toggleButton_4G]->SetImages(ImageSrc, ImageSrc);
+        }
+    }
+
     void DropDownCardPage1::UpdateDnotdisturbState(bool state)
     {
         if (toggleButton[DropDownCardPage1::toggleButton_DNOTDISTURB] != nullptr)
@@ -238,7 +259,7 @@ namespace OHOS
         if (toggleButton[DropDownCardPage1::toggleButton_SLEEP] != nullptr)
         {
             const char *ImageSrc = state ? DROPDOWN_SLEEP_ON_IMAGE : DROPDOWN_SLEEP_OFF_IMAGE;
-            toggleButton[DropDownCardPage1::toggleButton_DNOTDISTURB]->SetImages(ImageSrc, ImageSrc);
+            toggleButton[DropDownCardPage1::toggleButton_SLEEP]->SetImages(ImageSrc, ImageSrc);
         }
     }
 }
\ No newline at end of file
index 68e34dd..1d813a4 100644 (file)
@@ -1,8 +1,8 @@
 /*
  * @Author: luozheng 1732036298@qq.com
  * @Date: 2024-04-23 09:59:32
- * @LastEditors: SnickerSun snickersun@163.com
- * @LastEditTime: 2024-08-26 19:45:23
+ * @LastEditors: luozheng 1732036298@qq.com
+ * @LastEditTime: 2024-08-26 19:31:45
  * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/networkandcall/src/NetworkAndCallPresenter.cpp
  */
 #include "AppViewIDs.h"
index 27beed9..dcc61f5 100644 (file)
@@ -25,6 +25,7 @@
 #include <PlayerListDelSongView.h>\r
 #include "ConfigModel.h"\r
 #include "ctype.h"\r
+#include <custom_utils.h>\r
 namespace OHOS {\r
 static PlayerOnDragListener *g_pPlayerOnDragListener = nullptr;\r
 static JumpView *g_pJumpView = nullptr;\r
@@ -626,7 +627,7 @@ void ButtonOnClickListener::SoundButtonOnClick()
         return;\r
     }\r
     playersView->ChangeView(PlayersView::MAIN_MUSICPLAYER_VIEW, PlayersView::MUSIC_VOLUME_CONTROL_VIEW);\r
-    int32_t volume = ConfigModel::GetInstance()->GetSystemVolume();\r
+    int32_t volume = uapi_systemVolumeGet();\r
     WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "current volume = %d", volume);\r
     if( playersView->GetVolumeSettingView()->GetProgress()) {\r
         playersView->GetVolumeSettingView()->GetProgress()->SetValue(volume);\r
index 5fa7d3a..9f042b9 100644 (file)
@@ -2,7 +2,7 @@
  * @Author: luozheng 1732036298@qq.com
  * @Date: 2024-07-18 14:55:27
  * @LastEditors: luozheng 1732036298@qq.com
- * @LastEditTime: 2024-08-24 14:48:41
+ * @LastEditTime: 2024-08-26 20:56:46
  * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/rebootandshutdown/src/RebootAndShutdownModel.cpp
  */
 
@@ -369,7 +369,7 @@ namespace OHOS
 
     static void FuncKeyDoubleClickCallBack(void)
     {
-        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "FuncKeyDoubleClickCallBack");
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "FuncKeyDoubleClickCallBack");
 
         RebootAndShutdownPresenter *rebootAndShutdownPresenter = RebootAndShutdownPresenter::GetInstance();
         if (rebootAndShutdownPresenter != nullptr && true == rebootAndShutdownPresenter->GetIsShutDownImageAnimator())
@@ -384,7 +384,8 @@ namespace OHOS
         }
 
         uint16_t current_slice_id = OHOS::NativeAbility::GetInstance().GetCurSliceId();
-        for (uint16_t i = 0; i < sizeof(intercept_slice_ids) / sizeof(intercept_slice_ids); i++)
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "current_slice_id = %d", current_slice_id);
+        for (uint16_t i = 0; i < sizeof(intercept_slice_ids) / sizeof(intercept_slice_ids[0]); i++)
         {
             if (intercept_slice_ids[i] == current_slice_id)
             {
index 36e4343..08b37e7 100644 (file)
@@ -2,7 +2,7 @@
  * @Author: luozheng 1732036298@qq.com\r
  * @Date: 2024-03-30 09:14:38\r
  * @LastEditors: luozheng 1732036298@qq.com\r
- * @LastEditTime: 2024-06-13 10:44:21\r
+ * @LastEditTime: 2024-08-26 09:44:39\r
  * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/record/include/RecordDeleteView.h\r
  * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE\r
  */\r
@@ -40,13 +40,14 @@ namespace OHOS
         virtual ~RecordDeleteView();\r
         static RecordDeleteView *GetInstance(void);\r
         UIScrollView *RecordDeleteViewInit(void);\r
-        void ClearAll(void);\r
+        void SetRecordDeleteName(const char * name);\r
 \r
     private:\r
         UILabelExt *CreateRecordDeleteLabel(LabelConfig &labelconfig); // 设置标签\r
         bool RecordDeleteScrollViewInit(void);\r
         bool RecordDeleteLabelViewInit(void);\r
         bool RecordDeleteButtonViewInit(void);\r
+        void ClearAll(void);\r
 \r
         UIScrollView *RecordDeleteViewScrollView{nullptr};\r
         UILabelExt *TitleLabel{nullptr};\r
index 76a1953..5fec252 100644 (file)
@@ -2,7 +2,7 @@
  * @Author: luozheng 1732036298@qq.com\r
  * @Date: 2024-03-30 09:14:38\r
  * @LastEditors: luozheng 1732036298@qq.com\r
- * @LastEditTime: 2024-06-13 10:00:02\r
+ * @LastEditTime: 2024-08-26 16:10:38\r
  * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/record/include/RecordListView.h\r
  */\r
 #ifndef RECORD_LIST_VIEW_H\r
@@ -21,7 +21,7 @@
 #include "record/include/RecordingListAdapter.h"\r
 namespace OHOS\r
 {\r
-    static constexpr char *RECORDLISTSCROLLVIEW = "RecordListScrollView";\r
+    static constexpr const char *RECORDLISTSCROLLVIEW = "RecordListScrollView";\r
     class RecordListView\r
     {\r
 \r
@@ -51,7 +51,6 @@ namespace OHOS
         bool RecordListListViewInit(void);\r
         void AddRecordingToList(const RecordingListItem &item);\r
         void InitRecordingInfo(void);\r
-        void UpdateVisibilityBasedOnRecordingList();\r
         void ClearAll(void);\r
         void IsVisibleLabel(bool value);\r
 \r
index 4034edb..4a33ff1 100644 (file)
@@ -38,6 +38,14 @@ namespace OHOS
         RECORDER_RESPONSE_MAX,
     };
 
+#define MAX_RECORDING_NUM 20
+    typedef struct
+    {
+        char recordingFileName[32]; // 录音文件名
+        char recordingDuration[16]; // 录音时长
+        char recordingTime[16];     // 录音时间
+    } RecordingInfo;
+
     class RecordingPlayerInterruptListener;
     class RecordingModel
     {
@@ -63,25 +71,34 @@ namespace OHOS
         void InitRecordingListItem();
         std::vector<RecordingListItem> &GetRecordinglistItems();
         std::string GetCurrentPlayRecordingName(void);
-        int &GetRecordingListNum();
+        int GetRecordingListNum();
+        void SetRecordingListNum(int value);
         std::string GetCleanFileName(const std::string &filePath);
         void SearchFiles(const std::string &directory, std::vector<std::string> &fileNames, int &mp3FileCount);
-        void KeepClickRecordingIndex(int index_);
-        int &GetClickRecordingIndex(void);
+        void SetClickRecordingIndex(int index_);
+        int GetClickRecordingIndex(void);
         std::vector<std::string> &GetFileNames(void);
-        void KeepTotalRecordDuration(std::string time);
+        void SetTotalRecordDuration(std::string time);
         std::string GetTotalRecordDuration(void) const;
-        std::string Getyyyymmhhh_date(void) const;
+        RecordingInfo *GetRecordingInfo();
+        void SetRecordingInfo(RecordingInfo &info, int index);
+        void UpdateRecordingInfo(int index);
+        void SetRecordFileName(std::string name);
+        std::string GetRecordFileName(void);
+        std::string Getyyyymmhhh_date(void);
         std::string &Getyyyymmhhh_dateAndTotalRecordDuration(void);
         std::shared_ptr<RecordingPlayerInterruptListener> GetRecordingPlayerIntrptListener(void);
         void ClearActivateAudioInterrupt(void);
         std::shared_ptr<Player> GetPlayerCtr(void);
         void SetAudioInitStatus(bool value);
         /* ----------------------------------- 定时器 ---------------------------------- */
-        void Recording_StartTimer(uint32_t interval);
+        void Recording_StartTimer(uint32_t interval = 1000);
         void Recording_StopTimer(void);
         char *DisplayRecordDuration(void);
         const char *GetRecordDirectory() const;
+        static std::string recordTempDuration; // 录音时长
+        int RecordDataWriteToFile();
+        int RecordDataReadToFile();
 
     private:
         RecordingModel();
@@ -105,15 +122,20 @@ namespace OHOS
         bool isStopAndReset{false};                // 判断是否是停止还是重置状态
         bool audioInitStatus{false};
         /* -------------------------------------------------------------------------- */
-        std::vector<std::string> fileNames;                        // 文件名
+        std::vector<std::string> fileNames;                        // 文件名数组
         int RecordingMp3FileCount = 0;                             // 录音MP3数量
         const std::string directory = "/user/userdata/recording/"; // 录音目录
-        std::vector<RecordingListItem> Recordings;                 // 存放录音信息的动态数组
+        const std::string recordInfoFile = "/user/userdata/recording/recordinfo.bin";
+        std::vector<RecordingListItem> Recordings{0};              // 存放录音信息的动态数组
         std::string recordDuration;                                // 录音时长
-        int index;                                                 // 保存被点击录音的下标
-        char *yyyymmhhh_date;                                      // 保存年月日时间
-        std::string TotalRecordDuration;                           // 保存录音的总时长
-        std::string RecordingTimeAndDuration;                      // 录音日期和录音时长
+        /* -------------------------------------------------------------------------- */
+        int index;                            // 保存被点击录音的下标
+        std::string recordFileName;           // 录音文件名
+        char *yyyymmhhh_date;                 // 保存年月日时间
+        std::string TotalRecordDuration;      // 保存录音的总时长
+        std::string RecordingTimeAndDuration; // 录音日期和录音时长
+        RecordingInfo recordingInfo[MAX_RECORDING_NUM] = {0};
+        /* -------------------------------------------------------------------------- */
     };
 }
 
index 67437aa..6d20f52 100644 (file)
@@ -2,7 +2,7 @@
  * @Author: luozheng 1732036298@qq.com\r
  * @Date: 2024-02-27 09:16:51\r
  * @LastEditors: luozheng 1732036298@qq.com\r
- * @LastEditTime: 2024-06-13 11:23:15\r
+ * @LastEditTime: 2024-08-26 15:23:43\r
  * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/record/include/RecordingPresenter.h\r
  */\r
 \r
@@ -128,7 +128,6 @@ namespace OHOS
 \r
         static RecordingPresenter *GetInstance();\r
         int convertNumericDateTime(const char *numericDateTime, char *formattedDateTime);\r
-        void deleteFile(const char *filepath);\r
 \r
     private:\r
         // 因为继承了OnClickListener,所以有OnClick属性,至于参数,原函数也这样直接继承;\r
@@ -136,6 +135,8 @@ namespace OHOS
         bool OnDrag(UIView &view, const DragEvent &event) override;\r
         bool OnDragEnd(UIView &view, const DragEvent &event) override;\r
         bool OnKeyAct(UIView &view, const KeyEvent &event) override;\r
+        void StartRecord(void);\r
+        void StopRecord(void);\r
         RecordingModel *p_RecordingModel{nullptr};\r
     };\r
 }\r
index 4fed53c..6324b81 100644 (file)
@@ -2,7 +2,7 @@
  * @Author: luozheng 1732036298@qq.com\r
  * @Date: 2024-03-30 09:14:38\r
  * @LastEditors: luozheng 1732036298@qq.com\r
- * @LastEditTime: 2024-06-13 11:06:56\r
+ * @LastEditTime: 2024-08-24 16:01:13\r
  * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/record/include/RecordingView.h\r
  */\r
 #ifndef RECORD_VIEW_H\r
@@ -95,6 +95,7 @@ namespace OHOS
         UILabelExt *AttentionLabel{nullptr};\r
         UIImageAnimatorView *RecordingViewImageAnimator{nullptr};\r
         UIImageView *RECORD1_Image = nullptr;\r
+        UIImageView *pullUp_Image = nullptr;\r
     };\r
 } // namespace OHOS\r
 \r
index 4e2a337..8f6ae54 100644 (file)
@@ -30,24 +30,36 @@ namespace OHOS
         {\r
             WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "RecordDeleteView::ClearAll");\r
             RecordDeleteViewScrollView->RemoveAll();\r
-\r
-            delete TitleLabel;\r
-            TitleLabel = nullptr;\r
-\r
-            delete AttentionLabel;\r
-            AttentionLabel = nullptr;\r
-\r
-            delete DeleteNameLabel;\r
-            DeleteNameLabel = nullptr;\r
-\r
-            delete RECORD_DELETE_ON_BUTTON;\r
-            RECORD_DELETE_ON_BUTTON = nullptr;\r
-\r
-            delete RECORD_DELETE_OFF_BUTTON;\r
-            RECORD_DELETE_OFF_BUTTON = nullptr;\r
-\r
-            delete RecordDeleteViewScrollView;\r
-            RecordDeleteViewScrollView = nullptr;\r
+            if (TitleLabel)\r
+            {\r
+                delete TitleLabel;\r
+                TitleLabel = nullptr;\r
+            }\r
+            if (AttentionLabel)\r
+            {\r
+                delete AttentionLabel;\r
+                AttentionLabel = nullptr;\r
+            }\r
+            if (DeleteNameLabel)\r
+            {\r
+                delete DeleteNameLabel;\r
+                DeleteNameLabel = nullptr;\r
+            }\r
+            if (RECORD_DELETE_ON_BUTTON)\r
+            {\r
+                delete RECORD_DELETE_ON_BUTTON;\r
+                RECORD_DELETE_ON_BUTTON = nullptr;\r
+            }\r
+            if (RECORD_DELETE_OFF_BUTTON)\r
+            {\r
+                delete RECORD_DELETE_OFF_BUTTON;\r
+                RECORD_DELETE_OFF_BUTTON = nullptr;\r
+            }\r
+            if (RecordDeleteViewScrollView)\r
+            {\r
+                delete RecordDeleteViewScrollView;\r
+                RecordDeleteViewScrollView = nullptr;\r
+            }\r
         }\r
     }\r
 \r
@@ -66,6 +78,7 @@ namespace OHOS
         label->SetLineBreakMode(labelconfig.lineBreakMode); // 断行模式。\r
         label->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
         label->SetFont(DEFAULT_VECTOR_FONT_FILENAME, labelconfig.fontSize);\r
+        label->SetRollSpeed(70);\r
 \r
         return label;\r
     }\r
@@ -97,14 +110,14 @@ namespace OHOS
         WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "RecordDeleteView::RecordDeleteLabelViewInit");\r
         LabelConfig labelconfig = {\r
             .left = 83,\r
-            .top = 52,\r
+            .top = 50,\r
             .width = 300,\r
             .height = 35,\r
             .fontSize = 30,\r
             .lineHeigh = 35,\r
             //.text = "删除录音",\r
             .textId = STR_DELETE_RECORDING,\r
-            .lineBreakMode = UILabel::LINE_BREAK_MARQUEE,\r
+            .lineBreakMode = UILabel::LINE_BREAK_OSCILLATION,\r
         };\r
         TitleLabel = CreateRecordDeleteLabel(labelconfig);\r
         if (nullptr == TitleLabel)\r
@@ -123,7 +136,7 @@ namespace OHOS
             .lineHeigh = 35,\r
             //.text = "是否永久删除",\r
             .textId = STR_DELETE_PERMANENTLY,\r
-            .lineBreakMode = UILabel::LINE_BREAK_MARQUEE,\r
+            .lineBreakMode = UILabel::LINE_BREAK_OSCILLATION,\r
         };\r
         AttentionLabel = CreateRecordDeleteLabel(labelconfig);\r
         if (nullptr == AttentionLabel)\r
@@ -134,15 +147,24 @@ namespace OHOS
         AttentionLabel->SetTextColor(Color::GetColorFromRGBA(0xff, 0x5a, 0x36, 0xff));\r
         RecordDeleteViewScrollView->Add(AttentionLabel);\r
         /* -------------------------------------------------------------------------- */\r
-        labelconfig.top = 215;\r
-        labelconfig.textId = STR_AUDIO_XX;\r
-        DeleteNameLabel = CreateRecordDeleteLabel(labelconfig);\r
-        if (nullptr == DeleteNameLabel)\r
+        if (DeleteNameLabel == nullptr)\r
         {\r
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RecordDeleteView::DeleteNameLabel is nullptr!");\r
-            return false;\r
+            DeleteNameLabel = new UILabelExt();\r
+            if (DeleteNameLabel == nullptr)\r
+            {\r
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RecordDeleteView::DeleteNameLabel is nullptr!");\r
+                return false;\r
+            }\r
         }\r
+        DeleteNameLabel->SetPosition(0, 0, 360, 35);                        // 位置大小\r
+        DeleteNameLabel->SetStyle(STYLE_TEXT_FONT, 30);                     // 字体大小\r
+        DeleteNameLabel->SetStyle(STYLE_LINE_HEIGHT, 35);                   // 字体行高\r
+        DeleteNameLabel->SetText("");                                       // 内容\r
+        DeleteNameLabel->SetLineBreakMode(UILabel::LINE_BREAK_OSCILLATION); // 断行模式。\r
+        DeleteNameLabel->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
+        DeleteNameLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);\r
         RecordDeleteViewScrollView->Add(DeleteNameLabel);\r
+        DeleteNameLabel->LayoutCenterOfParent(); // 与父视图中心对齐\r
 \r
         return true;\r
     }\r
@@ -198,4 +220,13 @@ namespace OHOS
         return RecordDeleteViewScrollView;\r
     }\r
 \r
+    void RecordDeleteView::SetRecordDeleteName(const char *name)\r
+    {\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "RecordDeleteViewInit::SetRecordDeleteName");\r
+        if (DeleteNameLabel)\r
+        {\r
+            DeleteNameLabel->SetText(name);\r
+            DeleteNameLabel->Invalidate();\r
+        }\r
+    }\r
 }
\ No newline at end of file
index 739b811..19fcf20 100644 (file)
@@ -143,14 +143,14 @@ namespace OHOS
         WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "RecordGoingView::RecordGoingLabelViewInit");\r
         LabelConfig labelconfig = {\r
             .left = 83,\r
-            .top = 52,\r
+            .top = 50,\r
             .width = 300,\r
             .height = 35,\r
             .fontSize = 30,\r
             .lineHeigh = 35,\r
             //.text = "录音机",\r
             .textId = STR_RECORDER,\r
-            .lineBreakMode = UILabel::LINE_BREAK_MARQUEE,\r
+            .lineBreakMode = UILabel::LINE_BREAK_OSCILLATION,\r
         };\r
 \r
         TitleLabel = CreateRecordGoingLabelExt(labelconfig);\r
@@ -169,7 +169,7 @@ namespace OHOS
             .lineHeigh = 35,\r
             //.text = "录音机",\r
             .textId = STR_RECORDING,\r
-            .lineBreakMode = UILabel::LINE_BREAK_MARQUEE,\r
+            .lineBreakMode = UILabel::LINE_BREAK_OSCILLATION,\r
         };\r
         RecordGoingLabel = CreateRecordGoingLabelExt(labelconfig);\r
         if (nullptr == RecordGoingLabel)\r
@@ -186,7 +186,7 @@ namespace OHOS
             .fontSize = 65,\r
             .lineHeigh = 76,\r
             .text = "00:00:00",\r
-            .lineBreakMode = UILabel::LINE_BREAK_MARQUEE,\r
+            .lineBreakMode = UILabel::LINE_BREAK_OSCILLATION,\r
         };\r
         Timer = CreateRecordGoingLabel(labelconfig);\r
         if (nullptr == Timer)\r
index 440e98a..3cde41b 100644 (file)
@@ -1,8 +1,8 @@
 /*\r
  * @Author: luozheng 1732036298@qq.com\r
- * @Date: 2024-02-27 09:16:52\r
+ * @Date: 2024-02-27 09:16:50\r
  * @LastEditors: luozheng 1732036298@qq.com\r
- * @LastEditTime: 2024-06-13 09:42:18\r
+ * @LastEditTime: 2024-08-27 14:38:37\r
  * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/record/src/RecordListView.cpp\r
  */\r
 \r
@@ -14,7 +14,6 @@ namespace OHOS
 {\r
 \r
     static RecordListView *g_pRecordListView{nullptr};\r
-\r
     RecordListView::RecordListView()\r
     {\r
         WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "RecordListView::RecordListView");\r
@@ -35,62 +34,71 @@ namespace OHOS
 \r
     void RecordListView::ClearAll()\r
     {\r
-        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ClearAll");\r
         if (RecordListScrollView != nullptr)\r
         {\r
             // 首先移除所有子视图\r
             RecordListScrollView->RemoveAll();\r
-\r
-            // 释放各个资源\r
-            delete RecordListViewAttentionLabel;\r
-            RecordListViewAttentionLabel = nullptr;\r
-\r
-            delete RecordListViewTitleLabel;\r
-            RecordListViewTitleLabel = nullptr;\r
-\r
-            delete p_RecordingListAdapter;\r
-            p_RecordingListAdapter = nullptr;\r
-\r
+            if (RecordListViewAttentionLabel != nullptr)\r
+            {\r
+                delete RecordListViewAttentionLabel;\r
+                RecordListViewAttentionLabel = nullptr;\r
+            }\r
+            if (RecordListViewTitleLabel != nullptr)\r
+            {\r
+                delete RecordListViewTitleLabel;\r
+                RecordListViewTitleLabel = nullptr;\r
+            }\r
+            if (p_RecordingListAdapter != nullptr)\r
+            {\r
+                delete p_RecordingListAdapter;\r
+                p_RecordingListAdapter = nullptr;\r
+            }\r
             // 释放点击监听器\r
             if (UIView::OnClickListener *clicklister = recordList->GetOnClickListener())\r
             {\r
                 delete clicklister;\r
                 clicklister = nullptr;\r
             }\r
-\r
             // 释放拖动监听器\r
             if (UIView::OnDragListener *dragLister = RecordListScrollView->GetOnDragListener())\r
             {\r
                 delete dragLister;\r
                 dragLister = nullptr;\r
             }\r
-\r
             if (clickListener != nullptr)\r
             {\r
                 delete clickListener;\r
                 clickListener = nullptr;\r
             }\r
-\r
             // 最后释放 RecordListScrollView 及其子视图\r
-            delete recordList;\r
-            recordList = nullptr;\r
-\r
-            delete RecordListScrollView;\r
-            RecordListScrollView = nullptr;\r
+            if (recordList != nullptr)\r
+            {\r
+                delete recordList;\r
+                recordList = nullptr;\r
+            }\r
+            if (RecordListScrollView != nullptr)\r
+            {\r
+                delete RecordListScrollView;\r
+                RecordListScrollView = nullptr;\r
+            }\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ClearAll");\r
         }\r
     }\r
 \r
     // 添加录音到list\r
     void RecordListView::AddRecordingToList(const RecordingListItem &item)\r
     {\r
-        p_RecordingListAdapter->AddListItem(item);\r
+        if (p_RecordingListAdapter != nullptr)\r
+        {\r
+            p_RecordingListAdapter->AddListItem(item);\r
+        }\r
     }\r
 \r
     // 把录音信息数据拿到存储到list中\r
     void RecordListView::InitRecordingInfo(void)\r
     {\r
         std::vector<OHOS::RecordingListItem> &item = RecordingModel::GetInstance()->GetRecordinglistItems();\r
-        for (int i = 0; i < RecordingModel::GetInstance()->GetRecordingListNum(); i++)\r
+        for (int i = 0; i < item.size(); i++)\r
         {\r
             AddRecordingToList(item[i]);\r
         }\r
@@ -99,18 +107,38 @@ namespace OHOS
     // 每次录音完将数据刷新显示到list\r
     void RecordListView::RefreshRecordingListData(void)\r
     {\r
-        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "RecordListView::RefreshRecordingListData");\r
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RecordListView::RefreshRecordingListData");\r
         RecordingModel::GetInstance()->InitRecordingListItem();\r
-        p_RecordingListAdapter->ClearData();\r
-        InitRecordingInfo();\r
-        recordList->RefreshList();\r
-        if (RecordingModel::GetInstance()->GetRecordingListNum() == 0)\r
-        {\r
-            IsVisibleLabel(true);\r
-        }\r
-        else\r
+        int num = RecordingModel::GetInstance()->GetRecordingListNum();\r
+        if (p_RecordingListAdapter != nullptr && recordList != nullptr)\r
         {\r
-            IsVisibleLabel(false);\r
+            if (num == 0)\r
+            {\r
+                IsVisibleLabel(true);\r
+            }\r
+            else\r
+            {\r
+                /* -------------------------------------------------------------------------- */\r
+                IsVisibleLabel(false);\r
+                /* -------------------------------------------------------------------------- */\r
+                if (num == 1)\r
+                {\r
+                    recordList->SetHeight(120 * num);\r
+                }\r
+                else if (num == 2)\r
+                {\r
+                    recordList->SetHeight(120 * num);\r
+                }\r
+                else\r
+                {\r
+                    recordList->SetHeight(340);\r
+                }\r
+                p_RecordingListAdapter->ClearData();\r
+                InitRecordingInfo();\r
+                recordList->RefreshList();\r
+                recordList->Invalidate();\r
+            }\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RecordListView::RefreshRecordingListData over!!");\r
         }\r
         return;\r
     }\r
@@ -118,30 +146,18 @@ namespace OHOS
     // 设置提醒标签是否可见\r
     void RecordListView::IsVisibleLabel(bool value)\r
     {\r
-        if (value == true)\r
-        {\r
-            RecordListViewAttentionLabel->SetVisible(true);\r
-            recordList->SetVisible(false); // 列表设置不可见\r
-            RecordListScrollView->SetVerticalScrollState(false);\r
-        }\r
-        else\r
-        {\r
-            RecordListViewAttentionLabel->SetVisible(false);\r
-            recordList->SetVisible(true); // 列表设置可见\r
-            RecordListScrollView->SetVerticalScrollState(true);\r
-        }\r
-    }\r
-\r
-    //根据录音列表中录音的数量来更新某个标签或视图的可见性。\r
-    void RecordListView::UpdateVisibilityBasedOnRecordingList()\r
-    {\r
-        if (RecordingModel::GetInstance()->GetRecordingListNum() == 0)\r
-        {\r
-            IsVisibleLabel(true);\r
-        }\r
-        else\r
+        if (RecordListViewAttentionLabel && recordList)\r
         {\r
-            IsVisibleLabel(false);\r
+            if (value == true)\r
+            {\r
+                RecordListViewAttentionLabel->SetVisible(true);\r
+                recordList->SetVisible(false); // 列表设置不可见\r
+            }\r
+            else\r
+            {\r
+                RecordListViewAttentionLabel->SetVisible(false);\r
+                recordList->SetVisible(true); // 列表设置可见\r
+            }\r
         }\r
     }\r
 \r
@@ -192,14 +208,13 @@ namespace OHOS
         WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "RecordListView::SetUpRecordListViewLabel");\r
         LabelConfig labelconfig = {\r
             .left = 83,\r
-            .top = 52,\r
+            .top = 50,\r
             .width = 300,\r
             .height = 35,\r
             .fontSize = 30,\r
             .lineHeigh = 35,\r
-            //.text = "录音列表",\r
-            .textId = STR_RECORDING_LIST,\r
-            .lineBreakMode = UILabel::LINE_BREAK_MARQUEE,\r
+            .textId = STR_RECORDING_LIST, // 录音列表\r
+            .lineBreakMode = UILabel::LINE_BREAK_OSCILLATION,\r
         };\r
 \r
         RecordListViewTitleLabel = CreateRecordListLabel(labelconfig);\r
@@ -210,15 +225,14 @@ namespace OHOS
         }\r
 \r
         labelconfig = {\r
-            .left = 33,\r
-            .top = 273,\r
-            .width = 400,\r
-            .height = 30,\r
-            .fontSize = 26,\r
-            .lineHeigh = 30,\r
-            //.text = "当前录音列表为空",\r
-            .textId = STR_CRLEMPTY,\r
-            .lineBreakMode = UILabel::LINE_BREAK_MARQUEE,\r
+            .left = 53,\r
+            .top = 280,\r
+            .width = 360,\r
+            .height = 35,\r
+            .fontSize = 30,\r
+            .lineHeigh = 35,\r
+            .textId = STR_CRLEMPTY, // 当前录音列表为空\r
+            .lineBreakMode = UILabel::LINE_BREAK_OSCILLATION,\r
         };\r
         RecordListViewAttentionLabel = CreateRecordListLabel(labelconfig);\r
         if (nullptr == RecordListViewAttentionLabel)\r
@@ -237,27 +251,43 @@ namespace OHOS
     bool RecordListView::RecordListListViewInit(void)\r
     {\r
         WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "RecordListView::RecordListViewInit");\r
-        p_RecordingListAdapter = new RecordingListAdapter();\r
-        clickListener = static_cast<UIView::OnClickListener *>(new RecordListViewListener());\r
-        p_RecordingListAdapter->SetItemClickListener(clickListener);\r
-        recordList = new UIList();\r
+        if (p_RecordingListAdapter == nullptr)\r
+        {\r
+            p_RecordingListAdapter = new RecordingListAdapter();\r
+            if (p_RecordingListAdapter == nullptr)\r
+            {\r
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RecordListView::p_RecordingListAdapter is nullptr!");\r
+                return false;\r
+            }\r
+            clickListener = static_cast<UIView::OnClickListener *>(new RecordListViewListener());\r
+            if (clickListener == nullptr)\r
+            {\r
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RecordListView::clickListener is nullptr!");\r
+                return false;\r
+            }\r
+            p_RecordingListAdapter->SetItemClickListener(clickListener);\r
+        }\r
         if (recordList == nullptr)\r
         {\r
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RecordListView::recordList is nullptr!");\r
-            return false;\r
+            recordList = new UIList();\r
+            if (recordList == nullptr)\r
+            {\r
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RecordListView::recordList is nullptr!");\r
+                return false;\r
+            }\r
         }\r
-        recordList->SetPosition(43, 120, 380, 300);\r
+        recordList->SetPosition(43, 120, 380, 340);\r
         recordList->SetStyle(STYLE_BACKGROUND_COLOR, 0xff000000);\r
-        recordList->SetSelectPosition(233);\r
         recordList->SetThrowDrag(true); // 设置手指抬起屏幕后是否继续滚动。\r
         recordList->SetTouchable(true);\r
         recordList->SetDraggable(true);\r
         recordList->SetMaxScrollDistance(1000); // 设置手指抬起屏幕后的最大滚动距离。\r
-        recordList->SetReboundSize(50);\r
+        recordList->SetDragACCLevel(5);\r
+        recordList->SetSwipeACCLevel(800); /*设置手指抬起屏幕后的补偿距离。*/\r
+        recordList->SetReboundSize(30);\r
+        recordList->SetScrollBlankSize(30);\r
         recordList->SetIntercept(true); // 设置是否拦截输入事件。如果被截获,视图在本地处理后不会将输入事件传递给父视图。\r
-        InitRecordingInfo();\r
         recordList->SetAdapter(p_RecordingListAdapter);\r
-        recordList->RefreshList();\r
         RecordListScrollView->Add(recordList);\r
         return true;\r
     }\r
@@ -271,16 +301,6 @@ namespace OHOS
             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RecordListViewInit fail!!");\r
             return nullptr;\r
         }\r
-\r
-        if (RecordingModel::GetInstance()->GetRecordingListNum() == 0)\r
-        {\r
-            IsVisibleLabel(true);\r
-        }\r
-        else\r
-        {\r
-            IsVisibleLabel(false);\r
-        }\r
-\r
         return RecordListScrollView;\r
     }\r
 }
\ No newline at end of file
index bbe4373..052e924 100644 (file)
@@ -2,7 +2,7 @@
  * @Author: luozheng 1732036298@qq.com
  * @Date: 2024-03-02 20:10:18
  * @LastEditors: luozheng 1732036298@qq.com
- * @LastEditTime: 2024-06-13 11:41:18
+ * @LastEditTime: 2024-08-24 17:40:14
  * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/record/src/RecordingListitemView.cpp
  */
 #include "record/include/RecordingListitemView.h"
@@ -14,7 +14,7 @@ namespace OHOS
     RecordingListitemView::RecordingListitemView()
     {
         WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "RecordingListitemView::RecordingListitemView");
-        SetPosition(43, 100, 380, 120);
+        SetPosition(0, 0, 380, 120);
         SetStyle(STYLE_BACKGROUND_COLOR, Color::Black().full);
         SetStyle(STYLE_BACKGROUND_OPA, 255);
         SetTouchable(true);
index f726b4e..21c74af 100644 (file)
@@ -9,18 +9,14 @@
 #include "custom_utils.h"
 #include <cmsis_os2.h>
 #include <service/graphic_service.h>
+#include <cstring>
 namespace OHOS
 {
-
+    std::string RecordingModel::recordTempDuration = 0;
     static MutexId g_mutex;
-    RecordingModel::RecordingModel()
-    {
-        // g_mutex = MUTEX_InitValue();
-    }
+    RecordingModel::RecordingModel() {}
 
-    RecordingModel::~RecordingModel()
-    {
-    }
+    RecordingModel::~RecordingModel() {}
 
     RecordingModel *RecordingModel::GetInstance(void)
     {
@@ -144,13 +140,13 @@ namespace OHOS
         {
             char buffer[10]; // 足够存放 "00:00\0" 的字符数组
             sprintf(buffer, "%02d:%02d", minutes, seconds);
-            KeepTotalRecordDuration(buffer);
+            SetTotalRecordDuration(buffer);
         }
         else
         {
             char buffer[12]; // 足够存放 "00:00:00\0" 的字符数组
             sprintf(buffer, "%02d:%02d:%02d", hours, minutes, seconds);
-            KeepTotalRecordDuration(buffer);
+            SetTotalRecordDuration(buffer);
         }
     }
 
@@ -191,7 +187,7 @@ namespace OHOS
         ret = PlayerCtr->GetDuration(DurationTime);
         if (ret != -1)
         {
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[%s,%d] GetDuration:%lld, ret:%d", __func__, __LINE__, DurationTime, ret);
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GetDuration:%ld, ret:%d", DurationTime, ret);
         }
         else
         {
@@ -396,21 +392,18 @@ namespace OHOS
      */
     void RecordingModel::PreviousPlayout(void)
     {
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PreviousPlayout, index %d.", GetClickRecordingIndex());
-        if ((GetClickRecordingIndex() > GetRecordingListNum() - 1) || (GetClickRecordingIndex() < 0))
+        int index = GetClickRecordingIndex();
+        int num = GetRecordingListNum();
+
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PreviousPlayout before index %d.", index);
+        if ((index > num - 1) || (index < 0))
         {
             WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "currentIndex err");
-            KeepClickRecordingIndex(0);
+            SetClickRecordingIndex(0);
             return;
         }
-        GetClickRecordingIndex()--; // 上一曲
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PreviousPlayout, index %d.", GetClickRecordingIndex());
-        if (GetClickRecordingIndex() < 0)
-        {
-            KeepClickRecordingIndex(GetRecordingListNum() - 1);
-        }
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PreviousPlayout, index %d.", GetClickRecordingIndex());
-        RecordingPlayerInit(GetClickRecordingIndex());
+        SetClickRecordingIndex(--index < 0 ? num - 1 : index); // 如果从第一首录音设置上一首,那就跳到最后一首
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PreviousPlayout after index %d.", GetClickRecordingIndex());
         SetCircleProgress(0);
     }
 
@@ -419,21 +412,18 @@ namespace OHOS
      */
     void RecordingModel::NextPlayout(void)
     {
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "NextPlayout, index %d.", GetClickRecordingIndex());
-        if ((GetClickRecordingIndex() > GetRecordingListNum() - 1) || (GetClickRecordingIndex() < 0))
+        int index = GetClickRecordingIndex();
+        int num = GetRecordingListNum();
+
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "NextPlayout before index %d.", index);
+        if ((index > num - 1) || (index < 0))
         {
             WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "currentIndex err");
-            KeepClickRecordingIndex(0);
+            SetClickRecordingIndex(0);
             return;
         }
-        GetClickRecordingIndex()++; // 下一曲
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "NextPlayout, index %d.", GetClickRecordingIndex());
-        if (GetClickRecordingIndex() > GetRecordingListNum() - 1)
-        {
-            KeepClickRecordingIndex(0);
-        }
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "NextPlayout, index %d.", GetClickRecordingIndex());
-        RecordingPlayerInit(GetClickRecordingIndex());
+        SetClickRecordingIndex(++index > num - 1 ? 0 : index); // 如果从最后一首录音设置下一首,那就跳到第一首
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "NextPlayout after index %d.", GetClickRecordingIndex());
         SetCircleProgress(0);
     }
 
@@ -500,21 +490,7 @@ namespace OHOS
      */
     void RecordingModel::InitRecordingListItem(void)
     {
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RecordingModel::InitRecordingListItem");
-        // 获取日期
-        char *yyyymmhhh_date_new = uapi_get_local_yyyymmdd_date();
-        if (yyyymmhhh_date_new == nullptr)
-        {
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to get local date");
-            return; // 或者进行适当的错误处理
-        }
-        // 释放之前分配的日期字符串内存(如果之前有)
-        if (yyyymmhhh_date != nullptr)
-        {
-            free(yyyymmhhh_date);
-        }
-        // 更新日期字符串成员
-        yyyymmhhh_date = yyyymmhhh_date_new;
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "RecordingModel::InitRecordingListItem");
         RecordingMp3FileCount = 0;
         if (!fileNames.empty())
         {
@@ -525,19 +501,28 @@ namespace OHOS
             Recordings.clear();
         }
         SearchFiles(directory, fileNames, RecordingMp3FileCount);
+        RecordDataReadToFile();
         if (RecordingMp3FileCount != 0)
         {
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Total .mp3 Files Count:%d\n", RecordingMp3FileCount);
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Total .mp3 Files Count:%d", RecordingMp3FileCount);
             for (const auto &filename : fileNames)
             {
-                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "File Name::%s\n", filename.c_str());
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "File Name::%s", filename.c_str());
             }
             // 对 Recordings 数组进行操作
             for (int i = 0; i < RecordingMp3FileCount; i++)
             {
-                Recordings.push_back({i, fileNames[i].c_str(), "09:51", yyyymmhhh_date});
+                for (int j = 0; j < RecordingMp3FileCount; j++)
+                {
+                    if (fileNames[i] == recordingInfo[j].recordingFileName)
+                    {
+                        Recordings.push_back({i, recordingInfo[j].recordingFileName, recordingInfo[j].recordingDuration, recordingInfo[j].recordingTime});
+                        break;
+                    }
+                }
             }
         }
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RecordingModel::InitRecordingListItem over!!");
     }
 
     /*
@@ -561,16 +546,22 @@ namespace OHOS
     /*
      * @brief 获取录音数量
      */
-    int &RecordingModel::GetRecordingListNum(void)
+    int RecordingModel::GetRecordingListNum(void)
     {
-        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "RecordingModel::GetRecordingListNum");
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RecordingModel::GetRecordingListNum %d", RecordingMp3FileCount);
         return RecordingMp3FileCount;
     }
 
+    void RecordingModel::SetRecordingListNum(int value)
+    {
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RecordingModel::GetRecordingListNum %d", value);
+        RecordingMp3FileCount = value;
+    }
+
     /*
      * @brief 保存被点击录音下标
      */
-    void RecordingModel::KeepClickRecordingIndex(int index_)
+    void RecordingModel::SetClickRecordingIndex(int index_)
     {
         index = index_;
     }
@@ -578,7 +569,7 @@ namespace OHOS
     /*
      * @brief 获取被点击录音下标
      */
-    int &RecordingModel::GetClickRecordingIndex(void)
+    int RecordingModel::GetClickRecordingIndex(void)
     {
         return index;
     }
@@ -592,9 +583,9 @@ namespace OHOS
     }
 
     /*
-     * @brief 保存录音时长
+     * @brief 保存录音的总时长
      */
-    void RecordingModel::KeepTotalRecordDuration(std::string time)
+    void RecordingModel::SetTotalRecordDuration(std::string time)
     {
         TotalRecordDuration = time;
     }
@@ -610,17 +601,84 @@ namespace OHOS
     /*
      * @brief 获取录音年月日时间
      */
-    std::string RecordingModel::Getyyyymmhhh_date(void) const
+    std::string RecordingModel::Getyyyymmhhh_date(void)
     {
+        char *yyyymmhhh_date_new = uapi_get_local_yyyymmdd_date(); // 获取日期
+        if (yyyymmhhh_date_new == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to get local date");
+            return ""; // 或者进行适当的错误处理
+        }
+        // 释放之前分配的日期字符串内存(如果之前有)
+        if (yyyymmhhh_date != nullptr)
+        {
+            free(yyyymmhhh_date);
+        }
+        // 更新日期字符串成员
+        yyyymmhhh_date = yyyymmhhh_date_new;
         return yyyymmhhh_date;
     }
 
+    RecordingInfo *RecordingModel::GetRecordingInfo()
+    {
+        return recordingInfo;
+    }
+
+    // 设置每首录音的信息
+    void RecordingModel::SetRecordingInfo(RecordingInfo &info, int index)
+    {
+        recordingInfo[index] = info;
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "recordingFileName = %s", recordingInfo[index].recordingFileName);
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "recordingDuration = %s", recordingInfo[index].recordingDuration);
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "recordingTime = %s", recordingInfo[index].recordingTime);
+    }
+
+    void RecordingModel::UpdateRecordingInfo(int index)
+    {
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "UpdateRecordingInfo %s", recordingInfo[index].recordingFileName);
+        if (index < 0 || index > RecordingMp3FileCount)
+        {
+            return;
+        }
+        char *file_name = recordingInfo[index].recordingFileName;
+        std::string delete_filename = (directory + file_name).append(".mp3");
+        /* -------------------------------- 删除录音文件 -------------------------------- */
+        uapi_delete_files(delete_filename.c_str());
+        /* -------------------------------------------------------------------------- */
+        int i = 0;
+        for (i = index; i < (RecordingMp3FileCount - 1); i++)
+        {
+            strcpy(recordingInfo[i].recordingFileName, recordingInfo[i + 1].recordingFileName);
+            strcpy(recordingInfo[i].recordingDuration, recordingInfo[i + 1].recordingDuration);
+            strcpy(recordingInfo[i].recordingTime, recordingInfo[i + 1].recordingTime);
+
+            fileNames[i] = fileNames[i + 1];
+        }
+        RecordingMp3FileCount--;
+        RecordingInfo info = {0};
+        SetRecordingInfo(info, i);
+        fileNames[i].clear();
+        RecordDataWriteToFile();
+    }
+
+    // 设置当前的录音文件名,每次录音会更改
+    void RecordingModel::SetRecordFileName(std::string name)
+    {
+        recordFileName = name;
+    }
+
+    // 获取当前的录音文件名,每次录音会更改
+    std::string RecordingModel::GetRecordFileName(void)
+    {
+        return recordFileName;
+    }
+
     /*
      * @brief 获取年月日时间和录音时长
      */
     std::string &RecordingModel::Getyyyymmhhh_dateAndTotalRecordDuration(void)
     {
-        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[RecordingModel] Getyyyymmhhh_dateAndTotalRecordDuration\n");
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[RecordingModel] Getyyyymmhhh_dateAndTotalRecordDuration");
         std::string yyyymmhhh_date = RecordingModel::GetInstance()->Getyyyymmhhh_date();
         std::string TotalRecordDuration = RecordingModel::GetInstance()->GetTotalRecordDuration();
         // 去掉日期字符串末尾的换行符
@@ -637,6 +695,50 @@ namespace OHOS
     {
         return directory.c_str();
     }
+
+    int RecordingModel::RecordDataWriteToFile()
+    {
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[%d]:RecordDataWriteToFile,%d", __LINE__, RecordingMp3FileCount);
+        if (0 == RecordingMp3FileCount)
+        {
+            return OHOS_FAILURE;
+        }
+
+        FILE *fp = fopen(recordInfoFile.c_str(), "wb+");
+        if (nullptr == fp)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[%d]:RecordDataWriteToFile fail", __LINE__);
+            return OHOS_FAILURE;
+        }
+
+        size_t ret = fwrite(recordingInfo, sizeof(RecordingInfo), RecordingMp3FileCount, fp);
+        if (RecordingMp3FileCount != ret)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[%d]:RecordDataWriteToFile fail", __LINE__);
+        }
+        fclose(fp);
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[%d]:RecordDataWriteToFile success", __LINE__);
+
+        return OHOS_SUCCESS;
+    }
+
+    int RecordingModel::RecordDataReadToFile()
+    {
+        if (0 == RecordingMp3FileCount)
+        {
+            return OHOS_FAILURE;
+        }
+        FILE *fp = fopen(recordInfoFile.c_str(), "rb");
+        if (fp == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[%d]:RecordDataReadToFile", __LINE__);
+            return OHOS_FAILURE;
+        }
+        fread(recordingInfo, sizeof(RecordingInfo), RecordingMp3FileCount, fp);
+        fclose(fp);
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[%d]:RecordDataReadToFile success", __LINE__);
+        return OHOS_SUCCESS;
+    }
     /* ----------------------------------- 定时器 ---------------------------------- */
     // 声明定时器变量
     osTimerId_t g_timer = NULL;
@@ -689,17 +791,18 @@ namespace OHOS
             seconds = std::to_string(sec);
         }
 
-#if 0
+#if 1
         if (hour == 0)
         {
-            recordDuration = minute + ":" + seconds;
+            recordTempDuration = minute + ":" + seconds;
         }
         else
         {
-            recordDuration = hours + ":" + minute + ":" + seconds;
+            recordTempDuration = hours + ":" + minute + ":" + seconds;
         }
-#endif
         recordDuration = hours + ":" + minute + ":" + seconds;
+#endif
+
         return (char *)recordDuration.c_str();
     }
 
index 964f1ee..1bca762 100644 (file)
@@ -101,7 +101,7 @@ namespace OHOS
         button->SetImageSrc(buttonconfig.ImageSrc, buttonconfig.ImageSrc);\r
         button->SetImagePosition(20, 20);\r
         button->SetStyle(STYLE_BORDER_RADIUS, 100);\r
-        button->SetStyleForState(STYLE_BACKGROUND_COLOR, 0xffff5a36, UIButton::PRESSED);\r
+        button->SetStyleForState(STYLE_BACKGROUND_OPA, 0x00, UIButton::PRESSED);\r
         button->SetOnClickListener(clickListener);\r
         return button;\r
     }\r
@@ -132,13 +132,13 @@ namespace OHOS
     {\r
         LabelConfig labelconfig = {\r
             .left = 83,\r
-            .top = 52,\r
+            .top = 50,\r
             .width = 300,\r
             .height = 35,\r
             .fontSize = 30,\r
             .lineHeigh = 35,\r
-            .text = "录音3",\r
-            .lineBreakMode = UILabel::LINE_BREAK_MARQUEE,\r
+            .text = "",\r
+            .lineBreakMode = UILabel::LINE_BREAK_OSCILLATION,\r
         };\r
 \r
         RecordingFileName = SetUpLabel(labelconfig);\r
@@ -151,13 +151,14 @@ namespace OHOS
         labelconfig.top = 102;\r
         labelconfig.fontSize = 28;\r
         labelconfig.lineHeigh = 33;\r
-        labelconfig.text = "2022.04.21 -20:57";\r
+        labelconfig.text = "";\r
         RecordingTimeAndDuration = SetUpLabel(labelconfig);\r
         if (nullptr == RecordingTimeAndDuration)\r
         {\r
             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RecordingPlayerView::RecordingTimeAndDuration is nullptr!");\r
             return false;\r
         }\r
+        RecordingTimeAndDuration->SetTextColor(Color::GetColorFromRGBA(0x99, 0x99, 0x99, 0xff));\r
         return true;\r
     }\r
 \r
index 65a93fb..487dc76 100644 (file)
@@ -2,7 +2,7 @@
  * @Author: luozheng 1732036298@qq.com\r
  * @Date: 2024-03-30 09:14:38\r
  * @LastEditors: luozheng 1732036298@qq.com\r
- * @LastEditTime: 2024-08-23 18:35:16\r
+ * @LastEditTime: 2024-08-27 17:48:39\r
  * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/record/src/RecordingPresenter.cpp\r
  */\r
 \r
 #include "string.h"\r
 #include "record/include/RecordingPresenter.h"\r
 #include <wearable_log.h>\r
-#include "../../../../../../drivers/peripheral/utils/custom_utils.h"\r
+#include "custom_utils.h"\r
 #include "record/include/RecordingListitemView.h"\r
 #include <service/graphic_service.h>\r
 #include <unistd.h>\r
 #include "record/include/RecordingModel.h"\r
+#include <cstring>\r
 \r
 namespace OHOS\r
 {\r
@@ -49,7 +50,7 @@ namespace OHOS
         p_RecordingModel->InitRecordingListItem();\r
         p_RecordingModel->AudioInit();\r
         Presenter<RecordingView>::OnStart();\r
-        //ScreenAlwaysOnCtr(OPEN_SCREEN_ALWAYS_ON);\r
+        // ScreenAlwaysOnCtr(OPEN_SCREEN_ALWAYS_ON);\r
     }\r
 \r
     void RecordingPresenter::OnPause(void)\r
@@ -67,7 +68,9 @@ namespace OHOS
     {\r
         Presenter<RecordingView>::OnStop();\r
         p_RecordingModel->ClearRecordingPlayer();\r
-        //ScreenAlwaysOnCtr(CANCEL_SCREEN_ALWAYS_ON);\r
+        StopRecord();\r
+\r
+        // ScreenAlwaysOnCtr(CANCEL_SCREEN_ALWAYS_ON);\r
     }\r
 \r
     bool RecordingPresenter::OnDrag(UIView &view, const DragEvent &event)\r
@@ -100,20 +103,20 @@ namespace OHOS
 \r
         switch (event.GetDragDirection())\r
         {\r
-        case DragEvent::DIRECTION_LEFT_TO_RIGHT:\r
+        case DragEvent::DIRECTION_LEFT_TO_RIGHT: // 右滑退出\r
             switch (currentView)\r
             {\r
             case RECORDINGVIEW:\r
                 NativeAbility::GetInstance().Back(TransitionType::TRANSITION_BACK_TO_HEXAGONS);\r
                 break;\r
             case RECORDINGPLAYERVIEW:\r
-                p_RecordingView->ChangeView(RECORDINGPLAYERVIEW, RECORDINGLISTVIEW);\r
+                p_RecordingView->ChangeView(RECORDINGPLAYERVIEW, RECORDINGLISTVIEW); // 录音播放视图(subView)->录音列表视图(subView)\r
                 break;\r
             case RECORDINGDELETEVIEW:\r
-                p_RecordingView->ChangeView(RECORDINGDELETEVIEW, RECORDINGPLAYERVIEW);\r
+                p_RecordingView->ChangeView(RECORDINGDELETEVIEW, RECORDINGPLAYERVIEW); // 录音删除视图(subView)->录音播放视图(subView)\r
                 break;\r
             case RECORDINGVOLUMESETTINGVIEW:\r
-                p_RecordingView->ChangeView(RECORDINGVOLUMESETTINGVIEW, RECORDINGPLAYERVIEW);\r
+                p_RecordingView->ChangeView(RECORDINGVOLUMESETTINGVIEW, RECORDINGPLAYERVIEW); // 声音设置视图(subView)->录音播放视图(subView)\r
                 break;\r
             default:\r
                 break;\r
@@ -155,30 +158,78 @@ namespace OHOS
         return 1; // 转换成功\r
     }\r
 \r
-    /*\r
-     * @brief 删除文件\r
-     */\r
-    void RecordingPresenter::deleteFile(const char *filepath)\r
+#ifdef __cplusplus\r
+    extern "C"\r
     {\r
-        if (std::remove(filepath) == 0)\r
+#endif\r
+        int32_t AudioCaptureSample(int32_t argc, const char *argv[]);\r
+\r
+#ifdef __cplusplus\r
+    };\r
+#endif\r
+\r
+    /*开始录音*/\r
+    void RecordingPresenter::StartRecord(void)\r
+    {\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "RecordingView StartRecord");\r
+        char *args[6] = {0};\r
+        const char *defaultArgs[6] = {"01", "mp3", "16000", "1", "16", nullptr}; // 默认参数数组\r
+        for (int i = 0; i < 5; ++i)\r
+        {\r
+            args[i] = (char *)malloc(16);           // 分配内存\r
+            sprintf(args[i], "%s", defaultArgs[i]); // 设置默认参数值\r
+        }\r
+        args[5] = (char *)malloc(100); // 分配内存\r
+        /* -------------------------------------------------------------------------- */\r
+        int num = p_RecordingModel->GetRecordingListNum();\r
+        std::string recordfileNme;\r
+        if (num < 9)\r
         {\r
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Deleted file: %s successed!", filepath);\r
+            recordfileNme = "record_0" + std::to_string(num + 1);\r
         }\r
         else\r
         {\r
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to delete file!");\r
+            recordfileNme = "record_" + std::to_string(num + 1);\r
+        }\r
+        p_RecordingModel->SetRecordFileName(recordfileNme);\r
+        sprintf(args[5], "%s%s.mp3", RecordingModel::GetInstance()->GetRecordDirectory(), recordfileNme.c_str());\r
+        /* ---------------------------------- 开始录音 ---------------------------------- */\r
+        AudioCaptureSample(6, (const char **)args);\r
+        /* --------------------------------- 跳转到录音界面 -------------------------------- */\r
+        view_->ChangeView(RECORDINGVIEW, RECORDGOINGVIEW);\r
+        p_RecordingModel->Recording_StartTimer();\r
+        RecordGoingView::GetInstance()->GetRecordingDurationLabel()->SetText("00:00:00");\r
+        /* ---------------------------------- 释放内存 ---------------------------------- */\r
+        for (int i = 0; i < 6; ++i)\r
+        {\r
+            free(args[i]);\r
         }\r
     }\r
 \r
-#ifdef __cplusplus\r
-    extern "C"\r
+    // 停止录音\r
+    void RecordingPresenter::StopRecord(void)\r
     {\r
-#endif\r
-        int32_t AudioCaptureSample(int32_t argc, const char *argv[]);\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "RecordingView StopRecord");\r
+        int32_t argc = 1;\r
+        uint8_t *argv = (uint8_t *)"stop";\r
+        AudioCaptureSample(argc, (const char **)&argv);\r
+        /* ---------------------------------- 停止定时器 --------------------------------- */\r
+        p_RecordingModel->Recording_StopTimer();\r
+        /* --------------------------------- 设置录音信息 --------------------------------- */\r
+        int index = p_RecordingModel->GetRecordingListNum();                            // 保存录音的下标\r
+        std::string recordingFileName = p_RecordingModel->GetRecordFileName();          // 录音文件名\r
+        std::string yyymmhhh_date = RecordingModel::GetInstance()->Getyyyymmhhh_date(); // 保存录音年月日时间\r
+        std::string TotalRecordDuration = RecordingModel::recordTempDuration;           // 录音的总时长\r
+        RecordingInfo info = {0};\r
+        strncpy_s(info.recordingFileName, 32, recordingFileName.c_str(), recordingFileName.length());\r
+        strncpy_s(info.recordingDuration, 16, TotalRecordDuration.c_str(), TotalRecordDuration.length());\r
+        strncpy_s(info.recordingTime, 16, yyymmhhh_date.c_str(), yyymmhhh_date.length());\r
+        p_RecordingModel->SetRecordingInfo(info, index);\r
+        p_RecordingModel->SetRecordingListNum(index + 1);\r
+        p_RecordingModel->RecordDataWriteToFile();\r
 \r
-#ifdef __cplusplus\r
-    };\r
-#endif\r
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RecordingView StopRecord over!!");\r
+    }\r
 \r
     bool RecordingPresenter::OnClick(UIView &view, const ClickEvent &event)\r
     {\r
@@ -191,61 +242,25 @@ namespace OHOS
 \r
         if (strcmp(view.GetViewId(), RECORD_BUTTON) == 0)\r
         {\r
-            char *args[6] = {0};\r
-            const char *defaultArgs[6] = {"01", "mp3", "16000", "1", "16", nullptr}; // 默认参数数组\r
-\r
-            for (int i = 0; i < 5; ++i)\r
-            {\r
-                args[i] = (char *)malloc(25);           // 分配内存\r
-                sprintf(args[i], "%s", defaultArgs[i]); // 设置默认参数值\r
-            }\r
-            args[5] = (char *)malloc(100); // 分配内存\r
-\r
-            char *numericDateTime = (char *)malloc(20);\r
-            uapi_get_yyyymmddhhmmss_Date(numericDateTime); // 获取形如:19700101000641格式的日期时间\r
-            char formattedDateTime[80];\r
-            if (convertNumericDateTime(numericDateTime, formattedDateTime))\r
-            {\r
-                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Formatted DateTime: %s\n", formattedDateTime);\r
-                sprintf(args[5], "%s%s.mp3", RecordingModel::GetInstance()->GetRecordDirectory(), formattedDateTime);\r
-            }\r
-            else\r
-            {\r
-                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to convert numeric date time\n", formattedDateTime);\r
-            }\r
-            /* ---------------------------------- 开始录音 ---------------------------------- */\r
-            AudioCaptureSample(6, (const char **)args);\r
-            /* --------------------------------- 跳转到录音界面 -------------------------------- */\r
-            p_RecordingView->ChangeView(RECORDINGVIEW, RECORDGOINGVIEW);\r
-            p_RecordingModel->Recording_StartTimer(1000);\r
-            RecordGoingView::GetInstance()->GetRecordingDurationLabel()->SetText("00:00:00");\r
-            /* ---------------------------------- 释放内存 ---------------------------------- */\r
-            for (int i = 0; i < 6; ++i)\r
-            {\r
-                free(args[i]);\r
-            }\r
-            free(numericDateTime);\r
-            /* -------------------------------------------------------------------------- */\r
+            StartRecord();\r
             return true;\r
         }\r
         else if (strcmp(view.GetViewId(), RECORD_GOING_BUTTON_VIEWID) == 0)\r
         {\r
-            int32_t argc = 1;\r
-            uint8_t *argv = (uint8_t *)"stop";\r
-            AudioCaptureSample(argc, (const char **)&argv);\r
-            p_RecordingView->ChangeView(RECORDGOINGVIEW, RECORDINGVIEW);\r
-            p_RecordingModel->Recording_StopTimer();\r
+            StopRecord();\r
+            view_->ChangeView(RECORDGOINGVIEW, RECORDINGVIEW);\r
             return true;\r
         }\r
-        else if (strcmp(view.GetViewId(), RECORD_DELETE_ON_BUTTON_VIEWID) == 0)\r
+        else if (strcmp(view.GetViewId(), RECORD_DELETE_ON_BUTTON_VIEWID) == 0) // 若点击的是录音删除按钮\r
         {\r
-            std::string fileName = RecordingModel::GetInstance()->GetRecordDirectory() + p_RecordingModel->GetFileNames()[p_RecordingModel->GetClickRecordingIndex()] + ".mp3";\r
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "fileName:%s\n", fileName.c_str());\r
-            deleteFile(fileName.c_str());\r
-            if (--p_RecordingModel->GetRecordingListNum() < 0)\r
-            {\r
-                p_RecordingModel->GetRecordingListNum() = 0;\r
-            }\r
+            int index = p_RecordingModel->GetClickRecordingIndex();\r
+            // std::string delete_path = RecordingModel::GetInstance()->GetRecordDirectory();\r
+            // std::string delete_filename = p_RecordingModel->GetFileNames()[index] + ".mp3";\r
+            // std::string fileName = delete_path + delete_filename;\r
+            // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "index = %d ", index);\r
+            // uapi_delete_files(fileName.c_str());//删除录音文件\r
+            p_RecordingModel->UpdateRecordingInfo(p_RecordingModel->GetRecordingListNum() - index - 1);\r
+\r
             p_RecordingView->ChangeView(RECORDINGDELETEVIEW, RECORDINGVIEW);\r
             return true;\r
         }\r
@@ -290,7 +305,7 @@ namespace OHOS
             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RecordingModel GetInstance fail");\r
             return false;\r
         }\r
-        p_RecordingModel->KeepClickRecordingIndex(index);\r
+        p_RecordingModel->SetClickRecordingIndex(index);\r
         /* ------------------------ 录音播放初始化,包括录音文件名,录音时间和总时长 ------------------------ */\r
         if (p_RecordingModel->RecordingPlayerInit(index) != OHOS_SUCCESS)\r
         {\r
@@ -337,9 +352,6 @@ namespace OHOS
         return true;\r
     }\r
 \r
-    /*\r
-     * @brief 播放按钮被点击\r
-     */\r
     void RecordingPlayerViewOnClickListener::PlayerButtonOnClick(void)\r
     {\r
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RecordingPlayerViewOnClickListener PlayerButtonOnClick");\r
@@ -415,34 +427,26 @@ namespace OHOS
             return false;\r
         }\r
 \r
-        if (strcmp(view.GetViewId(), RECORD_PLAY_PAUSE_CHECKBOX_VIEWID) == 0)\r
+        if (strcmp(view.GetViewId(), RECORD_PLAY_PAUSE_CHECKBOX_VIEWID) == 0) // 播放和暂停按钮被点击\r
         {\r
             PlayerButtonOnClick();\r
         }\r
-        else if (strcmp(view.GetViewId(), RECORD_PLAY_PROVE_BUTTON_VIEWID) == 0)\r
+        else if (strcmp(view.GetViewId(), RECORD_PLAY_PROVE_BUTTON_VIEWID) == 0) // 上一首按钮被点击\r
         {\r
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "recording player prove button being clicked!");\r
-\r
             p_RecordingModel->PreviousPlayout();\r
-\r
             p_RecordingPlayerView->ResetComponentStatus();\r
         }\r
-        else if (strcmp(view.GetViewId(), RECORD_PLAY_NEXT_BUTTON_VIEWID) == 0)\r
+        else if (strcmp(view.GetViewId(), RECORD_PLAY_NEXT_BUTTON_VIEWID) == 0) // 下一首按钮被点击\r
         {\r
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "recording player next button being clicked!");\r
-\r
             p_RecordingModel->NextPlayout();\r
-\r
             p_RecordingPlayerView->ResetComponentStatus();\r
         }\r
-        else if (strcmp(view.GetViewId(), RECORD_PLAY_DELETE_BUTTON_VIEWID) == 0)\r
+        else if (strcmp(view.GetViewId(), RECORD_PLAY_DELETE_BUTTON_VIEWID) == 0) // 删除按钮被点击\r
         {\r
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "recording player delete button being clicked!");\r
             p_RecordingView->ChangeView(RECORDINGPLAYERVIEW, RECORDINGDELETEVIEW);\r
         }\r
-        else if (strcmp(view.GetViewId(), RECORD_PLAY_VOLUME_BUTTON_VIEWID) == 0)\r
+        else if (strcmp(view.GetViewId(), RECORD_PLAY_VOLUME_BUTTON_VIEWID) == 0) // 音量按钮被点击\r
         {\r
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "recording player volume button being clicked!");\r
             p_RecordingView->ChangeView(RECORDINGPLAYERVIEW, RECORDINGVOLUMESETTINGVIEW);\r
         }\r
         return true;\r
index 6781eef..d1e297b 100644 (file)
@@ -5,24 +5,88 @@
 #include "../include/RecordingModel.h"\r
 namespace OHOS\r
 {\r
-    static ImageAnimatorInfo RecordingViewImageAnimatorInfo[2] = {\r
-        {PNG_ANIMATOR1_IMAGE, {213, 400}, 40, 40, IMG_SRC_FILE_PATH},\r
-        {PNG_ANIMATOR2_IMAGE, {213, 400}, 40, 40, IMG_SRC_FILE_PATH},\r
-    };\r
-\r
     static RecordingView *g_pRecordView{nullptr};\r
-\r
     RecordingView::RecordingView()\r
     {\r
         WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "RecordingView::RecordingView");\r
         g_pRecordView = this;\r
     }\r
-\r
     RecordingView::~RecordingView()\r
     {\r
         WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "RecordingView::~RecordingView");\r
         g_pRecordView = nullptr;\r
     }\r
+    void RecordingView::ClearAll(void)\r
+    {\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "RecordingView::~RecordingView");\r
+        if (container_ != nullptr)\r
+        {\r
+            container_->RemoveAll();\r
+            if (RecordingViewScrollView[RECORDINGVIEW] != nullptr)\r
+            {\r
+                RecordingViewScrollView[RECORDINGVIEW]->RemoveAll();\r
+\r
+                if (RecordingViewTitleLabel != nullptr)\r
+                {\r
+                    delete RecordingViewTitleLabel;\r
+                    RecordingViewTitleLabel = nullptr;\r
+                }\r
+                if (RecordingViewButton != nullptr)\r
+                {\r
+                    delete RecordingViewButton;\r
+                    RecordingViewButton = nullptr;\r
+                }\r
+                if (AttentionLabel != nullptr)\r
+                {\r
+                    delete AttentionLabel;\r
+                    AttentionLabel = nullptr;\r
+                }\r
+                if (RECORD1_Image != nullptr)\r
+                {\r
+                    delete RECORD1_Image;\r
+                    RECORD1_Image = nullptr;\r
+                }\r
+                if (pullUp_Image != nullptr)\r
+                {\r
+                    delete pullUp_Image;\r
+                    pullUp_Image = nullptr;\r
+                }\r
+                delete RecordingViewScrollView[RECORDINGVIEW];\r
+                RecordingViewScrollView[RECORDINGVIEW] = nullptr;\r
+            }\r
+            if (p_RecordListView != nullptr)\r
+            {\r
+                delete p_RecordListView;\r
+                p_RecordListView = nullptr;\r
+            }\r
+            if (p_RecordGoingView != nullptr)\r
+            {\r
+                delete p_RecordGoingView;\r
+                p_RecordGoingView = nullptr;\r
+            }\r
+            if (p_RecordingPlayerView != nullptr)\r
+            {\r
+                delete p_RecordingPlayerView;\r
+                p_RecordingPlayerView = nullptr;\r
+            }\r
+            if (p_RecordDeleteView != nullptr)\r
+            {\r
+                delete p_RecordDeleteView;\r
+                p_RecordDeleteView = nullptr;\r
+            }\r
+            if (p_RecordingVolumeSettingView != nullptr)\r
+            {\r
+                delete p_RecordingVolumeSettingView;\r
+                p_RecordingVolumeSettingView = nullptr;\r
+            }\r
+            for (int i = RECORDINGVIEW; i < MAX_RECORDINGVIEWID; i++)\r
+            {\r
+                RecordingViewScrollView[i] = nullptr;\r
+            }\r
+            delete container_;\r
+            container_ = nullptr;\r
+        }\r
+    }\r
 \r
     RecordingView *RecordingView::GetInstance()\r
     {\r
@@ -79,9 +143,9 @@ namespace OHOS
             RecordingViewScrollView[thisView] = p_RecordListView->RecordListViewInit();\r
             container_->Add(RecordingViewScrollView[thisView]);\r
         }\r
-        else\r
+        if (p_RecordListView)\r
         {\r
-            RecordListView::GetInstance()->RefreshRecordingListData();\r
+            p_RecordListView->RefreshRecordingListData();\r
         }\r
         return true;\r
     }\r
@@ -145,6 +209,8 @@ namespace OHOS
             RecordingViewScrollView[thisView] = p_RecordDeleteView->RecordDeleteViewInit();\r
             container_->Add(RecordingViewScrollView[thisView]);\r
         }\r
+        std::string name = RecordingModel::GetInstance()->GetCurrentPlayRecordingName();\r
+        p_RecordDeleteView->SetRecordDeleteName(name.c_str());\r
         return true;\r
     }\r
 \r
@@ -218,68 +284,6 @@ namespace OHOS
         Draw();\r
     }\r
 \r
-    void RecordingView::ClearAll(void)\r
-    {\r
-        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "RecordingView::~RecordingView");\r
-        if (container_ != nullptr)\r
-        {\r
-            container_->RemoveAll();\r
-            delete container_;\r
-            container_ = nullptr;\r
-        }\r
-\r
-        if (RecordingViewScrollView[RECORDINGVIEW] != nullptr)\r
-        {\r
-            RecordingViewScrollView[RECORDINGVIEW]->RemoveAll();\r
-            delete RecordingViewScrollView[RECORDINGVIEW];\r
-            RecordingViewScrollView[RECORDINGVIEW] = nullptr;\r
-        }\r
-\r
-        RecordingViewImageAnimator->Stop();\r
-        delete RecordingViewImageAnimator;\r
-        RecordingViewImageAnimator = nullptr;\r
-\r
-        delete RecordingViewTitleLabel;\r
-        RecordingViewTitleLabel = nullptr;\r
-\r
-        delete RecordingViewButton;\r
-        RecordingViewButton = nullptr;\r
-\r
-        delete AttentionLabel;\r
-        AttentionLabel = nullptr;\r
-\r
-        delete RECORD1_Image;\r
-        RECORD1_Image = nullptr;\r
-\r
-        if (p_RecordListView != nullptr)\r
-        {\r
-            delete p_RecordListView;\r
-            p_RecordListView = nullptr;\r
-        }\r
-        if (p_RecordGoingView != nullptr)\r
-        {\r
-            delete p_RecordGoingView;\r
-            p_RecordGoingView = nullptr;\r
-        }\r
-        if (p_RecordingPlayerView != nullptr)\r
-        {\r
-            delete p_RecordingPlayerView;\r
-            p_RecordingPlayerView = nullptr;\r
-        }\r
-\r
-        if (p_RecordDeleteView != nullptr)\r
-        {\r
-            delete p_RecordDeleteView;\r
-            p_RecordDeleteView = nullptr;\r
-        }\r
-\r
-        if (p_RecordingVolumeSettingView != nullptr)\r
-        {\r
-            delete p_RecordingVolumeSettingView;\r
-            p_RecordingVolumeSettingView = nullptr;\r
-        }\r
-    }\r
-\r
     UIButton *RecordingView::SetTheButton(ButtonConfig &buttonconfig, UIView::OnClickListener *clickListener)\r
     {\r
         UIButton *button = new UIButton();\r
@@ -319,35 +323,39 @@ namespace OHOS
     bool RecordingView::RecordingLabelViewInit(void)\r
     {\r
         WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "RecordingView::RecordingLabelViewInit");\r
-        RecordingViewTitleLabel = new UILabelExt();\r
         if (RecordingViewTitleLabel == nullptr)\r
         {\r
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RecordingViewTitleLabel new fail!");\r
-            return false;\r
+            RecordingViewTitleLabel = new UILabelExt();\r
+            if (RecordingViewTitleLabel == nullptr)\r
+            {\r
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RecordingViewTitleLabel new fail!");\r
+                return false;\r
+            }\r
         }\r
-        RecordingViewTitleLabel->SetPosition(83, 52, 300, 35);\r
+        RecordingViewTitleLabel->SetPosition(83, 50, 300, 35);\r
         RecordingViewTitleLabel->SetStyle(STYLE_BACKGROUND_OPA, 0xff);\r
         RecordingViewTitleLabel->SetStyle(STYLE_TEXT_FONT, 30);\r
         RecordingViewTitleLabel->SetStyle(STYLE_LINE_HEIGHT, 35);\r
-        // RecordingViewTitleLabel->SetText("录音机");\r
-        RecordingViewTitleLabel->SetTextId(STR_RECORDER);\r
-        RecordingViewTitleLabel->SetLineBreakMode(UILabel::LINE_BREAK_MARQUEE);\r
+        RecordingViewTitleLabel->SetTextId(STR_RECORDER); // 录音机\r
+        RecordingViewTitleLabel->SetLineBreakMode(UILabel::LINE_BREAK_OSCILLATION);\r
         RecordingViewTitleLabel->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
         RecordingViewTitleLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);\r
         /* -------------------------------------------------------------------------- */\r
-        AttentionLabel = new UILabelExt();\r
         if (AttentionLabel == nullptr)\r
         {\r
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AttentionLabel new fail!");\r
-            return false;\r
+            AttentionLabel = new UILabelExt();\r
+            if (AttentionLabel == nullptr)\r
+            {\r
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AttentionLabel new fail!");\r
+                return false;\r
+            }\r
         }\r
         AttentionLabel->SetPosition(53, 330, 360, 35);\r
         AttentionLabel->SetStyle(STYLE_BACKGROUND_OPA, 0xff);\r
         AttentionLabel->SetStyle(STYLE_TEXT_FONT, 30);\r
         AttentionLabel->SetStyle(STYLE_LINE_HEIGHT, 35);\r
-        // AttentionLabel->SetText("点击开始录音");\r
-        AttentionLabel->SetTextId(STR_CLICK_TO_RECORD);\r
-        AttentionLabel->SetLineBreakMode(UILabel::LINE_BREAK_MARQUEE);\r
+        AttentionLabel->SetTextId(STR_CLICK_TO_RECORD); // 点击开始录音\r
+        AttentionLabel->SetLineBreakMode(UILabel::LINE_BREAK_OSCILLATION);\r
         AttentionLabel->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
         AttentionLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);\r
 \r
@@ -376,35 +384,32 @@ namespace OHOS
     bool RecordingView::RecordingImageViewInit(void)\r
     {\r
         WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "RecordingView::RecordingImageViewInit");\r
-        RECORD1_Image = new UIImageView();\r
         if (RECORD1_Image == nullptr)\r
         {\r
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RECORD1_Image new fail!");\r
-            return false;\r
+            RECORD1_Image = new UIImageView();\r
+            if (RECORD1_Image == nullptr)\r
+            {\r
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RECORD1_Image new fail!");\r
+                return false;\r
+            }\r
         }\r
         RECORD1_Image->SetPosition(158, 129, 150, 150);\r
         RECORD1_Image->SetStyle(STYLE_BORDER_RADIUS, 10);\r
         RECORD1_Image->SetSrc(PNG_RECORD1_IMAGE);\r
-\r
-        return true;\r
-    }\r
-\r
-    bool RecordingView::RecordingImageAnimatorViewInit(void)\r
-    {\r
-        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "RecordingView::RecordingImageAnimatorViewInit");\r
-        RecordingViewImageAnimator = new UIImageAnimatorView();\r
-        if (RecordingViewImageAnimator == nullptr)\r
+        /* -------------------------------------------------------------------------- */\r
+        if (pullUp_Image == nullptr)\r
         {\r
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RecordingViewImageAnimator new fail!");\r
-            return false;\r
+            pullUp_Image = new UIImageView();\r
+            if (pullUp_Image == nullptr)\r
+            {\r
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "pullUp_Image new fail!");\r
+                return false;\r
+            }\r
         }\r
-        RecordingViewImageAnimator->SetPosition(213, 400, 40, 40);\r
-        RecordingViewImageAnimator->SetStyle(STYLE_BACKGROUND_OPA, 0xff);\r
-        RecordingViewImageAnimator->SetImageAnimatorSrc(RecordingViewImageAnimatorInfo, 2, 200);\r
-        RecordingViewImageAnimator->SetTimeOfPause(200);\r
-        RecordingViewImageAnimator->SetRepeatTimes(1);\r
-        RecordingViewImageAnimator->SetReverse(true);\r
-        RecordingViewImageAnimator->Start();\r
+        pullUp_Image->SetPosition(213, 400, 40, 40);\r
+        pullUp_Image->SetAutoEnable(false);\r
+        pullUp_Image->SetResizeMode(UIImageView::CONTAIN);\r
+        pullUp_Image->SetSrc("/user/res/Sleep/up.bin");\r
 \r
         return true;\r
     }\r
@@ -415,7 +420,7 @@ namespace OHOS
         WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "RecordingView::RecordingViewInit");\r
         // 如果其中任何一个初始化函数返回 false(即初始化失败),则会打印错误日志并返回空指针。\r
         if (!RecordingScrollViewInit() || !RecordingLabelViewInit() ||\r
-            !RecordingButtonViewInit() || !RecordingImageViewInit() || !RecordingImageAnimatorViewInit())\r
+            !RecordingButtonViewInit() || !RecordingImageViewInit())\r
         {\r
             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RecordingViewInit fail!!");\r
             return;\r
@@ -424,7 +429,7 @@ namespace OHOS
         RecordingViewScrollView[RECORDINGVIEW]->Add(RECORD1_Image);\r
         RecordingViewScrollView[RECORDINGVIEW]->Add(RecordingViewButton);\r
         RecordingViewScrollView[RECORDINGVIEW]->Add(AttentionLabel);\r
-        RecordingViewScrollView[RECORDINGVIEW]->Add(RecordingViewImageAnimator);\r
+        RecordingViewScrollView[RECORDINGVIEW]->Add(pullUp_Image);\r
         container_->Add(RecordingViewScrollView[RECORDINGVIEW]);\r
     }\r
 \r
@@ -434,7 +439,6 @@ namespace OHOS
         View<RecordingPresenter>::OnStart();\r
         SetContainerView(new UIViewGroup());\r
         container_->SetPosition(0, 0, Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight());\r
-        // container_->SetOnDragListener(presenter_);\r
         container_->SetTouchable(true);\r
         container_->SetDraggable(true);\r
 \r
index 28c8f54..3e67abf 100644 (file)
@@ -2,12 +2,13 @@
  * @Author: luozheng 1732036298@qq.com
  * @Date: 2024-03-13 17:38:18
  * @LastEditors: luozheng 1732036298@qq.com
- * @LastEditTime: 2024-06-13 11:21:31
+ * @LastEditTime: 2024-08-26 18:16:06
  * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/record/src/RecordingVolumeSettingView.cpp
  */
 #include "record/include/RecordingVolumeSettingView.h"
 #include "record/include/RecordingPresenter.h"
-
+#include "wearable_log.h"
+#include "ConfigModel.h"
 namespace OHOS
 {
 
@@ -50,7 +51,7 @@ namespace OHOS
             return nullptr;
         }
         RecordingVolumeSettingViewScrollView = p_SoundAndVibrationVolumeSettingView->SetUpVolumeProcess();
-        UIView::OnDragListener * volumeDragListener = static_cast<UIView::OnDragListener *>(RecordingPresenter::GetInstance());
+        UIView::OnDragListener *volumeDragListener = static_cast<UIView::OnDragListener *>(RecordingPresenter::GetInstance());
         if (volumeDragListener == nullptr)
         {
             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RecordingPresenter GetInstance fail");
@@ -63,6 +64,7 @@ namespace OHOS
             return nullptr;
         }
 
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "volume:%d", AudioManager::GetInstance().GetVolume(AUDIO_STREAM_MUSIC));
         p_SoundAndVibrationVolumeSettingView->GetVolumeProcess()->SetValue(AudioManager::GetInstance().GetVolume(AUDIO_STREAM_MUSIC));
 
         initViewStatus = true;
index ec6f1b8..bc327dc 100644 (file)
@@ -2,7 +2,7 @@
  * @Author: luozheng 1732036298@qq.com
  * @Date: 2024-04-19 18:59:49
  * @LastEditors: luozheng 1732036298@qq.com
- * @LastEditTime: 2024-04-22 18:35:35
+ * @LastEditTime: 2024-08-26 18:27:45
  * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/soundandvibration/include/SoundAndVibrationVolumeSettingC.h
  */
 #ifndef SOUND_AND_VIBRATION_VOLUME_SETTINGC_H
@@ -18,7 +18,9 @@ extern "C"
 #include <stdbool.h>
 
     void SystemVolumeSet(int16_t sounding);
+    int SystemVolumeGet(void);
     void CallVolumeSet(int16_t sounding);
+    int CallVolumeGet(void);
     // void VibationModeSet(int value);
     void SilentModelSet(bool isopen);
 #ifdef __cplusplus
index d05d2ed..a78d37d 100644 (file)
@@ -5,6 +5,7 @@
 #include "phoneservice/include/PhoneAudio.h"\r
 #include "phoneservice/include/PhoneService.h"\r
 #include "ConfigModel.h"\r
+#include <custom_utils.h>\r
 namespace OHOS\r
 {\r
 \r
@@ -122,7 +123,7 @@ namespace OHOS
             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "CallVolumeView::p_SoundAndVibrationVolumeSettingView is nullptr!");\r
             return false;\r
         }\r
-        int callVolume = ConfigModel::GetInstance()->GetCallVolume();\r
+        int callVolume = uapi_callVolumeGet();\r
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "CallVolume = %d", callVolume);\r
         p_SoundAndVibrationVolumeSettingView->GetVolumeProcess()->SetValue(callVolume);\r
 \r
index 6908038..f7e444c 100644 (file)
@@ -2,7 +2,7 @@
  * @Author: luozheng 1732036298@qq.com
  * @Date: 2024-04-19 10:08:31
  * @LastEditors: luozheng 1732036298@qq.com
- * @LastEditTime: 2024-08-01 09:55:37
+ * @LastEditTime: 2024-08-26 18:54:00
  * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/soundandvibration/src/SoundAndVibrationVolumeSettingPresenter.cpp
  */
 #include "soundandvibration/include/SoundAndVibrationVolumeSettingPresenter.h"
@@ -123,19 +123,6 @@ namespace OHOS
     void VoumeProcessSliderEventListener::ChangeVolumeValue(uint8_t status, uint8_t value)
     {
         FindAndApplyStrategy(status, value);
-
-        SoundAndVibrationVolumeSettingView *view = SoundAndVibrationVolumeSettingView::GetInstance();
-        if (view)
-        {
-            if (view->GetVolumeType() == SYSTEM_VOLUME)
-            {
-                ConfigModel::GetInstance()->SetSystemVolume(value);
-            }
-            else if (view->GetVolumeType() == CALL_VOLUME)
-            {
-                ConfigModel::GetInstance()->SetCallVolume(value);
-            }
-        }
     }
 
     // 滑块变化事件处理
@@ -231,24 +218,24 @@ extern "C"
         Audio::AudioManager::GetInstance().SetVolume(AUDIO_STREAM_MUSIC, sounding); // 系统音量设置
     }
 
+    int SystemVolumeGet(void)
+    {
+        return Audio::AudioManager::GetInstance().GetVolume(AUDIO_STREAM_MUSIC);
+    }
+
     /*
      * @brief 通话音量设置
      */
     void CallVolumeSet(int16_t sounding)
     {
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "CallVolumeSet %d", sounding);
-        // PhoneAudioSetVolume(sounding); // 通话音量音量设置
-        // SetSpeakerVolume(sounding);
         Audio::AudioManager::GetInstance().SetVolume(AUDIO_STREAM_VOICE_CALL_BT_SCO, sounding); // 系统音量设置
     }
 
-    // /*
-    //  * @brief 震动模式设置
-    //  */
-    // void VibationModeSet(int value)
-    // {
-    //     custom_VibratorFunc_int(value);
-    // }
+    int CallVolumeGet(void)
+    {
+        return Audio::AudioManager::GetInstance().GetVolume(AUDIO_STREAM_VOICE_CALL_BT_SCO);
+    }
 
     /*
      * @brief 静音模式设置
index 30db852..398f61a 100644 (file)
@@ -2,7 +2,7 @@
  * @Author: luozheng 1732036298@qq.com\r
  * @Date: 2024-06-12 11:44:04\r
  * @LastEditors: luozheng 1732036298@qq.com\r
- * @LastEditTime: 2024-07-23 16:58:58\r
+ * @LastEditTime: 2024-08-26 18:56:26\r
  * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/soundandvibration/src/SystemVolumeView.cpp\r
  */\r
 #include "soundandvibration/include/SystemVolumeView.h"\r
@@ -10,6 +10,7 @@
 #include "wearable_log.h"\r
 #include <audio_manager.h>\r
 #include "ConfigModel.h"\r
+#include <custom_utils.h>\r
 /*\r
 系统音量:\r
 通话,提醒,查找手表的音量\r
@@ -131,9 +132,9 @@ namespace OHOS
             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "CallVolumeView::p_SoundAndVibrationVolumeSettingView is nullptr!");\r
             return false;\r
         }\r
-        int systemVolume = ConfigModel::GetInstance()->GetSystemVolume();\r
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemVolume = %d", systemVolume);\r
-        p_SoundAndVibrationVolumeSettingView->GetVolumeProcess()->SetValue(systemVolume);\r
+        int SystemVolume = uapi_systemVolumeGet();\r
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemVolume = %d", SystemVolume);\r
+        p_SoundAndVibrationVolumeSettingView->GetVolumeProcess()->SetValue(SystemVolume);\r
 \r
         return true;\r
     }\r
index e5c711c..67705d4 100644 (file)
@@ -1907,8 +1907,6 @@ int Get_RaiseToWake(void) //获取抬婉亮屏开关
 }
 void Set_SystemVolume(int value) //设置系统音量
 {
-    OHOS::ConfigModel *p_ConfigModel  =  OHOS::ConfigModel::GetInstance();
-    p_ConfigModel->SetSystemVolume(value);
     uapi_systemVolumeSet(value);
 #ifdef FD230
     SendMsgToUIService(UI_UPDATE_SYSTEM_VOLUME,0,nullptr,0);
@@ -1918,14 +1916,10 @@ void Set_SystemVolume(int value) //设置系统音量
 
 int Get_SystemVolume(void) //获取系统音量
 {
-    OHOS::ConfigModel *p_ConfigModel  =  OHOS::ConfigModel::GetInstance();
-    
-    return p_ConfigModel->GetSystemVolume();
+    return uapi_systemVolumeGet();
 }
 void Set_CallVolume(int value) //设置通话音量
 {
-    OHOS::ConfigModel *p_ConfigModel  =  OHOS::ConfigModel::GetInstance();
-    p_ConfigModel->SetCallVolume(value);
     uapi_callVolumeSet(value);
 #ifdef FD230
     SendMsgToUIService(UI_UPDATE_CALL_VOLUME,0,nullptr,0);
@@ -1935,9 +1929,7 @@ void Set_CallVolume(int value) //设置通话音量
 
 int Get_CallVolume(void) //获取通话音量
 {
-    OHOS::ConfigModel *p_ConfigModel  =  OHOS::ConfigModel::GetInstance();
-    
-    return p_ConfigModel->GetCallVolume();
+    return uapi_callVolumeGet();
 }
 
 uint8_t ble_is_ready(void)
diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/record/animator1.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/record/animator1.bin
deleted file mode 100644 (file)
index 2593117..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:48cee7cf0d85cf1a537ba3c456e9dcfc6f2b439863e5106211519e57ca6d18fd
-size 1144
diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/record/animator2.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/record/animator2.bin
deleted file mode 100644 (file)
index 4fdc1b7..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:389beb90ee0bfe28a4969e4d2ba0aee17fb8f6b524356611c00ad2127254d199
-size 4504
index b27ad32..fae6fa0 100644 (file)
@@ -71,8 +71,6 @@ namespace OHOS
             CONFIGMODEL_ITEM_SPORTS_GOAL_DISTANCE,    //运动目标距离
             CONFIGMODEL_ITEM_DNOTDISTURB,//勿扰模式
             CONFIGMODEL_ITEM_MESSAGE_UNREAD,//未读状态
-            CONFIGMODEL_ITEM_SYSTEM_VOLUME,//系统音量
-            CONFIGMODEL_ITEM_CALL_VOLUME,//通话音量
             CONFIGMODEL_ITEM_VOLTE_CALL,//VoLTE通话
             CONFIGMODEL_ITEM_MOTIONRECOGNITION,//运动识别
             CONFIGMODEL_ITEM_HFP, //通话蓝牙开关
@@ -217,12 +215,6 @@ namespace OHOS
 
         /* ----------------------------- 声音与震动相关set与get ----------------------------- */
         
-        void SetSystemVolume(int value);
-        int GetSystemVolume(void);
-
-        void SetCallVolume(int value);
-        int GetCallVolume(void);
-        
         void SetDmpFactoryStatus(int state);
         int GetDmpFactoryStatus(void);
 
@@ -326,8 +318,6 @@ namespace OHOS
             {ConfigDataType::DATATYPE_INT,     "goal_distance",             "8"   },// CONFIGMODEL_ITEM_SPORTS_GOAL_DISTANCE,    //运动目标距离   8.0(km)
             {ConfigDataType::DATATYPE_BOOL,    "dnotdisturb",              "false" },// CONFIGMODEL_ITEM_DNOTDISTURB //勿扰模式默认关闭
             {ConfigDataType::DATATYPE_BOOL,    "unread",              "false"},//CONFIGMODEL_ITEM_MESSAGE_UNREAD//未读状态默认未读
-            {ConfigDataType::DATATYPE_INT,     "system_volume",             "100"  },// CONFIGMODEL_ITEM_SYSTEM_VOLUME //
-            {ConfigDataType::DATATYPE_INT,     "call_volume",               "100"  },// CONFIGMODEL_ITEM_CALL_VOLUME //
             {ConfigDataType::DATATYPE_BOOL,    "voltecall",                "true" },// CONFIGMODEL_ITEM_VOLTE_CALL #默认是开启VOLTE
             {ConfigDataType::DATATYPE_BOOL,    "motion_recognition",        "false" },// CONFIGMODEL_ITEM_MOTIONRECOGNITION
             {ConfigDataType::DATATYPE_BOOL,    "hfp",                      "true" },// CONFIGMODEL_ITEM_HFP
index 2a0a6dd..e9d40b8 100644 (file)
@@ -1,8 +1,8 @@
 /*
  * @Author: luozheng 1732036298@qq.com
  * @Date: 2024-04-17 09:32:03
- * @LastEditors: penglei 1624952103@qq.com
- * @LastEditTime: 2024-08-19 10:16:53
+ * @LastEditors: luozheng 1732036298@qq.com
+ * @LastEditTime: 2024-08-26 19:20:26
  * @FilePath: /FD230/code/sdk/drivers/peripheral/config/include/ConfigModelC.h
  */
 #ifndef _CONFIG_MODEL_C_H_
@@ -46,11 +46,6 @@ void cm_initializeScreenDuration(void);
  */
 void cm_initializeRaiseToWake(void);
 
-/*
- * @brief 初始化系统音量和通话音量 
- */
-void cm_initializeVolume(void);
-
 /*
  * @brief 初始化震动模式 
  */
index f66f121..d43d098 100644 (file)
@@ -1123,32 +1123,6 @@ namespace OHOS
         return get_configData_int(CONFIGMODEL_ITEM_SCREEN_BRIGHTNESS_VALUE);
     }
 
-    //设置系统音量
-    void ConfigModel::SetSystemVolume(int value)
-    {
-        set_condigData_Int(CONFIGMODEL_ITEM_SYSTEM_VOLUME,value);
-        //uapi_systemVolumeSet(value);
-    }
-
-    //获取系统音量
-    int ConfigModel::GetSystemVolume(void)
-    {
-        return get_configData_int(CONFIGMODEL_ITEM_SYSTEM_VOLUME);
-    }
-
-    //设置通话音量
-    void ConfigModel::SetCallVolume(int value)
-    {
-        set_condigData_Int(CONFIGMODEL_ITEM_CALL_VOLUME,value);
-        //uapi_callVolumeSet(value);
-    }
-    
-    //获取通话音量
-    int ConfigModel::GetCallVolume(void)
-    {
-        return get_configData_int(CONFIGMODEL_ITEM_CALL_VOLUME);
-    }
-
     //设置运动识别是否开启
     void ConfigModel::SetMotionRecognition(bool state)
     {
@@ -1367,15 +1341,6 @@ void cm_initializeRaiseToWake(void)
     }
 }
 
-void cm_initializeVolume(void)
-{
-    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "cm_initializeVolume");
-    int systemVolume =  OHOS::ConfigModel::GetInstance()->GetSystemVolume();
-    int callVolume = OHOS::ConfigModel::GetInstance()->GetCallVolume();
-    uapi_systemVolumeSet(systemVolume);
-    uapi_callVolumeSet(callVolume);
-}
-
 void cm_initializeVibrationModel(void)
 {
     WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "cm_initializeVibrationModel");
index 1bbb96a..4352510 100644 (file)
@@ -353,7 +353,6 @@ void startup_post_init_task(void)
     cm_initScreenBrightness();
     cm_initializeScreenDuration();
     cm_initializeRaiseToWake();
-    cm_initializeVolume();
     cm_initializeVibrationModel();
     cm_initializeSilentModel();
     // cm_initializeVoLTECall();
@@ -1134,6 +1133,12 @@ void uapi_systemVolumeSet(int16_t sounding)
     #endif
 }
 
+/*系统声音获取*/
+int uapi_systemVolumeGet(void)
+{
+    return SystemVolumeGet();
+}
+
 //通话音量设置
 void uapi_callVolumeSet(int16_t sounding)
 {
@@ -1142,13 +1147,12 @@ void uapi_callVolumeSet(int16_t sounding)
     #endif
 }
 
-// //震动强度设置
-// void uapi_vibrationModeSet(int value)
-// {
-//     #ifdef FD230
-//     VibationModeSet(value);
-//     #endif
-// }
+//通话音量获取
+int uapi_callVolumeGet(void)
+{
+    return CallVolumeGet();
+}
+
 
 //设置是否静音
 void uapi_setSilentMode(bool isopen)
index 66602c2..4a096c2 100644 (file)
@@ -114,7 +114,9 @@ void uapi_setScreenDuration(int32_t time);
 int32_t uapi_get_screen_state(void);
 
 void uapi_systemVolumeSet(int16_t sounding);
+int uapi_systemVolumeGet(void);
 void uapi_callVolumeSet(int16_t sounding);
+int uapi_callVolumeGet(void);
 // void uapi_vibrationModeSet(int value);
 void uapi_setSilentMode(bool isopen);
 void uapi_set4GCapability(bool isopen);