From: hcj <1224667075@qq.com> Date: Mon, 9 Sep 2024 07:06:14 +0000 (+0800) Subject: 增加多国语言切换字体逻辑 X-Git-Tag: release_V1.2.70_20241020_135402~525 X-Git-Url: http://git.snicker.com.cn/css/static/gitweb.css?a=commitdiff_plain;h=cb5fd4e424ee8aae3301b8112b276d23257a2adb;p=mirrors%2FFD230.git 增加多国语言切换字体逻辑 --- diff --git a/code/sdk/application/wearable/fd230app/nativelauncher/src/NativeLauncher.cpp b/code/sdk/application/wearable/fd230app/nativelauncher/src/NativeLauncher.cpp index f713b58bb..b9ffdedba 100644 --- a/code/sdk/application/wearable/fd230app/nativelauncher/src/NativeLauncher.cpp +++ b/code/sdk/application/wearable/fd230app/nativelauncher/src/NativeLauncher.cpp @@ -459,24 +459,14 @@ namespace OHOS // ConfigModel::GetInstance()->Init(); // 初始化语言 GraphicStartUp::InitFontEngine(MEM_POOL_UI_FONT, MEM_POOL_UI_FONT_SIZE, OHOS::VECTOR_FONT_DIR, HARMONYOS_VECTOR_FONT_FILENAME); + //GraphicStartUp::InitFontEngine(MEM_POOL_UI_FONT, MEM_POOL_UI_FONT_SIZE, OHOS::NEW_FONT_DIR, HARMONYOS_VECTOR_ARABIC_FILENAME); GraphicStartUp::InitFontEngine(MEM_POOL_UI_FONT, MEM_POOL_UI_FONT_SIZE, OHOS::NEW_FONT_DIR, GILROY_BOLD_FONT); // 注册字体 GraphicStartUp::InitFontEngine(MEM_POOL_UI_FONT, MEM_POOL_UI_FONT_SIZE, OHOS::NEW_FONT_DIR, AUDIOWIDE_REGULAR_FONT); // 注册字体 - GraphicStartUp::InitFontEngine(MEM_POOL_UI_FONT, MEM_POOL_UI_FONT_SIZE, OHOS::NEW_FONT_DIR, KOREA_FONT); // 注册字体 //韩语 -#if 0 - GraphicStartUp::InitFontEngine(MEM_POOL_UI_FONT, MEM_POOL_UI_FONT_SIZE, OHOS::NEW_FONT_DIR, HINDI_FONT); // 注册字体 //印地语 - // GraphicStartUp::InitFontEngine(MEM_POOL_UI_FONT, MEM_POOL_UI_FONT_SIZE, OHOS::NEW_FONT_DIR, THAI_FONT); // 注册字体 //泰语 - GraphicStartUp::InitFontEngine(MEM_POOL_UI_FONT, MEM_POOL_UI_FONT_SIZE, OHOS::NEW_FONT_DIR, PERSIAN_FONT); // 注册字体 //波斯语 - GraphicStartUp::InitFontEngine(MEM_POOL_UI_FONT, MEM_POOL_UI_FONT_SIZE, OHOS::NEW_FONT_DIR, ARABIC_FONT); // 注册字体 //阿拉伯语 - GraphicStartUp::InitFontEngine(MEM_POOL_UI_FONT, MEM_POOL_UI_FONT_SIZE, OHOS::NEW_FONT_DIR, HEBREW_FONT); // 注册字体 //希伯来语 - - GraphicStartUp::InitFontEngine(MEM_POOL_UI_FONT, MEM_POOL_UI_FONT_SIZE, OHOS::NEW_FONT_DIR, SHEEPING_CATS_FONT); // 注册字体 - GraphicStartUp::InitFontEngine(MEM_POOL_UI_FONT, MEM_POOL_UI_FONT_SIZE, OHOS::NEW_FONT_DIR, GILROY_REGULAR_FONT); // 注册字体 -#endif // 默认设置全局字体为HarmonyOSFont,其他时候根据语言选择字体名字 set_current_global_font_name(HARMONYOS_VECTOR_FONT_FILENAME); - + WEARABLE_LOGI(WEARABLE_LOG_MODULE_LAUNCHER_FWK, "NativeLauncher::InitNativeLauncher fontname %s", DEFAULT_VECTOR_FONT_FILENAME); /* -------------------------------------------------------------------------- */ // 从语言json配置里面读取语言包 diff --git a/code/sdk/application/wearable/fd230app/nativeui/languagecode/LanguageInit.cpp b/code/sdk/application/wearable/fd230app/nativeui/languagecode/LanguageInit.cpp index d53c60202..74ccf203f 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/languagecode/LanguageInit.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/languagecode/LanguageInit.cpp @@ -17,6 +17,8 @@ #include #include "AppViewIDs.h" #include "languagecode/include/LanguageSwitchModel.h" +#include "common/graphic_startup.h" + namespace OHOS { // 初始化 languages 数组 @@ -39,19 +41,29 @@ namespace OHOS {ID, "id", "Bahasa Indonesia", "印尼语",HARMONYOS_VECTOR_FONT_FILENAME}, {MS, "ms", "Bahasa Melayu", "马来语",HARMONYOS_VECTOR_FONT_FILENAME}, {PL, "pl", "Polski", "波兰语",HARMONYOS_VECTOR_FONT_FILENAME}, - {TH, "th", "ไทย", "泰语",HARMONYOS_VECTOR_FONT_FILENAME},//THAI_FONT + {TH, "th", "ไทย", "泰语",ANUPHAN_FONT},//THAI_FONT {VI, "vi", "Tiếng Việt", "越南语",HARMONYOS_VECTOR_FONT_FILENAME}, {FI, "fi", "Suomi", "芬兰语",HARMONYOS_VECTOR_FONT_FILENAME}, {RO, "ro", "Română", "罗马尼亚语",HARMONYOS_VECTOR_FONT_FILENAME}, {TR, "tr", "Türkçe", "土耳其语",HARMONYOS_VECTOR_FONT_FILENAME}, - {FA, "fa", "فارسی", "波斯语",PERSIAN_FONT}, - {AR, "ar", "العربية", "阿拉伯语",ARABIC_FONT}, + {FA, "fa", "فارسی", "波斯语",HARMONYOS_VECTOR_ARABIC_FILENAME}, + {AR, "ar", "العربية", "阿拉伯语",HARMONYOS_VECTOR_ARABIC_FILENAME}, {HE, "he", "עברית", "希伯来语",HEBREW_FONT}, {UK, "uk", "Українська", "乌克兰语",HARMONYOS_VECTOR_FONT_FILENAME}, {SV, "sv", "Svenska", "瑞典语",HARMONYOS_VECTOR_FONT_FILENAME}, {UZ, "uz", "O‘zbek", "乌兹别克语",HARMONYOS_VECTOR_FONT_FILENAME}, {AZ, "az", "Azərbaycan dili", "阿塞拜疆语",HARMONYOS_VECTOR_FONT_FILENAME}, }; + + //稀有语言单独字库,此列需要重新加载字体 + // 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; @@ -114,17 +126,44 @@ namespace OHOS // 波斯语(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; + // 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() { @@ -153,6 +192,13 @@ namespace OHOS 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) { /** diff --git a/code/sdk/application/wearable/fd230app/nativeui/languagecode/include/LanguageSwitchView.h b/code/sdk/application/wearable/fd230app/nativeui/languagecode/include/LanguageSwitchView.h index b35757c07..51d15f376 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/languagecode/include/LanguageSwitchView.h +++ b/code/sdk/application/wearable/fd230app/nativeui/languagecode/include/LanguageSwitchView.h @@ -14,7 +14,7 @@ #include "components/ui_label_ext.h" #include "components/ui_list.h" #include "languagecode/include/LanguageSwitchListAdapter.h" - +#include "string" namespace OHOS { class LanguageSwitchPresenter; @@ -32,6 +32,18 @@ namespace OHOS void OnStop() override; void AddLanguageItemToList(const Language &item); UIList *GetLanguageList(void); + void InithintView(); + void show_hint_group(std::string code,bool data); + + std::string get_hint_id_code() + { + return hint_id_code; + } + + UIButton *GetLanguagebutton_cancel(void); + + + UIButton *GetLanguagebutton_ensure(void); private: bool LanguageSwitchScrollViewInit(void); @@ -39,6 +51,12 @@ namespace OHOS 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; + UIScrollView *LanguageSwitchScrollView{nullptr}; UILabelExt *LanguageSwitchViewTitleLabel{nullptr}; // "语言" UIList *LanguageList{nullptr}; // 语言列表 diff --git a/code/sdk/application/wearable/fd230app/nativeui/languagecode/src/LanguageSwitchPresenter.cpp b/code/sdk/application/wearable/fd230app/nativeui/languagecode/src/LanguageSwitchPresenter.cpp index d7e89d3d0..451f59cbe 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/languagecode/src/LanguageSwitchPresenter.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/languagecode/src/LanguageSwitchPresenter.cpp @@ -16,6 +16,7 @@ #include "ConfigModel.h" #include "settings/include/SettingModel.h" #include "bleService.h" +#include "broadcast_feature.h" namespace OHOS { extern Language languages[]; @@ -93,13 +94,36 @@ namespace OHOS bool LanguageSwitchPresenter::OnClick(UIView &view, const ClickEvent &event) { - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "RespiratoryTrainingPresenter::OnClick"); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RespiratoryTrainingPresenter::OnClick"); + UNUSED(event); + const char *lastLanguageCode = p_LanguageSwitchModel->GetLastLanguageCode(); + UILabelButtonExt *p_UILabelButtonExt = dynamic_cast(&view); + char *id = const_cast(p_UILabelButtonExt->GetViewId()); + language *g_planguage = language::GetInstance(); + + /* -------------------------------------------------------------------------- */ - if (ConfigModel::GetInstance()->GetisFirstTimeStart() == true) + if(strcmp(view.GetViewId() ,"BUTTON_CHECK_OK")==0) + { + uint8_t power_buf[2]={0}; + power_buf[0]=3; + std::string Hint_ID= LanguageSwitchView::GetInstance()->get_hint_id_code(); + + g_planguage->ChangeLanguage(Hint_ID); + + CustomEventPublish(TOPIC_EVENT_DEVICE_BIND,power_buf,2); + return true; + } + else if(strcmp(view.GetViewId(), "BUTTON_CHECK_NO")==0) { - NativeAbility::GetInstance().EnterSlice(VIEW_WATCH_QR_CODE); + + + LanguageSwitchView::GetInstance()->show_hint_group("",false); + + return true; } + // if (ConfigModel::GetInstance()->GetisFirstTimeStart() == true && SettingModel::GetInstance().GetPhoneConnectStatus() == false) // { // NativeAbility::GetInstance().EnterSlice(VIEW_WATCH_QR_CODE); @@ -116,16 +140,13 @@ namespace OHOS // } /* -------------------------------------------------------------------------- */ - UNUSED(event); - const char *lastLanguageCode = p_LanguageSwitchModel->GetLastLanguageCode(); - UILabelButtonExt *p_UILabelButtonExt = dynamic_cast(&view); - char *id = const_cast(p_UILabelButtonExt->GetViewId()); - language *g_planguage = language::GetInstance(); + if (p_UILabelButtonExt != nullptr) { char *currentLanguageCode = id; p_LanguageSwitchModel->SetCurLanguageCode(currentLanguageCode); // 设置新的当前语言Code + } else { @@ -141,15 +162,27 @@ namespace OHOS } else { - g_planguage->ChangeLanguage(p_LanguageSwitchModel->GetCurLanguageCode()); - m_labelext->SetTextId(STR_LANGUAGE_SELECTION); - m_labelext->ForceResetText(); // 强制刷新 - - p_UILabelButtonExt->SetImageSrc(PNG_CHECKBOX_ON_IMAGE, PNG_CHECKBOX_ON_IMAGE); - p_UILabelButtonExt->Invalidate(); - LanguageSwitchView::GetInstance()->GetLanguageList()->RefreshList(); - // 更新上一个语言ID - p_LanguageSwitchModel->SetLastLanguageCode(p_LanguageSwitchModel->GetCurLanguageCode()); + + LanguageId currentLanguageId = LanguageManager::GetInstance().GetLanguageIdByCode(id); + if(is_load_languages(currentLanguageId)) + { + LanguageSwitchView::GetInstance()->show_hint_group(id,true); + } + else + { + g_planguage->ChangeLanguage(p_LanguageSwitchModel->GetCurLanguageCode()); + m_labelext->SetTextId(STR_LANGUAGE_SELECTION); + m_labelext->ForceResetText(); // 强制刷新 + + p_UILabelButtonExt->SetImageSrc(PNG_CHECKBOX_ON_IMAGE, PNG_CHECKBOX_ON_IMAGE); + p_UILabelButtonExt->Invalidate(); + LanguageSwitchView::GetInstance()->GetLanguageList()->RefreshList(); + // 更新上一个语言ID + p_LanguageSwitchModel->SetLastLanguageCode(p_LanguageSwitchModel->GetCurLanguageCode()); + + + } + } return true; } diff --git a/code/sdk/application/wearable/fd230app/nativeui/languagecode/src/LanguageSwitchView.cpp b/code/sdk/application/wearable/fd230app/nativeui/languagecode/src/LanguageSwitchView.cpp index 9f8609112..58e906b68 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/languagecode/src/LanguageSwitchView.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/languagecode/src/LanguageSwitchView.cpp @@ -1,6 +1,7 @@ #include "languagecode/include/LanguageSwitchView.h" #include "languagecode/include/LanguageSwitchPresenter.h" #include "wearable_log.h" +#include "UiConfig.h" namespace OHOS { @@ -73,6 +74,20 @@ namespace OHOS delete LanguageSwitchScrollView; LanguageSwitchScrollView = nullptr; + + if(group) + { + group->RemoveAll(); + + delete button_cancel; + button_cancel = nullptr; + + delete button_ensure; + button_ensure = nullptr; + + delete LanguageSwitchViewhintLabel; + LanguageSwitchViewhintLabel = nullptr; + } } } @@ -156,6 +171,101 @@ namespace OHOS } } + void LanguageSwitchView::show_hint_group(std::string code,bool data) + { + group->SetVisible(data); + RootView::GetInstance()->Invalidate(); + if(data) + { + hint_id_code=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, 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); + button_cancel->SetImageSrc(PNG_SYSTEM_CHECK_OFF_IMAGE, PNG_SYSTEM_CHECK_OFF_IMAGE); + 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); + button_ensure->SetImageSrc(PNG_SYSTEM_CHECK_ON_IMAGE, PNG_SYSTEM_CHECK_ON_IMAGE); + button_ensure->SetViewId("BUTTON_CHECK_OK"); + group->Add(button_ensure); + + button_cancel->SetOnClickListener(presenter_); + button_ensure->SetOnClickListener(presenter_); + group->SetVisible(false); + + } + + void LanguageSwitchView::OnStart() { WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "LanguageSwitchView::OnStart"); @@ -167,6 +277,7 @@ namespace OHOS container_->SetOnDragListener(presenter_); LanguageSwitchViewInit(); + InithintView(); SetKeyActListener(); } @@ -177,6 +288,7 @@ namespace OHOS container_->Add(LanguageSwitchScrollView); LanguageList->SetAdapter(p_LanguageSwitchListAdapter); LanguageSwitchScrollView->Add(LanguageList); + container_->Add(group); Draw(); } diff --git a/code/sdk/application/wearable/service/ble_service/bleservice/bleEvent.c b/code/sdk/application/wearable/service/ble_service/bleservice/bleEvent.c index ed1afedf7..70270312d 100644 --- a/code/sdk/application/wearable/service/ble_service/bleservice/bleEvent.c +++ b/code/sdk/application/wearable/service/ble_service/bleservice/bleEvent.c @@ -3848,10 +3848,11 @@ static void GetWatchStatusCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *t //0空闲状态 9 usb状态 10 运动训练状态 uint8_t watchStatus = 0; + if(uapi_dev_runtime_get_train_status()) watchStatus=10; - value[17] = 0; + value[17] = watchStatus; value[18] = Calculate_CRC(value,18); sendBleData(value,19); } @@ -5368,6 +5369,13 @@ void Send_Sleep_Bin_Data(uint8_t day, uint16_t num) printf("Send_Sleep_Bin_Data file_size : %d \r\n",file_size); data=(char *)malloc(file_size); + + if(data==NULL) + { + return; + } + memset(data,0,file_size); + data[0]=sleep_count; if(data==NULL) @@ -5414,6 +5422,7 @@ void Send_Sleep_Bin_Data(uint8_t day, uint16_t num) ble_data_type type_={0x01,0x4b,file_size,pack,pack_id}; send_big_data(type_,data+offset,num); + //send_big_data(1,data+offset,num,file_size,pack_id,pack,0x4b,1); offset+=num; } @@ -5424,6 +5433,12 @@ void Send_Sleep_Bin_Data(uint8_t day, uint16_t num) //#endif ble_data_type type_={0x01,0x4b,file_size,pack,pack_id}; send_big_data(type_,data+offset,surplus_len); + printf("开始\r\n"); + for(int i=0;i