添加切换语言slice切换功能实现
authorluozheng <1732036298@qq.com>
Sat, 30 Mar 2024 09:18:03 +0000 (17:18 +0800)
committerluozheng <1732036298@qq.com>
Sat, 30 Mar 2024 09:18:03 +0000 (17:18 +0800)
20 files changed:
code/sdk/application/wearable/fd230app/CMakeLists.txt
code/sdk/application/wearable/fd230app/nativelauncher/include/AppViewIDs.h
code/sdk/application/wearable/fd230app/nativelauncher/include/NativeLauncher.h
code/sdk/application/wearable/fd230app/nativelauncher/src/NativeLauncher.cpp
code/sdk/application/wearable/fd230app/nativeui/applist/src/ApplistModel.cpp
code/sdk/application/wearable/fd230app/nativeui/language/LanguageInit.cpp
code/sdk/application/wearable/fd230app/nativeui/language/LanguageInit.h
code/sdk/application/wearable/fd230app/nativeui/language/include/LanguageSwitchListAdapter.h [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/language/include/LanguageSwitchListitemView.h [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/language/include/LanguageSwitchModel.h [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/language/include/LanguageSwitchPresenter.h [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/language/include/LanguageSwitchView.h [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/language/src/LanguageSwitchListAdapter.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/language/src/LanguageSwitchListitemView.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/language/src/LanguageSwitchModel.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/language/src/LanguageSwitchPresenter.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/language/src/LanguageSwitchView.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/settings/src/SettingPresenter.cpp
code/sdk/application/wearable/service/msg_center/include/notify/pairing_notification.h
code/sdk/application/wearable/service/msg_center/src/notify/pairing_notification.cpp

index 0eb2c53..c334b0d 100644 (file)
@@ -252,6 +252,11 @@ set(SOURCES
     ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/heart_blood/src/HeartCardView.cpp
     ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/heart_blood/health_service/health_service.cpp
 
+    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/language/src/LanguageSwitchListAdapter.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/language/src/LanguageSwitchListitemView.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/language/src/LanguageSwitchPresenter.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/language/src/LanguageSwitchView.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/language/src/LanguageSwitchModel.cpp
 
     ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/language/LanguageInit.cpp
     ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/config/src/ConfigModel.cpp
index 10a3c04..83875d2 100644 (file)
@@ -55,6 +55,7 @@ typedef enum : uint16_t
     VIEW_FAST_TRAINING,           // 快速训练
     VIEW_FAST_TRAINING_ATTENTION, // 快速训练项目选择超出提示
     VIEW_FIND_PHONE,              // 查找手机
+    VIEW_LANGUAGE_SWITCH,         // 语言切换
     /* ----------------------------------- 录音 ----------------------------------- */
     VIEW_RECORD,
     /* ---------------------------------- 界面 ---------------------------------- */
index dddba6b..59c4144 100644 (file)
@@ -44,6 +44,7 @@ namespace OHOS
         void InitDisplayBrightnessSlice(void);
         void InitClassicBluetoothSlice(void);
         void InitFindPhoneSlice(void);
+        void InitLanguageSwitchSlice(void);
         /* --------------------------------界面------------------------------------ */
         void InitRotateSlice(void);
         void InitBloodSlice(void);
index e403524..6ed5ba0 100644 (file)
 #include "findphone/include/FindPhonePresenter.h"
 #include "findphone/include/FindPhoneView.h"
 
+#include "language/include/LanguageSwitchPresenter.h"
+#include "language/include/LanguageSwitchView.h"
 /* -------------------------------------------------------------------------- */
 #include "traing/include/TraingView.h"
 #include "traing/include/TraingPresenter.h"
@@ -258,6 +260,7 @@ namespace OHOS
 
         {VIEW_RECORD, &NativeLauncher::InitRecordingSlice}, // 录音实例化地址
         {VIEW_FIND_PHONE, &NativeLauncher::InitFindPhoneSlice},
+        {VIEW_LANGUAGE_SWITCH,&NativeLauncher::InitLanguageSwitchSlice},
         {VIEW_MESSAGE, &NativeLauncher::InitMessageSlice},
         {VIEW_ROTATE, &NativeLauncher::InitRotateSlice},
         {VIEW_DIALUPDATE, &NativeLauncher::InitDialUpdateSlice},
@@ -1084,4 +1087,18 @@ namespace OHOS
         }
         NativeAbility::GetInstance().AddSliceProxy(VIEW_FIND_PHONE, findphoneview);
     }
+
+    //语言切换
+    void NativeLauncher::InitLanguageSwitchSlice(void)
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "NativeLauncher::InitLanguageSwitchSlice");
+        SliceProxy *languageswitchview = new AbilitySliceProxy<LanguageSwitchView, LanguageSwitchPresenter>;
+        if (languageswitchview == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "languageswitchview");
+            return;
+        }
+        NativeAbility::GetInstance().AddSliceProxy(VIEW_LANGUAGE_SWITCH, languageswitchview);
+    }
+    
 }
index 5cfa7ec..50d1588 100644 (file)
@@ -37,6 +37,7 @@ namespace OHOS
         {VIEW_CALLER_LOG, PNG_APPLIST_CALLLOG_IMAGE, PNG_APPLIST_CALLLOG_IMAGE, "通话记录", nullptr},
         {VIEW_PHONE, PNG_APPLIST_CALLER_IMAGE, PNG_APPLIST_CALLER_IMAGE, "电话", nullptr},
         {VIEW_CONNECT_PHONE, PNG_CONNECT_PHONE_IMAGE, PNG_CONNECT_PHONE_IMAGE, "连接手机", nullptr},
+        {VIEW_LANGUAGE_SWITCH, PNG_CONNECT_PHONE_IMAGE, PNG_CONNECT_PHONE_IMAGE, "语言切换", nullptr},
 #ifdef SUPPORT_ALIPAY_SEC
         {VIEW_MAIN_ALIPAY, PNG_APPLIST_ALIPAY_IMAGE, PNG_APPLIST_ALIPAY_IMAGE, "支付宝", nullptr},
 #endif
index 86570cf..b141cab 100644 (file)
@@ -1,3 +1,10 @@
+/*
+ * @Author: luozheng 1732036298@qq.com
+ * @Date: 2024-03-30 09:14:38
+ * @LastEditors: luozheng 1732036298@qq.com
+ * @LastEditTime: 2024-03-30 16:10:56
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/language/LanguageInit.cpp
+ */
 #include <fstream>
 #include <string>
 #include <cstdio>
 
 namespace OHOS
 {
-    // 定义语言结构体
-    struct Language
-    {
-        const char *code;
-        const char *name;
-        const char *description;
-    };
-
     // 初始化 languages 数组
     struct Language languages[] = {
-        {"zh_CN", "中文", "中文"},
-        {"en", "English", "英语"},
-        {"ja", "日本語", "日语"},
-        {"ko", "한국어", "韩语"},
-        {"es", "Español", "西班牙语"},
-        {"ru", "Русский", "俄语"},
-        {"hr", "Hrvatski", "克罗地亚语"},
-        {"de", "Deutsch", "德语"},
-        {"pt", "Português", "葡萄牙语"},
-        {"fr", "Français", "法语"},
-        {"nl", "Nederlands", "荷兰语"},
-        {"it", "Italiano", "意大利语"},
-        {"cs", "Čeština", "捷克语"},
-        {"el", "Ελληνικά", "希腊语"},
-        {"hi", "हिन्दी", "印地语"},
-        {"id", "Bahasa Indonesia", "印尼语"},
-        {"ms", "Bahasa Melayu", "马来语"},
-        {"pl", "Polski", "波兰语"},
-        {"th", "ไทย", "泰语"},
-        {"vi", "Tiếng Việt", "越南语"},
-        {"fi", "Suomi", "芬兰语"},
-        {"ro", "Română", "罗马尼亚语"},
-        {"tr", "Türkçe", "土耳其语"},
-        {"fa", "فارسی", "波斯语"},
-        {"ar", "العربية", "阿拉伯语"},
-        {"he", "עברית", "希伯来语"},
-        {"uk", "Українська", "乌克兰语"},
-        {"sv", "Svenska", "瑞典语"},
-        {"uz", "O‘zbek", "乌兹别克语"},
-        {"az", "Azərbaycan dili", "阿塞拜疆语"}};
+        {ZH_CN, "zh", "中文", "中文"},
+        {EN, "en", "English", "英语"},
+        {JA, "ja", "日本語", "日语"},
+        {KO, "ko", "한국어", "韩语"},
+        {ES, "es", "Español", "西班牙语"},
+        {RU, "ru", "Русский", "俄语"},
+        {HR, "hr", "Hrvatski", "克罗地亚语"},
+        {DE, "de", "Deutsch", "德语"},
+        {PT, "pt", "Português", "葡萄牙语"},
+        {FR, "fr", "Français", "法语"},
+        {NL, "nl", "Nederlands", "荷兰语"},
+        {IT, "it", "Italiano", "意大利语"},
+        {CS, "cs", "Čeština", "捷克语"},
+        {EL, "el", "Ελληνικά", "希腊语"},
+        {HI, "hi", "हिन्दी", "印地语"},
+        {ID, "id", "Bahasa Indonesia", "印尼语"},
+        {MS, "ms", "Bahasa Melayu", "马来语"},
+        {PL, "pl", "Polski", "波兰语"},
+        {TH, "th", "ไทย", "泰语"},
+        {VI, "vi", "Tiếng Việt", "越南语"},
+        {FI, "fi", "Suomi", "芬兰语"},
+        {RO, "ro", "Română", "罗马尼亚语"},
+        {TR, "tr", "Türkçe", "土耳其语"},
+        {FA, "fa", "فارسی", "波斯语"},
+        {AR, "ar", "العربية", "阿拉伯语"},
+        {HE, "he", "עברית", "希伯来语"},
+        {UK, "uk", "Українська", "乌克兰语"},
+        {SV, "sv", "Svenska", "瑞典语"},
+        {UZ, "uz", "O‘zbek", "乌兹别克语"},
+        {AZ, "az", "Azərbaycan dili", "阿塞拜疆语"},
+    };
 
     static const char *en = "user/res/font/en.lang";
-    static const char *zh_CN = "user/res/font/zh.lang";
+    static const char *zh = "user/res/font/zh.lang";
     static const uint8_t langcount = 2;
-    const char *resFiles[langcount] = {zh_CN, en};
+    const char *resFiles[langcount] = {zh, en};
 
     static language *g_planguage{nullptr};
 
-    /***
-     * @description: 通过元素找下标
-     * @param {char} *arr
-     * @param {int} size
-     * @param {char} *target
-     * @return {*}
-     * @brief
-     */
-    int FindIndex(const char *arr[], int size, const char *target)
-    {
-        for (int i = 0; i < size; i++)
-        {
-            if (strcmp(arr[i], target) == 0)
-            {
-                return i; // 返回找到的元素的下标
-            }
-        }
-        return -1; // 如果未找到目标元素,返回-1
-    }
-
     language::language()
     {
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "language::language");
@@ -94,6 +74,7 @@ namespace OHOS
     {
         return g_planguage;
     }
+
     bool language::InitLangues()
     {
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "InitLangues");
index 590f1c2..a3934b8 100644 (file)
@@ -1,16 +1,15 @@
-/***
- * @Author: Caisking 3449750381@qq.com
- * @Date: 2024-02-20 11:47:35
- * @LastEditors: Caisking 3449750381@qq.com
- * @LastEditTime: 2024-03-27 16:05:02
- * @FilePath: /sdk/application/wearable/fd230app/nativeui/language/LanguageInit.h
- * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
+/*
+ * @Author: luozheng 1732036298@qq.com
+ * @Date: 2024-03-30 09:30:03
+ * @LastEditors: luozheng 1732036298@qq.com
+ * @LastEditTime: 2024-03-30 15:57:41
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/language/LanguageInit.h
  */
 #ifndef LANGUAGE_INIT_H
 #define LANGUAGE_INIT_H
 
 #include <string>
-
+#include <map>
 namespace OHOS
 {
     // 定义语言ID的枚举类
@@ -45,8 +44,20 @@ namespace OHOS
         UK,
         SV,
         UZ,
-        AZ
+        AZ,
+        MAX_LANGUAGE,
+    };
+    // 定义语言结构体
+    struct Language
+    {
+        LanguageId languageid;
+        const char *code;
+        const char *name;
+        const char *description;
     };
+
+    // 声明 languages 数组为外部变量
+    extern Language languages[];
     class language
     {
     public:
@@ -57,6 +68,40 @@ namespace OHOS
         bool ChangeLanguage(int language_status);
         bool fileExists(const char *fileName);
     };
+
+    class LanguageManager
+    {
+    public:
+        static LanguageManager &GetInstance()
+        {
+            static LanguageManager instance;
+            return instance;
+        }
+        LanguageManager()
+        {
+            // 初始化语言代码到语言ID的映射关系
+            for (int i = 0; i < MAX_LANGUAGE; i++)
+            {
+                codeToIdMap[languages->code] = languages->languageid;
+            }
+        }
+        // 根据语言代码查找对应的语言ID
+        LanguageId GetLanguageIdByCode(const std::string &code) const
+        {
+            auto it = codeToIdMap.find(code);
+            if (it != codeToIdMap.end())
+            {
+                return it->second;
+            }
+            // 如果找不到对应的语言ID,返回一个默认值
+            return LanguageId::EN; // 这里假设默认返回英语
+        }
+        ~LanguageManager() {}
+
+    private:
+        // 假设有一个存储所有语言的容器 languages
+        std::map<std::string, LanguageId> codeToIdMap;
+    };
 }
 
 #endif
diff --git a/code/sdk/application/wearable/fd230app/nativeui/language/include/LanguageSwitchListAdapter.h b/code/sdk/application/wearable/fd230app/nativeui/language/include/LanguageSwitchListAdapter.h
new file mode 100644 (file)
index 0000000..eeb9120
--- /dev/null
@@ -0,0 +1,64 @@
+/*
+ * @Author: luozheng 1732036298@qq.com
+ * @Date: 2024-03-28 14:26:55
+ * @LastEditors: luozheng 1732036298@qq.com
+ * @LastEditTime: 2024-03-29 19:42:38
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/language/include/LanguageSwitchListAdapter.h
+ */
+#ifndef LANGUAGE_SWITCH_LIST_ADAPTER_H
+#define LANGUAGE_SWITCH_LIST_ADAPTER_H
+
+#include "components/abstract_adapter.h"
+#include "components/ui_label_button_ext.h"
+#include "components/ui_list.h"
+#include "language/LanguageInit.h"
+#include "common/image_cache_manager.h"
+#include "UiConfig.h"
+#include <list>
+#include "language/LanguageInit.h"
+namespace OHOS
+{
+    class LanguageSwitchListAdapter : public AbstractAdapter
+    {
+    public:
+        explicit LanguageSwitchListAdapter();
+        virtual ~LanguageSwitchListAdapter();
+
+        /* *
+         * @brief Sets the UIView adapter data, which is a Language linked list.
+         *
+         * @param data Indicates the Language linked list data.
+         * @since 1.0
+         * @version 1.0
+         */
+        void SetData(std::list<Language> &data);
+
+        void ClearData(void);
+        /* *
+         * @brief Obtains the <b>data</b> size of the UILabel adapter.
+         *
+         * @return Returns the <b>data</b> size of the UILabel adapter.
+         * @since 1.0
+         * @version 1.0
+         */
+        virtual uint16_t GetCount(void) override;
+
+        virtual UIView *GetView(UIView *inView, int16_t index) override;
+
+        virtual void AddListItem(const Language &item);
+
+        void SetItemClickListener(UIView::OnClickListener *itemclicklistener)
+        {
+            itemClickListener = itemclicklistener;
+        }
+
+    private:
+        std::list<Language> listData;
+        UIView::OnClickListener *itemClickListener{nullptr};
+        ImageInfo *NotSelectedImg;
+        ImageInfo *SelectedImg;
+    };
+
+}
+
+#endif
diff --git a/code/sdk/application/wearable/fd230app/nativeui/language/include/LanguageSwitchListitemView.h b/code/sdk/application/wearable/fd230app/nativeui/language/include/LanguageSwitchListitemView.h
new file mode 100644 (file)
index 0000000..babd0ae
--- /dev/null
@@ -0,0 +1,32 @@
+/*
+ * @Author: luozheng 1732036298@qq.com
+ * @Date: 2024-03-28 14:28:25
+ * @LastEditors: luozheng 1732036298@qq.com
+ * @LastEditTime: 2024-03-30 11:12:28
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/language/include/LanguageSwitchListitemView.h
+ */
+#ifndef LANGUAGE_SWITCH_LIST_ITEM_VIEW
+#define LANGUAGE_SWITCH_LIST_ITEM_VIEW
+
+#include "components/ui_view_group.h"
+#include "components/ui_label_button_ext.h"
+#include "language/include/LanguageSwitchListAdapter.h"
+
+namespace OHOS
+{
+    class LanguageSwitchListitemView : public UIViewGroup
+    {
+    public:
+        LanguageSwitchListitemView();
+        virtual ~LanguageSwitchListitemView();
+        virtual void SetItemInfo(const Language itemInfo);
+        virtual void SetUpChild();
+        UILabelButtonExt *GetUILabelButtonExt(void);
+    private:
+        LanguageSwitchListitemView(const LanguageSwitchListitemView &);
+        UILabelButtonExt m_LabelButtonExt;
+    };
+
+}
+
+#endif
diff --git a/code/sdk/application/wearable/fd230app/nativeui/language/include/LanguageSwitchModel.h b/code/sdk/application/wearable/fd230app/nativeui/language/include/LanguageSwitchModel.h
new file mode 100644 (file)
index 0000000..93b43f5
--- /dev/null
@@ -0,0 +1,37 @@
+/*
+ * @Author: luozheng 1732036298@qq.com
+ * @Date: 2024-03-28 16:36:58
+ * @LastEditors: luozheng 1732036298@qq.com
+ * @LastEditTime: 2024-03-30 15:31:58
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/language/include/LanguageSwitchModel.h
+ */
+
+#ifndef LANGUAGE_SWITCH_MODEL_H
+#define LANGUAGE_SWITCH_MODEL_H
+
+#include "language/include/LanguageSwitchListAdapter.h"
+
+namespace OHOS
+{
+
+    class LanguageSwitchModel
+    {
+    public:
+        static LanguageSwitchModel &GetInstance();
+        void SetCurLanguageCode(char * curlanguageid);
+        char * GetCurLanguageCode(void);
+        void SetLastLanguageCode(char * prelanguageid);
+        char * GetLastLanguageCode(void);
+
+    private:
+        LanguageSwitchModel() {}
+        ~LanguageSwitchModel() {}
+        LanguageSwitchModel(const LanguageSwitchModel &) = delete;
+        const LanguageSwitchModel &operator=(const LanguageSwitchModel &) = delete;
+        static const uint16_t LANGUAGE_ITEM_MAX = MAX_LANGUAGE; // 语言总数
+        char *CurLanguageCode = "zh";                             // 当前语言,默认简体中文
+        char *PreLanguageCode = nullptr;                          // 上一次切换的语言
+    };
+
+}
+#endif
diff --git a/code/sdk/application/wearable/fd230app/nativeui/language/include/LanguageSwitchPresenter.h b/code/sdk/application/wearable/fd230app/nativeui/language/include/LanguageSwitchPresenter.h
new file mode 100644 (file)
index 0000000..c0015eb
--- /dev/null
@@ -0,0 +1,49 @@
+/*
+ * @Author: luozheng 1732036298@qq.com
+ * @Date: 2024-03-28 14:16:52
+ * @LastEditors: luozheng 1732036298@qq.com
+ * @LastEditTime: 2024-03-30 16:15:40
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/language/include/LanguageSwitchPresenter.h
+ */
+#ifndef LANGUAGE_SWITCH_PRESENTER_H
+#define LANGUAGE_SWITCH_PRESENTER_H
+
+#include "Presenter.h"
+#include "View.h"
+#include "language/include/LanguageSwitchModel.h"
+#include "LanguageSwitchView.h"
+#include "language/include/LanguageSwitchListitemView.h"
+namespace OHOS
+{
+
+    class LanguageSwitchView;
+    class LanguageSwitchPresenter : public Presenter<LanguageSwitchView>,
+                                    public UIView::OnClickListener,
+                                    public RootView::OnKeyActListener,
+                                    public UIView::OnDragListener
+    {
+    public:
+        LanguageSwitchPresenter();
+        virtual ~LanguageSwitchPresenter();
+
+        void OnStart() override;
+        void OnPause() override;
+        void OnResume() override;
+        void OnStop() override;
+
+        static LanguageSwitchPresenter *GetInstance();
+        void SetLabelExt(UILabelExt *label);
+    private:
+        bool OnClick(UIView &view, const ClickEvent &event) override;
+        bool OnDrag(UIView &view, const DragEvent &event) override;
+        bool OnDragEnd(UIView &view, const DragEvent &event) override;
+        bool OnKeyAct(UIView &view, const KeyEvent &event) override; // 增加按键事件
+        LanguageSwitchModel *p_LanguageSwitchModel{nullptr};
+        UILabelButtonExt *LabelButton[MAX_LANGUAGE]{nullptr};
+        ImageInfo *NotSelectedImg;
+        ImageInfo *SelectedImg;
+        UILabelExt *m_labelext{nullptr};
+    };
+}
+
+#endif
\ No newline at end of file
diff --git a/code/sdk/application/wearable/fd230app/nativeui/language/include/LanguageSwitchView.h b/code/sdk/application/wearable/fd230app/nativeui/language/include/LanguageSwitchView.h
new file mode 100644 (file)
index 0000000..5ca6432
--- /dev/null
@@ -0,0 +1,48 @@
+/*
+ * @Author: luozheng 1732036298@qq.com
+ * @Date: 2024-03-28 11:58:38
+ * @LastEditors: luozheng 1732036298@qq.com
+ * @LastEditTime: 2024-03-30 16:33:22
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/language/include/LanguageSwitchView.h
+ */
+#ifndef LANGUAGE_SWITCH_VIEW_H
+#define LANGUAGE_SWITCH_VIEW_H
+
+#include "BaseView.h"
+#include "View.h"
+#include "components/ui_scroll_view.h"
+#include "components/ui_label_ext.h"
+#include "components/ui_list.h"
+#include "language/include/LanguageSwitchListAdapter.h"
+
+namespace OHOS
+{
+    class LanguageSwitchPresenter;
+    class LanguageSwitchView : public View<LanguageSwitchPresenter>
+    {
+
+    public:
+        LanguageSwitchView();
+        virtual ~LanguageSwitchView();
+        static LanguageSwitchView *GetInstance(void);
+
+        void OnStart() override;
+        void OnSetUpView() override;
+        void OnTearDownView() override;
+        void OnStop() override;
+        void AddLanguageItemToList(const Language &item);
+        UIList *GetLanguageList(void);
+    private:
+        void LanguageSwitchViewInit(void);
+        void ClearAll(void);
+        bool LanguageSwitchViewScrollViewInit(void);
+        bool LanguageSwitchViewTitleLabelInit(void);
+        bool LanguageListInit(void);
+        UIScrollView *LanguageSwitchScrollView{nullptr};
+        UILabelExt *LanguageSwitchViewTitleLabel{nullptr};               // "语言"
+        UIList *LanguageList{nullptr};                                   // 语言列表
+        LanguageSwitchListAdapter *p_LanguageSwitchListAdapter{nullptr}; // 语言列表适配器
+        bool viewInitStatus{false};
+    };
+}
+#endif
\ No newline at end of file
diff --git a/code/sdk/application/wearable/fd230app/nativeui/language/src/LanguageSwitchListAdapter.cpp b/code/sdk/application/wearable/fd230app/nativeui/language/src/LanguageSwitchListAdapter.cpp
new file mode 100644 (file)
index 0000000..1eea53e
--- /dev/null
@@ -0,0 +1,118 @@
+/*
+ * @Author: luozheng 1732036298@qq.com
+ * @Date: 2024-03-28 14:27:05
+ * @LastEditors: luozheng 1732036298@qq.com
+ * @LastEditTime: 2024-03-30 16:32:43
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/language/src/LanguageSwitchListAdapter.cpp
+ */
+#include "language/include/LanguageSwitchListAdapter.h"
+#include "language/include/LanguageSwitchListitemView.h"
+#include "wearable_log.h"
+#include "language/include/LanguageSwitchModel.h"
+#include "language/include/LanguageSwitchPresenter.h"
+#include "language/LanguageInit.h"
+
+namespace OHOS
+{
+
+    LanguageSwitchListAdapter::LanguageSwitchListAdapter()
+    {
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "LanguageSwitchListAdapter::LanguageSwitchListAdapter");
+        NotSelectedImg = ImageCacheManager::GetInstance().LoadSingleRes(PNG_CHECKBOX_OFF_IMAGE);
+        SelectedImg = ImageCacheManager::GetInstance().LoadSingleRes(PNG_CHECKBOX_ON_IMAGE);
+    }
+
+    LanguageSwitchListAdapter::~LanguageSwitchListAdapter()
+    {
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "LanguageSwitchListAdapter::~LanguageSwitchListAdapter");
+        listData.clear();
+    }
+
+    uint16_t LanguageSwitchListAdapter::GetCount(void)
+    {
+        return listData.size();
+    }
+
+    void LanguageSwitchListAdapter::SetData(std::list<Language> &data)
+    {
+        if (!listData.empty())
+        {
+            listData.clear();
+        }
+        std::list<Language>::iterator it;
+        for (it = data.begin(); it != data.end(); it++)
+        {
+            listData.push_back(*it);
+        }
+    }
+
+    void LanguageSwitchListAdapter::ClearData(void)
+    {
+        if (!listData.empty())
+        {
+            listData.clear();
+        }
+    }
+
+    UIView *LanguageSwitchListAdapter::GetView(UIView *inView, int16_t index)
+    {
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "LanguageSwitchListAdapter::GetView,index %d", index);
+        // 1.先检查列表数据是否为空,若为空则返回空指针
+        if (listData.empty())
+        {
+            return nullptr;
+        }
+        // 2.接着检查索引是否小于0,若小于0则返回空指针
+        if (index < 0)
+        {
+            return nullptr;
+        }
+        // 3.检查是否超出列表数据大小,若超出则返回空指针
+        size_t uindex = index;
+        if (uindex >= listData.size())
+        {
+            return nullptr;
+        }
+        // 4.通过迭代器访问列表中指定索引位置的元素,将其赋值给itemData变量
+        std::list<Language>::iterator it = listData.begin();
+        for (int i = 0; i < index; i++)
+        {
+            it++;
+        }
+        Language itemData = *it;
+        LanguageSwitchListitemView *item = nullptr;
+        // 5.根据传入的inView参数是否已经存在一个视图对象,若为空则创建一个新的LanguageSwitchListItemView对象,否则将inView转换成LanguageSwitchListItemView类型的指针
+        if (inView == nullptr)
+        {
+            item = new LanguageSwitchListitemView();
+        }
+        else
+        {
+            item = dynamic_cast<LanguageSwitchListitemView *>(inView);
+        }
+        item->SetItemInfo(itemData);
+        item->GetUILabelButtonExt()->SetOnClickListener(itemClickListener);
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "GetView, id = %s", item->GetUILabelButtonExt()->GetViewId());
+        if (item->GetUILabelButtonExt()->GetViewId() != nullptr)
+        {
+            char *view_languageid = const_cast<char *>(item->GetUILabelButtonExt()->GetViewId());
+            if (strcmp(LanguageSwitchModel::GetInstance().GetCurLanguageCode(), view_languageid) == 0)
+            {
+                // 设置选中
+                item->GetUILabelButtonExt()->SetImageSrc(SelectedImg, SelectedImg);
+            }
+            else
+            {
+                // 设置未选中
+                item->GetUILabelButtonExt()->SetImageSrc(NotSelectedImg, NotSelectedImg);
+            }
+        }
+        return item;
+    }
+
+    void LanguageSwitchListAdapter::AddListItem(const Language &item)
+    {
+        listData.push_back(item);
+    }
+
+}
\ No newline at end of file
diff --git a/code/sdk/application/wearable/fd230app/nativeui/language/src/LanguageSwitchListitemView.cpp b/code/sdk/application/wearable/fd230app/nativeui/language/src/LanguageSwitchListitemView.cpp
new file mode 100644 (file)
index 0000000..71b0771
--- /dev/null
@@ -0,0 +1,58 @@
+/*
+ * @Author: luozheng 1732036298@qq.com
+ * @Date: 2024-03-28 14:28:03
+ * @LastEditors: luozheng 1732036298@qq.com
+ * @LastEditTime: 2024-03-30 14:51:46
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/language/src/LanguageSwitchListitemView.cpp
+ */
+#include "language/include/LanguageSwitchListitemView.h"
+#include "wearable_log.h"
+
+namespace OHOS
+{
+
+    LanguageSwitchListitemView::LanguageSwitchListitemView()
+    {
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "LanguageSwitchListitemView::LanguageSwitchListitemView");
+        SetPosition(43, 120, 380, 120);
+        SetStyle(STYLE_BACKGROUND_COLOR, Color::Black().full);
+        SetStyle(STYLE_BACKGROUND_OPA, 255);
+        // SetTouchable(true);
+        SetUpChild();
+        Add(&m_LabelButtonExt);
+    }
+
+    LanguageSwitchListitemView::~LanguageSwitchListitemView()
+    {
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "LanguageSwitchListitemView::~LanguageSwitchListitemView");
+        Remove(&m_LabelButtonExt);
+    }
+
+    void LanguageSwitchListitemView::SetItemInfo(const Language itemInfo)
+    {
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "LanguageSwitchListitemView::SetItemInfo");
+        m_LabelButtonExt.SetViewId(itemInfo.code);
+        m_LabelButtonExt.SetText(itemInfo.name);
+    }
+
+    void LanguageSwitchListitemView::SetUpChild()
+    {
+        m_LabelButtonExt.SetPosition(0, 0, 380, 100);
+        m_LabelButtonExt.SetStyle(STYLE_BACKGROUND_COLOR, 0xff191919);
+        m_LabelButtonExt.SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);
+        m_LabelButtonExt.SetStyle(STYLE_LINE_HEIGHT, 35);
+        m_LabelButtonExt.SetStyleForState(STYLE_BACKGROUND_COLOR, 0xff000000, UIButton::PRESSED);
+        m_LabelButtonExt.SetAlign(TEXT_ALIGNMENT_LEFT);
+        m_LabelButtonExt.SetLabelPosition(47, 0);
+        m_LabelButtonExt.SetImagePosition(290, 30);
+        m_LabelButtonExt.SetTouchable(true);
+        ImageInfo *unSelectedImg = ImageCacheManager::GetInstance().LoadSingleRes(PNG_CHECKBOX_OFF_IMAGE);
+        m_LabelButtonExt.SetImageSrc(unSelectedImg, unSelectedImg);
+    }
+
+    UILabelButtonExt *LanguageSwitchListitemView::GetUILabelButtonExt(void)
+    {
+        return &m_LabelButtonExt;
+    }
+
+}
\ No newline at end of file
diff --git a/code/sdk/application/wearable/fd230app/nativeui/language/src/LanguageSwitchModel.cpp b/code/sdk/application/wearable/fd230app/nativeui/language/src/LanguageSwitchModel.cpp
new file mode 100644 (file)
index 0000000..41cc825
--- /dev/null
@@ -0,0 +1,52 @@
+/*
+ * @Author: luozheng 1732036298@qq.com
+ * @Date: 2024-03-28 16:36:46
+ * @LastEditors: luozheng 1732036298@qq.com
+ * @LastEditTime: 2024-03-30 15:29:41
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/language/src/LanguageSwitchModel.cpp
+ */
+#include "language/include/LanguageSwitchModel.h"
+#include "wearable_log.h"
+#include "language/LanguageInit.h"
+
+namespace OHOS
+{
+
+    LanguageSwitchModel &LanguageSwitchModel::GetInstance()
+    {
+        static LanguageSwitchModel instance;
+        return instance;
+    }
+
+    /*
+     * @brief: 设置当前语言code
+     */
+    void LanguageSwitchModel::SetCurLanguageCode(char * curlanguagecode)
+    {
+        CurLanguageCode = curlanguagecode;
+    }
+
+    /*
+     * @brief 获取当前设置的语言code
+     */
+    char * LanguageSwitchModel::GetCurLanguageCode(void)
+    {
+        return CurLanguageCode;
+    }
+
+    /*
+     * @brief 设置上一次语言code
+     */
+    void LanguageSwitchModel::SetLastLanguageCode(char * prelanguagecode)
+    {
+        PreLanguageCode = prelanguagecode;
+    }
+
+    /*
+     * @brief 获取上一次设置的语言code
+     */
+    char * LanguageSwitchModel::GetLastLanguageCode(void)
+    {
+        return PreLanguageCode;
+    }
+}
\ No newline at end of file
diff --git a/code/sdk/application/wearable/fd230app/nativeui/language/src/LanguageSwitchPresenter.cpp b/code/sdk/application/wearable/fd230app/nativeui/language/src/LanguageSwitchPresenter.cpp
new file mode 100644 (file)
index 0000000..2e5828d
--- /dev/null
@@ -0,0 +1,150 @@
+/*
+ * @Author: luozheng 1732036298@qq.com
+ * @Date: 2024-03-28 14:17:43
+ * @LastEditors: luozheng 1732036298@qq.com
+ * @LastEditTime: 2024-03-30 16:35:37
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/language/src/LanguageSwitchPresenter.cpp
+ */
+#include "AppViewIDs.h"
+#include "NativeAbility.h"
+#include "language/include/LanguageSwitchPresenter.h"
+#include "language/include/LanguageSwitchListitemView.h"
+#include "language/include/LanguageSwitchModel.h"
+#include "common/key_code.h"
+#include <custom_utils.h>
+#include "language/LanguageInit.h"
+
+namespace OHOS
+{
+    extern Language languages[];
+
+    // 当前Presenter属性实例化的内存指针
+    static LanguageSwitchPresenter *g_pLanguageSwitchPresenter = nullptr;
+
+    LanguageSwitchPresenter::LanguageSwitchPresenter()
+    {
+        p_LanguageSwitchModel = &LanguageSwitchModel::GetInstance();
+        g_pLanguageSwitchPresenter = this;
+        NotSelectedImg = ImageCacheManager::GetInstance().LoadSingleRes(PNG_CHECKBOX_OFF_IMAGE);
+        SelectedImg = ImageCacheManager::GetInstance().LoadSingleRes(PNG_CHECKBOX_ON_IMAGE);
+    }
+
+    LanguageSwitchPresenter::~LanguageSwitchPresenter()
+    {
+        g_pLanguageSwitchPresenter = nullptr;
+        ImageCacheManager::GetInstance().UnloadSingleRes(PNG_CHECKBOX_OFF_IMAGE);
+        ImageCacheManager::GetInstance().UnloadSingleRes(PNG_CHECKBOX_ON_IMAGE);
+    }
+
+    LanguageSwitchPresenter *LanguageSwitchPresenter::GetInstance()
+    {
+        return g_pLanguageSwitchPresenter;
+    }
+
+    void LanguageSwitchPresenter::OnStart()
+    {
+        Presenter<LanguageSwitchView>::OnStart();
+    }
+
+    void LanguageSwitchPresenter::OnResume(void)
+    {
+        Presenter<LanguageSwitchView>::OnResume();
+        if (view_ == nullptr)
+        {
+            return;
+        }
+        for (uint8_t i = 0; i < MAX_LANGUAGE; i++)
+        {
+            view_->AddLanguageItemToList(languages[i]);
+        }
+    }
+
+    void LanguageSwitchPresenter::OnPause(void)
+    {
+        Presenter<LanguageSwitchView>::OnPause();
+    }
+
+    void LanguageSwitchPresenter::OnStop(void)
+    {
+        Presenter<LanguageSwitchView>::OnStop();
+    }
+
+    bool LanguageSwitchPresenter::OnDrag(UIView &view, const DragEvent &event)
+    {
+        UNUSED(view);
+        UNUSED(event);
+        return true;
+    }
+
+    bool LanguageSwitchPresenter::OnDragEnd(UIView &view, const DragEvent &event)
+    {
+        UNUSED(view);
+        if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT)
+        {
+            NativeAbility::GetInstance().ChangeSlice(VIEW_APPLIST);
+        }
+        return true;
+    }
+
+    bool LanguageSwitchPresenter::OnClick(UIView &view, const ClickEvent &event)
+    {
+        UNUSED(event);
+        char *lastLanguageCode = p_LanguageSwitchModel->GetLastLanguageCode();
+        UILabelButtonExt *p_UILabelButtonExt = dynamic_cast<UILabelButtonExt *>(&view);
+        char *id = const_cast<char *>(p_UILabelButtonExt->GetViewId());
+        language *g_planguage = new language();
+
+        if (p_UILabelButtonExt != nullptr)
+        {
+            char *currentLanguageCode = id;
+            p_LanguageSwitchModel->SetCurLanguageCode(currentLanguageCode); // 设置新的当前语言Code
+        }
+        else
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "p_UILabelButtonExt is nullptr !!");
+            return false;
+        }
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "lastLanguageCode = %s , CurrLanguageCode = %s", p_LanguageSwitchModel->GetLastLanguageCode(), p_LanguageSwitchModel->GetCurLanguageCode());
+        // 检查当前语言ID是否已经是点击的语言ID,否则重复点击同一语言不响应切换
+        if (p_LanguageSwitchModel->GetCurLanguageCode() == lastLanguageCode)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Do not ChangeLanguage!!");
+            return true;
+        }
+        else
+        {
+            LanguageId currentLanguageId = LanguageManager::GetInstance().GetLanguageIdByCode(p_LanguageSwitchModel->GetCurLanguageCode());
+            g_planguage->ChangeLanguage(currentLanguageId);
+
+            m_labelext->SetTextId(0);
+            m_labelext->ForceResetText();// 强制刷新
+
+            p_UILabelButtonExt->SetImageSrc(SelectedImg, SelectedImg);
+            p_UILabelButtonExt->Invalidate();
+            LanguageSwitchView::GetInstance()->GetLanguageList()->RefreshList();
+            // 更新上一个语言ID
+            p_LanguageSwitchModel->SetLastLanguageCode(p_LanguageSwitchModel->GetCurLanguageCode());
+        }
+        return true;
+    }
+
+    bool LanguageSwitchPresenter::OnKeyAct(UIView &view, const KeyEvent &event) // 增加按键事件
+    {
+        UNUSED(view);
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "LanguageSwitchPresenter::OnKeyAct");
+        unsigned short keyID = event.GetKeyId();
+        unsigned short keyState = event.GetState();
+        // 如果是power键,且是亮屏状态,按键释放就返回上一级
+        if (keyID == static_cast<uint16_t>(ZliteKeyCode::ZLITE_KEY_POWER) && keyState == 0 && uapi_get_screen_state() == 0)
+        {
+            uint16_t preSlice = NativeAbility::GetInstance().GetPreSliceId();
+            NativeAbility::GetInstance().ChangeSlice(preSlice);
+        }
+        return true;
+    }
+
+    void LanguageSwitchPresenter::SetLabelExt(UILabelExt *labelext)
+    {
+        m_labelext = labelext;
+    }
+}
\ No newline at end of file
diff --git a/code/sdk/application/wearable/fd230app/nativeui/language/src/LanguageSwitchView.cpp b/code/sdk/application/wearable/fd230app/nativeui/language/src/LanguageSwitchView.cpp
new file mode 100644 (file)
index 0000000..763e649
--- /dev/null
@@ -0,0 +1,185 @@
+#include "language/include/LanguageSwitchView.h"
+#include "language/include/LanguageSwitchPresenter.h"
+#include "wearable_log.h"
+namespace OHOS
+{
+
+    static constexpr int16_t LANGUAGE_LIST_X = 43;
+    static constexpr int16_t LANGUAGE_LIST_Y = 120;
+    static constexpr int16_t NUM_2 = 2;
+    static constexpr int16_t MAX_SCROLL_DIS = 1000;
+    static constexpr int16_t MAX_REBOUND_SIZE = 40;
+    static LanguageSwitchView *g_pLanguageSwitchView{nullptr};
+    LanguageSwitchView::LanguageSwitchView()
+    {
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "LanguageSwitchView::LanguageSwitchView");
+        g_pLanguageSwitchView = this;
+    }
+
+    LanguageSwitchView::~LanguageSwitchView()
+    {
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "LanguageSwitchView::~LanguageSwitchView");
+        ClearAll();
+        g_pLanguageSwitchView = nullptr;
+    }
+
+    LanguageSwitchView *LanguageSwitchView::GetInstance()
+    {
+
+        return g_pLanguageSwitchView;
+    }
+
+    void LanguageSwitchView::ClearAll(void)
+    {
+        if (viewInitStatus == true)
+        {
+            LanguageSwitchScrollView->RemoveAll();
+
+            delete LanguageSwitchViewTitleLabel;
+            LanguageSwitchViewTitleLabel = nullptr;
+
+            delete p_LanguageSwitchListAdapter;
+            p_LanguageSwitchListAdapter = nullptr;
+
+            delete LanguageList;
+            LanguageList = nullptr;
+
+            delete LanguageSwitchScrollView;
+            LanguageSwitchScrollView = nullptr;
+        }
+    }
+
+    bool LanguageSwitchView::LanguageSwitchViewScrollViewInit(void)
+    {
+        LanguageSwitchScrollView = new UIScrollView();
+        if (LanguageSwitchScrollView == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "LanguageSwitchView::LanguageSwitchScrollView new fail!");
+            return false;
+        }
+        LanguageSwitchScrollView->SetPosition(0, 0, Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight());
+        UIView::OnDragListener *draglistener = static_cast<UIView::OnDragListener *>(LanguageSwitchPresenter::GetInstance());
+        if (draglistener == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "LanguageSwitchView::draglistener can not be nullptr!");
+            return false;
+        }
+        LanguageSwitchScrollView->SetOnDragListener(draglistener);
+        LanguageSwitchScrollView->SetTouchable(true);
+        LanguageSwitchScrollView->SetDraggable(true);
+
+        return true;
+    }
+
+    bool LanguageSwitchView::LanguageSwitchViewTitleLabelInit(void)
+    {
+        LanguageSwitchViewTitleLabel = new UILabelExt();
+        if (LanguageSwitchViewTitleLabel == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "LanguageSwitchView::LanguageSwitchViewTitleLabel new fail!");
+            return false;
+        }
+        LanguageSwitchViewTitleLabel->SetPosition(133, 52, 200, 40);
+        LanguageSwitchViewTitleLabel->SetStyle(STYLE_TEXT_FONT, 30);
+        LanguageSwitchViewTitleLabel->SetStyle(STYLE_LINE_HEIGHT, 35);
+        // LanguageSwitchViewTitleLabel->SetText("语言");
+        LanguageSwitchViewTitleLabel->SetTextId(0);
+        LanguageSwitchViewTitleLabel->ForceResetText();
+        LanguageSwitchViewTitleLabel->SetLineBreakMode(UILabel::LINE_BREAK_MARQUEE);
+        LanguageSwitchViewTitleLabel->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
+        LanguageSwitchViewTitleLabel->SetRollSpeed(40);
+        LanguageSwitchViewTitleLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);
+        LanguageSwitchPresenter::GetInstance()->SetLabelExt(LanguageSwitchViewTitleLabel);
+        return true;
+    }
+
+    bool LanguageSwitchView::LanguageListInit(void)
+    {
+        // UIList 的适配器
+        p_LanguageSwitchListAdapter = new LanguageSwitchListAdapter();
+        if (p_LanguageSwitchListAdapter == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "LanguageSwitchView::p_LanguageSwitchListAdapter is nullptr!");
+            return false;
+        }
+        p_LanguageSwitchListAdapter->SetItemClickListener(LanguageSwitchPresenter::GetInstance());
+        LanguageList = new UIList(UIList::VERTICAL);
+        if (LanguageList == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "LanguageSwitchView::LanguageList is nullptr!");
+            return false;
+        }
+        LanguageList->SetPosition(LANGUAGE_LIST_X, LANGUAGE_LIST_Y, HORIZONTAL_RESOLUTION, VERTICAL_RESOLUTION);
+        LanguageList->SetStyle(STYLE_BACKGROUND_COLOR, 0xff000000);
+        LanguageList->SetScrollBlankSize(MAX_REBOUND_SIZE);
+        LanguageList->EnableAutoAlign(true);                // 设置此列表的自动对齐状态。当滚动停止时,子视图被选中,其位置自动与预设位置对齐
+        LanguageList->SetThrowDrag(true);                   // 设置手指抬起屏幕后是否继续滚动。
+        LanguageList->SetMaxScrollDistance(MAX_SCROLL_DIS); // 设置手指抬起屏幕后的最大滚动距离。
+        LanguageList->SetReboundSize(MAX_REBOUND_SIZE);
+        return true;
+    }
+
+    void LanguageSwitchView::LanguageSwitchViewInit(void)
+    {
+        if (!LanguageSwitchViewScrollViewInit())
+        {
+            return;
+        }
+        if (!LanguageSwitchViewTitleLabelInit())
+        {
+            return;
+        }
+        if (!LanguageListInit())
+        {
+            return;
+        }
+        viewInitStatus = true;
+    }
+
+    void LanguageSwitchView::OnStart()
+    {
+        View<LanguageSwitchPresenter>::OnStart();
+        LanguageSwitchViewInit();
+
+        RootView::OnKeyActListener *keyactListener = (RootView::OnKeyActListener *)OHOS::LanguageSwitchPresenter::GetInstance();
+        RootView::GetInstance()->SetOnKeyActListener(keyactListener);
+    }
+
+    void LanguageSwitchView::OnSetUpView()
+    {
+        View<LanguageSwitchPresenter>::OnSetUpView();
+        LanguageSwitchScrollView->Add(LanguageSwitchViewTitleLabel);
+        LanguageSwitchScrollView->Add(LanguageList);
+        RootView::GetInstance()->Add(LanguageSwitchScrollView);
+        LanguageList->SetAdapter(p_LanguageSwitchListAdapter);
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "%d", p_LanguageSwitchListAdapter->GetCount());
+
+        Draw();
+    }
+
+    void LanguageSwitchView::OnTearDownView()
+    {
+        View<LanguageSwitchPresenter>::OnTearDownView();
+        return;
+    }
+
+    void LanguageSwitchView::OnStop()
+    {
+
+        View<LanguageSwitchPresenter>::OnStop();
+        RootView::GetInstance()->RemoveAll();
+        RootView::GetInstance()->ClearOnKeyActListener();
+        return;
+    }
+
+    void LanguageSwitchView::AddLanguageItemToList(const Language &item)
+    {
+        p_LanguageSwitchListAdapter->AddListItem(item);
+    }
+
+    UIList *LanguageSwitchView::GetLanguageList(void)
+    {
+        return LanguageList;
+    }
+
+}
\ No newline at end of file
index c4f465a..80c802d 100644 (file)
@@ -10,6 +10,7 @@
 #include "SettingPresenter.h"
 #include "RebootModel.h"
 #include "common/key_code.h"
+#include <custom_utils.h>
 namespace OHOS
 {
 
@@ -86,7 +87,7 @@ namespace OHOS
         uint16 keyID = event.GetKeyId();
         uint16 keyState = event.GetState();
         // 如果是power键就返回上一级
-        if (keyID == static_cast<uint16_t>(ZliteKeyCode::ZLITE_KEY_POWER) && keyState == 0)
+        if (keyID == static_cast<uint16_t>(ZliteKeyCode::ZLITE_KEY_POWER) && keyState == 0 && uapi_get_screen_state() == 0)
         {
             uint16_t preSlice = NativeAbility::GetInstance().GetPreSliceId();
             if (preSlice == VIEW_APPLIST)
index b1e980a..2db50e1 100644 (file)
@@ -2,7 +2,7 @@
  * @Author: luozheng 1732036298@qq.com
  * @Date: 2024-03-22 09:48:07
  * @LastEditors: luozheng 1732036298@qq.com
- * @LastEditTime: 2024-03-25 10:14:52
+ * @LastEditTime: 2024-03-28 10:29:29
  * @FilePath: /FD230/code/sdk/application/wearable/service/msg_center/include/notify/pairing_notification.h
  */
 #ifndef PAIRING_NOTIFICATION_H
@@ -26,12 +26,14 @@ namespace OHOS
         const char **CreateImagePathsArray(const char *basePath, const char *fileExtension, int numImages);
         void FreeImagePathsArray(const char **imagePaths, const int numImages);
         bool OnClick(OHOS::UIView &view, const OHOS::ClickEvent &event) override;
-
+        void SetDeviceName(const char *Name);
+        const char *GetDeviceName();
     private:
         PairingViewEventListener();
         ~PairingViewEventListener();
         PairingViewEventListener(const PairingViewEventListener &) = delete;
         const PairingViewEventListener &operator=(const PairingViewEventListener &) = delete;
+        const char *DeviceName{nullptr};
     };
 
 }
index 95e2f79..e471c2a 100644 (file)
@@ -2,7 +2,7 @@
  * @Author: luozheng 1732036298@qq.com
  * @Date: 2024-03-22 10:04:36
  * @LastEditors: luozheng 1732036298@qq.com
- * @LastEditTime: 2024-03-25 17:00:39
+ * @LastEditTime: 2024-03-30 09:28:18
  * @FilePath: /FD230/code/sdk/application/wearable/service/msg_center/src/notify/pairing_notification.cpp
  */
 #include "notification_manager.h"
@@ -177,8 +177,12 @@ namespace OHOS
         return button;
     }
 
+    void PairingViewEventListener::SetDeviceName(const char *Name)
+    {
+        DeviceName = Name;
+    }
     /*获取设备名称*/
-    static const char *GetDeviceName(void)
+    const char *PairingViewEventListener::GetDeviceName(void)
     {
         return "Iphone 13 pro"; //先用固定字符串测试
     }
@@ -458,7 +462,7 @@ namespace OHOS
             DeviceUnbindingRequestViewLabel[0]->SetStyle(STYLE_LINE_HEIGHT, 40);
             char str[512];
             memcpy(str, 0, 512);
-            sprintf(str, "当前设备已经与 %s 绑定", GetDeviceName());
+            sprintf(str, "当前设备已经与 %s 绑定", PairingViewEventListener::GetInstance().GetDeviceName());
             DeviceUnbindingRequestViewLabel[0]->SetText(str);
             DeviceUnbindingRequestViewLabel[0]->SetLineBreakMode(UILabel::LINE_BREAK_WRAP);
             DeviceUnbindingRequestViewLabel[0]->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
@@ -477,7 +481,7 @@ namespace OHOS
             DeviceUnbindingRequestViewLabel[1]->SetStyle(STYLE_TEXT_FONT, 30);
             DeviceUnbindingRequestViewLabel[1]->SetStyle(STYLE_LINE_HEIGHT, 40);
             memcpy(str, 0, 512);
-            sprintf(str, "继续连接操作会解除与%s的绑定并将手表恢复出厂设置(会清空手表数据)\n\n是否继续此操作\n", GetDeviceName());
+            sprintf(str, "继续连接操作会解除与%s的绑定并将手表恢复出厂设置(会清空手表数据)\n\n是否继续此操作\n", PairingViewEventListener::GetInstance().GetDeviceName());
             // str = "继续连接操作会解除与 " + GetDeviceName() + " 的绑定并将手表恢复出厂设置(会清空手表数据)\n\n是否继续此操作\n";
             DeviceUnbindingRequestViewLabel[1]->SetText(str);
             DeviceUnbindingRequestViewLabel[1]->SetLineBreakMode(UILabel::LINE_BREAK_WRAP);