修改录音列表视图
authorluozheng <1732036298@qq.com>
Mon, 4 Mar 2024 09:25:01 +0000 (17:25 +0800)
committerluozheng <1732036298@qq.com>
Mon, 4 Mar 2024 09:25:01 +0000 (17:25 +0800)
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/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/RecordingPresenter.cpp
code/sdk/drivers/peripheral/utils/custom_utils.c
code/sdk/drivers/peripheral/utils/custom_utils.h

index e16a37d..15d07eb 100644 (file)
@@ -16,6 +16,16 @@ namespace OHOS
         MAX_RECORDINGVIEWID,\r
     } RECORDINGVIEWID;\r
 \r
+    class RecordListViewOnClickListener : public UIView::OnClickListener\r
+    {\r
+    public:\r
+        RecordListViewOnClickListener() {}\r
+\r
+        ~RecordListViewOnClickListener() {}\r
+\r
+        bool OnClick(UIView &view, const ClickEvent &event) override;\r
+    };\r
+\r
     class RecordingView;\r
     class RecordingPresenter : public Presenter<RecordingView>,\r
                                public UIView::OnClickListener,\r
@@ -32,13 +42,13 @@ namespace OHOS
         void OnStop() override;\r
 \r
         static RecordingPresenter *GetInstance();\r
-\r
+        int convertNumericDateTime(const char *numericDateTime, char *formattedDateTime);\r
     private:\r
         // 因为继承了OnClickListener,所以有OnClick属性,至于参数,原函数也这样直接继承;\r
         bool OnClick(UIView &view, const ClickEvent &event) override;\r
         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
+        bool OnKeyAct(UIView &view, const KeyEvent &event) override;\r
     };\r
 }\r
 \r
index 12d8220..025a2e0 100644 (file)
@@ -12,6 +12,7 @@
 #include "components/ui_image_animator.h"\r
 \r
 #include "record/include/RecordListView.h"\r
+#include "record/include/RecordGoingView.h"\r
 namespace OHOS\r
 {\r
     static const char *RECORD_BUTTON = "RecordButton";  //录音按钮\r
@@ -47,7 +48,7 @@ namespace OHOS
 \r
     private:\r
         RecordListView *p_RecordListView{nullptr};\r
-\r
+        RecordGoingView*p_RecordGoingView{nullptr};\r
     private:\r
         void RecordingViewInit(void);\r
         void ClearAll(void);\r
index 39492d1..c8a094f 100644 (file)
@@ -102,7 +102,7 @@ namespace OHOS
             .height = 35,\r
             .fontSize = 30,\r
             .lineHeigh = 35,\r
-            .text = "音乐列表",\r
+            .text = "录音列表",\r
             .lineBreakMode = UILabel::LINE_BREAK_ADAPT,\r
         };\r
 \r
@@ -120,7 +120,7 @@ namespace OHOS
             .height = 124,\r
             .fontSize = 26,\r
             .lineHeigh = 30,\r
-            .text = "当前音乐列表为空",\r
+            .text = "当前录音列表为空",\r
             .lineBreakMode = UILabel::LINE_BREAK_ELLIPSIS,\r
         };\r
         RecordListViewAttentionLabel = SetUpLabel(labelconfig);\r
@@ -141,7 +141,7 @@ namespace OHOS
     {\r
         // UIList 的适配器\r
         p_RecordingListAdapter = new RecordingListAdapter();\r
-        p_RecordingListAdapter->SetItemClickListener(RecordingPresenter::GetInstance());\r
+        p_RecordingListAdapter->SetItemClickListener(new RecordListViewOnClickListener());\r
         recordList = new UIList();\r
         if (recordList == nullptr)\r
         {\r
index 6486bed..cfb483c 100644 (file)
@@ -45,9 +45,9 @@ namespace OHOS
         m_button.SetStyle(STYLE_BACKGROUND_COLOR, 0xff191919);
         m_button.SetStyleForState(STYLE_BACKGROUND_COLOR, 0xff4FC34C, UIButton::PRESSED);
 
-        SetLabelStyle(m_recordId, 45, 33, 96, 35, textColor, 30);
-        SetLabelStyle(m_recordTotalTime, 258, 19, 73, 35, textColor, 30);
-        SetLabelStyle(m_recordTime, 237, 57, 94, 23, subTextColor, 20);
+        SetLabelStyle(m_recordId, 35, 33, 96, 35, textColor, 25);
+        SetLabelStyle(m_recordTotalTime, 268, 19, 73, 35, textColor, 25);
+        SetLabelStyle(m_recordTime, 247, 57, 94, 23, subTextColor, 20);
     }
 
     void RecordingListitemView::SetLabelStyle(UILabel &label, int x, int y, int width, int height, OHOS::ColorType textColor, int fontSize)
index 9561353..3d1f560 100644 (file)
@@ -5,6 +5,7 @@
 #include "bts_a2dp_source.h"
 #include "audio_manager.h"
 #include <wearable_log.h>
+#include "../../../../../../drivers/peripheral/utils/custom_utils.h"
 
 namespace OHOS
 {
@@ -181,6 +182,7 @@ namespace OHOS
     void RecordingModel::InitRecordingListItem()
     {
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RecordingModel::InitRecordingListItem");
+        char *date = uapi_get_CurrentDate();//获取日期
         RecordingMp3FileCount = 0;
         if (!fileNames.empty())
         {
@@ -202,13 +204,10 @@ namespace OHOS
             }
             else
             {
-                int cnt = 1;
                 // 对 Recordings 数组进行操作
                 for (int i = 0; i < RecordingMp3FileCount; i++)
                 {
-                    Recordings[i] = {i,fileNames[i].c_str(),"09:51", "2022.04.21"};
-                    //std::string Id = "recording" + std::to_string(cnt++);
-                    //Recordings[i] = {i, Id.c_str(), "09:51", "2022.04.21"};
+                    Recordings[i] = {i, fileNames[i].c_str(), "09:51", date};
                 }
                 // 记得在不需要使用 Recordings 后释放内存
                 // free(Recordings);
index 919ea0e..98a0882 100644 (file)
@@ -5,7 +5,9 @@
 #include "record/include/RecordingPresenter.h"\r
 #include "record/include/RecordingModel.h"\r
 #include <wearable_log.h>\r
-#include "custom_utils.h"\r
+#include "../../../../../../drivers/peripheral/utils/custom_utils.h"\r
+#include "record/include/RecordingListitemView.h"\r
+\r
 namespace OHOS\r
 {\r
 \r
@@ -34,7 +36,7 @@ namespace OHOS
         // 初始化录音信息\r
         RecordingModel::GetInstance()->InitRecordingListItem();\r
         Presenter<RecordingView>::OnStart();\r
-        ScreenControl(1);\r
+        ScreenAlwaysOnCtr(1);\r
     }\r
 \r
     void RecordingPresenter::OnPause(void)\r
@@ -51,7 +53,7 @@ namespace OHOS
     void RecordingPresenter::OnStop(void)\r
     {\r
         Presenter<RecordingView>::OnStop();\r
-        ScreenControl(0);\r
+        ScreenAlwaysOnCtr(0);\r
     }\r
 \r
     bool RecordingPresenter::OnDrag(UIView &view, const DragEvent &event)\r
@@ -95,6 +97,29 @@ namespace OHOS
         return false;\r
     }\r
 \r
+    /// @brief 解析时间\r
+    /// @param numericDateTime "19700101000641"; // 输入的数字形式日期时间\r
+    /// @param formattedDateTime\r
+    /// @return\r
+    int RecordingPresenter::convertNumericDateTime(const char *numericDateTime, char *formattedDateTime)\r
+    {\r
+        if (strlen(numericDateTime) != 14)\r
+        {\r
+            return 0; // 如果输入的数字长度不为14,则转换失败\r
+        }\r
+\r
+        struct tm timeinfo = {0};\r
+        if (strptime(numericDateTime, "%Y%m%d%H%M%S", &timeinfo) == NULL)\r
+        {\r
+            return 0; // 解析失败\r
+        }\r
+\r
+        // 格式化输出为上午/下午几点几分几秒\r
+        strftime(formattedDateTime, 80, "%p %I点%M分%S秒", &timeinfo);\r
+\r
+        return 1; // 转换成功\r
+    }\r
+\r
 #ifdef __cplusplus\r
     extern "C"\r
     {\r
@@ -107,37 +132,41 @@ namespace OHOS
 \r
     bool RecordingPresenter::OnClick(UIView &view, const ClickEvent &event)\r
     {\r
-\r
-        // 根据控件id查找是哪个控件触发了点击回调\r
         if (strcmp(view.GetViewId(), RECORD_BUTTON) == 0)\r
         {\r
-            // 将参数保存到数组中\r
-            char *args[6] = {0}; //{"01", "mp3", "16000", "1", "16", "/user/res/record/recording/recordyyyymmddhhmmss.mp3"};\r
-            int argc = 6;\r
-            args[0] = (char *)malloc(25);\r
-            args[1] = (char *)malloc(25);\r
-            args[2] = (char *)malloc(25);\r
-            args[3] = (char *)malloc(25);\r
-            args[4] = (char *)malloc(25);\r
-            args[5] = (char *)malloc(100);\r
-\r
-            sprintf(args[0], "01");\r
-            sprintf(args[1], "mp3");\r
-            sprintf(args[2], "16000");\r
-            sprintf(args[3], "1");\r
-            sprintf(args[4], "16");\r
-            uapi_get_recordfilename(args[5]);\r
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Recording....");\r
-            AudioCaptureSample(argc, (const char **)args);\r
-            NativeAbility::GetInstance().ChangeSlice(VIEW_RECORD_GOING);\r
+            char *args[6] = {0};\r
+            const char *defaultArgs[6] = {"01", "mp3", "16000", "1", "16", nullptr}; // 默认参数数组\r
 \r
-            free(args[0]);\r
-            free(args[1]);\r
-            free(args[2]);\r
-            free(args[3]);\r
-            free(args[4]);\r
-            free(args[5]);\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], "/user/res/record/recording/%s.mp3", 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
+            NativeAbility::GetInstance().ChangeSlice(VIEW_RECORD_GOING);\r
+            /* ---------------------------------- 释放内存 ---------------------------------- */\r
+            for (int i = 0; i < 6; ++i)\r
+            {\r
+                free(args[i]);\r
+            }\r
+            free(numericDateTime);\r
+            /* -------------------------------------------------------------------------- */\r
             return true;\r
         }\r
         return true;\r
@@ -155,4 +184,19 @@ namespace OHOS
         }\r
         return true;\r
     }\r
+\r
+    bool RecordListViewOnClickListener::OnClick(UIView &view, const ClickEvent &event)\r
+    {\r
+        UNUSED(event);\r
+        RecordingListitemView *p_RecordingListitemView = static_cast<RecordingListitemView *>(&view);\r
+        int index = p_RecordingListitemView->GetRecordingListIndex();\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "RecordListViewOnClickListener::OnClick index:%d\n", index);\r
+        if (index >= RecordingModel::GetInstance()->GetRecordingListNum())\r
+        {\r
+            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "RecordListViewOnClickListener::OnClick is no index");\r
+            return false;\r
+        }\r
+\r
+        return true;\r
+    }\r
 }
\ No newline at end of file
index 210913a..aaffb26 100644 (file)
@@ -284,7 +284,31 @@ errcode_t uapi_set_time_from_cat1(char* cat1time)
     return ERRCODE_SUCC;
 }       
 
-errcode_t uapi_get_recordfilename(char *date)
+/// @brief 获取日期 
+char *uapi_get_CurrentDate(void)
+{
+
+    time_t rawtime;
+    struct tm* timeinfo;
+    time(&rawtime);
+    timeinfo = localtime(&rawtime);
+    char *buffer = (char*)malloc(80); // 动态分配内存
+    if(buffer == NULL)
+    {
+        return NULL; // 内存分配失败
+    }
+
+    // 格式化输出当前时间为 "YYYY-MM-DD HH:MM:SS" 形式
+    sprintf(buffer,"%04d.%02d.%02d\n",
+    timeinfo->tm_year + 1900,
+    timeinfo->tm_mon + 1,
+    timeinfo->tm_mday);
+    
+    return buffer;
+}
+
+/// @brief 获取日期
+errcode_t uapi_get_yyyymmddhhmmss_Date(char *date)
 {
     if(date != NULL)
     {
@@ -293,7 +317,7 @@ errcode_t uapi_get_recordfilename(char *date)
         time(&rawtime);
         timeinfo = localtime(&rawtime);
 
-        sprintf(date,"/user/res/record/recording/recording%04d%02d%02d%02d%02d%02d.mp3",
+        sprintf(date,"%04d%02d%02d%02d%02d%02d",
         timeinfo->tm_year + 1900,
         timeinfo->tm_mon + 1,
         timeinfo->tm_mday,
@@ -304,7 +328,9 @@ errcode_t uapi_get_recordfilename(char *date)
     return ERRCODE_SUCC;
 }
 
-void ScreenControl(uint8_t turnOnFlag)
+/// @brief 控制屏幕是否常亮
+/// @param turnOnFlag 1:常亮屏幕 0:取消常亮 
+void ScreenAlwaysOnCtr(uint8_t turnOnFlag)
 {
     const power_display_svr_api_t *display_api = power_display_svr_get_api();
     if(turnOnFlag)
index 4b45e55..56d78e7 100644 (file)
@@ -12,6 +12,7 @@
 #include "hal_gpio.h"
 #include "soc_osal.h"
 #include "platform_core.h"
+#include <errcode.h>
 
 #ifdef __cplusplus
 #if __cplusplus
@@ -31,9 +32,11 @@ errcode_t uapi_get_timestampe_ms(uint64_t *tm);
 errcode_t uapi_set_time_from_cat1(char* cat1time);
 
 /**获取日期*/
-errcode_t uapi_get_recordfilename(char *date);
+errcode_t uapi_get_yyyymmddhhmmss_Date(char *date);
 
-void ScreenControl(uint8_t turnOnFlag);
+char *uapi_get_CurrentDate(void);
+
+void  ScreenAlwaysOnCtr(uint8_t turnOnFlag);
 
 errcode_t uapi_get_btaddr(uint8_t *buf_btaddr, uint32_t *len_btaddr);
 /**