Merge #1407 into sdk602patch0911 from refs/changes/1407/head
author罗正 <1732036298@qq.com>
Sat, 16 Nov 2024 03:02:37 +0000 (03:02 +0000)
committersnickersun@163.com <accounts_62b90f7fcf51ade33b6f628e@mail.teambition.com>
Sat, 16 Nov 2024 03:02:37 +0000 (03:02 +0000)
applsit拨号盘实现:目前,滑动一下屏幕APP转动一次,后续优化为多次转动

* refs/changes/1407/head: (1 commits squashed)

  - applsit拨号盘实现:目前,滑动一下屏幕APP转动一次,后续优化为多次转动

Signed-off-by: 罗正 <1732036298@qq.com>
Reviewed-by: Caisking <3449750381@qq.com>
Reviewed-by: 罗正 <1732036298@qq.com>
Reviewed-by: aliyun8003852482 <1224667075@qq.com>
Reviewed-by: snickersun@163.com <accounts_62b90f7fcf51ade33b6f628e@mail.teambition.com>
Reviewed-by: aliyun6865282430 <1624952103@qq.com>
Merged-by: snickersun@163.com <accounts_62b90f7fcf51ade33b6f628e@mail.teambition.com>
link: https://codeup.aliyun.com/64191456b9581d62e8f81ac0/FD230/change/1407
code/sdk/application/wearable/fd230app/nativelauncher/include/UiConfig.h
code/sdk/application/wearable/fd230app/nativeui/applist/include/ApplistModel.h
code/sdk/application/wearable/fd230app/nativeui/applist/include/ApplistView.h
code/sdk/application/wearable/fd230app/nativeui/applist/src/ApplistModel.cpp
code/sdk/application/wearable/fd230app/nativeui/applist/src/ApplistPresenter.cpp
code/sdk/application/wearable/fd230app/nativeui/applist/src/ApplistView.cpp
code/sdk/application/wearable/fd230app/nativeui/themestyle/include/ThemeStyleModel.h
code/sdk/application/wearable/fd230app/nativeui/themestyle/include/ThemeStyleView.h
code/sdk/application/wearable/fd230app/nativeui/themestyle/src/ThemeStylePresenter.cpp
code/sdk/application/wearable/fd230app/nativeui/themestyle/src/ThemeStyleView.cpp

index 7d08b4f..ec0554d 100644 (file)
@@ -522,6 +522,42 @@ namespace OHOS
     static constexpr const char *PNG_APPLIST_SCHEDULE_IMAGE = APP_LIST_PATH "/schedule.bin";
     static constexpr const char *PNG_APPLIST_SMART_IMAGE = APP_LIST_PATH "/smart.bin";              //语音助手
     static constexpr const char *PNG_APPLIST_CALENDAR_IMAGE = APP_LIST_PATH "/calendar.bin";              //日历
+    //big Icon
+    static constexpr const char *PNG_APPLIST_THEME_IMAGE_BIG = APP_LIST_PATH "/applist_big_icon/theme.bin";              // 显示方式
+    static constexpr const char *PNG_APPLIST_CARDSET_IMAGE_BIG = APP_LIST_PATH "/applist_big_icon/cardsetting.bin";      // 卡片管理
+    static constexpr const char *PNG_APPLIST_CHANGEDIAL_IMAGE_BIG = APP_LIST_PATH "/applist_big_icon/changedial.bin";    // 切换表盘
+    static constexpr const char *PNG_APPLIST_ALARM_IMAGE_BIG = APP_LIST_PATH "/applist_big_icon/alarm.bin";              // 闹钟
+    static constexpr const char *PNG_APPLIST_SPO2_IMAGE_BIG = APP_LIST_PATH "/applist_big_icon/booldoxygen.bin";         // 血氧
+    static constexpr const char *PNG_APPLIST_HEART_IMAGE_BIG = APP_LIST_PATH "/applist_big_icon/heart.bin";              // 心率
+    static constexpr const char *PNG_APPLIST_SETTING_IMAGE_BIG = APP_LIST_PATH "/applist_big_icon/setting.bin";          // 设置
+    static constexpr const char *PNG_APPLIST_CALLER_IMAGE_BIG = APP_LIST_PATH "/applist_big_icon/phone.bin";             // 打电话
+    static constexpr const char *PNG_APPLIST_CALLLOG_IMAGE_BIG = APP_LIST_PATH "/applist_big_icon/phonebook.bin";        // 通话记录
+    static constexpr const char *PNG_APPLIST_COMPASS_IMAGE_BIG = APP_LIST_PATH "/applist_big_icon/compass.bin";          // 指南针
+    static constexpr const char *PNG_APPLIST_WEATHER_IMAGE_BIG = APP_LIST_PATH "/applist_big_icon/weather.bin";          // 天气
+    static constexpr const char *PNG_APPLIST_RECORD_IMAGE_BIG = APP_LIST_PATH "/applist_big_icon/recording.bin";         // 录音
+    static constexpr const char *PNG_APPLIST_TRAINING_IMAGE_BIG = APP_LIST_PATH "/applist_big_icon/training.bin";        // 训练
+    static constexpr const char *PNG_APPLIST_TRAINING_RECORD_IMAGE_BIG = APP_LIST_PATH "/applist_big_icon/record.bin";   // 训练记录
+    static constexpr const char *PNG_APPLIST_STOPWATCH_IMAGE_BIG = APP_LIST_PATH "/applist_big_icon/countdown.bin";      // 秒表
+    static constexpr const char *PNG_APPLIST_COUNTDOWN_IMAGE_BIG = APP_LIST_PATH "/applist_big_icon/clock.bin";          // 计时器
+    static constexpr const char *PNG_APPLIST_ALIPAY_IMAGE_BIG = APP_LIST_PATH "/applist_big_icon/alipay.bin";            // 支付宝
+    static constexpr const char *PNG_APPLIST_FINDPHONE_IMAGE_BIG = APP_LIST_PATH "/applist_big_icon/findphone.bin";      // 查找手机
+    static constexpr const char *PNG_APPLIST_DISTURB_IMAGE_BIG = APP_LIST_PATH "/applist_big_icon/disturb.bin";          // 勿扰模式
+    static constexpr const char *PNG_APPLIST_FLASHLIGHT_IMAGE_BIG = APP_LIST_PATH "/applist_big_icon/flashlight.bin";    // 手电筒
+    static constexpr const char *PNG_APPLIST_BRIGHTNESSLEVEL_IMAGE_BIG = APP_LIST_PATH "/applist_big_icon/lighting.bin"; // 亮度调节
+    static constexpr const char *PNG_APPLIST_SAVEELE_IMAGE_BIG = APP_LIST_PATH "/applist_big_icon/save.bin";             // 省电模式
+    static constexpr const char *PNG_APPLIST_MESSAGE_IMAGE_BIG = APP_LIST_PATH "/applist_big_icon/message.bin";          // 消息通知
+    static constexpr const char *PNG_APPLIST_TACKEPHOTOS_IMAGE_BIG = APP_LIST_PATH "/applist_big_icon/assistant.bin";    // 遥控拍照
+    static constexpr const char *PNG_APPLIST_BLUETOOTH_IMAGE_BIG = APP_LIST_PATH "/applist_big_icon/Bluetooth.bin";      // 蓝牙
+    static constexpr const char *PNG_APPLIST_BREATHE_IMAGE_BIG = APP_LIST_PATH "/applist_big_icon/breathe.bin";          // 呼吸训练
+    static constexpr const char *PNG_APPLIST_GOAL_IMAGE_BIG = APP_LIST_PATH "/applist_big_icon/sport.bin";               // 每日目标
+    static constexpr const char *PNG_APPLIST_VOICE_IMAGE_BIG = APP_LIST_PATH "/applist_big_icon/voice.bin";              // 声音
+    static constexpr const char *PNG_APPLIST_AIVOICE_IMAGE_BIG = APP_LIST_PATH "/applist_big_icon/aivoice.bin";          // AI Voice(人工智能语音)
+    static constexpr const char *PNG_APPLIST_SLEEP_IMAGE_BIG = APP_LIST_PATH "/applist_big_icon/sleeping.bin";           // 睡眠
+    static constexpr const char *PNG_APPLIST_INFORMATION_IMAGE_BIG = APP_LIST_PATH "/applist_big_icon/information.bin";  // 计算器
+    static constexpr const char *PNG_APPLIST_MUSIC_IMAGE_BIG = APP_LIST_PATH "/applist_big_icon/music.bin";              // 音乐
+    static constexpr const char *PNG_APPLIST_SCHEDULE_IMAGE_BIG = APP_LIST_PATH "/applist_big_icon/schedule.bin";
+    static constexpr const char *PNG_APPLIST_SMART_IMAGE_BIG = APP_LIST_PATH "/applist_big_icon/smart.bin";              //语音助手
+    static constexpr const char *PNG_APPLIST_CALENDAR_IMAGE_BIG = APP_LIST_PATH "/applist_big_icon/calendar.bin";        //日历
   
     // AppList hexagon icon
     static constexpr const char *PNG_APPLIST_DEFAULT_IMG = APP_RES_PATH "/regular_hexagon.bin";
index 9bd793f..864cd06 100644 (file)
@@ -1,9 +1,10 @@
-
 /*
- * Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved.
- * Description: ApplistModel.h
- * Author:
- * Create: 2021-09-18
+ * @Author: luozheng 1732036298@qq.com
+ * @Date: 2024-11-07 11:29:18
+ * @LastEditors: luozheng 1732036298@qq.com
+ * @LastEditTime: 2024-11-15 11:42:31
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/applist/include/ApplistModel.h
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
  */
 
 #ifndef _APPLIST_MODEL_H_
@@ -53,6 +54,14 @@ public:
     void SetPresenter(ApplistPresenter *p);
     AppListStyle GetCurrentStyle(void);
 
+    // 拨号盘
+    void SetCircleListStartAngle(int angle);
+    int GetCircleListStartAngle(void);
+    void SetCurselectImageIndex(int index);
+    int GetCurselectImageIndex(void);
+    void SetPreselectImageIndex(int index);
+    int GetPreselectImageIndex(void);
+
 private:
     ApplistModel();
     ApplistModel(const ApplistModel &);
@@ -70,6 +79,11 @@ private:
     uint16_t startIndex = 0;        // 列表起始位置
     int headItemY = 0;              // 列表头部位置
     bool initFlag{false};
+
+    // 拨号盘
+    int circleListStartAngle{0};
+    int curselectImageIndex{0};
+    int preselectImageIndex{0};
 };
 }
 
index 79c6130..8d2e583 100644 (file)
@@ -21,6 +21,7 @@
 #include "UiConfig.h"
 #include "components/ui_label_ext.h"
 #include "components/ui_transform_list.h"
+#include "components/ui_picker.h"
 
 namespace OHOS {
 class AppListOnDragListener : public UIView::OnDragListener {
@@ -153,6 +154,18 @@ private:
     UITransformList * ArcScaleList_{nullptr};
     ArcScaleListItemAdapter * ArcScaleListAdapter_{nullptr};
     UIView::OnDragListener * ArcScaleListDragListener_{nullptr};
+
+    //for circleList style
+    void CircleListStyleOnStart(void);
+    void CircleListStyleOnSetUpView(void);
+    void CircleListStyleOnStop(void);
+    UIViewGroup * CircleListGroup_{nullptr};
+    UIImageView * CircleListAPP[12]{nullptr};
+    UIImageView * CircleListImage1{nullptr};
+    UIImageView * CircleListImage2{nullptr};
+    UIImageView * CircleListSelectImage{nullptr};
+    UIPicker * CircleListPicker{nullptr};
+    int CircleListAPPNum{0};
 };
 }
 #endif // APPLIST_VIEW_H
\ No newline at end of file
index ae71146..b90157a 100644 (file)
@@ -20,7 +20,7 @@
 #include "ui_resource_string.h"
 #include "applist/include/ApplistModel.h"
 #include "themestyle/include/ThemeStyleModel.h"
-
+#include "wearable_log.h"
 #define HEART_APPLIST 1
 namespace OHOS
 {
@@ -53,38 +53,38 @@ namespace OHOS
      */
     const AppItem g_nativeAppList[] = {
 #ifdef A5133_DEMO_CLIENT
-        {VIEW_OBU_MESSAGE, PNG_APPLIST_THEME_IMAGE, PNG_APPLIST_THEME_IMAGE, PNG_APPLIST_DEFAULT_IMG, "OBU", STR_OBU_MESSAGE, nullptr},
+        {VIEW_OBU_MESSAGE, PNG_APPLIST_THEME_IMAGE_BIG, PNG_APPLIST_THEME_IMAGE, PNG_APPLIST_DEFAULT_IMG, "OBU", STR_OBU_MESSAGE, nullptr},
 #endif
-        {VIEW_MAIN_PHONE, PNG_APPLIST_CALLER_IMAGE, PNG_APPLIST_CALLER_IMAGE, PNG_APPLIST_DEFAULT_IMG, "电话", STR_TELEPHONE, nullptr},
+        {VIEW_MAIN_PHONE, PNG_APPLIST_CALLER_IMAGE_BIG, PNG_APPLIST_CALLER_IMAGE, PNG_APPLIST_DEFAULT_IMG, "电话", STR_TELEPHONE, nullptr},
 #if HEART_APPLIST
-        {VIEW_HEART_CHART, PNG_APPLIST_HEART_IMAGE, PNG_APPLIST_HEART_IMAGE, PNG_APPLIST_DEFAULT_IMG, "心率", STR_HEART_RATE, nullptr},
+        {VIEW_HEART_CHART, PNG_APPLIST_HEART_IMAGE_BIG, PNG_APPLIST_HEART_IMAGE, PNG_APPLIST_DEFAULT_IMG, "心率", STR_HEART_RATE, nullptr},
 #endif
-        {VIEW_BLOOD_RESULT, PNG_APPLIST_SPO2_IMAGE, PNG_APPLIST_SPO2_IMAGE, PNG_APPLIST_DEFAULT_IMG, "血氧", STR_BLOOD_OXYGEN, nullptr},
-        {VIEW_SLEEP, PNG_APPLIST_SLEEP_IMAGE, PNG_APPLIST_SLEEP_IMAGE, PNG_APPLIST_DEFAULT_IMG, "睡眠", STR_SLEEP, nullptr},
-        {VIEW_TRAINING, PNG_APPLIST_TRAINING_IMAGE, PNG_APPLIST_TRAINING_IMAGE, PNG_APPLIST_DEFAULT_IMG, "运动", STR_TRAINING, nullptr},
-        {VIEW_TRAINING_RECORD, PNG_APPLIST_TRAINING_RECORD_IMAGE, PNG_APPLIST_TRAINING_RECORD_IMAGE, PNG_APPLIST_DEFAULT_IMG, "运动记录", STR_TRAINING_RECORD, nullptr},
-        {VIEW_GOAL, PNG_APPLIST_GOAL_IMAGE, PNG_APPLIST_GOAL_IMAGE, PNG_APPLIST_DEFAULT_IMG, "活动", STR_ACTIVITY, nullptr},
-        {VIEW_AI_VOICE, PNG_APPLIST_AIVOICE_IMAGE, PNG_APPLIST_AIVOICE_IMAGE, PNG_APPLIST_DEFAULT_IMG, "AI全家桶", STR_AI_FAMILY_MEALS, nullptr},
+        {VIEW_BLOOD_RESULT, PNG_APPLIST_SPO2_IMAGE_BIG, PNG_APPLIST_SPO2_IMAGE, PNG_APPLIST_DEFAULT_IMG, "血氧", STR_BLOOD_OXYGEN, nullptr},
+        {VIEW_SLEEP, PNG_APPLIST_SLEEP_IMAGE_BIG, PNG_APPLIST_SLEEP_IMAGE, PNG_APPLIST_DEFAULT_IMG, "睡眠", STR_SLEEP, nullptr},
+        {VIEW_TRAINING, PNG_APPLIST_TRAINING_IMAGE_BIG, PNG_APPLIST_TRAINING_IMAGE, PNG_APPLIST_DEFAULT_IMG, "运动", STR_TRAINING, nullptr},
+        {VIEW_TRAINING_RECORD, PNG_APPLIST_TRAINING_RECORD_IMAGE_BIG, PNG_APPLIST_TRAINING_RECORD_IMAGE, PNG_APPLIST_DEFAULT_IMG, "运动记录", STR_TRAINING_RECORD, nullptr},
+        {VIEW_GOAL, PNG_APPLIST_GOAL_IMAGE_BIG, PNG_APPLIST_GOAL_IMAGE, PNG_APPLIST_DEFAULT_IMG, "活动", STR_ACTIVITY, nullptr},
+        {VIEW_AI_VOICE, PNG_APPLIST_AIVOICE_IMAGE_BIG, PNG_APPLIST_AIVOICE_IMAGE, PNG_APPLIST_DEFAULT_IMG, "AI全家桶", STR_AI_FAMILY_MEALS, nullptr},
 #ifdef SUPPORT_ALIPAY_SEC
-        {VIEW_MAIN_ALIPAY, PNG_APPLIST_ALIPAY_IMAGE, PNG_APPLIST_ALIPAY_IMAGE, PNG_APPLIST_DEFAULT_IMG, "支付宝", STR_ALIPAY, nullptr},
+        {VIEW_MAIN_ALIPAY, PNG_APPLIST_ALIPAY_IMAGE_BIG, PNG_APPLIST_ALIPAY_IMAGE, PNG_APPLIST_DEFAULT_IMG, "支付宝", STR_ALIPAY, nullptr},
 #endif
-        {VIEW_MESSAGE, PNG_APPLIST_MESSAGE_IMAGE, PNG_APPLIST_MESSAGE_IMAGE, PNG_APPLIST_DEFAULT_IMG, "消息通知", STR_MESSAGE_NOTIFICATION, nullptr},
-        {VIEW_COMPASS, PNG_APPLIST_COMPASS_IMAGE, PNG_APPLIST_COMPASS_IMAGE, PNG_APPLIST_DEFAULT_IMG, "指南针", STR_COMPASS, nullptr},
-        {VIEW_CALCULATOR, PNG_APPLIST_INFORMATION_IMAGE, PNG_APPLIST_INFORMATION_IMAGE, PNG_APPLIST_DEFAULT_IMG, "计算器", STR_CALCULATOR, nullptr},
-        {VIEW_RECORD, PNG_APPLIST_RECORD_IMAGE, PNG_APPLIST_RECORD_IMAGE, PNG_APPLIST_DEFAULT_IMG, "录音", STR_RECORD, nullptr},
-        {VIEW_FLASHLIGHT, PNG_APPLIST_FLASHLIGHT_IMAGE, PNG_APPLIST_FLASHLIGHT_IMAGE, PNG_APPLIST_DEFAULT_IMG, "手电筒", STR_FLASHLIGHT, nullptr},
-        {VIEW_WEATHER, PNG_APPLIST_WEATHER_IMAGE, PNG_APPLIST_WEATHER_IMAGE, PNG_APPLIST_DEFAULT_IMG, "天气", STR_WEATHER, nullptr},
-        {VIEW_MAIN_STOPWATCH, PNG_APPLIST_STOPWATCH_IMAGE, PNG_APPLIST_STOPWATCH_IMAGE, PNG_APPLIST_DEFAULT_IMG, "秒表", STR_STOPWATCH, nullptr},
-        {VIEW_MAIN_COUNTDOWN, PNG_APPLIST_COUNTDOWN_IMAGE, PNG_APPLIST_COUNTDOWN_IMAGE, PNG_APPLIST_DEFAULT_IMG, "计时器", STR_TIMER, nullptr},
-        {VIEW_RESPIRATORY_TRAINING, PNG_APPLIST_BREATHE_IMAGE, PNG_APPLIST_BREATHE_IMAGE, PNG_APPLIST_DEFAULT_IMG, "呼吸训练", STR_BREATH_TRAINING, nullptr},
-        {VIEW_TAKEPHOTOS, PNG_APPLIST_TACKEPHOTOS_IMAGE, PNG_APPLIST_TACKEPHOTOS_IMAGE, PNG_APPLIST_DEFAULT_IMG, "遥控拍照", STR_REMOTE_SHOOTING, nullptr},
-        {VIEW_MAIN_ALARM, PNG_APPLIST_ALARM_IMAGE, PNG_APPLIST_ALARM_IMAGE, PNG_APPLIST_DEFAULT_IMG, "闹钟", STR_ALARM, nullptr},
-        {VIEW_FIND_PHONE, PNG_APPLIST_FINDPHONE_IMAGE, PNG_APPLIST_FINDPHONE_IMAGE, PNG_APPLIST_DEFAULT_IMG, "查找手机", STR_FIND_PHONE, nullptr},
-        {VIEW_MUSIC_PLAYER, PNG_APPLIST_MUSIC_IMAGE, PNG_APPLIST_MUSIC_IMAGE, PNG_APPLIST_DEFAULT_IMG, "音乐播放器", STR_MUSIC, nullptr},
-        {VIEW_ASSISTANT, PNG_APPLIST_SMART_IMAGE, PNG_APPLIST_SMART_IMAGE, PNG_APPLIST_DEFAULT_IMG, "语音助手", STR_VOICE_ASSISTANT, nullptr},
-        {VIEW_SCHEDULE, PNG_APPLIST_SCHEDULE_IMAGE, PNG_APPLIST_SCHEDULE_IMAGE, PNG_APPLIST_DEFAULT_IMG, "schedule", STR_SCHEDULE, nullptr},
-        {VIEW_CALENDAR, PNG_APPLIST_CALENDAR_IMAGE, PNG_APPLIST_CALENDAR_IMAGE, PNG_APPLIST_DEFAULT_IMG, "日历", STR_CALENDAR, nullptr},
-        {VIEW_SETTING, PNG_APPLIST_SETTING_IMAGE, PNG_APPLIST_SETTING_IMAGE, PNG_APPLIST_DEFAULT_IMG, "设置", STR_SETTINGS, nullptr},
+        {VIEW_MESSAGE, PNG_APPLIST_MESSAGE_IMAGE_BIG, PNG_APPLIST_MESSAGE_IMAGE, PNG_APPLIST_DEFAULT_IMG, "消息通知", STR_MESSAGE_NOTIFICATION, nullptr},
+        {VIEW_COMPASS, PNG_APPLIST_COMPASS_IMAGE_BIG, PNG_APPLIST_COMPASS_IMAGE, PNG_APPLIST_DEFAULT_IMG, "指南针", STR_COMPASS, nullptr},
+        {VIEW_CALCULATOR, PNG_APPLIST_INFORMATION_IMAGE_BIG, PNG_APPLIST_INFORMATION_IMAGE, PNG_APPLIST_DEFAULT_IMG, "计算器", STR_CALCULATOR, nullptr},
+        {VIEW_RECORD, PNG_APPLIST_RECORD_IMAGE_BIG, PNG_APPLIST_RECORD_IMAGE, PNG_APPLIST_DEFAULT_IMG, "录音", STR_RECORD, nullptr},
+        {VIEW_FLASHLIGHT, PNG_APPLIST_FLASHLIGHT_IMAGE_BIG, PNG_APPLIST_FLASHLIGHT_IMAGE, PNG_APPLIST_DEFAULT_IMG, "手电筒", STR_FLASHLIGHT, nullptr},
+        {VIEW_WEATHER, PNG_APPLIST_WEATHER_IMAGE_BIG, PNG_APPLIST_WEATHER_IMAGE, PNG_APPLIST_DEFAULT_IMG, "天气", STR_WEATHER, nullptr},
+        {VIEW_MAIN_STOPWATCH, PNG_APPLIST_STOPWATCH_IMAGE_BIG, PNG_APPLIST_STOPWATCH_IMAGE, PNG_APPLIST_DEFAULT_IMG, "秒表", STR_STOPWATCH, nullptr},
+        {VIEW_MAIN_COUNTDOWN, PNG_APPLIST_COUNTDOWN_IMAGE_BIG, PNG_APPLIST_COUNTDOWN_IMAGE, PNG_APPLIST_DEFAULT_IMG, "计时器", STR_TIMER, nullptr},
+        {VIEW_RESPIRATORY_TRAINING, PNG_APPLIST_BREATHE_IMAGE_BIG, PNG_APPLIST_BREATHE_IMAGE, PNG_APPLIST_DEFAULT_IMG, "呼吸训练", STR_BREATH_TRAINING, nullptr},
+        {VIEW_TAKEPHOTOS, PNG_APPLIST_TACKEPHOTOS_IMAGE_BIG, PNG_APPLIST_TACKEPHOTOS_IMAGE, PNG_APPLIST_DEFAULT_IMG, "遥控拍照", STR_REMOTE_SHOOTING, nullptr},
+        {VIEW_MAIN_ALARM, PNG_APPLIST_ALARM_IMAGE_BIG, PNG_APPLIST_ALARM_IMAGE, PNG_APPLIST_DEFAULT_IMG, "闹钟", STR_ALARM, nullptr},
+        {VIEW_FIND_PHONE, PNG_APPLIST_FINDPHONE_IMAGE_BIG, PNG_APPLIST_FINDPHONE_IMAGE, PNG_APPLIST_DEFAULT_IMG, "查找手机", STR_FIND_PHONE, nullptr},
+        {VIEW_MUSIC_PLAYER, PNG_APPLIST_MUSIC_IMAGE_BIG, PNG_APPLIST_MUSIC_IMAGE, PNG_APPLIST_DEFAULT_IMG, "音乐播放器", STR_MUSIC, nullptr},
+        {VIEW_ASSISTANT, PNG_APPLIST_SMART_IMAGE_BIG, PNG_APPLIST_SMART_IMAGE, PNG_APPLIST_DEFAULT_IMG, "语音助手", STR_VOICE_ASSISTANT, nullptr},
+        {VIEW_SCHEDULE, PNG_APPLIST_SCHEDULE_IMAGE_BIG, PNG_APPLIST_SCHEDULE_IMAGE, PNG_APPLIST_DEFAULT_IMG, "schedule", STR_SCHEDULE, nullptr},
+        {VIEW_CALENDAR, PNG_APPLIST_CALENDAR_IMAGE_BIG, PNG_APPLIST_CALENDAR_IMAGE, PNG_APPLIST_DEFAULT_IMG, "日历", STR_CALENDAR, nullptr},
+        {VIEW_SETTING, PNG_APPLIST_SETTING_IMAGE_BIG, PNG_APPLIST_SETTING_IMAGE, PNG_APPLIST_DEFAULT_IMG, "设置", STR_SETTINGS, nullptr},
 #if 0
 /*屏蔽Slice*/
         {VIEW_DNOTDISTURB, PNG_APPLIST_DISTURB_IMAGE, PNG_APPLIST_DISTURB_IMAGE, PNG_APPLIST_DEFAULT_IMG, "勿扰模式", STR_DO_NOT_DISTURB, nullptr},
@@ -274,4 +274,44 @@ namespace OHOS
     {
         return ThemeStyleModel::GetInstance().GetAppListDisplayStyle();
     }
+
+    /* ----------------------------------- 拨号盘 ---------------------------------- */
+    // 设置拨号盘的起始角度
+    void ApplistModel::SetCircleListStartAngle(int angle)
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,"SetCircleListStartAngle:%d\r\n",angle);
+        circleListStartAngle = angle;
+    }
+    
+    // 获取拨号盘的起始角度
+    int ApplistModel::GetCircleListStartAngle(void)
+    {
+        return circleListStartAngle;
+    }
+
+    // 设置当前选中的图片索引
+    void ApplistModel::SetCurselectImageIndex(int index)
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,"SetCurselectImageIndex:%d\r\n",index);
+        curselectImageIndex = index;
+    }
+    
+    // 获取当前选中的图片索引
+    int ApplistModel::GetCurselectImageIndex(void)
+    {
+        return curselectImageIndex;
+    }
+    
+    // 设置上一次选中的图片索引
+    void ApplistModel::SetPreselectImageIndex(int index)
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,"SetPreselectImageIndex:%d\r\n",index);
+        preselectImageIndex = index;
+    }
+    
+    // 获取上一次选中的图片索引
+    int ApplistModel::GetPreselectImageIndex(void)
+    {
+        return preselectImageIndex;
+    }
 }
index 0dfdc31..25acc94 100644 (file)
@@ -151,6 +151,18 @@ namespace OHOS
             viewId = itemView->GetViewId();
             uid = (char *)itemView->GetAppUid();
         }
+        else if(AppListStyle::CIRCLE_LIST_STYLE == style)
+        {
+            UIImageView *itemView = dynamic_cast<UIImageView *>(&view);
+            viewId = (AppViewId)itemView->GetViewIndex();
+            if(viewId == VIEW_INVALID)
+            {
+                WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "VIEW_INVALID -> %d", viewId);
+                return false;
+            }
+            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "viewId = %d", viewId);
+            type = TransitionType::TRANSITION_INVALID;
+        }
         else
         {
             AppItemView *itemView = dynamic_cast<AppItemView *>(&view);
index da67e40..103e333 100644 (file)
@@ -12,6 +12,8 @@
 #include "common/image_cache_manager.h"
 #include "hal_tick.h"
 #include "themestyle/include/ThemeStyleModel.h"
+#include "ModelListenerSample.h"
+#include "cmath"
 
 namespace OHOS {
 static constexpr int16 NUM_2 = 2;
@@ -24,7 +26,8 @@ static constexpr int16 ROTATE_FACTOR_2 = 2.0;
 #define ARC_SCALE_LIST_WIDTH (Screen::GetInstance().GetWidth() - ARC_SCALE_LIST_X)
 #define ARC_SCALE_LIST_HEIGHT (Screen::GetInstance().GetHeight())
 
-
+class  AppCircleListOnDragListener;
+static AppCircleListOnDragListener *AppCircleListOnDragListener_ = nullptr;
 ApplistView::ApplistView()
 {
     WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ApplistView::ApplistView ");
@@ -80,6 +83,44 @@ ApplistView::~ApplistView()
         delete ArcScaleListDragListener_;
         ArcScaleListDragListener_ = nullptr;
     }
+    if(CircleListGroup_ != nullptr)
+    {
+        delete CircleListGroup_;
+        CircleListGroup_ = nullptr;
+    }
+    if(CircleListImage1)
+    {
+        delete CircleListImage1;
+        CircleListImage1 = nullptr;
+    }
+    if(CircleListImage2)
+    {
+        delete CircleListImage2;
+        CircleListImage2 = nullptr;
+    }
+    if(CircleListSelectImage)
+    {
+        delete CircleListSelectImage;
+        CircleListSelectImage = nullptr;
+    }
+    if(CircleListPicker)
+    {
+        delete CircleListPicker;
+        CircleListPicker = nullptr;
+    }
+    for(int i = 0;i < CircleListAPPNum;i++)
+    {
+        if(nullptr != CircleListAPP[i])
+        {
+            delete CircleListAPP[i];
+            CircleListAPP[i] = nullptr;
+        }
+    }
+    if(nullptr != AppCircleListOnDragListener_)
+    {
+        delete AppCircleListOnDragListener_;
+        AppCircleListOnDragListener_ = nullptr;
+    }
     WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ApplistView::~ApplistView end...");
 }
 
@@ -97,6 +138,9 @@ void ApplistView::OnStart()
     {
         ArcScaleListStyleOnStart();
     }
+    else if(AppListStyle::CIRCLE_LIST_STYLE == style) {
+        CircleListStyleOnStart();
+    }
     else {
         ListStyleOnStart();
     }
@@ -320,6 +364,656 @@ void ApplistView::ArcScaleListStyleOnStart(void)
     }
 }
 
+#define NATIVE_APP_NUM_MAX 50
+static  const uint8_t NATIVE_APP_ANGEL_INTERVAL = 360 / 12;
+uint8_t array[NATIVE_APP_NUM_MAX]{0};                   //用来标记图片数组中每个元素是大还是小(实现缩放)
+static const int CIRCLE_WATCH_R = 233;                  //圆形手表半径
+static const double PI_OVER_180 = M_PI / 180.0;         // 180度对应的弧度
+static const int native_big_app_size = 90;              //大图标
+static const int native_small_app_size = 72;            //小图标
+static int native_app_position_update_startflag = 0;    //native_app_position_update函数开始更新的标志位
+//获取是否是正向旋转
+static bool isDirectRotate(const DragEvent& event)
+{
+    int startpointX = event.GetStartPoint().x;
+    int startpointY = event.GetStartPoint().y;
+    bool isDirectRotate = false;
+    uint8_t dragDirection = event.GetDragDirection();
+    if ((dragDirection == DragEvent::DIRECTION_TOP_TO_BOTTOM && startpointX >= 233) ||
+        (dragDirection == DragEvent::DIRECTION_BOTTOM_TO_TOP && startpointX < 233) ||
+        (dragDirection == DragEvent::DIRECTION_LEFT_TO_RIGHT && startpointY < 233) ||
+        (dragDirection == DragEvent::DIRECTION_RIGHT_TO_LEFT && startpointY >= 233))
+    {
+        isDirectRotate = true;
+    }
+    return isDirectRotate;
+}
+
+static void native_app_position_init(UIImageView ** CircleListAPP,int CircleListAPPNum,int startangle,uint8_t array[])
+{
+    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "startangle:%d",startangle);
+
+    double curangle = startangle;
+    double curscale = (int)curangle % NATIVE_APP_ANGEL_INTERVAL;
+    int x = 0;
+    int y = 0;
+    int size = native_small_app_size + curscale*0.6;
+    int size2 = native_big_app_size - curscale*0.6;
+    int index = 0;
+    int margin1 = 100-size;//边距
+    int margin2 = 100-size2;//边距
+    int R = CIRCLE_WATCH_R - size / 2 - margin1;
+    int R2 = CIRCLE_WATCH_R - size2 / 2 - margin2;
+
+    if(startangle % 30 == 0)
+    {
+        int index = 0;
+        int appIndex = 0;
+        int circleIndex = 0;
+
+        int nativeAppNum = ApplistModel::GetInstance().GetAppListNum();
+        int native_app_image_start_index = 0;
+
+        if(startangle > 0 )
+        {
+            int numToChange = startangle / 30;
+            for (int i = 1; i <= numToChange; i++)
+            {
+                // 计算 index 和 appIndex
+                index = i % nativeAppNum + 11;
+                appIndex = index;
+                if (startangle >= 360) {
+                    appIndex = index % nativeAppNum;
+                }
+
+                // 计算 circleIndex
+                circleIndex = (12 - i) % 12;
+                if (circleIndex < 0) {
+                    circleIndex += 12;
+                }
+                WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "circleIndex:%d,appIndex:%d name:%s", circleIndex, appIndex, ApplistModel::GetInstance().GetApplistItems()[appIndex].iconSmall);
+                CircleListAPP[circleIndex]->SetSrc(ApplistModel::GetInstance().GetApplistItems()[appIndex].iconSmall);
+                CircleListAPP[circleIndex]->SetViewIndex(ApplistModel::GetInstance().GetApplistItems()[appIndex].id);
+            }
+
+        }
+        else if(startangle < 0)
+        {
+            int numToChange = abs(startangle) / 30;
+            for (int i = 1; i <= numToChange; i++)
+            {
+                index = i % nativeAppNum + 11;
+                appIndex = index;
+                if (abs(startangle) >= 360)
+                {
+                    appIndex = index % nativeAppNum;
+                }
+                circleIndex = ((abs(startangle) - 30) / 30 ) % 12;
+                WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "circleIndex:%d,appIndex:%d name:%s", circleIndex, appIndex, ApplistModel::GetInstance().GetApplistItems()[appIndex].iconSmall);
+                CircleListAPP[circleIndex]->SetSrc(ApplistModel::GetInstance().GetApplistItems()[appIndex].iconSmall);
+                CircleListAPP[circleIndex]->SetViewIndex(ApplistModel::GetInstance().GetApplistItems()[appIndex].id);
+            }
+        }
+        else 
+        {
+            for(int i = 0;i < CircleListAPPNum;i++)
+            {
+                index = i % 2; // 使用取模操作实现循环列表
+                if(index == 0)
+                {
+                    array[i] = 0;
+                }
+                else
+                {
+                    array[i] = 1;
+                }
+            }
+        }
+    }
+
+    for(int i = 0;i < CircleListAPPNum;i++)
+    {
+        if(array[i] == 0)
+        {
+            x = ((CIRCLE_WATCH_R - cos(curangle*PI_OVER_180) * R) - size / 2);
+            y = ((CIRCLE_WATCH_R - sin(curangle*PI_OVER_180) * R) - size / 2);
+            CircleListAPP[i]->SetPosition(x, y, size,size);
+            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "x:%d,y:%d,size:%d",x,y,size);
+        }
+        else
+        {
+            x = ((CIRCLE_WATCH_R - cos(curangle*PI_OVER_180) * R2) - size2 / 2);
+            y = ((CIRCLE_WATCH_R - sin(curangle*PI_OVER_180) * R2) - size2 / 2);
+            CircleListAPP[i]->SetPosition(x, y, size2,size2);
+            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "x:%d,y:%d,size2:%d",x,y,size2);
+        }
+        curangle += NATIVE_APP_ANGEL_INTERVAL;
+    }
+    RootView::GetInstance()->Invalidate();
+}
+static void native_app_position_update(UIImageView ** CircleListAPP,int CircleListAPPNum,UIImageView *CircleListSelectImage_,int startangle,bool isDirectRotate)
+{
+    // 打印起始角度
+    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "startangle:%d",startangle);
+
+
+    // 当前角度
+    double curangle = startangle;
+    // 缩放系数
+    int curscale = 0;
+
+    // 计算缩放系数
+    if (startangle!= 0 && startangle % 30 == 0) {
+        curscale = 30;
+    } else {
+        int baseMod = startangle % 30;
+        if (startangle > 0) {
+            curscale =!isDirectRotate? 30 - baseMod : baseMod;
+        } else if (startangle < 0) {
+            curscale = isDirectRotate? 30 + baseMod : baseMod;
+        } else {
+            curscale =!isDirectRotate? 30 - baseMod : 30 + baseMod;
+        }
+    }
+
+    int nativeAppNum = ApplistModel::GetInstance().GetAppListNum();
+
+    // 打印缩放系数
+    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "curscale:%d",curscale);
+
+    int xPos = 0;
+    int yPos = 0;
+    int size = native_small_app_size + abs(curscale*0.6);
+    int size2 = native_big_app_size - abs(curscale*0.6);
+  
+    int margin1 = 100 - size;//边距
+    int margin2 = 100 - size2;//边距
+    int R = CIRCLE_WATCH_R - size / 2 - margin1;
+    int R2 = CIRCLE_WATCH_R - size2 / 2 - margin2;
+
+    int index = 0;
+    int appIndex = 0;
+    int circleIndex = 0;
+
+    int curselectImageIndex = ApplistModel::GetInstance().GetCurselectImageIndex();     //当前选中图片索引
+    int preselectImageIndex = ApplistModel::GetInstance().GetPreselectImageIndex();     //上一次选中图片索引
+   
+    if(startangle % 30 == 0){
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "startangle:%d,[curselectImageIndex,preselectImageIndex]:[%d,%d]", startangle,curselectImageIndex,preselectImageIndex);
+        native_app_position_update_startflag = 0;//表示可以下次更新了
+        ApplistModel::GetInstance().SetCircleListStartAngle(startangle);
+    }
+
+    // 根据起始角度正负和旋转方向计算索引
+    if (startangle > 0)
+    {
+        //顺时针
+        if(isDirectRotate) 
+        {
+            if(startangle % 30 == 0) 
+            {
+                int tempIndex = (startangle / 30);
+                // 计算 index 和 appIndex
+                index = tempIndex % nativeAppNum + 11;
+                appIndex = index;
+                if (startangle >= 360) {
+                    appIndex = index % nativeAppNum;
+                }
+
+                // 计算 circleIndex
+                circleIndex = (12 - tempIndex) % 12;
+                if (circleIndex < 0) {
+                    circleIndex += 12;
+                }
+
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "circleIndex:%d,appIndex:%d name:%s", circleIndex, appIndex, ApplistModel::GetInstance().GetApplistItems()[appIndex].iconSmall);
+                CircleListAPP[circleIndex]->SetSrc(ApplistModel::GetInstance().GetApplistItems()[appIndex].iconSmall);
+                CircleListAPP[circleIndex]->SetViewIndex(ApplistModel::GetInstance().GetApplistItems()[appIndex].id);
+
+                // 选中图片计算
+                if(startangle <= 180)
+                {
+                    if(preselectImageIndex == 0 && curselectImageIndex == 12)
+                    {
+                        preselectImageIndex = 1;
+                        curselectImageIndex = 0;
+                    }
+                    else
+                    {
+                        preselectImageIndex = curselectImageIndex;
+                        curselectImageIndex = (curselectImageIndex - 1) % nativeAppNum;
+                    }
+                }
+                else
+                {
+                    if(preselectImageIndex == 1 && curselectImageIndex == 0)
+                    {
+                        preselectImageIndex = 0;
+                        curselectImageIndex = 12;
+                    }
+                    else
+                    {
+                        preselectImageIndex = curselectImageIndex;
+                        curselectImageIndex = (curselectImageIndex + 1) % nativeAppNum;
+                    }
+                }
+
+                WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[curselectImageIndex,preselectImageIndex]:[%d,%d]", curselectImageIndex,preselectImageIndex);
+                CircleListSelectImage_->SetSrc(ApplistModel::GetInstance().GetApplistItems()[curselectImageIndex].iconLarge);
+                CircleListSelectImage_->SetViewIndex(ApplistModel::GetInstance().GetApplistItems()[curselectImageIndex].id);
+                ApplistModel::GetInstance().SetCurselectImageIndex(curselectImageIndex);
+                ApplistModel::GetInstance().SetPreselectImageIndex(preselectImageIndex);
+            }            
+        }
+        else //逆时针处理
+        {
+            int prevStartAngle = startangle + 3;
+            if(prevStartAngle % 30 == 0) 
+            {
+                appIndex = (12 - (prevStartAngle) / 30) % nativeAppNum;
+                circleIndex = appIndex % 12;
+                if (circleIndex < 0)
+                {
+                    circleIndex += 12;
+                }    
+                if(appIndex < 0)
+                {
+                    appIndex = (- appIndex + 11) % nativeAppNum;
+                }
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "circleIndex:%d,appIndex:%d name:%s", circleIndex, appIndex, ApplistModel::GetInstance().GetApplistItems()[appIndex].iconSmall);
+                CircleListAPP[circleIndex]->SetSrc(ApplistModel::GetInstance().GetApplistItems()[appIndex].iconSmall);
+                CircleListAPP[circleIndex]->SetViewIndex(ApplistModel::GetInstance().GetApplistItems()[appIndex].id);
+            }
+
+            if(startangle % 30 == 0) 
+            {
+                // 选中图片计算
+                if(startangle <= 180)
+                {
+                    if(preselectImageIndex == 0 && curselectImageIndex == 12)
+                    {
+                        preselectImageIndex = 1;
+                        curselectImageIndex = 0;
+                    }
+                    else
+                    {
+                        curselectImageIndex = preselectImageIndex;
+                        preselectImageIndex = curselectImageIndex + 1;
+                    }
+                }
+                else
+                {
+                    if(preselectImageIndex == 12 && curselectImageIndex == 13)
+                    {
+                        preselectImageIndex = 0;
+                        curselectImageIndex = 12;
+                    }
+                    else
+                    {
+                        curselectImageIndex = (curselectImageIndex - 1 + nativeAppNum) % nativeAppNum;
+                        preselectImageIndex = (preselectImageIndex - 1 + nativeAppNum) % nativeAppNum;
+                    }
+                }
+                WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[curselectImageIndex->preselectImageIndex]:[%d->%d]", curselectImageIndex,preselectImageIndex);
+                CircleListSelectImage_->SetSrc(ApplistModel::GetInstance().GetApplistItems()[curselectImageIndex].iconLarge);
+                CircleListSelectImage_->SetViewIndex(ApplistModel::GetInstance().GetApplistItems()[curselectImageIndex].id);
+                ApplistModel::GetInstance().SetCurselectImageIndex(curselectImageIndex);
+                ApplistModel::GetInstance().SetPreselectImageIndex(preselectImageIndex);
+            }
+        }
+    }
+    else if (startangle < 0)
+    {
+        if(!isDirectRotate) //逆时针
+        {
+            int absStartAngle = abs(startangle - (30 - 3));
+            if(absStartAngle % 30 == 0) 
+            {
+                index = (absStartAngle / 30) % nativeAppNum + 11;
+                appIndex = index;
+                if (absStartAngle >= 360)
+                {
+                    appIndex = index % nativeAppNum;
+                }
+                circleIndex = ((absStartAngle - 30) / 30 ) % 12;
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "circleIndex:%d,appIndex:%d name:%s", circleIndex, appIndex, ApplistModel::GetInstance().GetApplistItems()[appIndex].iconSmall);
+                CircleListAPP[circleIndex]->SetSrc(ApplistModel::GetInstance().GetApplistItems()[appIndex].iconSmall);
+                CircleListAPP[circleIndex]->SetViewIndex(ApplistModel::GetInstance().GetApplistItems()[appIndex].id);
+
+                preselectImageIndex = curselectImageIndex;
+                curselectImageIndex = (curselectImageIndex + 1) % nativeAppNum;
+                WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[curselectImageIndex->preselectImageIndex]:[%d->%d]", curselectImageIndex,preselectImageIndex);
+                CircleListSelectImage_->SetSrc(ApplistModel::GetInstance().GetApplistItems()[curselectImageIndex].iconLarge);
+                CircleListSelectImage_->SetViewIndex(ApplistModel::GetInstance().GetApplistItems()[curselectImageIndex].id);
+                ApplistModel::GetInstance().SetCurselectImageIndex(curselectImageIndex);
+                ApplistModel::GetInstance().SetPreselectImageIndex(preselectImageIndex);
+            }
+        }
+        else
+        {
+            int absStartAngle = abs(startangle);
+            if(absStartAngle % 30 == 0)
+            {
+                appIndex = (absStartAngle / 30) % nativeAppNum ;
+                circleIndex = (absStartAngle / 30) % 12;
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "circleIndex:%d,appIndex:%d name:%s", circleIndex, appIndex, ApplistModel::GetInstance().GetApplistItems()[appIndex].iconSmall);
+                CircleListAPP[circleIndex]->SetSrc(ApplistModel::GetInstance().GetApplistItems()[appIndex].iconSmall);
+                CircleListAPP[circleIndex]->SetViewIndex(ApplistModel::GetInstance().GetApplistItems()[appIndex].id);
+
+                curselectImageIndex = preselectImageIndex;
+                preselectImageIndex = (preselectImageIndex - 1 + nativeAppNum) % nativeAppNum;
+                WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[curselectImageIndex->preselectImageIndex]:[%d->%d]", curselectImageIndex,preselectImageIndex);
+                CircleListSelectImage_->SetSrc(ApplistModel::GetInstance().GetApplistItems()[curselectImageIndex].iconLarge);
+                CircleListSelectImage_->SetViewIndex(ApplistModel::GetInstance().GetApplistItems()[curselectImageIndex].id);
+                ApplistModel::GetInstance().SetCurselectImageIndex(curselectImageIndex);
+                ApplistModel::GetInstance().SetPreselectImageIndex(preselectImageIndex);
+            }
+        }
+    }
+    else
+    {
+        if(!isDirectRotate) //逆时针
+        {
+            index = 0;
+            appIndex = 11;
+            circleIndex = 11;
+        }
+        else
+        {
+            index = 0;
+            appIndex = 0;
+            circleIndex = 0;
+        }
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "circleIndex:%d,appIndex:%d name:%s", circleIndex, appIndex, ApplistModel::GetInstance().GetApplistItems()[appIndex].iconSmall);
+        CircleListAPP[circleIndex]->SetSrc(ApplistModel::GetInstance().GetApplistItems()[appIndex].iconSmall);
+
+        curselectImageIndex = preselectImageIndex;
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[curselectImageIndex->preselectImageIndex]:[%d->%d]", curselectImageIndex,preselectImageIndex);
+        CircleListSelectImage_->SetSrc(ApplistModel::GetInstance().GetApplistItems()[curselectImageIndex].iconLarge);
+        CircleListSelectImage_->SetViewIndex(ApplistModel::GetInstance().GetApplistItems()[curselectImageIndex].id);
+        ApplistModel::GetInstance().SetCurselectImageIndex(curselectImageIndex);
+        ApplistModel::GetInstance().SetPreselectImageIndex(preselectImageIndex);
+    }
+    
+    //更改图片位置和大小
+    for(int i = 0; i < CircleListAPPNum; i++)
+    {
+        if(array[i] == 0)
+        {
+            xPos = ((CIRCLE_WATCH_R - cos(curangle*PI_OVER_180) * R) - size / 2);
+            yPos = ((CIRCLE_WATCH_R - sin(curangle*PI_OVER_180) * R) - size / 2);
+            CircleListAPP[i]->SetPosition(xPos, yPos, size,size);
+            if(size == native_big_app_size && (curscale == 30))
+                array[i] = 1;
+            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "size:%d",size);
+        }
+        else
+        {
+            xPos = ((CIRCLE_WATCH_R - cos(curangle*PI_OVER_180) * R2) - size2 / 2);
+            yPos = ((CIRCLE_WATCH_R - sin(curangle*PI_OVER_180) * R2) - size2 / 2);
+            CircleListAPP[i]->SetPosition(xPos, yPos, size2,size2);
+            if(size2 == native_small_app_size && (curscale == 30))
+                array[i] = 0;
+            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "size2:%d",size2);
+        }
+        curangle += NATIVE_APP_ANGEL_INTERVAL ; //每个NATIVE_APP位置变化NATIVE_APP_ANGEL_INTERVAL度
+    }
+
+    // 刷新视图
+    RootView::GetInstance()->Invalidate();
+    /* -------------------------------------------------------------------------- */
+}
+class AppCircleListOnDragListener : public UIView::OnDragListener,
+                                    public UIPicker::SelectedListener,
+                                    public UIView::OnRotateListener,
+                                    public ModelListenerSample 
+{
+public:
+    AppCircleListOnDragListener(UIImageView ** CircleListAPP_,int CircleListAPPNum_,UIImageView *CircleListSelectImage_)
+    {
+        CircleListAPP = CircleListAPP_;
+        CircleListAPPNum = CircleListAPPNum_;
+        CircleListSelectImage = CircleListSelectImage_;
+        angle = ApplistModel::GetInstance().GetCircleListStartAngle();
+    }
+    ~AppCircleListOnDragListener(){}
+    bool OnDragStart(UIView& view, const DragEvent& event) override
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AppCircleListOnDragListener::OnDragStart");
+        return true;
+    }
+
+    bool OnDrag(UIView& view, const DragEvent& event) override
+    {
+        int deltaX = abs(event.GetLastPoint().x - event.GetStartPoint().x);
+        int deltaY = abs(event.GetLastPoint().y - event.GetStartPoint().y);
+        if (deltaX < 50 && deltaY < 50)
+        {
+            return false;
+        }
+
+
+
+        return true;
+    }
+
+    bool OnDragEnd(UIView& view, const DragEvent& event) override
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AppCircleListOnDragListener::OnDragEnd");
+        if(native_app_position_update_startflag == 0) {
+            native_app_position_update_startflag = 1;
+            OnDragEndFlag = 1;
+            isDirectRotateFlag = isDirectRotate(event);//获取是否是正向旋转的标志
+        }
+        return true;
+    }
+
+    void Notify() override
+    {
+        if(OnDragEndFlag)
+        {
+            int angleIncrement = isDirectRotateFlag? 3 : -3;
+            angle += angleIncrement;
+            rotateangle += angleIncrement;
+            if(rotateangle >= 30 || rotateangle <= -30)
+            {
+                OnDragEndFlag = 0;
+                rotateangle = 0;
+                WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[%d]", __LINE__);
+            }
+            if(native_app_position_update_startflag)
+                native_app_position_update(CircleListAPP,CircleListAPPNum,CircleListSelectImage,angle,isDirectRotateFlag);
+        }
+    }
+    void OnPickerStoped(UIPicker &picker) override
+    {
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "preOnSelectPickerIndex:%d,picker.GetSelected:%d",preOnSelectPickerIndex,picker.GetSelected());
+        // 判断是否为逆时针方向
+        if ((preOnSelectPickerIndex == 0 && picker.GetSelected() == 1) ||
+            (preOnSelectPickerIndex == 1 && picker.GetSelected() == 2) ||
+            (preOnSelectPickerIndex == 2 && picker.GetSelected() == 0)) {
+            isDirectRotateFlag = false;
+        }
+        // 判断是否为顺时针方向
+        else if ((preOnSelectPickerIndex == 1 && picker.GetSelected() == 0) ||
+                 (preOnSelectPickerIndex == 0 && picker.GetSelected() == 2) ||
+                 (preOnSelectPickerIndex == 2 && picker.GetSelected() == 1)) {
+            isDirectRotateFlag = true;
+        }
+
+        if (preOnSelectPickerIndex!= picker.GetSelected()) 
+        {
+            if (native_app_position_update_startflag == 0) 
+            {
+                native_app_position_update_startflag = 1;
+                OnDragEndFlag = 1;
+            }
+            // 更新之前选中的索引值为当前选中的值
+            preOnSelectPickerIndex = picker.GetSelected();
+        }
+        return;
+    }
+    private:
+        UIImageView **CircleListAPP{nullptr};
+        UIImageView *CircleListSelectImage{nullptr};
+        int CircleListAPPNum{0};
+        int angle = 0;            //要旋转角度
+        int rotateangle{0};       //旋转累计角度
+        uint8_t OnDragEndFlag{0};//是否拖拽结束的标志
+        bool isDirectRotateFlag{false};//是否是正向旋转的标志
+        int preOnSelectPickerIndex{1};//当前picker选中索引 
+};
+
+void ApplistView::CircleListStyleOnStart(void)
+{
+    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ApplistView::CircleListStyleOnStart start!! [%d]", __LINE__);
+    if(nullptr == CircleListGroup_)
+    {
+        CircleListGroup_ = new UIViewGroup();
+        if(nullptr == CircleListGroup_)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ApplistView::CircleListGroup_ failed!! [%d]", __LINE__);
+            return;
+        }
+        CircleListGroup_->SetPosition(0, 0);
+        CircleListGroup_->Resize(HORIZONTAL_RESOLUTION, VERTICAL_RESOLUTION);
+        CircleListGroup_->SetStyle(STYLE_BACKGROUND_OPA, OPA_OPAQUE);
+        CircleListGroup_->SetStyle(STYLE_BACKGROUND_COLOR, Color::Black().full);
+        CircleListGroup_->SetTouchable(true);
+        CircleListGroup_->SetDraggable(true);
+        SetContainerView(CircleListGroup_);
+        /* -------------------------------------------------------------------------- */
+        if (CircleListPicker == nullptr)
+        {
+            CircleListPicker = new UIPicker();
+            if (CircleListPicker == nullptr)
+            {
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "CircleListPicker new fail!");
+                return;
+            }
+            CircleListPicker->SetPosition(213, 213, 40, 40);
+            CircleListPicker->SetStyle(STYLE_BACKGROUND_COLOR, 0xffffffff);
+            CircleListPicker->SetStyle(STYLE_BACKGROUND_OPA, 0x00);
+            CircleListPicker->SetStyle(STYLE_BORDER_RADIUS, 150);
+            CircleListPicker->SetItemHeight(60);
+            CircleListPicker->SetLoopState(true);
+            CircleListPicker->SetRotateFactor(1.0);
+            CircleListPicker->RequestFocus();
+            CircleListPicker->SetLoopState(true);
+            CircleListPicker->SetTextColor(Color::GetColorFromRGBA(0x00, 0x00, 0x00, 0xff), Color::GetColorFromRGBA(0xff, 0x00, 0x00, 0xff));
+            CircleListPicker->SetSelected(1);
+            int start = 1;
+            int end = 3;
+            CircleListPicker->SetValues(start,end);
+            // printf("---%d\n",CircleListPicker->GetSelected());
+            CircleListGroup_->Add(CircleListPicker);
+        }
+        /* -------------------------------------------------------------------------- */
+        if(CircleListImage1 == nullptr)
+        {
+            CircleListImage1 = new UIImageView();
+            if(nullptr == CircleListImage1)
+            {
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ApplistView::CircleListImage1 failed!! [%d]", __LINE__);
+                return;
+            }
+            CircleListImage1->SetPosition(114, 122, 220, 330);
+            CircleListImage1->SetSrc("/user/res/themestyle/circlelist/circleListImage1.bin");
+            CircleListGroup_->Add(CircleListImage1);
+        }
+        /* -------------------------------------------------------------------------- */
+        CircleListAPPNum = sizeof(CircleListAPP) / sizeof(CircleListAPP[0]);//图片显示数量
+        /* -------------------------------------------------------------------------- */
+        for(int i = 0;i < CircleListAPPNum ;i++)
+        {
+            if(nullptr == CircleListAPP[i])
+            {
+                CircleListAPP[i] = new UIImageView();
+                if(nullptr == CircleListAPP[i]) 
+                {
+                    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ApplistView::CircleListStyleOnStart failed!! [%d]", __LINE__);
+                    return;
+                }
+                CircleListAPP[i]->SetAutoEnable(false);
+                CircleListAPP[i]->SetResizeMode(UIImageView::SCALE_DOWN);
+                CircleListAPP[i]->SetSrc(ApplistModel::GetInstance().GetApplistItems()[i].iconSmall);
+                CircleListAPP[i]->SetViewIndex(ApplistModel::GetInstance().GetApplistItems()[i].id);
+                CircleListAPP[i]->SetTouchable(true);
+                CircleListAPP[i]->SetOnClickListener(presenter_);
+            }
+            CircleListGroup_->Add(CircleListAPP[i]); // Add the UIImageView to the UIViewGroup (CircleListGroup_)
+        }
+        /* -------------------------------------------------------------------------- */
+        uint16_t presliceId = NativeAbility::GetInstance().GetPreSliceId();
+        if (presliceId == VIEW_MAIN) //如果是从主页进入的,那么 startangle = 0
+        {
+            ApplistModel::GetInstance().SetCircleListStartAngle(0);
+            ApplistModel::GetInstance().SetCurselectImageIndex(6);
+            ApplistModel::GetInstance().SetPreselectImageIndex(6);
+        }
+        native_app_position_init(CircleListAPP,CircleListAPPNum,ApplistModel::GetInstance().GetCircleListStartAngle() ,array);
+        /* -------------------------------------------------------------------------- */
+        if(CircleListImage2 == nullptr)
+        {
+            CircleListImage2 = new UIImageView();
+            if(nullptr == CircleListImage2)
+            {
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ApplistView::CircleListImage2 failed!! [%d]", __LINE__);
+                return;
+            }
+            CircleListImage2->SetPosition(28, 197, 72, 72);
+            CircleListImage2->SetSrc("/user/res/themestyle/circlelist/circleListImage2.bin");
+            CircleListImage2->SetTouchable(true);
+            CircleListImage2->SetOnClickListener(presenter_);
+            CircleListImage2->SetViewIndex(VIEW_INVALID);
+            CircleListGroup_->Add(CircleListImage2);
+        }
+        if(CircleListSelectImage == nullptr)
+        {
+            CircleListSelectImage = new UIImageView();
+            if(nullptr == CircleListSelectImage)
+            {
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ApplistView::CircleListSelectImage failed!! [%d]", __LINE__);
+                return;
+            }
+            CircleListSelectImage->SetPosition(CircleListImage1->GetX() + 30, CircleListImage1->GetY() + 30,160,160);
+            CircleListSelectImage->SetAutoEnable(false);
+            CircleListSelectImage->SetResizeMode(UIImageView::SCALE_DOWN);
+            CircleListSelectImage->SetSrc(ApplistModel::GetInstance().GetApplistItems()[ApplistModel::GetInstance().GetCurselectImageIndex()].iconLarge);
+            CircleListSelectImage->SetViewIndex(ApplistModel::GetInstance().GetApplistItems()[ApplistModel::GetInstance().GetCurselectImageIndex()].id);
+            CircleListSelectImage->SetTouchable(true);
+            CircleListSelectImage->SetOnClickListener(presenter_);
+            CircleListGroup_->Add(CircleListSelectImage);
+        }
+        /* -------------------------------------------------------------------------- */
+        if(nullptr == AppCircleListOnDragListener_)
+        {
+            AppCircleListOnDragListener_ = new AppCircleListOnDragListener(CircleListAPP,CircleListAPPNum,CircleListSelectImage);
+            if (nullptr == AppCircleListOnDragListener_)
+            {
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ApplistView::AppCircleListOnDragListener_ failed!! [%d]", __LINE__);
+                return;
+            }
+        }
+        CircleListGroup_->SetOnDragListener(static_cast<UIView::OnDragListener*>(AppCircleListOnDragListener_));
+        CircleListPicker->RegisterSelectedListener(static_cast<UIPicker::SelectedListener *>(AppCircleListOnDragListener_));
+        /* -------------------------------------------------------------------------- */
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ApplistView::CircleListStyleOnStart success!! [%d]", __LINE__);
+    }
+    return;
+}
+
+void ApplistView::CircleListStyleOnSetUpView(void)
+{
+    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ApplistView::CircleListStyleOnSetUpView [%d]", __LINE__);
+    return;
+}
+void ApplistView::CircleListStyleOnStop(void)
+{
+    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ApplistView::CircleListStyleOnStop [%d]", __LINE__);
+    return;
+}
+
 void ApplistView::OnSetUpView()
 {
     WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ApplistView::OnSetUpView");
@@ -334,6 +1028,10 @@ void ApplistView::OnSetUpView()
     {
         ArcScaleListStyleOnSetUpView();
     } 
+    else if(AppListStyle::CIRCLE_LIST_STYLE == style)
+    {
+        CircleListStyleOnSetUpView();
+    } 
     else {
         ListStyleOnSetUpView();
     }
@@ -448,6 +1146,9 @@ void ApplistView::OnStop()
         } else if(AppListStyle::ARC_SCALE_LIST_STYLE == style) {
             ArcScaleListStyleOnStop(); //弧形
             RootView::GetInstance()->ClearOnKeyActListener();
+        } else if(style == AppListStyle::CIRCLE_LIST_STYLE) {
+            CircleListStyleOnStop();//拨号盘
+            RootView::GetInstance()->ClearOnKeyActListener();
         } else {
             ListStyleOnStop();//list
             RootView::GetInstance()->ClearOnKeyActListener();
@@ -463,6 +1164,9 @@ void ApplistView::OnStop()
         } else if(ThemeStyleModel::GetInstance().GetPreApplistStyle() == AppListStyle::FOOTBALL_STYLE) {
             FootballStyleOnStop();
             RootView::GetInstance()->ClearOnKeyActListener();
+        } else if(ThemeStyleModel::GetInstance().GetPreApplistStyle() == AppListStyle::CIRCLE_LIST_STYLE) {
+            CircleListStyleOnStop();
+            RootView::GetInstance()->ClearOnKeyActListener();
         }
         ThemeStyleModel::GetInstance().SetTheSameSliceChangeFlag(false);
     }
@@ -561,6 +1265,10 @@ void ApplistView::AddAppItemToList(const AppItem &item)
     {
         ArcScaleListAdapter_->AddListItem(item);
     }
+    else if(AppListStyle::CIRCLE_LIST_STYLE == style)
+    {      
+        // 拨号盘
+    }
     else {
         listAdapter_->AddListItem(item);
     }
@@ -578,6 +1286,10 @@ void ApplistView::ClearAppItemToList()
     {
         ArcScaleListStyleOnStop();
     }
+    else if(AppListStyle::CIRCLE_LIST_STYLE == style)
+    {
+        CircleListStyleOnStop();
+    }
     else {
         listAdapter_->ClearItem();
     }
@@ -596,6 +1308,10 @@ void ApplistView::RefreshAppList(void)
     {
         ArcScaleList_->RefreshList();
     }
+    else if(AppListStyle::CIRCLE_LIST_STYLE == style)
+    {
+        // 拨号盘
+    }
     else {
         contentList_->RefreshList();
     }
index ce038bf..d7217a7 100644 (file)
@@ -2,7 +2,7 @@
  * @Author: luozheng 1732036298@qq.com
  * @Date: 2024-06-14 09:40:13
  * @LastEditors: luozheng 1732036298@qq.com
- * @LastEditTime: 2024-08-19 18:44:49
+ * @LastEditTime: 2024-11-14 14:25:34
  * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/themestyle/include/ThemeStyleModel.h
  */
 #ifndef SET_THEMESTYLE_MODEL_H
@@ -21,13 +21,15 @@ namespace OHOS
     static constexpr const char *THEMESTYLE_VALUE_LIST = "list";
     static constexpr const char *THEMESTYLE_VALUE_HEXAGONS = "hexagons";
     static constexpr const char *THEMESTYLE_VALUE_FOOTBALL = "football";
-    static constexpr const char * THEMESTYLE_VALUE_ARC_SCALE_LIST = "arc_scale_list";
+    static constexpr const char *THEMESTYLE_VALUE_ARC_SCALE_LIST = "arc_scale_list";
+    static constexpr const char *THEMESTYLE_VALUE_CIRCLE_LIST = "circle_list";
 
     typedef enum : uint16_t
     {
         APPLIST_STYLE,  // 列表显示
         HEXAGONS_STYLE, // 蜂窝显示
         ARC_SCALE_LIST_STYLE,//弧形列表
+        CIRCLE_LIST_STYLE,//拨号盘
         FOOTBALL_STYLE, //足球
         MAX_THEME_STYLE,
     } ThemeStyle;
@@ -38,6 +40,7 @@ namespace OHOS
         {ThemeStyle::HEXAGONS_STYLE, THEMESTYLE_VALUE_HEXAGONS},
         {ThemeStyle::FOOTBALL_STYLE, THEMESTYLE_VALUE_FOOTBALL},
         {ThemeStyle::ARC_SCALE_LIST_STYLE, THEMESTYLE_VALUE_ARC_SCALE_LIST},
+        {ThemeStyle::CIRCLE_LIST_STYLE, THEMESTYLE_VALUE_CIRCLE_LIST},
         // 在此处添加更多的映射关系
     };
 
@@ -47,6 +50,7 @@ namespace OHOS
         {THEMESTYLE_VALUE_HEXAGONS, ThemeStyle::HEXAGONS_STYLE},
         {THEMESTYLE_VALUE_FOOTBALL, ThemeStyle::FOOTBALL_STYLE},
         {THEMESTYLE_VALUE_ARC_SCALE_LIST, ThemeStyle::ARC_SCALE_LIST_STYLE},
+        {THEMESTYLE_VALUE_CIRCLE_LIST, ThemeStyle::CIRCLE_LIST_STYLE},
         // 在此处添加更多的映射关系
     };
 
index 17b0939..4db787a 100644 (file)
@@ -2,7 +2,7 @@
  * @Author: luozheng 1732036298@qq.com
  * @Date: 2024-06-14 09:40:13
  * @LastEditors: luozheng 1732036298@qq.com
- * @LastEditTime: 2024-10-11 17:44:29
+ * @LastEditTime: 2024-11-14 14:37:34
  * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/themestyle/include/ThemeStyleView.h
  */
 
 namespace OHOS
 {
     static constexpr const uint16_t MAX_STYLE = MAX_THEME_STYLE - 1;
-    static constexpr char *THEME_STYLE_LIST = "themestyleList";         // 列表
-    static constexpr char *THEME_STYLE_HEXAGONS = "themestyleHexagons"; // 蜂窝
-    static constexpr char *THEME_STYLE_FOOTBALL = "themestyleFootball"; // 足球
-    static constexpr char *THEME_STYLE_ARC_LIST = "themestyleArcList";  // 弧形列表
-    static constexpr char *THEMESTYLEVIEWEXIT = "ThemeStyleViewExit";   // exit
+    static constexpr char *THEME_STYLE_LIST     = "themestyleList";       // 列表
+    static constexpr char *THEME_STYLE_HEXAGONS = "themestyleHexagons";   // 蜂窝
+    static constexpr char *THEME_STYLE_FOOTBALL = "themestyleFootball";   // 足球
+    static constexpr char *THEME_STYLE_ARC_LIST = "themestyleArcList";    // 弧形列表
+    static constexpr char *THEME_STYLE_CIRCLE_LIST = "themestyleCircleList"; // 拨号盘
+    static constexpr char *THEMESTYLEVIEWEXIT   = "ThemeStyleViewExit";   // exit
 
     static constexpr char *THEMESTYLE_LIST_IMAGEPATH = "/user/res/themestyle/list.bin";
     static constexpr char *THEMESTYLE_HEXAGONS_IMAGEPATH = "/user/res/themestyle/hexagons.bin";
     static constexpr char *THEMESTYLE_FOOTBALL_IMAGEPATH = "/user/res/themestyle/grid.bin";
     static constexpr char *THEMESTYLE_ARCLIST_IMAGEPATH = "/user/res/themestyle/arclist.bin";
+    static constexpr char *THEMESTYLE_CIRCLELIST_IMAGEPATH = "/user/res/themestyle/dialplate.bin";
 
     class ThemeStylePresenter;
     class ThemeStyleView : public View<ThemeStylePresenter>
index b43785e..43a7de7 100644 (file)
@@ -2,7 +2,7 @@
  * @Author: luozheng 1732036298@qq.com
  * @Date: 2024-04-08 16:43:48
  * @LastEditors: luozheng 1732036298@qq.com
- * @LastEditTime: 2024-08-19 18:40:32
+ * @LastEditTime: 2024-11-14 15:02:48
  * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/set_desktop/src/ThemeStylePresenter.cpp
  */
 
@@ -89,6 +89,10 @@ namespace OHOS
         {
             ThemeStyleModel::GetInstance().SetAppListDisplayStyle(ThemeStyle::ARC_SCALE_LIST_STYLE);
         }
+        else if (viewId == THEME_STYLE_CIRCLE_LIST)
+        {
+            ThemeStyleModel::GetInstance().SetAppListDisplayStyle(ThemeStyle::CIRCLE_LIST_STYLE);
+        }
         
         /* -------------------------------------------------------------------------- */
         view_->UpdateSelectedStyle();
index 7d364b3..a1bd270 100644 (file)
@@ -2,7 +2,7 @@
  * @Author: luozheng 1732036298@qq.com
  * @Date: 2024-06-14 09:40:20
  * @LastEditors: luozheng 1732036298@qq.com
- * @LastEditTime: 2024-09-20 15:36:31
+ * @LastEditTime: 2024-11-14 14:55:43
  * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/themestyle/src/ThemeStyleView.cpp
  */
 
@@ -11,6 +11,7 @@
 #include "themestyle/include/ThemeStylePresenter.h"
 #include "ui_resource_string.h"
 #include "dock/focus_manager.h"
+#include "ConfigModel.h"
 namespace OHOS
 {
     static ThemeStyleView *g_pThemeStyleView{nullptr};
@@ -130,7 +131,15 @@ namespace OHOS
         label->SetPosition(labelconfig.left, labelconfig.top, labelconfig.width, labelconfig.height);
         label->SetStyle(STYLE_TEXT_FONT, labelconfig.fontSize);
         label->SetStyle(STYLE_LINE_HEIGHT, labelconfig.lineHeigh);
-        label->SetTextId(labelconfig.textId);
+        TOOD:
+        if(labelconfig.textId == STR_GRID_DISPLAY) {
+            if(ConfigModel::GetInstance()->GetLanguage() == 0)
+                label->SetText("拨号盘");//TODO::多国语言
+            else
+                label->SetText("Dial plate");//TODO::多国语言
+        }else{
+            label->SetTextId(labelconfig.textId);
+        }
         label->SetLineBreakMode(labelconfig.lineBreakMode);
         label->SetAlign(TEXT_ALIGNMENT_LEFT, TEXT_ALIGNMENT_CENTER);
         label->SetRollSpeed(70);
@@ -183,7 +192,7 @@ namespace OHOS
         titleText->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
         scrollView->Add(titleText);
         /* -------------------------------------------------------------------------- */
-        int16_t textId[] = {STR_LIST_DISPLAY, STR_CELLULAR_DISPLAY, STR_ARC_SCALE_LIST_DISPLAY};
+        int16_t textId[] = {STR_LIST_DISPLAY, STR_CELLULAR_DISPLAY, STR_ARC_SCALE_LIST_DISPLAY,STR_GRID_DISPLAY};
         LabelConfig labelConfig = {
             .left = 143,
             .top = 153,
@@ -235,7 +244,7 @@ namespace OHOS
             .viewId = THEME_STYLE_LIST,
         };
 
-        const char *viewId[] = {THEME_STYLE_LIST, THEME_STYLE_HEXAGONS, THEME_STYLE_ARC_LIST};
+        const char *viewId[] = {THEME_STYLE_LIST, THEME_STYLE_HEXAGONS, THEME_STYLE_ARC_LIST,THEME_STYLE_CIRCLE_LIST};
         for (int i = 0; i < sizeof(viewId) / sizeof(viewId[0]); i++)
         {
             labelbuttonconfig.top = 120 + 120 * i;
@@ -276,7 +285,7 @@ namespace OHOS
             .src = THEMESTYLE_LIST_IMAGEPATH,
         };
         int y = 150;
-        const char *src[MAX_STYLE] = {THEMESTYLE_LIST_IMAGEPATH, THEMESTYLE_HEXAGONS_IMAGEPATH, THEMESTYLE_ARCLIST_IMAGEPATH};
+        const char *src[MAX_STYLE] = {THEMESTYLE_LIST_IMAGEPATH, THEMESTYLE_HEXAGONS_IMAGEPATH, THEMESTYLE_ARCLIST_IMAGEPATH,THEMESTYLE_CIRCLELIST_IMAGEPATH};
         for (int i = 0; i < sizeof(src) / sizeof(src[0]); i++)
         {
             imageconfig.y = y + 120 * i;