${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
VIEW_FAST_TRAINING, // 快速训练
VIEW_FAST_TRAINING_ATTENTION, // 快速训练项目选择超出提示
VIEW_FIND_PHONE, // 查找手机
+ VIEW_LANGUAGE_SWITCH, // 语言切换
/* ----------------------------------- 录音 ----------------------------------- */
VIEW_RECORD,
/* ---------------------------------- 界面 ---------------------------------- */
void InitDisplayBrightnessSlice(void);
void InitClassicBluetoothSlice(void);
void InitFindPhoneSlice(void);
+ void InitLanguageSwitchSlice(void);
/* --------------------------------界面------------------------------------ */
void InitRotateSlice(void);
void InitBloodSlice(void);
#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"
{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},
}
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);
+ }
+
}
{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
+/*
+ * @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");
{
return g_planguage;
}
+
bool language::InitLangues()
{
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "InitLangues");
-/***
- * @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的枚举类
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:
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
--- /dev/null
+/*
+ * @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
--- /dev/null
+/*
+ * @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
--- /dev/null
+/*
+ * @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
--- /dev/null
+/*
+ * @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
--- /dev/null
+/*
+ * @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
--- /dev/null
+/*
+ * @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
--- /dev/null
+/*
+ * @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
--- /dev/null
+/*
+ * @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
--- /dev/null
+/*
+ * @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
--- /dev/null
+#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
#include "SettingPresenter.h"
#include "RebootModel.h"
#include "common/key_code.h"
+#include <custom_utils.h>
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)
* @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
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};
};
}
* @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"
return button;
}
+ void PairingViewEventListener::SetDeviceName(const char *Name)
+ {
+ DeviceName = Name;
+ }
/*获取设备名称*/
- static const char *GetDeviceName(void)
+ const char *PairingViewEventListener::GetDeviceName(void)
{
return "Iphone 13 pro"; //先用固定字符串测试
}
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);
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);