--- /dev/null
+/*
+ * @Author: luozheng 1732036298@qq.com
+ * @Date: 2024-03-30 09:14:38
+ * @LastEditors: luozheng 1732036298@qq.com
+ * @LastEditTime: 2024-11-05 14:18:49
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/languagecode/LanguageInit.cpp
+ */
+#include <fstream>
+#include <string>
+#include <cstdio>
+#include "cJSON.h"
+#include "font/ui_font.h"
+#include "font/font_global_manager.h"
+#include "wearable_log.h"
+#include "languagecode/LanguageInit.h"
+#include "ConfigModel.h"
+#include <NativeAbility.h>
+#include "AppViewIDs.h"
+#include "common/graphic_startup.h"
+
+#include "languagecode/include/LanguageSwitchModel.h"
+
+namespace OHOS
+{
+ // 初始化 languages 数组
+ struct Language languages[] = {
+ {ZH_CN, "zh", "中文", "中文",HARMONYOS_VECTOR_FONT_FILENAME,"user/res/font_bin/zh.bin"},
+ {EN, "en", "English", "英语",HARMONYOS_VECTOR_FONT_FILENAME,"user/res/font_bin/en.bin"},
+ {JA, "ja", "日本語", "日语",HARMONYOS_VECTOR_FONT_FILENAME,"user/res/font_bin/ja.bin"},
+ {KO, "ko", "한국어", "韩语",KOREA_FONT,"user/res/font_bin/ko.bin"},
+ {ES, "es", "Español", "西班牙语",HARMONYOS_VECTOR_FONT_FILENAME,"user/res/font_bin/es.bin"},
+ {RU, "ru", "Русский", "俄语",HARMONYOS_VECTOR_FONT_FILENAME,"user/res/font_bin/ru.bin"},
+ {HR, "hr", "Hrvatski", "克罗地亚语",HARMONYOS_VECTOR_FONT_FILENAME,"user/res/font_bin/hr.bin"},
+ {DE, "de", "Deutsch", "德语",HARMONYOS_VECTOR_FONT_FILENAME,"user/res/font_bin/de.bin"},
+ {PT, "pt", "Português", "葡萄牙语",HARMONYOS_VECTOR_FONT_FILENAME,"user/res/font_bin/pt.bin"},
+ {FR, "fr", "Français", "法语",HARMONYOS_VECTOR_FONT_FILENAME,"user/res/font_bin/fr.bin"},
+ {NL, "nl", "Nederlands", "荷兰语",HARMONYOS_VECTOR_FONT_FILENAME,"user/res/font_bin/nl.bin"},
+ {IT, "it", "Italiano", "意大利语",HARMONYOS_VECTOR_FONT_FILENAME,"user/res/font_bin/it.bin"},
+ {CS, "cs", "Čeština", "捷克语",HARMONYOS_VECTOR_FONT_FILENAME,"user/res/font_bin/cs.bin"},
+ {EL, "el", "Ελληνικά", "希腊语",HARMONYOS_VECTOR_FONT_FILENAME,"user/res/font_bin/el.bin"},
+ {HI, "hi", "हिन्दी", "印地语",HINDI_FONT,"user/res/font_bin/hi.bin"},
+ {ID, "id", "Bahasa Indonesia", "印尼语",HARMONYOS_VECTOR_FONT_FILENAME,"user/res/font_bin/id.bin"},
+ {MS, "ms", "Bahasa Melayu", "马来语",HARMONYOS_VECTOR_FONT_FILENAME,"user/res/font_bin/ms.bin"},
+ {PL, "pl", "Polski", "波兰语",HARMONYOS_VECTOR_FONT_FILENAME,"user/res/font_bin/pl.bin"},
+ {TH, "th", "ไทย", "泰语",ANUPHAN_FONT,"user/res/font_bin/th.bin"},
+ {VI, "vi", "Tiếng Việt", "越南语",HARMONYOS_VECTOR_FONT_FILENAME,"user/res/font_bin/vi.bin"},
+ {FI, "fi", "Suomi", "芬兰语",HARMONYOS_VECTOR_FONT_FILENAME,"user/res/font_bin/fi.bin"},
+ {RO, "ro", "Română", "罗马尼亚语",HARMONYOS_VECTOR_FONT_FILENAME,"user/res/font_bin/ro.bin"},
+ {TR, "tr", "Türkçe", "土耳其语",HARMONYOS_VECTOR_FONT_FILENAME,"user/res/font_bin/tr.bin"},
+ {FA, "fa", "فارسی", "波斯语",HARMONYOS_VECTOR_ARABIC_FILENAME,"user/res/font_bin/fa.bin"},
+ {AR, "ar", "العربية", "阿拉伯语",HARMONYOS_VECTOR_ARABIC_FILENAME,"user/res/font_bin/ar.bin"},
+ {HE, "he", "עברית", "希伯来语",HEBREW_FONT,"user/res/font_bin/he.bin"},
+ {UK, "uk", "Українська", "乌克兰语",HARMONYOS_VECTOR_FONT_FILENAME,"user/res/font_bin/uk.bin"},
+ {SV, "sv", "Svenska", "瑞典语",HARMONYOS_VECTOR_FONT_FILENAME,"user/res/font_bin/sv.bin"},
+ {UZ, "uz", "O‘zbek", "乌兹别克语",HARMONYOS_VECTOR_FONT_FILENAME,"user/res/font_bin/uz.bin"},
+ {AZ, "az", "Azərbaycan dili", "阿塞拜疆语",HARMONYOS_VECTOR_FONT_FILENAME,"user/res/font_bin/az.bin"},
+ };
+
+ //稀有语言单独字库,此列需要重新加载字体
+ // struct Language uncommon_languages[] =
+ // {
+ // {KO, "ko", "한국어", "韩语",KOREA_FONT},
+ // {HI, "hi", "हिन्दी", "印地语",HINDI_FONT_TTF},
+ // {TH, "th", "ไทย", "泰语",ANUPHAN_FONT},//THAI_FONT
+ // {HE, "he", "עברית", "希伯来语",HEBREW_FONT},
+ // };
+
+
+
+ // static const uint8_t langcount = 2;
+
+ const char *resFiles[MAX_LANGUAGE]= {
+ "user/res/font/zh.lang",// ZH_CN = 0,
+ "user/res/font/en.lang",// EN,
+ "user/res/font/ja.lang",// JA,
+ "user/res/font/ko.lang",// KO,韩语
+ "user/res/font/es.lang",// ES,
+ "user/res/font/ru.lang",// RU,
+ "user/res/font/hr.lang",// HR,
+ "user/res/font/de.lang",// DE,
+ "user/res/font/pt.lang",// PT,
+ "user/res/font/fr.lang",// FR,
+ "user/res/font/nl.lang",// NL,
+ "user/res/font/it.lang",// IT,
+ "user/res/font/cs.lang",// CS,
+ "user/res/font/el.lang",// EL,
+ "user/res/font/hi.lang",// HI,印地语
+ "user/res/font/id.lang",// ID,
+ "user/res/font/ms.lang",// MS,
+ "user/res/font/pl.lang",// PL,
+ "user/res/font/th.lang",// TH, 泰语
+ "user/res/font/vi.lang",// VI,
+ "user/res/font/fi.lang",// FI,
+ "user/res/font/ro.lang",// RO,
+ "user/res/font/tr.lang",// TR,
+ "user/res/font/fa.lang",// FA,波斯语
+ "user/res/font/ar.lang",// AR,阿拉伯语
+ "user/res/font/he.lang",// HE,希伯来语
+ "user/res/font/uk.lang",// UK,
+ "user/res/font/sv.lang",// SV,
+ "user/res/font/uz.lang",// UZ,
+ "user/res/font/az.lang"// AZ,
+ };
+
+ //static language *g_planguage{nullptr};
+ char current_global_font_name[256]={0};
+ char* get_current_global_font_name(void)
+ {
+ return ¤t_global_font_name[0];
+ }
+
+ int set_current_global_font_name(const char* fontname)
+ {
+ memset(current_global_font_name,0,sizeof(current_global_font_name));
+ return strcat_s(current_global_font_name,sizeof(current_global_font_name),fontname);
+ }
+
+ /**
+ * return 1 从右到左
+ * return 0 从左到右
+ */
+ int get_current_font_direction(void)
+ {
+ // 从右到左排版的语言
+ // 阿拉伯语(Arabic)
+ // 希伯来语(Hebrew)
+ // 波斯语(Persian,也称为法尔斯语)
+ // 乌尔都语(Urdu)
+ // 阿拉米语(Aramaic)
+ // char* fontname=get_current_global_font_name();
+ // if (memcpy_s(fontname,strlen(fontname),PERSIAN_FONT,strlen(PERSIAN_FONT)) == 0)
+ // return 1;
+ // else if (memcpy_s(fontname,strlen(fontname),ARABIC_FONT,strlen(ARABIC_FONT)) == 0)
+ // return 1;
+ // else if (memcpy_s(fontname,strlen(fontname),HEBREW_FONT,strlen(HEBREW_FONT)) == 0)
+ // return 1;
+ // else
+ return 0;
+ }
+
+ const char* get_language_font(uint8_t id)
+ {
+ for(int i=0;i<(sizeof( languages)/sizeof(languages[0]));i++)
+ {
+ if(languages[i].languageid==id)
+ {
+ return languages[i].fontname;
+ }
+ }
+ return NULL;
+ }
+
+ bool is_load_languages(uint8_t id)
+ {
+ for(int i=0;i<(sizeof( languages)/sizeof(languages[0]));i++)
+ {
+ if(languages[i].languageid==id)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "%s",languages[i].fontname);
+ if(strcmp(languages[i].fontname,get_current_global_font_name())!=0 && (strcmp(languages[i].fontname,HARMONYOS_VECTOR_FONT_FILENAME)!=0))
+ return true;
+ else
+ return false;
+ }
+ }
+ return false;
+ }
+
+ language::language()
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "language::language");
+ ///g_planguage = this;
+ }
+
+ language::~language()
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "language::~language");
+ //g_planguage = nullptr;
+ }
+
+ language *language::GetInstance()
+ {
+ static language instance;
+ return &instance;
+ }
+
+ bool language::InitLangues()
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "InitLangues");
+ // 获取json里面的语言
+ #ifdef A5133_DEMO_CLIENT
+ NativeAbility::GetInstance().SetDefaultSliceId(VIEW_MAIN);
+ FontGlobalManager::GetInstance()->RegisterLanguageInfo(resFiles, MAX_LANGUAGE, 0);
+ #else
+ int thelanguage = ConfigModel::GetInstance()->GetLanguage();
+ if(is_load_languages(thelanguage))
+ {
+ GraphicStartUp::InitFontEngine(MEM_POOL_UI_FONT, MEM_POOL_UI_FONT_SIZE, OHOS::NEW_FONT_DIR, get_language_font(thelanguage)); // 注册字体
+ set_current_global_font_name(get_language_font(thelanguage));
+ }
+
+
+ if(ConfigModel::GetInstance()->GetisFirstTimeStart() == true)
+ {
+ /**
+ * TODO:
+ * 如果 GetisFirstTimeStart()证明第一次启动,需要实现弹窗切换语言的功能。
+ * 在此之前,先设置成默认0
+ */
+ //thelanguage = 0;
+ NativeAbility::GetInstance().SetDefaultSliceId(VIEW_LANGUAGE_SWITCH);
+ }
+ else
+ {
+ NativeAbility::GetInstance().SetDefaultSliceId(VIEW_MAIN);
+ }
+ FontGlobalManager::GetInstance()->RegisterLanguageInfo(resFiles, MAX_LANGUAGE, thelanguage);
+ #endif
+ return true;
+ }
+
+ bool language::fileExists(const char *fileName)
+ {
+ std::ifstream file(fileName);
+ return file.is_open();
+ }
+
+ // 切换语言功能
+ bool language::ChangeLanguage(int32_t currentLanguageId)
+ {
+
+ if (!FontGlobalManager::GetInstance() || !UIFont::GetInstance())
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Error getting FontGlobalManager or UIFont");
+ return false;
+ }
+
+ if (currentLanguageId >= MAX_LANGUAGE || currentLanguageId < 0)
+ return false;
+
+ FontGlobalManager::GetInstance()->RegisterLanguageInfo(resFiles, MAX_LANGUAGE, currentLanguageId);
+ UIFont::GetInstance()->SetCurrentLangId(currentLanguageId);
+
+ ConfigModel::GetInstance()->SetLanguageCode(languages[currentLanguageId].code);
+ ConfigModel::GetInstance()->SetLanguage(currentLanguageId);
+ int ret = set_current_global_font_name(languages[currentLanguageId].fontname);
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "resFiles [%d]:%s fontname:%s , ret = %d", currentLanguageId,resFiles[currentLanguageId],languages[currentLanguageId].fontname,ret);
+ return true;
+ }
+
+ bool language::ChangeLanguage(std::string language_code)
+ {
+ if (!FontGlobalManager::GetInstance() || !UIFont::GetInstance())
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Error getting FontGlobalManager or UIFont");
+ return false;
+ }
+
+ // 获取语言Code对应的语言Id
+ LanguageId currentLanguageId = LanguageManager::GetInstance().GetLanguageIdByCode(language_code);
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "%d %s", currentLanguageId, language_code.c_str());
+ FontGlobalManager::GetInstance()->RegisterLanguageInfo(resFiles, MAX_LANGUAGE, currentLanguageId);
+ UIFont::GetInstance()->SetCurrentLangId(currentLanguageId);
+
+ ConfigModel::GetInstance()->SetLanguageCode(language_code.c_str());
+ ConfigModel::GetInstance()->SetLanguage(currentLanguageId);
+ int ret = set_current_global_font_name(languages[currentLanguageId].fontname);
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "resFiles[%d]:%s fontname %s , ret = %d", currentLanguageId, resFiles[currentLanguageId], languages[currentLanguageId].fontname, ret );
+ return true;
+ }
+
+ /* ----------------------------- LanguageManager ---------------------------- */
+
+ LanguageManager::LanguageManager()
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "LanguageManager::LanguageManager");
+ // 初始化语言代码到语言ID的映射关系
+ for (int i = 0; i < MAX_LANGUAGE; i++)
+ {
+ codeToIdMap[languages[i].code] = languages[i].languageid;
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "%s %d", languages[i].code, languages[i].languageid);
+ }
+ }
+
+ LanguageManager::~LanguageManager()
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "LanguageManager::~LanguageManager");
+ }
+
+ LanguageManager &LanguageManager::GetInstance()
+ {
+ static LanguageManager instance;
+ return instance;
+ }
+
+ LanguageId LanguageManager::GetLanguageIdByCode(const std::string &code) const
+ {
+ auto it = codeToIdMap.find(code);
+ if (it != codeToIdMap.end())
+ {
+ return it->second;
+ }
+ // 如果找不到对应的语言ID,返回一个默认值
+ return LanguageId::ZH_CN; // 默认返回中文
+ }
+}
--- /dev/null
+/*
+ * @Author: luozheng 1732036298@qq.com
+ * @Date: 2024-03-30 09:30:03
+ * @LastEditors: SnickerSun snickersun@163.com
+ * @LastEditTime: 2024-08-30 20:37:49
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/languagecode/LanguageInit.h
+ */
+#ifndef LANGUAGE_INIT_H
+#define LANGUAGE_INIT_H
+
+#include <string>
+#include <map>
+namespace OHOS
+{
+ // 定义语言ID的枚举类
+ enum LanguageId
+ {
+ ZH_CN = 0,
+ EN,
+ JA,
+ KO,
+ ES,
+ RU,
+ HR,
+ DE,
+ PT,
+ FR,
+ NL,
+ IT,
+ CS,
+ EL,
+ HI,
+ ID,
+ MS,
+ PL,
+ TH,
+ VI,
+ FI,
+ RO,
+ TR,
+ FA,
+ AR,
+ HE,
+ UK,
+ SV,
+ UZ,
+ AZ,
+ MAX_LANGUAGE,
+ };
+ // 定义语言结构体
+ struct Language
+ {
+ LanguageId languageid;
+ const char *code;
+ const char *name;
+ const char *description;
+ const char *fontname;
+ const char *path;
+ };
+
+ // 声明 languages 数组为外部变量
+ extern Language languages[];
+ class language
+ {
+ public:
+ language();
+ ~language();
+ static language *GetInstance();
+ bool InitLangues();
+ bool ChangeLanguage(int32_t);
+ bool ChangeLanguage(std::string language_code);
+ bool fileExists(const char *fileName);
+ };
+
+ class LanguageManager
+ {
+ public:
+ static LanguageManager &GetInstance();
+ //根据语言代码查找对应的语言ID
+ LanguageId GetLanguageIdByCode(const std::string &code) const;
+
+ private:
+ LanguageManager(); // 私有构造函数,确保无法在外部实例化
+ ~LanguageManager();
+ LanguageManager(const LanguageManager &) = delete; // 禁止拷贝构造
+ LanguageManager &operator=(const LanguageManager &) = delete; // 禁止赋值运算符
+ std::map<std::string, LanguageId> codeToIdMap;
+ };
+}
+
+#endif
--- /dev/null
+/*
+ * @Author: luozheng 1732036298@qq.com
+ * @Date: 2024-03-28 14:26:55
+ * @LastEditors: luozheng 1732036298@qq.com
+ * @LastEditTime: 2024-06-28 09:34:15
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/languagecode/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 "languagecode/LanguageInit.h"
+#include "UiConfig.h"
+#include <list>
+#include "languagecode/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};
+ };
+
+}
+
+#endif
--- /dev/null
+/*
+ * @Author: luozheng 1732036298@qq.com
+ * @Date: 2024-03-28 14:28:25
+ * @LastEditors: luozheng 1732036298@qq.com
+ * @LastEditTime: 2024-06-13 15:52:44
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/languagecode/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 "languagecode/include/LanguageSwitchListAdapter.h"
+#include "components/ui_image_view.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;
+ UIImageView languae_Image;
+ };
+
+}
+
+#endif
--- /dev/null
+/*
+ * @Author: luozheng 1732036298@qq.com
+ * @Date: 2024-03-28 16:36:58
+ * @LastEditors: luozheng 1732036298@qq.com
+ * @LastEditTime: 2024-07-20 17:59:33
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/languagecode/include/LanguageSwitchModel.h
+ */
+
+#ifndef LANGUAGE_SWITCH_MODEL_H
+#define LANGUAGE_SWITCH_MODEL_H
+
+#include <iostream>
+#include "string"
+#include "languagecode/include/LanguageSwitchListAdapter.h"
+namespace OHOS
+{
+
+ class LanguageSwitchModel
+ {
+ public:
+ static LanguageSwitchModel &GetInstance();
+ void SetCurLanguageCode(char *curlanguageid);
+ const char *GetCurLanguageCode(void);
+ void SetLastLanguageCode(std::string prelanguageid);
+ const char *GetLastLanguageCode(void);
+
+ void SetisFirstTimeStart(bool value);
+ bool GetisFirstTimeStart(void);
+ void LanguageSwitchViewupdata(uint32_t);
+
+ void set_hint_flag(bool data)
+ {
+ hint_flag=data;
+ }
+
+ bool get_hint_flag()
+ {
+ return hint_flag;
+ }
+
+ int32_t get_hint_code()
+ {
+ return hint_code;
+ }
+
+ void set_hint_code(int32_t data)
+ {
+ hint_code=data;
+ }
+
+ private:
+ LanguageSwitchModel();
+ ~LanguageSwitchModel();
+ LanguageSwitchModel(const LanguageSwitchModel &) = delete;
+ const LanguageSwitchModel &operator=(const LanguageSwitchModel &) = delete;
+ static const uint16_t LANGUAGE_ITEM_MAX = MAX_LANGUAGE; // 语言总数
+ std::string PreLanguageCode; // 上一次切换的语言
+ bool hint_flag{false};
+ int32_t hint_code{-1};
+ };
+
+}
+#endif
--- /dev/null
+/*
+ * @Author: luozheng 1732036298@qq.com
+ * @Date: 2024-03-28 14:16:52
+ * @LastEditors: luozheng 1732036298@qq.com
+ * @LastEditTime: 2024-09-28 19:03:36
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/languagecode/include/LanguageSwitchPresenter.h
+ */
+#ifndef LANGUAGE_SWITCH_PRESENTER_H
+#define LANGUAGE_SWITCH_PRESENTER_H
+
+#include "Presenter.h"
+#include "View.h"
+#include "languagecode/include/LanguageSwitchModel.h"
+#include "LanguageSwitchView.h"
+#include "languagecode/include/LanguageSwitchListitemView.h"
+#include "ui_resource_string.h"
+namespace OHOS
+{
+
+ class LanguageSwitchView;
+ class LanguageSwitchPresenter : public Presenter<LanguageSwitchView>,
+ public UIView::OnClickListener,
+ public RootView::OnKeyActListener,
+ public UIView::OnDragListener,
+ public ListScrollListener
+ {
+ 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; // 增加按键事件
+ void OnItemSelected(int16 index, UIView *view) override;
+ LanguageSwitchModel *p_LanguageSwitchModel{nullptr};
+ UILabelExt *m_labelext{nullptr};
+ bool X_DRAG_FLAG{false};
+ };
+}
+
+#endif
\ No newline at end of file
--- /dev/null
+/*
+ * @Author: luozheng 1732036298@qq.com
+ * @Date: 2024-03-28 11:58:38
+ * @LastEditors: luozheng 1732036298@qq.com
+ * @LastEditTime: 2025-02-24 18:09:24
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/languagecode/include/LanguageSwitchView.h
+ */
+#ifndef LANGUAGE_SWITCH_VIEW_H
+#define LANGUAGE_SWITCH_VIEW_H
+
+
+#include "View.h"
+#include "components/ui_scroll_view.h"
+#include "components/ui_label_ext.h"
+#include "components/ui_list.h"
+#include "languagecode/include/LanguageSwitchListAdapter.h"
+#include "string"
+namespace OHOS
+{
+ class LanguageSwitchPresenter;
+ class LanguageSwitchView : public View<LanguageSwitchPresenter>
+ {
+
+ public:
+ LanguageSwitchView();
+ virtual ~LanguageSwitchView();
+ static LanguageSwitchView *GetInstance(void);
+
+ void OnStart() override;
+ void AddLanguageItemToList(const Language &item);
+ UIList *GetLanguageList(void);
+ void InithintView();
+ void show_hint_group(std::string code,bool data);
+ void show_hint_group(int32_t code, bool data);
+
+ std::string get_hint_id_code()
+ {
+ return hint_id_code;
+ }
+
+ int32_t get_hint_id()
+ {
+ return hint_id;
+ }
+
+ UIButton *GetLanguagebutton_cancel(void);
+
+
+ UIButton *GetLanguagebutton_ensure(void);
+
+ private:
+ bool LanguageSwitchScrollViewInit(void);
+ bool LanguageSwitchLabelViewInit(void);
+ bool LanguageSwitchListViewInit(void);
+ void LanguageSwitchViewInit(void);
+ void ClearAll(void);
+ UIViewGroup *group{nullptr};
+ UIButton *button_cancel{nullptr};
+ UIButton *button_ensure{nullptr};
+ UILabel *LanguageSwitchViewhintLabel{nullptr}; // "语言"
+ std::string hint_id_code;
+ int32_t hint_id{-1};
+ UIScrollView *LanguageSwitchScrollView{nullptr};
+ UILabelExt *LanguageSwitchViewTitleLabel{nullptr}; // "语言"
+ UIList *LanguageList{nullptr}; // 语言列表
+ LanguageSwitchListAdapter *p_LanguageSwitchListAdapter{nullptr}; // 语言列表适配器
+ };
+}
+#endif
\ No newline at end of file
--- /dev/null
+/*
+ * @Author: luozheng 1732036298@qq.com
+ * @Date: 2024-03-28 14:27:05
+ * @LastEditors: luozheng 1732036298@qq.com
+ * @LastEditTime: 2024-06-28 09:33:56
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/languagecode/src/LanguageSwitchListAdapter.cpp
+ */
+#include "languagecode/include/LanguageSwitchListAdapter.h"
+#include "languagecode/include/LanguageSwitchListitemView.h"
+#include "wearable_log.h"
+#include "languagecode/include/LanguageSwitchModel.h"
+#include "languagecode/include/LanguageSwitchPresenter.h"
+#include "languagecode/LanguageInit.h"
+#include <UiConfig.h>
+
+namespace OHOS
+{
+
+ LanguageSwitchListAdapter::LanguageSwitchListAdapter()
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "LanguageSwitchListAdapter::LanguageSwitchListAdapter");
+ }
+
+ LanguageSwitchListAdapter::~LanguageSwitchListAdapter()
+ {
+ WEARABLE_LOGD(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_LOGD(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)
+ {
+// 设置选中
+#ifdef FD230_650
+ item->GetUILabelButtonExt()->SetImageSrc(PNG_CHECKBOX_ON_IMAGE, PNG_CHECKBOX_ON_IMAGE);
+#endif
+ }
+ else
+ {
+// 设置未选中
+#ifdef FD230_650
+ item->GetUILabelButtonExt()->SetImageSrc(PNG_CHECKBOX_OFF_IMAGE, PNG_CHECKBOX_OFF_IMAGE);
+#endif
+ }
+ item->GetUILabelButtonExt()->Invalidate();
+ }
+ return item;
+ }
+
+ void LanguageSwitchListAdapter::AddListItem(const Language &item)
+ {
+ listData.push_back(item);
+ }
+
+}
\ No newline at end of file
--- /dev/null
+/*
+ * @Author: luozheng 1732036298@qq.com
+ * @Date: 2024-03-28 14:28:03
+ * @LastEditors: luozheng 1732036298@qq.com
+ * @LastEditTime: 2024-10-05 17:39:04
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/languagecode/src/LanguageSwitchListitemView.cpp
+ */
+#include "languagecode/include/LanguageSwitchListitemView.h"
+#include "wearable_log.h"
+
+namespace OHOS
+{
+
+ LanguageSwitchListitemView::LanguageSwitchListitemView()
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "LanguageSwitchListitemView::LanguageSwitchListitemView");
+ SetPosition(43, 120, 380, 120);
+ SetStyle(STYLE_BACKGROUND_COLOR, Color::Black().full);
+ SetStyle(STYLE_BACKGROUND_OPA, 255);
+ SetUpChild();
+ Add(&m_LabelButtonExt);
+ Add(&languae_Image);
+
+
+ }
+
+ LanguageSwitchListitemView::~LanguageSwitchListitemView()
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "LanguageSwitchListitemView::~LanguageSwitchListitemView");
+ Remove(&m_LabelButtonExt);
+ Remove(&languae_Image);
+ }
+
+ void LanguageSwitchListitemView::SetItemInfo(const Language itemInfo)
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "LanguageSwitchListitemView::SetItemInfo");
+ m_LabelButtonExt.SetViewId(itemInfo.code);
+ //m_LabelButtonExt.SetText(itemInfo.name);
+ m_LabelButtonExt.SetFont(itemInfo.fontname, 30);
+ languae_Image.SetSrc(itemInfo.path);
+ //m_LabelButtonExt
+ if(strcmp(itemInfo.code,"az") == 0)
+ {
+ SetHeight(160);
+ }
+ else
+ {
+ SetHeight(120);
+ }
+ }
+
+ void LanguageSwitchListitemView::SetUpChild()
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "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, 0xff191919, UIButton::PRESSED);
+ m_LabelButtonExt.SetAlign(TEXT_ALIGNMENT_LEFT);
+ m_LabelButtonExt.SetLabelPosition(47, 0);
+ m_LabelButtonExt.SetImagePosition(290, 30);
+ m_LabelButtonExt.SetTouchable(true);
+ #ifdef FD230_650
+ m_LabelButtonExt.SetImageSrc(PNG_CHECKBOX_OFF_IMAGE, PNG_CHECKBOX_OFF_IMAGE);
+ #endif
+
+ languae_Image.SetPosition(33,37);
+ }
+
+ UILabelButtonExt *LanguageSwitchListitemView::GetUILabelButtonExt(void)
+ {
+ return &m_LabelButtonExt;
+ }
+
+}
\ No newline at end of file
--- /dev/null
+/*
+ * @Author: luozheng 1732036298@qq.com
+ * @Date: 2024-03-28 16:36:46
+ * @LastEditors: luozheng 1732036298@qq.com
+ * @LastEditTime: 2024-11-09 16:31:39
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/languagecode/src/LanguageSwitchModel.cpp
+ */
+#include "languagecode/include/LanguageSwitchModel.h"
+#include "wearable_log.h"
+#include "languagecode/LanguageInit.h"
+#include "ConfigModel.h"
+#include "NativeAbility.h"
+#include "languagecode/include/LanguageSwitchView.h"
+#include "AppViewIDs.h"
+namespace OHOS
+{
+
+ LanguageSwitchModel::LanguageSwitchModel() {}
+
+ LanguageSwitchModel::~LanguageSwitchModel() {}
+
+ LanguageSwitchModel &LanguageSwitchModel::GetInstance()
+ {
+ static LanguageSwitchModel instance;
+ return instance;
+ }
+
+ void LanguageSwitchModel::LanguageSwitchViewupdata(uint32_t id)
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "LanguageSwitchViewupdata:%d", id);
+
+ if (id == 0 || id == 1)
+ {
+ OHOS::language::GetInstance()->ChangeLanguage(id);
+ if (LanguageSwitchView::GetInstance())
+ {
+ NativeAbility::GetInstance().ChangeSlice(VIEW_LANGUAGE_SWITCH);
+ }
+ }
+ return;
+
+ if (is_load_languages(id))
+ {
+ if (LanguageSwitchView::GetInstance())
+ {
+ LanguageSwitchView::GetInstance()->show_hint_group(id, true);
+ }
+ else
+ {
+ set_hint_code(id);
+ set_hint_flag(true);
+#ifdef FD230_650
+ NativeAbility::GetInstance().EnterSlice(VIEW_LANGUAGE_SWITCH);
+#endif
+ }
+ }
+ else
+ {
+ OHOS::language::GetInstance()->ChangeLanguage(id);
+ if (LanguageSwitchView::GetInstance())
+ {
+ NativeAbility::GetInstance().ChangeSlice(VIEW_LANGUAGE_SWITCH);
+ }
+ }
+ return;
+ }
+ /*
+ * @brief: 设置当前语言code
+ */
+ void LanguageSwitchModel::SetCurLanguageCode(char *curlanguagecode)
+ {
+ ConfigModel::GetInstance()->SetLanguageCode(curlanguagecode);
+ }
+
+ /*
+ * @brief 获取当前设置的语言code
+ */
+ const char *LanguageSwitchModel::GetCurLanguageCode(void)
+ {
+ return ConfigModel::GetInstance()->GetLanguageCode().c_str();
+ }
+
+ /*
+ * @brief 设置上一次语言code
+ */
+ void LanguageSwitchModel::SetLastLanguageCode(std::string prelanguagecode)
+ {
+ PreLanguageCode = prelanguagecode;
+ }
+
+ /*
+ * @brief 获取上一次设置的语言code
+ */
+ const char *LanguageSwitchModel::GetLastLanguageCode(void)
+ {
+ return PreLanguageCode.c_str();
+ }
+}
\ No newline at end of file
--- /dev/null
+/*
+ * @Author: luozheng 1732036298@qq.com
+ * @Date: 2024-03-28 14:17:43
+ * @LastEditors: luozheng 1732036298@qq.com
+ * @LastEditTime: 2024-11-09 15:30:10
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/languagecode/src/LanguageSwitchPresenter.cpp
+ */
+#include "AppViewIDs.h"
+#include "NativeAbility.h"
+#include "languagecode/include/LanguageSwitchPresenter.h"
+#include "languagecode/include/LanguageSwitchListitemView.h"
+#include "languagecode/include/LanguageSwitchModel.h"
+#include "common/key_code.h"
+#include "custom_utils.h"
+#include "languagecode/LanguageInit.h"
+#include "ConfigModel.h"
+#include "settings/include/SettingModel.h"
+#ifdef SUPPORT_BLE_SERVICE
+#include "bleService.h"
+#endif
+#include "broadcast_feature.h"
+#include "NativeRegisterManager.h"
+
+namespace OHOS
+{
+ REGIST_SLICE(VIEW_LANGUAGE_SWITCH, LanguageSwitchView, LanguageSwitchPresenter);
+
+ extern Language languages[];
+
+ // 当前Presenter属性实例化的内存指针
+ static LanguageSwitchPresenter *g_pLanguageSwitchPresenter = nullptr;
+
+ LanguageSwitchPresenter::LanguageSwitchPresenter()
+ {
+ p_LanguageSwitchModel = &LanguageSwitchModel::GetInstance();
+ g_pLanguageSwitchPresenter = this;
+ }
+
+ LanguageSwitchPresenter::~LanguageSwitchPresenter()
+ {
+ g_pLanguageSwitchPresenter = nullptr;
+ }
+
+ LanguageSwitchPresenter *LanguageSwitchPresenter::GetInstance()
+ {
+ return g_pLanguageSwitchPresenter;
+ }
+
+ void LanguageSwitchPresenter::OnStart()
+ {
+ Presenter<LanguageSwitchView>::OnStart();
+ }
+
+ void LanguageSwitchPresenter::OnResume(void)
+ {
+ Presenter<LanguageSwitchView>::OnResume();
+ if (view_ == nullptr)
+ {
+ return;
+ }
+
+#if 0
+ for (uint8_t i = 0; i < MAX_LANGUAGE; i++)
+ {
+ view_->AddLanguageItemToList(languages[i]);
+ }
+#else
+ for (uint8_t i = 0; i < 2; i++)
+ {
+ view_->AddLanguageItemToList(languages[i]);
+ }
+#endif
+ }
+
+ void LanguageSwitchPresenter::OnPause(void)
+ {
+ Presenter<LanguageSwitchView>::OnPause();
+ }
+
+ void LanguageSwitchPresenter::OnStop(void)
+ {
+ Presenter<LanguageSwitchView>::OnStop();
+ }
+
+ bool LanguageSwitchPresenter::OnDrag(UIView &view, const DragEvent &event)
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "RespiratoryTrainingPresenter::OnDrag");
+ UNUSED(view);
+ if ((event.GetDeltaX() > X_DRAG_OFFSET) && (event.GetDeltaX() > (DOUBLES * MATH_ABS(event.GetDeltaY())))) // 拖动过程中判断是否是水平滑动
+ {
+ LanguageSwitchPresenter::X_DRAG_FLAG = true;
+ }
+ return true;
+ }
+
+ bool LanguageSwitchPresenter::OnDragEnd(UIView &view, const DragEvent &event)
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "RespiratoryTrainingPresenter::OnDragEnd");
+ UNUSED(view);
+ if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT && LanguageSwitchPresenter::X_DRAG_FLAG)
+ {
+#ifdef FD230_650
+ NativeAbility::GetInstance().Back(TransitionType::TRANSITION_BACK_TO_HEXAGONS);
+#endif
+ LanguageSwitchPresenter::X_DRAG_FLAG = false;
+ }
+ return true;
+ }
+
+ bool LanguageSwitchPresenter::OnClick(UIView &view, const ClickEvent &event)
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "LanguageSwitchPresenter::OnClick");
+
+ UNUSED(event);
+ const char *lastLanguageCode = p_LanguageSwitchModel->GetLastLanguageCode();
+ UILabelButtonExt *p_UILabelButtonExt = dynamic_cast<UILabelButtonExt *>(&view);
+ char *id = const_cast<char *>(p_UILabelButtonExt->GetViewId());
+ language *g_planguage = language::GetInstance();
+
+ /* -------------------------------------------------------------------------- */
+ if (strcmp(view.GetViewId(), "BUTTON_CHECK_OK") == 0)
+ {
+ uint8_t power_buf[2] = {0};
+ power_buf[0] = 3;
+ if (LanguageSwitchView::GetInstance()->get_hint_id() != -1)
+ {
+ int32_t Hint_ID = LanguageSwitchView::GetInstance()->get_hint_id();
+
+ g_planguage->ChangeLanguage(Hint_ID);
+#ifdef FD230_650
+ CustomEventPublish(TOPIC_EVENT_DEVICE_BIND, power_buf, 2);
+#endif
+ }
+ else
+ {
+ std::string Hint_ID = LanguageSwitchView::GetInstance()->get_hint_id_code();
+
+ g_planguage->ChangeLanguage(Hint_ID);
+
+#ifdef FD230_650
+ CustomEventPublish(TOPIC_EVENT_DEVICE_BIND, power_buf, 2);
+#endif
+ }
+
+ return true;
+ }
+ else if (strcmp(view.GetViewId(), "BUTTON_CHECK_NO") == 0)
+ {
+
+ LanguageSwitchView::GetInstance()->show_hint_group("", false);
+ return true;
+ }
+
+ // if (ConfigModel::GetInstance()->GetisFirstTimeStart() == true && SettingModel::GetInstance().GetPhoneConnectStatus() == false)
+ // {
+ // NativeAbility::GetInstance().EnterSlice(VIEW_WATCH_QR_CODE);
+ // }
+ // else if(ConfigModel::GetInstance()->GetisFirstTimeStart() == true && SettingModel::GetInstance().GetPhoneConnectStatus() == true)
+ // {
+ // if (ConfigModel::GetInstance()->GetLanguage() == -1)
+ // {
+ // uapi_set_screen_on_api();
+ // NativeAbility::GetInstance().ChangeSlice(VIEW_MAIN);
+ // ConfigModel::GetInstance()->SetisFirstTimeStart(false);
+ // NativeAbility::GetInstance().SetDefaultSliceId(VIEW_MAIN);
+ // }
+ // }
+ /* -------------------------------------------------------------------------- */
+ LanguageId currentLanguageId = LanguageManager::GetInstance().GetLanguageIdByCode(id);
+ if (is_load_languages(currentLanguageId))
+ {
+ LanguageSwitchView::GetInstance()->show_hint_group(id, true);
+ return true;
+ }
+ else
+ {
+ if (ConfigModel::GetInstance()->GetisFirstTimeStart() == true)
+ {
+#ifdef FD230_650
+ NativeAbility::GetInstance().EnterSlice(VIEW_WATCH_QR_CODE);
+#endif
+ }
+ }
+
+ 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_LOGD(WEARABLE_LOG_MODULE_APP, "lastLanguageCode = %s , CurrLanguageCode = %s", p_LanguageSwitchModel->GetLastLanguageCode(), p_LanguageSwitchModel->GetCurLanguageCode());
+ // 检查当前语言ID是否已经是点击的语言ID,否则重复点击同一语言不响应切换
+ if (strcmp(p_LanguageSwitchModel->GetCurLanguageCode(), lastLanguageCode) == 0)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Do not ChangeLanguage!!");
+ return true;
+ }
+ else
+ {
+
+ {
+
+ g_planguage->ChangeLanguage(p_LanguageSwitchModel->GetCurLanguageCode());
+ m_labelext->SetTextId(STR_LANGUAGE_SELECTION);
+ m_labelext->ForceResetText(); // 强制刷新
+
+#ifdef FD230_650
+ p_UILabelButtonExt->SetImageSrc(PNG_CHECKBOX_ON_IMAGE, PNG_CHECKBOX_ON_IMAGE);
+#endif
+ 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 == 1 && uapi_get_screen_state() == 0)
+ {
+#ifdef FD230_650
+ NativeAbility::GetInstance().Back();
+#endif
+#ifdef SUPPORT_BLE_SERVICE
+ br_adv_start(20);
+#endif
+ }
+ return true;
+ }
+
+ void LanguageSwitchPresenter::OnItemSelected(int16 index, UIView *view)
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "LanguageSwitchPresenter::OnItemSelected:%d", index);
+ }
+
+ void LanguageSwitchPresenter::SetLabelExt(UILabelExt *labelext)
+ {
+ m_labelext = labelext;
+ }
+}
\ No newline at end of file
--- /dev/null
+#include "languagecode/include/LanguageSwitchView.h"
+#include "languagecode/include/LanguageSwitchPresenter.h"
+#include "wearable_log.h"
+#include "UiConfig.h"
+namespace OHOS
+{
+
+ static constexpr int16_t TITLE_LABEL_X = 83;
+ static constexpr int16_t TITLE_LABEL_Y = 50;
+ static constexpr int16_t TITLE_LABEL_W = 300;
+ static constexpr int16_t TITLE_LABEL_H = 40;
+ static constexpr int16_t TITLE_LABEL_TEXT_FONT = 30;
+ static constexpr int16_t TITLE_LABEL_LINE_HEIGHT = 35;
+ static constexpr int16_t TITLE_LABEL_TEXT_ROLLSPEED = 70;
+
+ 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 constexpr int16_t MAX_LANGUAGE_LIST_SCROLLBLANKSIZE = 50;
+ static constexpr int16_t ROTATEFACTORVALUE = 1.0;
+
+ static LanguageSwitchView *g_pLanguageSwitchView{nullptr};
+ LanguageSwitchView::LanguageSwitchView()
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "LanguageSwitchView::LanguageSwitchView");
+ g_pLanguageSwitchView = this;
+ }
+
+ LanguageSwitchView::~LanguageSwitchView()
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "LanguageSwitchView::~LanguageSwitchView");
+ ClearAll();
+ LanguageSwitchModel::GetInstance().set_hint_flag(false);
+ LanguageSwitchModel::GetInstance().set_hint_code(-1);
+ g_pLanguageSwitchView = nullptr;
+ }
+
+ LanguageSwitchView *LanguageSwitchView::GetInstance()
+ {
+ return g_pLanguageSwitchView;
+ }
+
+ void LanguageSwitchView::AddLanguageItemToList(const Language &item)
+ {
+ p_LanguageSwitchListAdapter->AddListItem(item);
+ }
+
+ UIList *LanguageSwitchView::GetLanguageList(void)
+ {
+ return LanguageList;
+ }
+
+ void LanguageSwitchView::ClearAll(void)
+ {
+ if (LanguageSwitchScrollView != nullptr)
+ {
+ LanguageSwitchScrollView->RemoveAll();
+ if (LanguageSwitchViewTitleLabel)
+ {
+ delete LanguageSwitchViewTitleLabel;
+ LanguageSwitchViewTitleLabel = nullptr;
+ }
+ if (p_LanguageSwitchListAdapter)
+ {
+ delete p_LanguageSwitchListAdapter;
+ p_LanguageSwitchListAdapter = nullptr;
+ }
+ if (LanguageList)
+ {
+ delete LanguageList;
+ LanguageList = nullptr;
+ }
+ delete LanguageSwitchScrollView;
+ LanguageSwitchScrollView = nullptr;
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "LanguageSwitchView::ClearAll LanguageSwitchScrollView over!!");
+ }
+ if (group != nullptr)
+ {
+ group->RemoveAll();
+ if (button_cancel)
+ {
+ delete button_cancel;
+ button_cancel = nullptr;
+ }
+ if (button_ensure)
+ {
+ delete button_ensure;
+ button_ensure = nullptr;
+ }
+ if (LanguageSwitchViewhintLabel)
+ {
+ delete LanguageSwitchViewhintLabel;
+ LanguageSwitchViewhintLabel = nullptr;
+ }
+ delete group;
+ group = nullptr;
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "LanguageSwitchView::ClearAll group over!!");
+ }
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "LanguageSwitchView::ClearAll over!!");
+ }
+
+ bool LanguageSwitchView::LanguageSwitchScrollViewInit(void)
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "LanguageSwitchView::LanguageSwitchScrollViewInit");
+ 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());
+ // LanguageSwitchScrollView->SetScrollBlankSize(MAX_LANGUAGE_LIST_SCROLLBLANKSIZE);
+ LanguageSwitchScrollView->SetHorizontalScrollState(false);
+ LanguageSwitchScrollView->SetTouchable(true);
+ LanguageSwitchScrollView->SetDraggable(true);
+
+ return true;
+ }
+
+ bool LanguageSwitchView::LanguageSwitchLabelViewInit(void)
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "LanguageSwitchView::LanguageSwitchLabelViewInit");
+ LanguageSwitchViewTitleLabel = new UILabelExt();
+ if (LanguageSwitchViewTitleLabel == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "LanguageSwitchView::LanguageSwitchViewTitleLabel new fail!");
+ return false;
+ }
+ LanguageSwitchViewTitleLabel->SetPosition(TITLE_LABEL_X, TITLE_LABEL_Y, TITLE_LABEL_W, TITLE_LABEL_H);
+ LanguageSwitchViewTitleLabel->SetStyle(STYLE_TEXT_FONT, TITLE_LABEL_TEXT_FONT);
+ LanguageSwitchViewTitleLabel->SetStyle(STYLE_LINE_HEIGHT, TITLE_LABEL_LINE_HEIGHT);
+ // LanguageSwitchViewTitleLabel->SetText("语言");
+ LanguageSwitchViewTitleLabel->SetTextId(STR_LANGUAGE_SELECTION);
+ LanguageSwitchViewTitleLabel->SetLineBreakMode(UILabel::LINE_BREAK_OSCILLATION);
+ LanguageSwitchViewTitleLabel->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
+ LanguageSwitchViewTitleLabel->SetRollSpeed(TITLE_LABEL_TEXT_ROLLSPEED);
+ LanguageSwitchViewTitleLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, TITLE_LABEL_TEXT_FONT);
+ LanguageSwitchPresenter::GetInstance()->SetLabelExt(LanguageSwitchViewTitleLabel);
+ LanguageSwitchScrollView->Add(LanguageSwitchViewTitleLabel);
+
+ return true;
+ }
+
+ bool LanguageSwitchView::LanguageSwitchListViewInit(void)
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "LanguageSwitchView::LanguageSwitchListViewInit");
+ p_LanguageSwitchListAdapter = new LanguageSwitchListAdapter(); // UIList 的适配器
+ if (p_LanguageSwitchListAdapter == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "LanguageSwitchView::p_LanguageSwitchListAdapter is nullptr!");
+ return false;
+ }
+ p_LanguageSwitchListAdapter->SetItemClickListener(static_cast<UIView::OnClickListener *>(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, 346);
+ LanguageList->SetStyle(STYLE_BACKGROUND_COLOR, 0xff000000);
+ LanguageList->EnableAutoAlign(true); // 设置此列表的自动对齐状态。当滚动停止时,子视图被选中,其位置自动与预设位置对齐
+ LanguageList->SetThrowDrag(true); // 设置手指抬起屏幕后是否继续滚动。
+ LanguageList->SetMaxScrollDistance(1000); // 设置手指抬起屏幕后的最大滚动距离。
+ LanguageList->SetSwipeACCLevel(200); /*设置手指抬起屏幕后的补偿距离。*/
+ LanguageList->SetSelectPosition(346);
+ LanguageList->SetReboundSize(30);
+ LanguageList->SetScrollBlankSize(20);
+ LanguageList->SetStartIndex(0);
+ FocusManager::GetInstance()->RequestFocus(LanguageList);
+ FocusManager::GetInstance()->RequestFocusByDirection(FOCUS_DIRECTION_UP);
+ LanguageList->SetRotateFactor(1.0);
+ if (p_LanguageSwitchListAdapter->GetCount() < 3)
+ {
+ LanguageList->SetReboundSize(0);
+ LanguageList->SetScrollBlankSize(0);
+ }
+ return true;
+ }
+
+ void LanguageSwitchView::LanguageSwitchViewInit(void)
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "LanguageSwitchView::LanguageSwitchViewInit");
+ if (!LanguageSwitchScrollViewInit() || !LanguageSwitchLabelViewInit() || !LanguageSwitchListViewInit())
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "LanguageSwitchView::LanguageSwitchViewInit fail!!");
+ return;
+ }
+ }
+
+ void LanguageSwitchView::show_hint_group(std::string code, bool data)
+ {
+ group->SetVisible(data);
+ RootView::GetInstance()->Invalidate();
+ if (data)
+ {
+ hint_id_code = code;
+ }
+ return;
+ }
+
+ void LanguageSwitchView::show_hint_group(int32_t code, bool data)
+ {
+ group->SetVisible(data);
+ RootView::GetInstance()->Invalidate();
+ if (data)
+ {
+ hint_id = code;
+ }
+ return;
+ }
+ UIButton *LanguageSwitchView::GetLanguagebutton_cancel(void)
+ {
+ return button_cancel;
+ }
+
+ UIButton *LanguageSwitchView::GetLanguagebutton_ensure(void)
+ {
+ return button_ensure;
+ }
+
+ // Take effect after restart
+ void LanguageSwitchView::InithintView()
+ {
+ group = new UIViewGroup();
+ if (group == nullptr)
+ {
+ return;
+ }
+ group->SetPosition(0, 0, Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight());
+ group->SetTouchable(true);
+ group->SetDraggable(true);
+ group->SetOnDragListener(presenter_);
+
+ if (LanguageSwitchViewhintLabel == nullptr)
+ {
+ LanguageSwitchViewhintLabel = new UILabel();
+ }
+ LanguageSwitchViewhintLabel->SetPosition(47, 194); // widget's left position and top position
+ LanguageSwitchViewhintLabel->Resize(370, 60); // widget's width and height
+ LanguageSwitchViewhintLabel->SetViewId("label1"); // Set style
+ LanguageSwitchViewhintLabel->SetStyle(STYLE_TEXT_FONT, 30);
+
+ LanguageSwitchViewhintLabel->SetText("Take effect after restart");
+ LanguageSwitchViewhintLabel->SetLineBreakMode(UILabel::LINE_BREAK_WRAP);
+ LanguageSwitchViewhintLabel->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
+ LanguageSwitchViewhintLabel->SetRollSpeed(0);
+ LanguageSwitchViewhintLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME_EN, 30);
+
+ group->Add(LanguageSwitchViewhintLabel);
+ LanguageSwitchViewhintLabel->SetVisible(true);
+
+ button_cancel = new UIButton();
+ if (button_cancel == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemShutdown::new button_cancel fail!");
+ return;
+ }
+ button_cancel->SetPosition(97, 299, 130, 130);
+ button_cancel->SetStyle(STYLE_BACKGROUND_COLOR, 0xffffffff);
+ button_cancel->SetStyle(STYLE_BACKGROUND_OPA, 0x00);
+ button_cancel->SetImagePosition(15, 15);
+ button_cancel->SetStyleForState(STYLE_BACKGROUND_COLOR, 0xff191919, UIButton::PRESSED);
+ button_cancel->SetStyleForState(STYLE_BACKGROUND_OPA, 0x00, UIButton::PRESSED);
+#ifdef FD230_650
+ button_cancel->SetImageSrc(PNG_SYSTEM_CHECK_OFF_IMAGE, PNG_SYSTEM_CHECK_OFF_IMAGE);
+#endif
+ button_cancel->SetViewId("BUTTON_CHECK_NO");
+ group->Add(button_cancel);
+ /* ------------------------ button_ensure ----------------------- */
+ button_ensure = new UIButton();
+ if (button_ensure == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemShutdown::new button_ensure fail!");
+ return;
+ }
+ button_ensure->SetPosition(240, 299, 130, 130);
+ button_ensure->SetStyle(STYLE_BACKGROUND_COLOR, 0xffffffff);
+ button_ensure->SetStyle(STYLE_BACKGROUND_OPA, 0x00);
+ button_ensure->SetImagePosition(15, 15);
+ button_ensure->SetStyleForState(STYLE_BACKGROUND_COLOR, 0xff191919, UIButton::PRESSED);
+ button_ensure->SetStyleForState(STYLE_BACKGROUND_OPA, 0x00, UIButton::PRESSED);
+#ifdef FD230_650
+ button_ensure->SetImageSrc(PNG_SYSTEM_CHECK_ON_IMAGE, PNG_SYSTEM_CHECK_ON_IMAGE);
+#endif
+ button_ensure->SetViewId("BUTTON_CHECK_OK");
+ group->Add(button_ensure);
+
+ button_cancel->SetOnClickListener(presenter_);
+ button_ensure->SetOnClickListener(presenter_);
+ if (LanguageSwitchModel::GetInstance().get_hint_flag() == false)
+ {
+ group->SetVisible(false);
+ }
+ else
+ {
+ group->SetVisible(true);
+ hint_id = LanguageSwitchModel::GetInstance().get_hint_code();
+
+ LanguageSwitchModel::GetInstance().set_hint_flag(false);
+ }
+ }
+
+ void LanguageSwitchView::OnStart()
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "LanguageSwitchView::OnStart");
+ View<LanguageSwitchPresenter>::OnStart();
+ LanguageSwitchViewInit();
+ InithintView();
+
+ AddViewToRootContainer(LanguageSwitchScrollView);
+ LanguageList->SetAdapter(p_LanguageSwitchListAdapter);
+ LanguageSwitchScrollView->Add(LanguageList);
+ AddViewToRootContainer(group);
+ RootView::GetInstance()->SetOnKeyActListener(presenter_);
+
+ return;
+ }
+}
\ No newline at end of file