增加最新版手电筒功能(未完成部分:1.自定义颜色选择;2.保存设置的信息到config) 883/1 883/head
authorcheng <chengyf@zhihuishixun.com>
Thu, 5 Sep 2024 10:39:58 +0000 (18:39 +0800)
committercheng <chengyf@zhihuishixun.com>
Thu, 5 Sep 2024 10:39:58 +0000 (18:39 +0800)
16 files changed:
code/sdk/application/wearable/fd230app/nativeui/flashlight/include/FlashlightModel.h
code/sdk/application/wearable/fd230app/nativeui/flashlight/include/FlashlightPresenter.h
code/sdk/application/wearable/fd230app/nativeui/flashlight/include/FlashlightView.h
code/sdk/application/wearable/fd230app/nativeui/flashlight/src/FlashlightModel.cpp
code/sdk/application/wearable/fd230app/nativeui/flashlight/src/FlashlightPresenter.cpp
code/sdk/application/wearable/fd230app/nativeui/flashlight/src/FlashlightView.cpp
code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/flashlight/color_0.bin [new file with mode: 0644]
code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/flashlight/color_1.bin [new file with mode: 0644]
code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/flashlight/color_2.bin [new file with mode: 0644]
code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/flashlight/color_3.bin [new file with mode: 0644]
code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/flashlight/color_4.bin [new file with mode: 0644]
code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/flashlight/color_5.bin [new file with mode: 0644]
code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/flashlight/color_selected.bin [new file with mode: 0644]
code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/flashlight/color_setting.bin [new file with mode: 0644]
code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/flashlight/flahing_setting.bin [new file with mode: 0644]
code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/flashlight/up_arrow.bin [new file with mode: 0644]

index d96c72e..abce5c0 100644 (file)
@@ -16,9 +16,18 @@ namespace OHOS
     {
     public:
         static FlashlightModel &GetInstance(void);
-        void ToggleBrightness();
-        void UpdateScreenColor();
-        int64_t GetCurrentBrightness(void);
+
+        uint8_t GetColorIndex(void);
+        void SetColorIndex(uint8_t value);
+        int64_t GetColorValue(void);
+        void SetColorValue(int64_t value);
+        uint8_t GetFlashingLevel(void);
+        void SetFlashingLevel(uint8_t value);
+
+        void FlashlightStartTimer(void);
+        void FlashlightStopTimer(void);
+        void FlashlightPauseTimer(void);
+        void FlashlightResumeTimer(uint32_t interval);
 
     private:
         FlashlightModel();
@@ -26,13 +35,9 @@ namespace OHOS
         FlashlightModel &operator=(const FlashlightModel &) = delete;
         virtual ~FlashlightModel();
 
-        enum Brightness : int64_t
-        {
-            Low = 0xff808080,
-            Medium = 0xffbfbfbf,
-            High = 0xffffffff,
-        };
-        int64_t currentBrightness = Brightness::Low;
+        uint8_t ColorIndex_{0}; // 0~5-fixed;6-custom
+        int64_t ColorValue_ = 0xffffffff; // background color
+        uint8_t FlashingLevel_ = 0; // 0-no; 1-quickly; 2-slowly
     };
 }
 
index 2d5b46e..d272d02 100644 (file)
 #include "Presenter.h"
 #include "View.h"
 #include "flashlight/include/FlashlightView.h"
+#include "components/ui_swipe_view.h"
+
 namespace OHOS
 {
-    
+    #define Flashlight_ViewId_ImageColorSetting_ "Flashlight_ViewId_ImageColorSetting_"
+    #define Flashlight_ViewId_ImageFlashingSetting_ "Flashlight_ViewId_ImageFlashingSetting_"
+
+    #define Flashlight_ViewId_GroupColorSetting_ "Flashlight_ViewId_GroupColorSetting_"
+    #define Flashlight_ViewId_GroupColorCustom_ "Flashlight_ViewId_GroupColorCustom_"
+    #define Flashlight_ViewId_ScrollFlashingSetting_ "Flashlight_ViewId_ScrollFlashingSetting_"
+
+    #define FLASHING_SETTING_ITEM_COUNT (3)
+    constexpr char * Flashlight_ViewId_FlashingSettingItem_[FLASHING_SETTING_ITEM_COUNT] = 
+                                                    {
+                                                        "Flashlight_ViewId_FlashingSettingItem0_", 
+                                                        "Flashlight_ViewId_FlashingSettingItem1_", 
+                                                        "Flashlight_ViewId_FlashingSettingItem2_"
+                                                    };
+
+    #define COLOR_SETTING_ITEM_COUNT (6)
+    constexpr char * Flashlight_ViewId_ImageColorSettingItem_[COLOR_SETTING_ITEM_COUNT] = 
+                                                    {
+                                                        "Flashlight_ViewId_ImageColorSettingItem0_", 
+                                                        "Flashlight_ViewId_ImageColorSettingItem1_", 
+                                                        "Flashlight_ViewId_ImageColorSettingItem2_", 
+                                                        "Flashlight_ViewId_ImageColorSettingItem3_", 
+                                                        "Flashlight_ViewId_ImageColorSettingItem4_", 
+                                                        "Flashlight_ViewId_ImageColorSettingItem5_"
+                                                    };
+
+    constexpr int64_t ColorValue_ColorSettingItem_[COLOR_SETTING_ITEM_COUNT] = 
+                                                    {
+                                                        0xffffffff, 0xffff5a36, 0xff4fc34c,
+                                                        0xff3549ff, 0xffff8a36, 0xffffffff
+                                                    };
+
+
     class FlashlightView;
     class FlashlightPresenter : public Presenter<FlashlightView>,
                                 public UIView::OnClickListener,
                                 public RootView::OnKeyActListener,
-                                public UIView::OnDragListener
+                                public UIView::OnDragListener,
+                                public UISwipeView::OnSwipeListener
     {
     public:
         FlashlightPresenter();
         virtual ~FlashlightPresenter();
+        static FlashlightPresenter * GetInstance();
 
         void OnStart() override;
         void OnPause() override;
         void OnResume() override;
         void OnStop() override;
 
-        static FlashlightPresenter *GetInstance();
-      
+        uint8_t GetColorIndex(void);
+        int64_t GetColorValue(void);
+        uint8_t GetFlashingLevel(void);
+        void UpdateViewMainScreenFlashing(bool flag);
+        void StartFlashingTimer(void);
 
     private:
         bool OnClick(UIView &view, const ClickEvent &event) override;
@@ -39,6 +78,7 @@ namespace OHOS
         bool OnDragEnd(UIView &view, const DragEvent &event) override;
         bool OnKeyAct(UIView &view, const KeyEvent &event) override; // 增加按键事件
         bool X_DRAG_FLAG{false};
+        void OnSwipe(UISwipeView &view);
     };
 }
 
index 29d62fb..9a51b00 100644 (file)
 
 #include "BaseView.h"
 #include "View.h"
+#include "flashlight/include/FlashlightPresenter.h"
+
 #include "components/ui_scroll_view.h"
 #include "components/ui_image_view.h"
+#include "components/ui_swipe_view.h"
+#include "components/ui_label_button_ext.h"
+#include "components/ui_label_ext.h"
+#include "components/ui_radio_button.h"
+
 namespace OHOS
 {
     class FlashlightPresenter;
@@ -23,19 +30,108 @@ namespace OHOS
         FlashlightView();
         virtual ~FlashlightView();
         static FlashlightView *GetInstance(void);
-        void SetTheGroupViewColor(int64_t colorValue);
-        UIScrollView *GetGroupView();
+
         void OnStart() override;
         void OnSetUpView() override;
         void OnTearDownView() override;
         void OnStop() override;
 
+        void DisplayViewMainScreen();
+        void DisplayViewSettingScreen();
+        void DisplayColorSettingScreen();
+        void DisplayColorCustomScreen();
+        void DisplayFlashingSettingScreen();
+
+        void UpdateViewMainScreenFlashing(bool flag);
+
+        typedef enum
+        {
+            ENUM_FLASHLIGHT_SCREEN_VIEW_MAIN,
+            ENUM_FLASHLIGHT_SCREEN_VIEW_SETTING,
+            ENUM_FLASHLIGHT_SCREEN_COLOR_SETTING,
+            ENUM_FLASHLIGHT_SCREEN_COLOR_CUSTOM,
+            ENUM_FLASHLIGHT_SCREEN_FLASHING_SETTING,
+
+            ENUM_FLASHLIGHT_SCREEN_MAX
+        }ENUM_FLASHLIGHT_SCREEN;
+
+        UIViewGroup * InitSwipeData();
+        UIViewGroup * InitColorSettingData();
+        UIViewGroup * InitColorCustomData();
+        UIViewGroup * InitFlashingSettingData();
+
     private:
-        void FlashlightViewInit(void);
-        void ClearAll(void);
-        UIScrollView *group{nullptr};
-        UIImageView *FlashlightVector{nullptr};
-        UIImageView *LineImage{nullptr};
+        UILabelExt * CreateUILabelExt(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t text_id,
+                                        int64_t font_size, int64_t line_height, int64_t color_value,
+                                        UITextLanguageAlignment hor_align, UITextLanguageAlignment ver_align);
+        UIRadioButton * CreateUIRadioButtonItem(int16_t x, int16_t y, int16_t w, int16_t h);
+        UIViewGroup * CreateUIGroupItem(char * id, int16_t x, int16_t y, int16_t w, int16_t h);
+        UIImageView * CreateImageColorSettingItem_(char * id, int16_t x, int16_t y, int16_t w, int16_t h, char * src);
+
+        
+        void DeinitSwipeData();
+        // UISwipeView * InitSwipeData();
+        UISwipeView * SwipeView_{nullptr};
+
+        void DeinitViewMainData();
+        UIViewGroup * InitViewMainData();
+        void UpdateViewMainScreen(void);
+        UIViewGroup * GroupMain_{nullptr};
+        UIImageView * ImageArrow_{nullptr};
+
+        void DeinitViewSettingData();
+        UIViewGroup * InitViewSettingData();
+        UIViewGroup * GroupSetting_{nullptr};
+        UILabelExt * LabelTitle_{nullptr};
+        UIImageView * ImageColorSetting_{nullptr};
+        UIImageView * ImageFlashingSetting_{nullptr};
+        UILabelExt * LabelColorSetting_{nullptr};
+        UILabelExt * LabelFlashingSetting_{nullptr};
+
+        void DeinitColorSettingData();
+        // UIViewGroup * InitColorSettingData();
+        void UpdateColorSettingItem(void);
+        UIViewGroup * GroupColorSetting_{nullptr};
+        UILabelExt * LabelColorSettingTitle_{nullptr};
+        #define COLOR_SETTING_ITEM_COUNT (6)
+        UIImageView * ImageColorSettingItem_[COLOR_SETTING_ITEM_COUNT][2]{nullptr};
+
+        void DeinitColorCustomData();
+        // UIViewGroup * InitColorCustomData();
+        UIViewGroup * GroupColorCustom_{nullptr};
+        UIImageView * ImageColorCustom_{nullptr};
+
+        void DeinitFlashingSettingData();
+        // UIScrollView * InitFlashingSettingData();
+        void UpdateFlashingSettingItem(void);
+        UIScrollView * ScrollFlashingSetting_{nullptr};
+        UILabelExt * LabelFlashingSettingTitle_{nullptr};
+        #define FLASHING_SETTING_ITEM_COUNT (3)
+        UIViewGroup * GroupFlashingSettingItem_[FLASHING_SETTING_ITEM_COUNT]{nullptr};
+        UILabelExt * LabelFlashingSettingItem_[FLASHING_SETTING_ITEM_COUNT]{nullptr};
+        UIRadioButton * RadioButtonFlashingSettingItem_[FLASHING_SETTING_ITEM_COUNT]{nullptr};        
+
+        void DisplaySelectScreen(uint8_t ScreenIndex);
+        UIViewGroup * ScreenGroupArray_[ENUM_FLASHLIGHT_SCREEN_MAX]{nullptr};
+
+
+        #define SCREEN_WIDTH (Screen::GetInstance().GetWidth())
+        #define SCREEN_HEIGHT (Screen::GetInstance().GetHeight())
+
+        #define UP_ARROW_IMAGE "/user/res/flashlight/up_arrow.bin"
+        #define COLOR_SETTING_IMAGE "/user/res/flashlight/color_setting.bin"
+        #define FLASHING_SETTING_IMAGE "/user/res/flashlight/flahing_setting.bin"
+
+        #define COLOR_SETTING_SELECTED_IMAGE "/user/res/flashlight/color_selected.bin"
+        char * ImageColorSettingItemSrc_[COLOR_SETTING_ITEM_COUNT] = 
+                                                    {
+                                                        "/user/res/flashlight/color_0.bin", 
+                                                        "/user/res/flashlight/color_1.bin", 
+                                                        "/user/res/flashlight/color_2.bin", 
+                                                        "/user/res/flashlight/color_3.bin", 
+                                                        "/user/res/flashlight/color_4.bin", 
+                                                        "/user/res/flashlight/color_5.bin",
+                                                    };
     };
 }
 #endif
\ No newline at end of file
index 797d7bb..3b894ae 100644 (file)
@@ -1,15 +1,17 @@
-/*
- * @Author: luozheng 1732036298@qq.com
- * @Date: 2024-04-10 18:13:11
- * @LastEditors: luozheng 1732036298@qq.com
- * @LastEditTime: 2024-04-10 19:34:54
- * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/flashlight/src/FlashlightModel.cpp
- */
+
+#include "graphic_service.h"
+#include <cmsis_os2.h>
+#include <cmsis_os.h>
+#include "wearable_log.h"
 #include "flashlight/include/FlashlightModel.h"
-#include "flashlight/include/FlashlightView.h"
+#include "flashlight/include/FlashlightPresenter.h"
 
 namespace OHOS
 {
+    static osTimerId_t g_timer = NULL;
+    static bool switch_flag = false;
+
+
     FlashlightModel::FlashlightModel() {}
 
     FlashlightModel::~FlashlightModel() {}
@@ -20,34 +22,170 @@ namespace OHOS
         return instance;
     }
 
-    /*切换屏幕亮度*/
-    void FlashlightModel::ToggleBrightness()
+    uint8_t FlashlightModel::GetColorIndex(void)
+    {
+        return ColorIndex_;
+    }
+
+    void FlashlightModel::SetColorIndex(uint8_t value)
+    {
+        ColorIndex_ = value;
+    }
+
+    int64_t FlashlightModel::GetColorValue(void)
+    {
+        if((COLOR_SETTING_ITEM_COUNT - 1) > ColorIndex_)
+            return ColorValue_ColorSettingItem_[ColorIndex_];
+
+        return ColorValue_;
+    }
+
+    void FlashlightModel::SetColorValue(int64_t value)
+    {
+        ColorValue_ = value;
+    }
+
+    uint8_t FlashlightModel::GetFlashingLevel(void)
+    {
+        return FlashingLevel_;
+    }
+
+    void FlashlightModel::SetFlashingLevel(uint8_t value)
+    {
+        FlashingLevel_ = value;
+    }    
+
+
+    static void FlashlightTimerCallbackProc(int data)
+    {
+        switch_flag = !(switch_flag);
+        FlashlightPresenter::GetInstance()->UpdateViewMainScreenFlashing(switch_flag);
+    }
+
+    /*
+     * @brief 计时器回调函数
+     */
+    static void FlashlightTimerCallback(int data)
     {
-        switch (currentBrightness)
+        GraphicService::GetInstance()->PostGraphicEvent(std::bind(FlashlightTimerCallbackProc, data));
+    }
+
+    /*
+     *  @brief 开启定时器函数
+     *  @param interval 时间间隔,单位ms
+     */
+    void FlashlightModel::FlashlightStartTimer(void)
+    {
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[@CHENG][%d]:%d", __LINE__, FlashingLevel_);
+        uint32_t interval = 0;
+        switch (FlashingLevel_)
+        {
+            case 0: // no
+                return;
+                break;
+
+            case 1: // quickly
+                interval = 500;
+                break;
+
+            case 2: // slowly
+                interval = 1000;
+                break;
+
+            default:
+                break;
+        }
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[@CHENG][%d]:%d", __LINE__, interval);
+
+        /* -------------------------- 1.检查定时器是否已经存在,如果存在则返回 ------------------------- */
+        if (g_timer != NULL)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "FlashlightModel::FlashlightStartTimer Timer already exists!!");
+            return;
+        }
+
+        /* --------------------------------- 2.创建定时器 -------------------------------- */
+        g_timer = osTimerNew((osTimerFunc_t)FlashlightTimerCallback, osTimerPeriodic, NULL, NULL);
+        // 检查定时器创建是否成功
+        if (g_timer == NULL)
         {
-        case Brightness::Low:
-            currentBrightness = Brightness::Medium; // 更新屏幕颜色为中亮度
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "FlashlightModel::FlashlightStartTimer Timer create failed!!");
+            return;
+        }
 
-            break;
-        case Brightness::Medium:
-            currentBrightness = Brightness::High; // 更新屏幕颜色为高亮度
+        /* ----------------------------- 3.将毫秒转换为系统时钟节拍数 ---------------------------- */
+        int tick = osMs2Tick(interval);
 
-            break;
-        case Brightness::High:
-            currentBrightness = Brightness::Low; // 关闭手电筒(屏幕恢复正常显示)
-            break;
+        /* --------------------------------- 4.启动定时器 -------------------------------- */
+        // g_timerStartTimestamp = GetCurrentTimestamp(); // 假设GetCurrentTimestamp()是获取当前时间戳的函数
+        osStatus_t ret = osTimerStart(g_timer, tick);
+        /* -------------------- 5.检查定时器启动是否成功,如果启动失败,删除定时器并置为 NULL -------------------- */
+        if (ret != osOK)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[FlashlightStartTimer] osTimerDelete failed, ret = %lx!!", ret);
+            if (g_timer != NULL)
+            {
+                ret = osTimerDelete(g_timer);
+                if (ret != osOK)
+                {
+                    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ScanTimerCallback osTimerDelete failed, ret = %lx!!", ret);
+                }
+                g_timer = NULL;
+            }
         }
-        UpdateScreenColor();
     }
 
-    // 基于当前亮度状态currentBrightness,更新屏幕颜色
-    void FlashlightModel::UpdateScreenColor()
+    /*
+     * @brief 停止定时器
+     */
+    void FlashlightModel::FlashlightStopTimer(void)
+    {
+        // 检查定时器是否存在
+        if (g_timer != NULL)
+        {
+            // 删除定时器并置为 NULL
+            osStatus_t ret = osTimerDelete(g_timer);
+            if (ret != osOK)
+            {
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ScanTimerCallback osTimerDelete failed, ret = %lx!!", ret);
+            }
+            g_timer = NULL;
+        }
+    }
+    /*
+     * @brief 暂停定时器
+     */
+    void FlashlightModel::FlashlightPauseTimer(void)
     {
-        FlashlightView::GetInstance()->SetTheGroupViewColor(currentBrightness);
+        // 检查定时器是否存在
+        if (g_timer != NULL)
+        {
+            // 暂停定时器,但不删除它
+            osStatus_t ret = osTimerStop(g_timer);
+            if (ret != osOK)
+            {
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "FlashlightPauseTimer osTimerStop failed, ret = %lx!!", ret);
+            }
+        }
     }
 
-    int64_t FlashlightModel::GetCurrentBrightness(void)
+    /*
+     * @brief 恢复定时器
+     */
+    void FlashlightModel::FlashlightResumeTimer(uint32_t interval)
     {
-        return currentBrightness;
+        // 检查定时器是否存在
+        if (g_timer != NULL)
+        {
+            int tick = osMs2Tick(interval);
+            // 恢复定时器
+            osStatus_t ret = osTimerStart(g_timer, tick);
+            if (ret != osOK)
+            {
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "FlashlightResumeTimer osTimerStart failed, ret = %lx!!", ret);
+            }
+        }
     }
+
+
 }
\ No newline at end of file
index 8d56231..96b22f4 100644 (file)
@@ -45,6 +45,9 @@ namespace OHOS
     void FlashlightPresenter::OnStart()
     {
         Presenter<FlashlightView>::OnStart();
+
+        FlashlightModel::GetInstance().FlashlightStartTimer();
+        ScreenAlwaysOnCtr(OPEN_SCREEN_ALWAYS_ON);
     }
 
     void FlashlightPresenter::OnPause(void)
@@ -60,6 +63,9 @@ namespace OHOS
     void FlashlightPresenter::OnStop(void)
     {
         Presenter<FlashlightView>::OnStop();
+
+        ScreenAlwaysOnCtr(CANCEL_SCREEN_ALWAYS_ON);
+        FlashlightModel::GetInstance().FlashlightStopTimer();
     }
 
     bool FlashlightPresenter::OnDrag(UIView &view, const DragEvent &event)
@@ -79,6 +85,22 @@ namespace OHOS
         UNUSED(view);
         if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT && FlashlightPresenter::X_DRAG_FLAG)
         {
+            if(0 == strcmp(Flashlight_ViewId_GroupColorSetting_, view.GetViewId()))
+            {
+                view_->DisplayViewSettingScreen();
+                return true;
+            }
+            if(0 == strcmp(Flashlight_ViewId_GroupColorCustom_, view.GetViewId()))
+            {
+                view_->DisplayColorSettingScreen();
+                return true;
+            }
+            if(0 == strcmp(Flashlight_ViewId_ScrollFlashingSetting_, view.GetViewId()))
+            {
+                view_->DisplayViewSettingScreen();
+                return true;
+            }
+
             NativeAbility::GetInstance().Back(TransitionType::TRANSITION_BACK_TO_HEXAGONS);
             X_DRAG_FLAG = false;
         }
@@ -89,10 +111,49 @@ namespace OHOS
     {
         WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "DnotDisturbPresenter::OnClick");
         UNUSED(event);
-        if (&view == FlashlightView::GetInstance()->GetGroupView())
+
+        if(0 == strcmp(Flashlight_ViewId_ImageColorSetting_, view.GetViewId()))
+        {
+            view_->DisplayColorSettingScreen();
+            return true;
+        }
+        if(0 == strcmp(Flashlight_ViewId_ImageFlashingSetting_, view.GetViewId()))
+        {
+            view_->DisplayFlashingSettingScreen();
+            return true;
+        }
+
+        uint8_t i = 0;
+        for(i = 0; i < FLASHING_SETTING_ITEM_COUNT; i++)
         {
-            FlashlightModel::GetInstance().ToggleBrightness();
+            if(0 == strcmp(Flashlight_ViewId_FlashingSettingItem_[i], view.GetViewId()))
+            {
+                FlashlightModel::GetInstance().SetFlashingLevel(i);
+                // view_->UpdateFlashingSettingItem();
+                // view_->DisplayFlashingSettingScreen();
+                view_->DisplayViewMainScreen();
+                return true;
+            }
         }
+
+        for(i = 0; i < COLOR_SETTING_ITEM_COUNT; i++)
+        {
+            if(0 == strcmp(Flashlight_ViewId_ImageColorSettingItem_[COLOR_SETTING_ITEM_COUNT - 1], view.GetViewId()))
+            {
+                FlashlightModel::GetInstance().SetColorIndex(i);
+                view_->DisplayColorCustomScreen();
+                return true;
+            }
+
+            if(0 == strcmp(Flashlight_ViewId_ImageColorSettingItem_[i], view.GetViewId()))
+            {
+                FlashlightModel::GetInstance().SetColorIndex(i);
+                FlashlightModel::GetInstance().SetColorValue(ColorValue_ColorSettingItem_[i]);
+                view_->DisplayViewMainScreen();
+                return true;
+            }
+        }
+
         return true;
     }
 
@@ -110,4 +171,45 @@ namespace OHOS
         return true;
     }
 
+    void FlashlightPresenter::OnSwipe(UISwipeView &view)
+    {
+        UNUSED(view);
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "FlashlightPresenter::OnSwipe");
+        
+        if(0 == view.GetCurrentPage())
+        {
+            FlashlightModel::GetInstance().FlashlightStartTimer();
+            ScreenAlwaysOnCtr(OPEN_SCREEN_ALWAYS_ON);
+        }
+        else
+        {
+            FlashlightModel::GetInstance().FlashlightStopTimer();
+            ScreenAlwaysOnCtr(CANCEL_SCREEN_ALWAYS_ON);
+        }
+    }
+
+    uint8_t FlashlightPresenter::GetColorIndex(void)
+    {
+        return FlashlightModel::GetInstance().GetColorIndex();
+    }
+
+    int64_t FlashlightPresenter::GetColorValue(void)
+    {
+        return FlashlightModel::GetInstance().GetColorValue();
+    }
+
+    uint8_t FlashlightPresenter::GetFlashingLevel(void)
+    {
+        return FlashlightModel::GetInstance().GetFlashingLevel();
+    }
+
+    void FlashlightPresenter::StartFlashingTimer(void)
+    {
+        FlashlightModel::GetInstance().FlashlightStartTimer();
+    }
+
+    void FlashlightPresenter::UpdateViewMainScreenFlashing(bool flag)
+    {
+        view_->UpdateViewMainScreenFlashing(flag);
+    }
 }
\ No newline at end of file
index f0e7a31..e317e85 100644 (file)
@@ -6,9 +6,10 @@
  * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/flashligh/src/FlashlightView.cpp
  */
 #include "flashlight/include/FlashlightView.h"
-#include "flashlight/include/FlashlightPresenter.h"
-#include "flashlight/include/FlashlightModel.h"
 #include "wearable_log.h"
+#include "ui_resource_string.h"
+#include "UiConfig.h"
+#include "custom_utils.h"
 
 namespace OHOS
 {
@@ -24,7 +25,6 @@ namespace OHOS
     FlashlightView::~FlashlightView()
     {
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "FlashlightView::~FlashlightView");
-        ClearAll();
         g_pFlashlightView = nullptr;
     }
 
@@ -33,123 +33,763 @@ namespace OHOS
         return g_pFlashlightView;
     }
 
-    void FlashlightView::ClearAll(void)
+    void FlashlightView::OnStart()
     {
-        group->RemoveAll();
-        if (group != nullptr)
+        View<FlashlightPresenter>::OnStart();
+
+        SetContainerView(new UIViewGroup());
+        if (nullptr == GetContainer())
         {
-            delete FlashlightVector;
-            FlashlightVector = nullptr;
+                       WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[%d]", __LINE__);
+            return;
+        }
+        container_->SetPosition(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);
+        container_->SetTouchable(true);
+        container_->SetDraggable(true);
+        // container_->SetOnDragListener(presenter_);
+
+        RootView::GetInstance()->SetOnKeyActListener(presenter_);
+    }
+
+    void FlashlightView::OnSetUpView()
+    {
+        View<FlashlightPresenter>::OnSetUpView();
+
+        InitSwipeData();
+        Draw();
+    }
+
+    void FlashlightView::OnTearDownView()
+    {
+        View<FlashlightPresenter>::OnTearDownView();
+        return;
+    }
+
+    void FlashlightView::OnStop()
+    {
+        View<FlashlightPresenter>::OnStop();
+        RootView::GetInstance()->ClearOnKeyActListener();
+
+        if (nullptr != container_)
+        {
+            container_->RemoveAll();
+            delete container_;
+            container_ = nullptr;
+
+            DeinitSwipeData();
+
+            DeinitColorSettingData();
+            DeinitFlashingSettingData();
+        }
+    }
 
-            delete LineImage;
-            LineImage = nullptr;
 
-            delete group;
-            group = nullptr;
+    void FlashlightView::DeinitSwipeData()
+    {
+        if(nullptr != SwipeView_)
+        {
+            SwipeView_->RemoveAll();
+            delete SwipeView_;
+            SwipeView_ = nullptr;
+
+            DeinitViewMainData();
+            DeinitViewSettingData();
         }
     }
 
-    void FlashlightView::FlashlightViewInit(void)
+    UIViewGroup * FlashlightView::InitSwipeData()
     {
-        if (group == nullptr)
+        if(nullptr == SwipeView_)
         {
-            group = new UIScrollView();
-            if (group == nullptr)
+            SwipeView_ = new UISwipeView(UISwipeView::VERTICAL);
+            if(nullptr == SwipeView_)
             {
-                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "FlashlightView::group is nullptr");
-                return;
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[@CHENG][%d]", __LINE__);
+                return nullptr;
             }
-            group->SetPosition(0, 0, 466, 466);
-            group->SetStyle(STYLE_BACKGROUND_COLOR, FlashlightModel::GetInstance().GetCurrentBrightness());
-            group->SetStyle(STYLE_BACKGROUND_OPA, 0xff);
-            UIView::OnClickListener *listener1 = static_cast<UIView::OnClickListener *>(FlashlightPresenter::GetInstance());
-            group->SetOnClickListener(listener1);
-            UIView::OnDragListener *listener2 = static_cast<UIView::OnDragListener *>(FlashlightPresenter::GetInstance());
-            group->SetOnDragListener(listener2);
-            /* -------------------------------------------------------------------------- */
-            FlashlightVector = new UIImageView();
-            if (FlashlightVector == nullptr)
-            {
-                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "FlashlightView::FlashlightVector is nullptr");
-                return;
+            SwipeView_->SetPosition(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);
+            SwipeView_->SetTouchable(true);
+            SwipeView_->SetDraggable(true);
+            // SwipeView_->SetThrowDrag(true);
+            SwipeView_->SetOnSwipeListener(presenter_);
+            SwipeView_->SetAnimatorTime(50);           // 200:animator drag time(ms)
+            SwipeView_->SetOnDragListener(presenter_);
+            SwipeView_->SetStyle(STYLE_BACKGROUND_COLOR, Color::Black().full);
+            SwipeView_->SetStyle(STYLE_BACKGROUND_OPA, OPA_OPAQUE);
+            SwipeView_->SetStyle(STYLE_BORDER_RADIUS, 100);
+
+            UIViewGroup * temp_0 = InitViewMainData();
+            if(nullptr == temp_0)
+                return nullptr;
+            SwipeView_->Add(temp_0);
+
+            UIViewGroup * temp_1 = InitViewSettingData();
+            if(nullptr == temp_1)
+                return nullptr;
+            SwipeView_->Add(temp_1);
+
+            SwipeView_->SetCurrentPage(0);
+            SwipeView_->SetIntercept(false);
+            SwipeView_->SetLoopState(false);
+
+            container_->Add(SwipeView_);
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "FlashlightView::InitSwipeData");
+        }
+
+        return dynamic_cast<UIViewGroup *>(SwipeView_);
+        // return SwipeView_;
+    }
+
+    void FlashlightView::DeinitViewMainData()
+    {
+        if(nullptr != GroupMain_)
+        {
+            GroupMain_->RemoveAll();
+            delete GroupMain_;
+            GroupMain_ = nullptr;
+
+            if(nullptr != ImageArrow_)
+            {
+                delete ImageArrow_;
+                ImageArrow_ = nullptr;
             }
-            FlashlightVector->SetPosition(212, 191, 100, 100);
-            const char *imagesPath = "/user/res/flashlight/Flashlight.bin";
-            FlashlightVector->SetSrc(imagesPath);
-            /* -------------------------------------------------------------------------- */
-            LineImage = new UIImageView();
-            if (LineImage == nullptr)
+        }
+    }
+
+    UIViewGroup * FlashlightView::InitViewMainData(void)
+    {
+        if(nullptr == GroupMain_)
+        {
+            GroupMain_ = new UIViewGroup();
+            if(nullptr == GroupMain_)
+                return nullptr;
+
+            GroupMain_->SetPosition(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);
+            // GroupMain_->SetViewId(S_ViewId_NoDataGroup_);
+            GroupMain_->SetStyle(STYLE_BACKGROUND_OPA, OPA_OPAQUE);
+            GroupMain_->SetStyle(STYLE_BACKGROUND_COLOR, presenter_->GetColorValue());
+            GroupMain_->SetTouchable(true);
+            GroupMain_->SetDraggable(true);
+            GroupMain_->SetOnDragListener(presenter_);
+
+            if (nullptr == ImageArrow_)
             {
-                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "FlashlightView::LineImage is nullptr");
-                return;
+                ImageArrow_ = new UIImageView();
+                if (nullptr == ImageArrow_)
+                    return nullptr;
+
+                ImageArrow_->SetPosition(211, 430, 40, 20);
+                ImageArrow_->SetSrc(UP_ARROW_IMAGE);
             }
-            LineImage->SetPosition(193, 430, 80, 8);
-            LineImage->SetStyle(STYLE_BACKGROUND_COLOR, 0xffdddddd);
-            LineImage->SetStyle(STYLE_BACKGROUND_OPA, 0xff);
-            LineImage->SetVisible(false);
+
+            GroupMain_->Add(ImageArrow_);
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "FlashlightView::InitViewMainData");
         }
+
+        return GroupMain_;
     }
 
-    UIScrollView *FlashlightView::GetGroupView()
+    void FlashlightView::UpdateViewMainScreenFlashing(bool flag)
     {
-        if (group != nullptr)
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[@CHENG][%d]", __LINE__);
+        if(nullptr == GroupMain_)
+            return;
+
+        if(false == GroupMain_->IsVisible())
+            return;
+        
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[@CHENG][%d]:%d", __LINE__, flag);
+        if(true == flag)
         {
-            return group;
+            GroupMain_->SetStyle(STYLE_BACKGROUND_COLOR, Color::Black().full);
         }
         else
         {
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "FlashlightView::group is new fail!!");
+            GroupMain_->SetStyle(STYLE_BACKGROUND_COLOR, presenter_->GetColorValue());
+        }
+
+        Draw();
+    }
+
+    void FlashlightView::UpdateViewMainScreen(void)
+    {
+        if(nullptr == SwipeView_)
+            return;
+        
+        SwipeView_->SetCurrentPage(0);
+
+        if(0 == presenter_->GetFlashingLevel())
+            UpdateViewMainScreenFlashing(false);
+        else
+            presenter_->StartFlashingTimer();
+    }
+
+    void FlashlightView::DeinitViewSettingData()
+    {
+        if(nullptr != GroupSetting_)
+        {
+            GroupSetting_->RemoveAll();
+            delete GroupSetting_;
+            GroupSetting_ = nullptr;
+
+            if(nullptr != LabelTitle_)
+            {
+                delete LabelTitle_;
+                LabelTitle_ = nullptr;
+            }
+            if(nullptr != ImageColorSetting_)
+            {
+                delete ImageColorSetting_;
+                ImageColorSetting_ = nullptr;
+            }        
+            if(nullptr != ImageFlashingSetting_)
+            {
+                delete ImageFlashingSetting_;
+                ImageFlashingSetting_ = nullptr;
+            }        
+            if(nullptr != LabelColorSetting_)
+            {
+                delete LabelColorSetting_;
+                LabelColorSetting_ = nullptr;
+            }        
+            if(nullptr != LabelFlashingSetting_)
+            {
+                delete LabelFlashingSetting_;
+                LabelFlashingSetting_ = nullptr;
+            }        
+        }
+    }
+
+    UIViewGroup * FlashlightView::InitViewSettingData()
+    {
+        if(nullptr == GroupSetting_)
+        {
+            GroupSetting_ = new UIViewGroup();
+            if(nullptr == GroupSetting_)
+                return nullptr;
+            
+            // GroupSetting_->SetViewId(S_ViewId_NoDataGroup_);
+            GroupSetting_->SetPosition(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);
+            GroupSetting_->SetStyle(STYLE_BACKGROUND_OPA, OPA_OPAQUE);
+            GroupSetting_->SetStyle(STYLE_BACKGROUND_COLOR, Color::Black().full);
+            GroupSetting_->SetTouchable(true);
+            GroupSetting_->SetDraggable(true);
+            GroupSetting_->SetOnDragListener(presenter_);
+
+            if(nullptr == LabelTitle_)
+            {
+                LabelTitle_ = CreateUILabelExt(83, 50, 300, 35, STR_FLASHLIGHT_SETTING, 30, 35, Color::White().full,
+                                                TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
+                if(nullptr == LabelTitle_)
+                    return nullptr;                
+            }
+
+            if(nullptr == ImageColorSetting_)
+            {
+                ImageColorSetting_ = new UIImageView();
+                if (nullptr == ImageColorSetting_)
+                    return nullptr;
+
+                ImageColorSetting_->SetViewId(Flashlight_ViewId_ImageColorSetting_);
+                ImageColorSetting_->SetPosition(60, 140, 160, 160);
+                ImageColorSetting_->SetSrc(COLOR_SETTING_IMAGE);
+                ImageColorSetting_->SetTouchable(true);
+                ImageColorSetting_->SetOnClickListener(presenter_);
+            }
+
+            if(nullptr == ImageFlashingSetting_)
+            {
+                ImageFlashingSetting_ = new UIImageView();
+                if (nullptr == ImageFlashingSetting_)
+                    return nullptr;
+
+                ImageFlashingSetting_->SetViewId(Flashlight_ViewId_ImageFlashingSetting_);
+                ImageFlashingSetting_->SetPosition(246, 140, 160, 160);
+                ImageFlashingSetting_->SetSrc(FLASHING_SETTING_IMAGE);
+                ImageFlashingSetting_->SetTouchable(true);
+                ImageFlashingSetting_->SetOnClickListener(presenter_);
+            }
+
+            if(nullptr == LabelColorSetting_)
+            {
+                LabelColorSetting_ = CreateUILabelExt(80, 320, 120, 35, STR_LIGHT_COLOR, 30, 35, 0xff999999,
+                                                TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
+                if(nullptr == LabelColorSetting_)
+                    return nullptr;
+            }   
+
+            if(nullptr == LabelFlashingSetting_)
+            {
+                LabelFlashingSetting_ = CreateUILabelExt(266, 320, 120, 35, STR_FLICKER_FREQUENCY, 30, 35, 0xff999999,
+                                                TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
+                if(nullptr == LabelFlashingSetting_)
+                    return nullptr;
+            }
+
+            GroupSetting_->Add(LabelTitle_);
+            GroupSetting_->Add(ImageColorSetting_);
+            GroupSetting_->Add(ImageFlashingSetting_);
+            GroupSetting_->Add(LabelColorSetting_);
+            GroupSetting_->Add(LabelFlashingSetting_);
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "FlashlightView::InitViewSettingData");
+        }
+
+        return GroupSetting_;
+    }
+
+    void FlashlightView::DeinitColorSettingData()
+    {
+        if(nullptr != GroupColorSetting_)
+        {
+            GroupColorSetting_->RemoveAll();
+            delete GroupColorSetting_;
+            GroupColorSetting_ = nullptr;
+
+            if(nullptr != LabelColorSettingTitle_)
+            {
+                delete LabelColorSettingTitle_;
+                LabelColorSettingTitle_ = nullptr;
+            }
+
+            uint8_t i = 0;
+            for(i = 0; i < COLOR_SETTING_ITEM_COUNT; i++)
+            {
+                if(nullptr != ImageColorSettingItem_[i][0])
+                {
+                    delete ImageColorSettingItem_[i][0];
+                    ImageColorSettingItem_[i][0] = nullptr;
+                }
+                if(nullptr != ImageColorSettingItem_[i][1])
+                {
+                    delete ImageColorSettingItem_[i][1];
+                    ImageColorSettingItem_[i][1] = nullptr;
+                }
+            }
+        }
+    }
+
+    UIViewGroup * FlashlightView::InitColorSettingData()
+    {
+        if(nullptr == GroupColorSetting_)
+        {
+            GroupColorSetting_ = new UIViewGroup();
+            if(nullptr == GroupColorSetting_)
+                return nullptr;
+
+            GroupColorSetting_->SetViewId(Flashlight_ViewId_GroupColorSetting_);
+            GroupColorSetting_->SetPosition(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);
+            GroupColorSetting_->SetStyle(STYLE_BACKGROUND_OPA, OPA_OPAQUE);
+            GroupColorSetting_->SetStyle(STYLE_BACKGROUND_COLOR, Color::Black().full);
+            GroupColorSetting_->SetTouchable(true);
+            GroupColorSetting_->SetDraggable(true);
+            GroupColorSetting_->SetOnDragListener(presenter_);
+
+            if(nullptr == LabelColorSettingTitle_)
+            {
+                LabelColorSettingTitle_ = CreateUILabelExt(83, 50, 300, 35, STR_LIGHT_COLOR, 30, 35, Color::White().full,
+                                                            TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
+                if(nullptr == LabelColorSettingTitle_)
+                    return nullptr;                
+            }
+            GroupColorSetting_->Add(LabelColorSettingTitle_);
+
+            uint8_t i = 0;
+            for(i = 0; i < COLOR_SETTING_ITEM_COUNT; i++)
+            {
+                int16_t x = 0;
+                int16_t y = 0;
+
+                switch(i)
+                {
+                    case 0:
+                    case 1:
+                    case 2:
+                        x = 43 + (120 + 10)*i;
+                        y = 130;
+                        ImageColorSettingItem_[i][0] = 
+                                CreateImageColorSettingItem_(nullptr, x, y, 120, 120, COLOR_SETTING_SELECTED_IMAGE);
+                        GroupColorSetting_->Add(ImageColorSettingItem_[i][0]);
+                        x = 43 + (120 + 10)*i + 10;
+                        y = 130 + 10;
+                        ImageColorSettingItem_[i][1] = 
+                                CreateImageColorSettingItem_(Flashlight_ViewId_ImageColorSettingItem_[i],
+                                                            x, y, 100, 100, ImageColorSettingItemSrc_[i]);
+                        GroupColorSetting_->Add(ImageColorSettingItem_[i][1]);
+                        break;
+
+                    case 3:
+                    case 4:
+                        x = 43 + (120 + 10)*(i - 3);
+                        y = 260;
+                        ImageColorSettingItem_[i][0] = 
+                                CreateImageColorSettingItem_(nullptr, x, y, 120, 120, COLOR_SETTING_SELECTED_IMAGE);
+                        GroupColorSetting_->Add(ImageColorSettingItem_[i][0]);
+                        x = 43 + (120 + 10)*(i - 3) + 10;
+                        y = 260 + 10;
+                        ImageColorSettingItem_[i][1] = 
+                                CreateImageColorSettingItem_(Flashlight_ViewId_ImageColorSettingItem_[i],
+                                                            x, y, 100, 100, ImageColorSettingItemSrc_[i]);
+                        GroupColorSetting_->Add(ImageColorSettingItem_[i][1]);
+                        break;
+
+                    case 5:
+                        x = 43 + (120 + 10)*(i - 3);
+                        y = 260;
+                        ImageColorSettingItem_[i][0] = 
+                                CreateImageColorSettingItem_(nullptr, x, y, 120, 120, COLOR_SETTING_SELECTED_IMAGE);
+                        GroupColorSetting_->Add(ImageColorSettingItem_[i][0]);
+                        x = 43 + (120 + 10)*(i - 3) + 20;
+                        y = 260 + 20;
+                        ImageColorSettingItem_[i][1] = 
+                                CreateImageColorSettingItem_(Flashlight_ViewId_ImageColorSettingItem_[i],
+                                                            x, y, 80, 80, ImageColorSettingItemSrc_[i]);
+                        GroupColorSetting_->Add(ImageColorSettingItem_[i][1]);
+                        break;
+                }
+                if(presenter_->GetColorIndex() == i)
+                    ImageColorSettingItem_[i][0]->SetVisible(true);
+                else
+                    ImageColorSettingItem_[i][0]->SetVisible(false);
+
+                ImageColorSettingItem_[i][1]->SetVisible(true);
+            }
+
+            container_->Add(GroupColorSetting_);
+        }
+
+        return GroupColorSetting_;
+    }
+
+    UIImageView * FlashlightView::CreateImageColorSettingItem_(char * id, int16_t x, int16_t y, int16_t w, int16_t h,
+                                                                char * src)
+    {
+        UIImageView * temp_UIImageView = new UIImageView();
+        if (nullptr == temp_UIImageView)
             return nullptr;
+
+        if(nullptr != id)
+            temp_UIImageView->SetViewId(id);
+        temp_UIImageView->SetPosition(x, y, w, h);
+        temp_UIImageView->SetSrc(src);
+        temp_UIImageView->SetTouchable(true);
+        temp_UIImageView->SetOnClickListener(presenter_);
+
+        return temp_UIImageView;
+    }
+
+    void FlashlightView::UpdateColorSettingItem(void)
+    {
+        uint8_t i = 0;
+        for(i = 0; i < COLOR_SETTING_ITEM_COUNT; i++)
+        {
+            if(nullptr == ImageColorSettingItem_[i][0])
+                return;
+            
+            if(presenter_->GetColorIndex() == i)
+                ImageColorSettingItem_[i][0]->SetVisible(true);
+            else
+                ImageColorSettingItem_[i][0]->SetVisible(false);
         }
     }
 
-    void FlashlightView::SetTheGroupViewColor(int64_t colorValue)
+    void FlashlightView::DeinitColorCustomData()
     {
-        if (group != nullptr)
+        if(nullptr != GroupColorCustom_)
         {
-            group->SetStyle(STYLE_BACKGROUND_COLOR, colorValue);
-            group->Invalidate();
+            GroupColorCustom_->RemoveAll();
+            delete GroupColorCustom_;
+            GroupColorCustom_ = nullptr;
+
+            if(nullptr != ImageColorCustom_)
+            {
+                delete ImageColorCustom_;
+                ImageColorCustom_ = nullptr;
+            }
         }
-        else
+    }
+
+    UIViewGroup * FlashlightView::InitColorCustomData()
+    {
+        if(nullptr == GroupColorCustom_)
         {
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "FlashlightView::group is new fail!!");
-            return;
+            GroupColorCustom_ = new UIViewGroup();
+            if(nullptr == GroupColorCustom_)
+                return nullptr;
+
+            GroupColorCustom_->SetViewId(Flashlight_ViewId_GroupColorCustom_);
+            GroupColorCustom_->SetPosition(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);
+            GroupColorCustom_->SetStyle(STYLE_BACKGROUND_OPA, OPA_OPAQUE);
+            GroupColorCustom_->SetStyle(STYLE_BACKGROUND_COLOR, Color::Black().full);
+            GroupColorCustom_->SetTouchable(true);
+            GroupColorCustom_->SetDraggable(true);
+            GroupColorCustom_->SetOnDragListener(presenter_);
+
+            if(nullptr == ImageColorCustom_)
+            {
+                ImageColorCustom_ = new UIImageView;
+                if(nullptr == ImageColorCustom_)
+                    return nullptr;
+
+                ImageColorCustom_->SetPosition(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);
+            }
+
+            container_->Add(GroupColorCustom_);
         }
+
+        return GroupColorCustom_;
     }
 
-    void FlashlightView::OnStart()
+    void FlashlightView::DeinitFlashingSettingData()
     {
-        View<FlashlightPresenter>::OnStart();
-        FlashlightViewInit();
+        if(nullptr != ScrollFlashingSetting_)
+        {
+            ScrollFlashingSetting_->RemoveAll();
+            delete ScrollFlashingSetting_;
+            ScrollFlashingSetting_ = nullptr;
 
-        // 增加按键监听
-        RootView::OnKeyActListener *keyactListener = (RootView::OnKeyActListener *)OHOS::FlashlightPresenter::GetInstance();
-        RootView::GetInstance()->SetOnKeyActListener(keyactListener);
+            if(nullptr != LabelFlashingSettingTitle_)
+            {
+                delete LabelFlashingSettingTitle_;
+                LabelFlashingSettingTitle_ = nullptr;
+            }
+
+            uint8_t i = 0;
+            for(i = 0; i < FLASHING_SETTING_ITEM_COUNT; i++)
+            {
+                if(nullptr != GroupFlashingSettingItem_[i])
+                {
+                    GroupFlashingSettingItem_[i]->RemoveAll();
+                    delete GroupFlashingSettingItem_[i];
+                    GroupFlashingSettingItem_[i] = nullptr;
+
+                    if(nullptr != LabelFlashingSettingItem_[i])
+                    {
+                        delete LabelFlashingSettingItem_[i];
+                        LabelFlashingSettingItem_[i] = nullptr;
+                    }
+                    if(nullptr != RadioButtonFlashingSettingItem_[i])
+                    {
+                        delete RadioButtonFlashingSettingItem_[i];
+                        RadioButtonFlashingSettingItem_[i] = nullptr;
+                    }
+                }
+            }            
+        }
     }
 
-    void FlashlightView::OnSetUpView()
+    UIViewGroup * FlashlightView::InitFlashingSettingData()
     {
+        if(nullptr == ScrollFlashingSetting_)
+        {
+            ScrollFlashingSetting_ = new UIScrollView();
+            if(nullptr == ScrollFlashingSetting_)
+                return nullptr;
+
+            ScrollFlashingSetting_->SetViewId(Flashlight_ViewId_ScrollFlashingSetting_);
+            ScrollFlashingSetting_->SetPosition(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT - 50);
+            ScrollFlashingSetting_->SetStyle(STYLE_BACKGROUND_OPA, OPA_OPAQUE);
+            ScrollFlashingSetting_->SetStyle(STYLE_BACKGROUND_COLOR, Color::Black().full);
+            ScrollFlashingSetting_->SetTouchable(true);
+            ScrollFlashingSetting_->SetDraggable(true);
+            ScrollFlashingSetting_->SetOnDragListener(presenter_);
+
+            ScrollFlashingSetting_->SetScrollBlankSize(40);
+            ScrollFlashingSetting_->SetReboundSize(40);
+            ScrollFlashingSetting_->SetMaxScrollDistance(1000);
+            ScrollFlashingSetting_->SetThrowDrag(true);
+            ScrollFlashingSetting_->RequestFocus();
+            ScrollFlashingSetting_->SetRotateFactor(2);
+
+            if(nullptr == LabelFlashingSettingTitle_)
+            {
+                LabelFlashingSettingTitle_ = CreateUILabelExt(83, 50, 300, 35, STR_FLICKER_FREQUENCY, 30, 35, Color::White().full,
+                                                        TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
+                if(nullptr == LabelFlashingSettingTitle_)
+                    return nullptr;
+            }
+
+            uint8_t i = 0;
+            uint16_t text_id[FLASHING_SETTING_ITEM_COUNT] = {STR_NO_FLICKER, STR_FAST_FLICKER, STR_SLOW_FLICKER};
+            for(i = 0; i < FLASHING_SETTING_ITEM_COUNT; i++)
+            {
+                LabelFlashingSettingItem_[i] = CreateUILabelExt(47, 33, 230, 35, text_id[i], 30, 35, Color::White().full,
+                                                                TEXT_ALIGNMENT_LEFT, TEXT_ALIGNMENT_CENTER);
+                RadioButtonFlashingSettingItem_[i] = CreateUIRadioButtonItem(300, 30, 40, 40);
+                GroupFlashingSettingItem_[i] = CreateUIGroupItem(Flashlight_ViewId_FlashingSettingItem_[i], 
+                                                                43, 120 + 120 * i, 380, 100);
+
+                GroupFlashingSettingItem_[i]->Add(LabelFlashingSettingItem_[i]);
+                GroupFlashingSettingItem_[i]->Add(RadioButtonFlashingSettingItem_[i]);
+                ScrollFlashingSetting_->Add(GroupFlashingSettingItem_[i]);
+            }
+
+            ScrollFlashingSetting_->Add(LabelFlashingSettingTitle_);
+
+            container_->Add(ScrollFlashingSetting_);
+        }
+
+        return dynamic_cast<UIViewGroup *>(ScrollFlashingSetting_);
+        // return ScrollFlashingSetting_;
+    }
+
+    UILabelExt * FlashlightView::CreateUILabelExt(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t text_id,
+                                                    int64_t font_size, int64_t line_height, int64_t color_value,
+                                                    UITextLanguageAlignment hor_align, UITextLanguageAlignment ver_align)
+    {
+        UILabelExt * temp_UILabelExt = new UILabelExt();
+        if(nullptr == temp_UILabelExt)
+            return nullptr;
+
+        temp_UILabelExt->SetPosition(x, y, w, h);
+        temp_UILabelExt->SetStyle(STYLE_TEXT_FONT, font_size);
+        temp_UILabelExt->SetStyle(STYLE_LINE_HEIGHT, line_height);
+        temp_UILabelExt->SetTextId(text_id);
+        temp_UILabelExt->SetLineBreakMode(UILabel::LINE_BREAK_OSCILLATION);
+        temp_UILabelExt->SetAlign(hor_align, ver_align);
+        temp_UILabelExt->SetRollSpeed(70);
+        temp_UILabelExt->SetFont(DEFAULT_VECTOR_FONT_FILENAME, font_size);
+        temp_UILabelExt->SetStyle(STYLE_TEXT_COLOR, color_value);
+
+        return temp_UILabelExt;
+    }
+
+    UIRadioButton * FlashlightView::CreateUIRadioButtonItem(int16_t x, int16_t y, int16_t w, int16_t h)
+    {
+        UIRadioButton * temp_UIRadioButton = new UIRadioButton();
+        if(nullptr == temp_UIRadioButton)
+            return temp_UIRadioButton;
+
+        temp_UIRadioButton->SetPosition(x, y, w, h);
+        temp_UIRadioButton->SetStyle(STYLE_BACKGROUND_COLOR, Color::Black().full);
+        temp_UIRadioButton->SetImages(PNG_CHECKBOX_ON_IMAGE, PNG_CHECKBOX_OFF_IMAGE);
+        // temp_UIRadioButton->SetOnChangeListener(presenter_);
+
+        return temp_UIRadioButton;
+    }
+
+    UIViewGroup * FlashlightView::CreateUIGroupItem(char * id, int16_t x, int16_t y, int16_t w, int16_t h)
+    {
+        UIViewGroup * temp_UIViewGroup = new UIViewGroup();
+        if(nullptr == temp_UIViewGroup)
+            return nullptr;
+
+        temp_UIViewGroup->SetViewId(id);
+        temp_UIViewGroup->SetPosition(x, y, w, h);
+        temp_UIViewGroup->SetStyle(STYLE_BACKGROUND_COLOR, 0xff191919);
+        temp_UIViewGroup->SetStyle(STYLE_BACKGROUND_OPA, OPA_OPAQUE);
+        temp_UIViewGroup->SetStyle(STYLE_BORDER_RADIUS, 52);
+        temp_UIViewGroup->SetTouchable(true);
+        // temp_UIViewGroup->SetDraggable(true);
+        temp_UIViewGroup->SetOnClickListener(presenter_);
+
+        return temp_UIViewGroup;
+    }
+
+    void FlashlightView::UpdateFlashingSettingItem(void)
+    {
+        uint8_t i = 0;
+        for(i = 0; i < FLASHING_SETTING_ITEM_COUNT; i++)
+        {
+            if(nullptr == RadioButtonFlashingSettingItem_[i])
+                return;
+            
+            if(presenter_->GetFlashingLevel() == i)
+                RadioButtonFlashingSettingItem_[i]->SetState(UICheckBox::SELECTED);
+            else
+                RadioButtonFlashingSettingItem_[i]->SetState(UICheckBox::UNSELECTED);
+        }
+    }
+
+    struct FlashlightViewMapper
+    {
+        FlashlightView::ENUM_FLASHLIGHT_SCREEN screen_index;
+        UIViewGroup * (FlashlightView::*func)(void);
+    };
+    static const FlashlightViewMapper ViewMapper[] = 
+    {
+        {FlashlightView::ENUM_FLASHLIGHT_SCREEN_VIEW_MAIN, &FlashlightView::InitSwipeData},
+        {FlashlightView::ENUM_FLASHLIGHT_SCREEN_VIEW_SETTING, &FlashlightView::InitSwipeData},
+        {FlashlightView::ENUM_FLASHLIGHT_SCREEN_COLOR_SETTING, &FlashlightView::InitColorSettingData},
+        {FlashlightView::ENUM_FLASHLIGHT_SCREEN_COLOR_CUSTOM, &FlashlightView::InitColorCustomData},
+        {FlashlightView::ENUM_FLASHLIGHT_SCREEN_FLASHING_SETTING, &FlashlightView::InitFlashingSettingData},
+    };
+
+    void FlashlightView::DisplaySelectScreen(uint8_t ScreenIndex)
+    {
+        if(ENUM_FLASHLIGHT_SCREEN_MAX <= ScreenIndex)
+        {
+            return;
+        }
+
+        uint8_t i = 0;
+        for(i = 0; i < ENUM_FLASHLIGHT_SCREEN_MAX; i++)
+        {
+            if(nullptr != ScreenGroupArray_[i])
+            {
+                ScreenGroupArray_[i]->SetVisible(false);
+            }
+        }
+
+        if(nullptr == ScreenGroupArray_[ScreenIndex])
+        {
+            ScreenGroupArray_[ScreenIndex] = (this->*(ViewMapper[ScreenIndex].func))();
+            if(nullptr == ScreenGroupArray_[ScreenIndex])
+                return;
+        }
+        ScreenGroupArray_[ScreenIndex]->SetVisible(true);
+
+        switch (ScreenIndex)
+        {
+            case ENUM_FLASHLIGHT_SCREEN_VIEW_MAIN:
+                ScreenAlwaysOnCtr(OPEN_SCREEN_ALWAYS_ON);
+                UpdateViewMainScreen();
+                break;
+
+            case ENUM_FLASHLIGHT_SCREEN_VIEW_SETTING:
+                SwipeView_->SetCurrentPage(1);
+                break;
+
+            case ENUM_FLASHLIGHT_SCREEN_COLOR_SETTING:
+                UpdateColorSettingItem();
+                break;
+
+            case ENUM_FLASHLIGHT_SCREEN_COLOR_CUSTOM:
+                break;
+
+            case ENUM_FLASHLIGHT_SCREEN_FLASHING_SETTING:
+                UpdateFlashingSettingItem();
+                break;
+            
+            // default:
+            //     break;
+        }
 
-        View<FlashlightPresenter>::OnSetUpView();
-        group->Add(FlashlightVector);
-        group->Add(LineImage);
-        RootView::GetInstance()->Add(group);
-        container_ = group;
         Draw();
     }
 
-    void FlashlightView::OnTearDownView()
+    void FlashlightView::DisplayViewMainScreen()
     {
-        View<FlashlightPresenter>::OnTearDownView();
-        return;
+        DisplaySelectScreen(ENUM_FLASHLIGHT_SCREEN_VIEW_MAIN);
     }
 
-    void FlashlightView::OnStop()
+    void FlashlightView::DisplayViewSettingScreen()
     {
+        DisplaySelectScreen(ENUM_FLASHLIGHT_SCREEN_VIEW_SETTING);
+    }
 
-        View<FlashlightPresenter>::OnStop();
-        RootView::GetInstance()->RemoveAll();
-        RootView::GetInstance()->ClearOnKeyActListener();
-        return;
+    void FlashlightView::DisplayColorSettingScreen()
+    {
+        DisplaySelectScreen(ENUM_FLASHLIGHT_SCREEN_COLOR_SETTING);
+    }
+
+    void FlashlightView::DisplayColorCustomScreen()
+    {
+        DisplaySelectScreen(ENUM_FLASHLIGHT_SCREEN_COLOR_CUSTOM);
+    }
+
+    void FlashlightView::DisplayFlashingSettingScreen()
+    {
+        DisplaySelectScreen(ENUM_FLASHLIGHT_SCREEN_FLASHING_SETTING);
     }
+   
 }
\ No newline at end of file
diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/flashlight/color_0.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/flashlight/color_0.bin
new file mode 100644 (file)
index 0000000..11a295c
--- /dev/null
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7a7795ec7eb4265a8e4e58691f71a44f784291c9c57302ae9efc5496a476ae7c
+size 6824
diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/flashlight/color_1.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/flashlight/color_1.bin
new file mode 100644 (file)
index 0000000..2ac4153
--- /dev/null
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:668268cd43834f2195637d9251153cb54e3bc450207b052cf71272726988faff
+size 6824
diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/flashlight/color_2.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/flashlight/color_2.bin
new file mode 100644 (file)
index 0000000..e1f4741
--- /dev/null
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a55b3a2bf19d5c2121b1d7908b072a3039154942aac81258710ebd6313277fab
+size 6824
diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/flashlight/color_3.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/flashlight/color_3.bin
new file mode 100644 (file)
index 0000000..54f6860
--- /dev/null
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2b16200a6c887fa4675c9d9628ffaa8c79a26ff3c1df749ac6e5624379582133
+size 6824
diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/flashlight/color_4.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/flashlight/color_4.bin
new file mode 100644 (file)
index 0000000..0279e27
--- /dev/null
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:12f48f0ce227179cde03c4844f56df7dea84291504ef667e43d493caa430668e
+size 6824
diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/flashlight/color_5.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/flashlight/color_5.bin
new file mode 100644 (file)
index 0000000..9767cc0
--- /dev/null
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e5cf4d2f4577666a17ffcfa158c1b7e3898b0182a8f2ea1d318337599f31692e
+size 4504
diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/flashlight/color_selected.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/flashlight/color_selected.bin
new file mode 100644 (file)
index 0000000..6818f1a
--- /dev/null
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7bb91b520ac3cd41db992d8c5de26e13cb4589a734c77c4ee5a1691b012ed0a8
+size 9624
diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/flashlight/color_setting.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/flashlight/color_setting.bin
new file mode 100644 (file)
index 0000000..9cd2a20
--- /dev/null
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:cb8bf8a658e242e218b486d858f62d45b47132bbc6d8e40a544732e82e416587
+size 17304
diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/flashlight/flahing_setting.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/flashlight/flahing_setting.bin
new file mode 100644 (file)
index 0000000..c79c5fd
--- /dev/null
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1af3c6e4bc46d709b475d420a2f560fd3715cd2e59bab25d4dfb4c69dafec2f8
+size 17304
diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/flashlight/up_arrow.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/flashlight/up_arrow.bin
new file mode 100644 (file)
index 0000000..02ec9f9
--- /dev/null
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d9502e15d326f052a44264af777546e4c895ee2a38a107d8ee8282969655816b
+size 792