闹钟弹窗界面合并
authorluozheng <1732036298@qq.com>
Wed, 25 Jun 2025 02:48:45 +0000 (10:48 +0800)
committerluozheng <1732036298@qq.com>
Wed, 25 Jun 2025 02:48:45 +0000 (10:48 +0800)
code/sdk/application/wearable/fd230/service/msg_center/include/notify/alarm_notification.h
code/sdk/application/wearable/fd230/service/msg_center/src/msg_center_customer.cpp
code/sdk/application/wearable/fd230/service/msg_center/src/notify/alarm_notification.cpp

index 986be00..9491ccb 100644 (file)
@@ -8,58 +8,69 @@
 #ifndef ALARM_NOTIFICATION_H\r
 #define ALARM_NOTIFICATION_H\r
 \r
-static constexpr const char* ALARM_IMAGE_DELETE = "alarm_delete";\r
-static constexpr const char* ALARM_IMAGE_CLOCK = "alarm_clock";\r
-static constexpr const char* ALARM_VIEW_CLOSE = "alarm_close";\r
-static constexpr const char* ALARM_VIEW_DELAY = "alarm_delay";\r
-static constexpr const char* ALARM_VIEW_POPUP = "alarm_popup";\r
+constexpr const char *ALARM_IMAGE_STOP = "alarm_stop"; // 闹钟停止\r
+constexpr const char *ALARM_IMAGE_CLOCK = "alarm_clock";\r
+constexpr const char *ALARM_VIEW_CLOSE = "alarm_close";\r
+constexpr const char *ALARM_VIEW_DELAY = "alarm_delay";\r
+constexpr const char *ALARM_VIEW_POPUP = "alarm_popup"; // 闹钟弹窗\r
 \r
-enum class AlarmTimerType {\r
-    NOTIFY_ALARM_CLOSE = 0,\r
-    NOTIFY_ALARM_DELAY = 1,\r
-    NOTIFY_ALARM_RING = 2,\r
-    NOTIFY_ALARM_UNKNOWN = 10,\r
+enum class AlarmTimerType\r
+{\r
+    NOTIFY_ALARM_CLOSE = 0,    // 关闭闹钟\r
+    NOTIFY_ALARM_DELAY = 1,    // 延迟闹钟\r
+    NOTIFY_ALARM_RING = 2,     // 响铃闹钟\r
+    NOTIFY_ALARM_UNKNOWN = 10, // 无效闹钟类型\r
 };\r
 \r
-namespace OHOS {\r
-UIViewGroup* CreateAlarmView(void);\r
-UIViewGroup *CreateAlarmCloseView(void);\r
-UIViewGroup *CreateAlarmRingView(void);\r
-void FreeAlarmCloseView(void);\r
-void FreeAlarmRingView(void);\r
-void FreeAlarmView(void);\r
-void StartAlarmTimer(AlarmTimerType type, int32_t interval);\r
-void DisableAlarmTimer(AlarmTimerType type);\r
+namespace OHOS\r
+{\r
+    UIViewGroup *CreateAlarmView(void);\r
+    UIViewGroup *CreateAlarmCloseView(void);\r
+    UIViewGroup *CreateAlarmRingView(void);\r
+    void FreeAlarmCloseView(void);\r
+    void FreeAlarmRingView(void);\r
+    void FreeAlarmView(void);\r
+    void StartAlarmTimer(AlarmTimerType type, int32_t interval);\r
+    void DisableAlarmTimer(AlarmTimerType type);\r
 \r
-class AlarmViewEventListener : public OHOS::UIView::OnClickListener,\r
-                               public OHOS::UIView::OnLongPressListener,\r
-                               public OHOS::UIView::OnTouchListener,\r
-                               public OHOS::UIView::OnDragListener {\r
-public:\r
-    AlarmViewEventListener();\r
-    virtual ~AlarmViewEventListener();\r
-    static AlarmViewEventListener *GetInstance(void);\r
-    bool OnDrag(UIView& view, const DragEvent& event) override;\r
-    bool OnDragEnd(OHOS::UIView& view, const OHOS::DragEvent& event) override;\r
-    bool OnClick(OHOS::UIView& view, const OHOS::ClickEvent& event) override;\r
-    bool OnPress(OHOS::UIView& view, const OHOS::PressEvent& event) override\r
+    class AlarmViewEventListener : public OHOS::UIView::OnClickListener,\r
+                                   public OHOS::UIView::OnLongPressListener,\r
+                                   public OHOS::UIView::OnTouchListener,\r
+                                   public RootView::OnKeyActListener,\r
+                                   public OHOS::UIView::OnDragListener\r
     {\r
-        return true;\r
-    }\r
-    bool OnLongPress(OHOS::UIView& view, const OHOS::LongPressEvent& event) override\r
-    {\r
-        return true;\r
-    }\r
-    bool OnRelease(OHOS::UIView& view, const OHOS::ReleaseEvent& event) override\r
-    {\r
-        return true;\r
-    }\r
-\r
-    bool OnDragStart(OHOS::UIView& view, const OHOS::DragEvent& event) override\r
-    {\r
-        return true;\r
-    }\r
-};\r
+    public:\r
+        AlarmViewEventListener();\r
+        virtual ~AlarmViewEventListener();\r
+        static AlarmViewEventListener *GetInstance(void);\r
+        void PopAlarmRing();\r
+        void CancelAlarmRing();\r
+        void DelayAlarmRing();\r
+        bool OnDrag(UIView &view, const DragEvent &event) override;\r
+        bool OnDragEnd(OHOS::UIView &view, const OHOS::DragEvent &event) override;\r
+        bool OnClick(OHOS::UIView &view, const OHOS::ClickEvent &event) override;\r
+        bool OnPress(OHOS::UIView &view, const OHOS::PressEvent &event) override\r
+        {\r
+            return true;\r
+        }\r
+        bool OnLongPress(OHOS::UIView &view, const OHOS::LongPressEvent &event) override\r
+        {\r
+            return true;\r
+        }\r
+        bool OnRelease(OHOS::UIView &view, const OHOS::ReleaseEvent &event) override\r
+        {\r
+            return true;\r
+        }\r
+        bool OnDragStart(OHOS::UIView &view, const OHOS::DragEvent &event) override\r
+        {\r
+            return true;\r
+        }\r
+        bool OnKeyAct(UIView &view, const KeyEvent &event) override\r
+        {\r
+            return true;\r
+        }\r
+        static uint8_t pre_screen_status;\r
+    };\r
 }; // namespace OHOS\r
 \r
 #endif /* ALARM_NOTIFICATION_H */\r
index c4d1273..f7d30a9 100644 (file)
@@ -68,7 +68,7 @@ extern "C" {
 
 /* 订阅事件设定优先级 */
 const PriorityMapper PRI_MAPPER[] = {
-    {TOPIC_EVENT_ALARM_RING, PRIORITY_TWO},
+    {TOPIC_EVENT_ALARM_RING, PRIORITY_ONE},
     {TOPIC_EVENT_NEXTDAY_UPDATE, PRIORITY_TWO},
     {TOPIC_EVENT_HFP_INCOMMING, PRIORITY_ONE},
     {TOPIC_EVENT_HFP_FINISHED, PRIORITY_ONE},
@@ -221,14 +221,16 @@ void MsgCenterNotifyAlarmProc(const Topic topic, Request* req)
     unused(req);
     // The alarm notification is not displayed if the incoming call notification is already being processed
     if (CheckPriority(topic)) {
-        AlarmClockModel::GetInstance()->PopInterPlayMusic();
-        NotificationManager::GetInstance()->SetNotifyPriority(PRIORITY_TWO);
+        // AlarmClockModel::GetInstance()->PopInterPlayMusic();
+        // AlarmViewEventListener::GetInstance()->PopAlarmRing();
+        NotificationManager::GetInstance()->SetNotifyPriority(PRIORITY_ONE);
         NotificationManager::GetInstance()->ShowNotify(ShowAlarmNotify, static_cast<uint16_t>(topic), true);
     } else {
         // just delay the alarm
         WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "just delay the alarm");
-        AlarmClockModel::GetInstance()->AlarmGetClockNum();
-        AlarmPopUpPresenter::GetInstance()->DelayAlarmRing();
+        // AlarmClockModel::GetInstance()->AlarmGetClockNum();
+        // AlarmPopUpPresenter::GetInstance()->DelayAlarmRing();
+        AlarmViewEventListener::GetInstance()->DelayAlarmRing();
     }
 }
 
index dc289cf..20b62a7 100644 (file)
 #include "notification_manager.h"\r
 #include "wearable_log.h"\r
 #include "UiConfig.h"\r
-#include "AlarmPopUpPresenter.h"\r
+#include "alarm/include/AlarmPopUpPresenter.h"\r
 #include "components/ui_image_view.h"\r
-#include "components/ui_label.h"\r
-\r
-namespace OHOS {\r
-static constexpr const char* RING_AGAIN = "响铃将在十分钟后再次响起";\r
-constexpr int32_t NOTIFY_THREE_SECONDS = 3000;\r
-constexpr int32_t NOTIFY_ONE_SECOND = 1000;\r
-constexpr int32_t NOTIFY_THIRTY_SECONDS = 30000;\r
-constexpr int32_t NOTIFY_ONE_MINUTE = 60000;\r
-constexpr int32_t NOTOFY_NO_OPERATE_TIME = 35000;\r
-GraphicTimer* g_notifyStopHandle = nullptr; // timer of close view and alarm ring view\r
-GraphicTimer* g_alarmRing = nullptr; // timer of alarm view\r
-\r
-UIViewGroup* g_alarmView = nullptr;\r
-UIViewGroup* g_closeView = nullptr;\r
-UIViewGroup* g_ringView = nullptr;\r
-UIImageView* g_imageClose = nullptr;\r
-UIImageView* g_imageRing = nullptr;\r
-UIImageView* g_imageDelete = nullptr;\r
-UIImageView* g_imageClock = nullptr;\r
-UILabel* g_closeLable = nullptr;\r
-UILabel* g_ringLable = nullptr;\r
-UILabel* g_mainLable = nullptr;\r
-UIDigitalClock* g_dClock = nullptr;\r
-\r
-// alarm close view\r
-constexpr int16_t MAX_SET_ZERO_LEN = 0;\r
-constexpr int16_t MAX_SET_SRC_LEN = 90;\r
-constexpr int16_t MAX_IMAGE_X_LEN = 165;\r
-constexpr int16_t MAX_IMAGE_Y_LEN = 150;\r
-constexpr int16_t MAX_LABEL_X_LEN = 187;\r
-constexpr int16_t MAX_LABEL_Y_LEN = 300;\r
-constexpr int16_t MAX_LABEL_LENGTH_LEN = 350;\r
-constexpr int16_t MAX_LABEL_HEIGHT_LEN = 40;\r
-constexpr int16_t MAX_LABEL_FONT_LEN = 35;\r
-\r
-// alarm main view\r
-constexpr int16_t CONTAINER_X = 0;\r
-constexpr int16_t CONTAINER_Y = 0;\r
-constexpr int16_t LABEL_X = 185;\r
-constexpr int16_t LABEL_Y = 100;\r
-constexpr int16_t LABEL_WIDTH = 250;\r
-constexpr int16_t LABEL_HEIGHT = 45;\r
-constexpr int16_t LABEL_FONT = 40;\r
-constexpr int16_t CLOCK_FONT = 70;\r
-constexpr int16_t CLOCK_X = 140;\r
-constexpr int16_t CLOCK_Y = 170;\r
-constexpr int16_t IMAGE_DELETE_X = 85;\r
-constexpr int16_t IMAGE_DELETE_Y = 300;\r
-constexpr int16_t IMAGE_CLOCK_X = 275;\r
-constexpr int16_t IMAGE_CLOCK_Y = 300;\r
-constexpr int16_t DIGITAL_CLOCK_WIDTH = 350;\r
-constexpr int16_t DIGITAL_CLOCK_HEIGHT = 75;\r
-\r
-// alarm delay view\r
-constexpr int16_t SET_ZERO = 0;\r
-constexpr int16_t SET_SRC = 150;\r
-constexpr int16_t DELAY_IMAGE_X = 150;\r
-constexpr int16_t DELAY_IMAGE_Y = 140;\r
-constexpr int16_t DELAY_LABEL_X = 80;\r
-constexpr int16_t DELAY_LABEL_Y = 300;\r
-constexpr int16_t DELAY_LABEL_LENGTH = 350;\r
-constexpr int16_t DELAY_LABEL_HEIGHT = 35;\r
-constexpr int16_t DELAY_LABEL_FONT = 25;\r
-\r
-void StopNotifyCallback(void* data)\r
+#include "components/ui_label_ext.h"\r
+#include "components/ui_label_button_ext.h"\r
+#include "components/ui_digital_clock.h"\r
+#include "time.h"\r
+#include "cmsis_os2.h"\r
+#include "cmsis_os.h"\r
+#include <service/graphic_service.h>\r
+#include "ConfigModel.h"\r
+#include <custom_runtime.h>\r
+#include <custom_utils.h>\r
+#include <custom_save_runtime.h>\r
+#include "alarm_notification.h"\r
+#include "vibrator/service/vibrator_service.h"\r
+#include "ui_resource_string.h"\r
+#include "findwatch_notification.h"\r
+\r
+namespace OHOS\r
 {\r
-    (void)data;\r
-    NotificationManager::GetInstance()->StopNotify();\r
-}\r
+    constexpr int32_t NOTIFY_THREE_SECONDS = 3000;\r
+    constexpr int32_t NOTIFY_ONE_SECOND = 1000;\r
+    constexpr int32_t NOTIFY_THIRTY_SECONDS = 30 * 1000; // 30秒\r
+    constexpr int32_t NOTIFY_ONE_MINUTE = 60 * 1000;\r
+    static int popalarm_time = 40;\r
+    constexpr int32_t NOTOFY_NO_OPERATE_TIME = 30 * 1000; // 无操作30s超时时间\r
+    osTimerId_t g_notifyStopHandle = nullptr;             // timer of close view and alarm ring view\r
+    osTimerId_t g_alarmRing = nullptr;                    // timer of alarm view\r
+\r
+    UIViewGroup *g_alarmView = nullptr;\r
+    UIViewGroup *g_closeView = nullptr;\r
+    UIViewGroup *g_ringView = nullptr;\r
+    UIImageView *g_imageClose = nullptr;\r
+    UIImageView *g_imageRing = nullptr;\r
+    UIImageView *g_imageDelete = nullptr;\r
+    UILabelButtonExt *g_StopBtn = nullptr;\r
+    UIImageView *g_ClockPrompt = nullptr;\r
+    UIImageView *g_imageClock = nullptr;\r
+    UILabel *g_closeLable = nullptr;\r
+    UILabel *g_ringLable = nullptr;\r
+    UILabelExt *g_mainLable = nullptr;\r
+    UILabelExt *g_popTime = nullptr;\r
+    UIDigitalClock *g_dClock = nullptr;\r
+\r
+    // alarm close view\r
+    constexpr int16_t MAX_SET_ZERO_LEN = 0;\r
+    constexpr int16_t MAX_SET_SRC_LEN = 90;\r
+    constexpr int16_t MAX_IMAGE_X_LEN = 165;\r
+    constexpr int16_t MAX_IMAGE_Y_LEN = 150;\r
+    constexpr int16_t MAX_LABEL_X_LEN = 187;\r
+    constexpr int16_t MAX_LABEL_Y_LEN = 300;\r
+    constexpr int16_t MAX_LABEL_LENGTH_LEN = 350;\r
+    constexpr int16_t MAX_LABEL_HEIGHT_LEN = 40;\r
+    constexpr int16_t MAX_LABEL_FONT_LEN = 35;\r
+\r
+    // alarm main view\r
+    constexpr int16_t CONTAINER_X = 0;\r
+    constexpr int16_t CONTAINER_Y = 0;\r
+    constexpr int16_t LABEL_X = 185;\r
+    constexpr int16_t LABEL_Y = 100;\r
+    constexpr int16_t LABEL_WIDTH = 250;\r
+    constexpr int16_t LABEL_HEIGHT = 45;\r
+    constexpr int16_t LABEL_FONT = 40;\r
+    constexpr int16_t CLOCK_FONT = 70;\r
+    constexpr int16_t CLOCK_X = 140;\r
+    constexpr int16_t CLOCK_Y = 170;\r
+    constexpr int16_t IMAGE_DELETE_X = 85;\r
+    constexpr int16_t IMAGE_DELETE_Y = 300;\r
+    constexpr int16_t IMAGE_CLOCK_X = 275;\r
+    constexpr int16_t IMAGE_CLOCK_Y = 300;\r
+    constexpr int16_t DIGITAL_CLOCK_WIDTH = 350;\r
+    constexpr int16_t DIGITAL_CLOCK_HEIGHT = 75;\r
+\r
+    // alarm delay view\r
+    constexpr int16_t SET_ZERO = 0;\r
+    constexpr int16_t SET_SRC = 150;\r
+    constexpr int16_t DELAY_IMAGE_X = 150;\r
+    constexpr int16_t DELAY_IMAGE_Y = 140;\r
+    constexpr int16_t DELAY_LABEL_X = 80;\r
+    constexpr int16_t DELAY_LABEL_Y = 300;\r
+    constexpr int16_t DELAY_LABEL_LENGTH = 350;\r
+    constexpr int16_t DELAY_LABEL_HEIGHT = 35;\r
+    constexpr int16_t DELAY_LABEL_FONT = 25;\r
+\r
+    uint8_t AlarmViewEventListener::pre_screen_status = 0;//屏幕之前的状态\r
+    static OHOS::RootView::OnKeyActListener *g_onKeyActListener = nullptr;\r
+\r
+    void StopNotifyCallback()\r
+    {\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "StopNotifyCallback");\r
+        NotificationManager::GetInstance()->StopNotify();\r
+    }\r
 \r
-void NoOperateCallback(void* data)\r
-{\r
-    (void)data;\r
-    NotificationManager::GetInstance()->StopNotify();\r
-}\r
+    static void NoOperateCallbackProc(int data)\r
+    {\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "NoOperateCallback");\r
+        popalarm_time--;\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "NoOperateCallback popalarm_time = %d",popalarm_time);\r
+        if (popalarm_time <= 0)\r
+        {\r
+            NotificationManager::GetInstance()->StopNotify();\r
+        }\r
+        else\r
+        {\r
+            // if (true == ConfigModel::GetInstance()->GetDnotdisturb() || (uapi_sleep_mode_flag_get()))\r
+            // {\r
+            //     return;\r
+            // }\r
+            if (g_alarmView)\r
+            {\r
+                ui_api_vibrate_once_func();\r
+            }\r
+        }\r
+    }\r
 \r
-void StartAlarmTimer(AlarmTimerType type, int32_t interval)\r
-{\r
-    uint32_t tick;\r
-    bool retTimer;\r
-    if (type >= AlarmTimerType::NOTIFY_ALARM_UNKNOWN) {\r
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "StartAlarmTimer type:%d invalid!!", type);\r
-        return;\r
+    static void NoOperateCallback(int data)\r
+    {\r
+        GraphicService::GetInstance()->PostGraphicEvent(std::bind(NoOperateCallbackProc, data));\r
     }\r
-    switch (type) {\r
+\r
+    /*\r
+     * @brief 启动特定类型的闹钟定时器\r
+     * @param 1 闹钟定时器的类型\r
+     * @param 2 时间间隔,以毫秒为单位\r
+     */\r
+    void StartAlarmTimer(AlarmTimerType type, int32_t interval)\r
+    {\r
+        uint32_t tick;\r
+        osStatus_t retTimer;\r
+        // 1.检查传入的闹钟类型是否有效\r
+        if (type >= AlarmTimerType::NOTIFY_ALARM_UNKNOWN)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "StartAlarmTimer type:%d invalid!!", type);\r
+            return;\r
+        }\r
+        switch (type)\r
+        {\r
         case AlarmTimerType::NOTIFY_ALARM_CLOSE:\r
         case AlarmTimerType::NOTIFY_ALARM_DELAY:\r
-            tick = GetOSTick(interval);\r
-            g_notifyStopHandle = new GraphicTimer(tick, StopNotifyCallback, nullptr, true);\r
-            retTimer = g_notifyStopHandle->Start();\r
-            if (!retTimer && g_notifyStopHandle != nullptr) {\r
-                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,\r
-                    "StartAlarmTimer osTimerStart failed, type= %d!!", type);\r
-                delete g_notifyStopHandle;\r
-                g_notifyStopHandle = nullptr;\r
-                return;\r
+            if (g_notifyStopHandle == nullptr)\r
+            {\r
+                g_notifyStopHandle = osTimerNew((osTimerFunc_t)StopNotifyCallback, osTimerPeriodic, nullptr, nullptr);\r
+                tick = osMs2Tick(interval);\r
+                retTimer = osTimerStart(g_notifyStopHandle, tick);\r
+                if (retTimer != osOK && g_notifyStopHandle != nullptr)\r
+                {\r
+                    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "StartAlarmTimer osTimerStart failed, type= %d ret = %lx!!", type, retTimer);\r
+                    osTimerDelete(g_notifyStopHandle);\r
+                    g_notifyStopHandle = nullptr;\r
+                    return;\r
+                }\r
             }\r
             break;\r
         case AlarmTimerType::NOTIFY_ALARM_RING:\r
-            tick = GetOSTick(interval);\r
-            g_alarmRing = new GraphicTimer(tick, NoOperateCallback, nullptr, true);\r
-            retTimer = g_alarmRing->Start();\r
-            if (!retTimer && g_alarmRing != nullptr) {\r
-                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,\r
-                    "StartAlarmTimer osTimerStart failed, type= %d!!", type);\r
-                delete g_alarmRing;\r
-                g_alarmRing = nullptr;\r
-                return;\r
+            if (g_alarmRing == nullptr)\r
+            {\r
+                g_alarmRing = osTimerNew((osTimerFunc_t)NoOperateCallback, osTimerPeriodic, nullptr, nullptr);\r
+                tick = osMs2Tick(interval);\r
+                retTimer = osTimerStart(g_alarmRing, tick);\r
+                if (retTimer != osOK && g_alarmRing != nullptr)\r
+                {\r
+                    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "StartAlarmTimer osTimerStart failed, type= %d ret = %lx!!", type, retTimer);\r
+                    osTimerDelete(g_alarmRing);\r
+                    g_alarmRing = nullptr;\r
+                    return;\r
+                }\r
             }\r
             break;\r
         default:\r
             break;\r
+        }\r
     }\r
-}\r
 \r
-void DisableAlarmTimer(AlarmTimerType type)\r
-{\r
-    if (type >= AlarmTimerType::NOTIFY_ALARM_UNKNOWN) {\r
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "DisableAlarmTimer type:%d invalid!!", type);\r
-        return;\r
-    }\r
-    switch (type) {\r
+    /*\r
+     * @brief 取消特定类型的闹钟定时器\r
+     * @param 闹钟定时器的类型\r
+     */\r
+    void DisableAlarmTimer(AlarmTimerType type)\r
+    {\r
+        if (type >= AlarmTimerType::NOTIFY_ALARM_UNKNOWN)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "DisableAlarmTimer type:%d invalid!!", type);\r
+            return;\r
+        }\r
+        osStatus_t ret;\r
+        switch (type)\r
+        {\r
         case AlarmTimerType::NOTIFY_ALARM_CLOSE:\r
         case AlarmTimerType::NOTIFY_ALARM_DELAY:\r
-            if (g_notifyStopHandle != nullptr) {\r
-                delete g_notifyStopHandle;\r
+            if (g_notifyStopHandle != nullptr)\r
+            {\r
+                osTimerStop(g_notifyStopHandle);\r
+                ret = osTimerDelete(g_notifyStopHandle);\r
+                if (ret != osOK)\r
+                {\r
+                    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "DisableAlarmTimer failed, type= %d ret = %lx!", type, ret);\r
+                    return;\r
+                }\r
                 g_notifyStopHandle = nullptr;\r
             }\r
             break;\r
         case AlarmTimerType::NOTIFY_ALARM_RING:\r
-            if (g_alarmRing != nullptr) {\r
-                delete g_alarmRing;\r
+            if (g_alarmRing != nullptr)\r
+            {\r
+                osTimerStop(g_alarmRing);\r
+                ret = osTimerDelete(g_alarmRing);\r
+                if (ret != osOK)\r
+                {\r
+                    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "DisableAlarmTimer failed, type= %d ret = %lx!", type, ret);\r
+                    return;\r
+                }\r
                 g_alarmRing = nullptr;\r
+                popalarm_time = 40;\r
             }\r
             break;\r
         default:\r
             break;\r
+        }\r
     }\r
-}\r
 \r
-UIViewGroup *CreateAlarmCloseView()\r
-{\r
-    g_closeView = new UIViewGroup();\r
-    if (g_closeView == nullptr) {\r
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "CreateAlarmCloseView g_closeView null!");\r
-        return nullptr;\r
-    }\r
-    g_closeView->SetPosition(MAX_SET_ZERO_LEN, MAX_SET_ZERO_LEN);\r
-    g_closeView->SetWidth(Screen::GetInstance().GetWidth());\r
-    g_closeView->SetHeight(Screen::GetInstance().GetHeight());\r
-    g_imageClose = new UIImageView();\r
-    if (g_imageClose == nullptr) {\r
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "CreateAlarmCloseView g_imageClose null!");\r
-        delete g_closeView;\r
-        g_closeView = nullptr;\r
-        return nullptr;\r
+    UIViewGroup *CreateAlarmCloseView()\r
+    {\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "CreateAlarmCloseView");\r
+        g_closeView = new UIViewGroup();\r
+        if (g_closeView == nullptr)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "CreateAlarmCloseView g_closeView null!");\r
+            return nullptr;\r
+        }\r
+        g_closeView->SetPosition(MAX_SET_ZERO_LEN, MAX_SET_ZERO_LEN);\r
+        g_closeView->SetWidth(Screen::GetInstance().GetWidth());\r
+        g_closeView->SetHeight(Screen::GetInstance().GetHeight());\r
+        g_imageClose = new UIImageView();\r
+        if (g_imageClose == nullptr)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "CreateAlarmCloseView g_imageClose null!");\r
+            delete g_closeView;\r
+            g_closeView = nullptr;\r
+            return nullptr;\r
+        }\r
+        g_imageClose->SetPosition(MAX_IMAGE_X_LEN, MAX_IMAGE_Y_LEN);\r
+        g_imageClose->SetWidth(MAX_SET_SRC_LEN);\r
+        g_imageClose->SetHeight(MAX_SET_SRC_LEN);\r
+        g_imageClose->SetSrc(ALARM_CLOCK_CLOSE_ADD_PATH);\r
+        g_imageClose->SetTouchable(true);\r
+        g_closeView->Add(g_imageClose);\r
+\r
+        g_closeLable = new UILabel();\r
+        if (g_closeLable == nullptr)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "CreateAlarmCloseView g_closeLable null!");\r
+            delete g_closeView;\r
+            g_closeView = nullptr;\r
+            delete g_imageClose;\r
+            g_imageClose = nullptr;\r
+            return nullptr;\r
+        }\r
+        g_closeLable->SetPosition(MAX_LABEL_X_LEN, MAX_LABEL_Y_LEN, MAX_LABEL_LENGTH_LEN, MAX_LABEL_HEIGHT_LEN);\r
+        g_closeLable->SetFont(DEFAULT_VECTOR_FONT_FILENAME, MAX_LABEL_FONT_LEN);\r
+        g_closeLable->SetText("CLOSE");\r
+        g_closeView->Add(g_closeLable);\r
+        g_closeView->SetViewId(ALARM_VIEW_CLOSE);\r
+        UIView::OnDragListener *listener = static_cast<UIView::OnDragListener *>(AlarmViewEventListener::GetInstance());\r
+        g_closeView->SetOnDragListener(listener);\r
+        g_closeView->SetDraggable(true);\r
+        g_closeView->SetTouchable(true);\r
+        NotificationManager::GetInstance()->RegisterNotifyCleanupFunction(FreeAlarmCloseView);\r
+        return g_closeView;\r
     }\r
-    g_imageClose->SetPosition(MAX_IMAGE_X_LEN, MAX_IMAGE_Y_LEN);\r
-    g_imageClose->SetWidth(MAX_SET_SRC_LEN);\r
-    g_imageClose->SetHeight(MAX_SET_SRC_LEN);\r
-    g_imageClose->SetSrc(ALARM_CLOCK_CLOSE_ADD_PATH);\r
-    g_imageClose->SetTouchable(true);\r
-    g_closeView->Add(g_imageClose);\r
 \r
-    g_closeLable = new UILabel();\r
-    if (g_closeLable == nullptr) {\r
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "CreateAlarmCloseView g_closeLable null!");\r
-        delete g_closeView;\r
-        g_closeView = nullptr;\r
-        delete g_imageClose;\r
-        g_imageClose = nullptr;\r
-        return nullptr;\r
+    void FreeAlarmCloseView(void)\r
+    {\r
+        if (g_closeView != nullptr)\r
+        {\r
+            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "FreeAlarmCloseView");\r
+            DisableAlarmTimer(AlarmTimerType::NOTIFY_ALARM_CLOSE);\r
+            g_closeView->RemoveAll();\r
+            delete g_imageClose;\r
+            g_imageClose = nullptr;\r
+            delete g_closeLable;\r
+            g_closeLable = nullptr;\r
+            RootView::GetInstance()->Remove(g_closeView);\r
+            delete g_closeView;\r
+            g_closeView = nullptr;\r
+        }\r
     }\r
-    g_closeLable->SetPosition(MAX_LABEL_X_LEN, MAX_LABEL_Y_LEN, MAX_LABEL_LENGTH_LEN, MAX_LABEL_HEIGHT_LEN);\r
-    g_closeLable->SetFont(DEFAULT_VECTOR_FONT_FILENAME, MAX_LABEL_FONT_LEN);\r
-    g_closeLable->SetText("CLOSE");\r
-    g_closeView->Add(g_closeLable);\r
-    g_closeView->SetViewId(ALARM_VIEW_CLOSE);\r
-    UIView::OnDragListener *listener = static_cast<UIView::OnDragListener*>(AlarmViewEventListener::GetInstance());\r
-    g_closeView->SetOnDragListener(listener);\r
-    g_closeView->SetDraggable(true);\r
-    g_closeView->SetTouchable(true);\r
-    NotificationManager::GetInstance()->RegisterNotifyCleanupFunction(FreeAlarmCloseView);\r
-    return g_closeView;\r
-}\r
 \r
-void FreeAlarmCloseView(void)\r
-{\r
-    if (g_closeView != nullptr) {\r
-        DisableAlarmTimer(AlarmTimerType::NOTIFY_ALARM_CLOSE);\r
-        g_closeView->RemoveAll();\r
-        delete g_imageClose;\r
-        g_imageClose = nullptr;\r
-        delete g_closeLable;\r
-        g_closeLable = nullptr;\r
-        RootView::GetInstance()->Remove(g_closeView);\r
-        delete g_closeView;\r
-        g_closeView = nullptr;\r
+    /*创建一个响铃闹钟视图*/\r
+    UIViewGroup *CreateAlarmRingView()\r
+    {\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "CreateAlarmRingView");\r
+        if (g_ringView == nullptr)\r
+        {\r
+            g_ringView = new UIViewGroup();\r
+            if (g_ringView == nullptr)\r
+            {\r
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "CreateAlarmRingView g_ringView null!");\r
+                return nullptr;\r
+            }\r
+            g_ringView->SetPosition(0, 0, Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight());\r
+            g_ringView->SetViewId(ALARM_VIEW_DELAY);\r
+            UIView::OnDragListener *listener = static_cast<UIView::OnDragListener *>(AlarmViewEventListener::GetInstance());\r
+            if (listener == nullptr)\r
+            {\r
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AlarmViewEventListener::GetInstance fail!!");\r
+                return nullptr;\r
+            }\r
+            g_ringView->SetOnDragListener(listener);\r
+            g_ringView->SetDraggable(true);\r
+            g_ringView->SetTouchable(true);\r
+            /* -------------------------------------------------------------------------- */\r
+            if (g_imageRing == nullptr)\r
+            {\r
+                g_imageRing = new UIImageView();\r
+                if (g_imageRing == nullptr)\r
+                {\r
+                    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "CreateAlarmRingView g_imageRing null!");\r
+                    return nullptr;\r
+                }\r
+            }\r
+            g_imageRing->SetPosition(DELAY_IMAGE_X, DELAY_IMAGE_Y);\r
+            g_imageRing->SetWidth(SET_SRC);\r
+            g_imageRing->SetHeight(SET_SRC);\r
+            g_imageRing->SetSrc(ALARM_CLOCK_POP_ADD_PATH);\r
+            /* -------------------------------------------------------------------------- */\r
+            if (g_ringLable == nullptr)\r
+            {\r
+                g_ringLable = new UILabel();\r
+                if (g_ringLable == nullptr)\r
+                {\r
+                    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AlarmRingView::g_ringLable null!");\r
+                    return nullptr;\r
+                }\r
+            }\r
+            g_ringLable->SetPosition(DELAY_LABEL_X, DELAY_LABEL_Y, DELAY_LABEL_LENGTH, DELAY_LABEL_HEIGHT);\r
+            g_ringLable->SetFont(DEFAULT_VECTOR_FONT_FILENAME, DELAY_LABEL_FONT);\r
+            g_ringLable->SetText("响铃将在十分钟后再次响起");\r
+            /* ----------------------------------- Add ---------------------------------- */\r
+            g_ringView->Add(g_imageRing);\r
+            g_ringView->Add(g_ringLable);\r
+        }\r
+        NotificationManager::GetInstance()->RegisterNotifyCleanupFunction(FreeAlarmRingView);\r
+        return g_ringView;\r
     }\r
-}\r
 \r
-UIViewGroup *CreateAlarmRingView()\r
-{\r
-    g_ringView = new UIViewGroup();\r
-    if (g_ringView == nullptr) {\r
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "CreateAlarmRingView g_ringView null!");\r
-        return nullptr;\r
-    }\r
-    g_ringView->SetPosition(SET_ZERO, SET_ZERO);\r
-    g_ringView->SetWidth(Screen::GetInstance().GetWidth());\r
-    g_ringView->SetHeight(Screen::GetInstance().GetHeight());\r
-    g_imageRing = new UIImageView();\r
-    if (g_imageRing == nullptr) {\r
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "CreateAlarmRingView g_imageRing null!");\r
-        delete g_ringView;\r
-        g_ringView = nullptr;\r
-        return nullptr;\r
-    }\r
-    g_imageRing->SetPosition(DELAY_IMAGE_X, DELAY_IMAGE_Y);\r
-    g_imageRing->SetWidth(SET_SRC);\r
-    g_imageRing->SetHeight(SET_SRC);\r
-    g_imageRing->SetSrc(ALARM_CLOCK_POP_ADD_PATH);\r
-    g_ringView->Add(g_imageRing);\r
-    g_ringLable = new UILabel();\r
-    if (g_ringLable == nullptr) {\r
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AlarmRingView::g_ringLable null!");\r
-        delete g_ringView;\r
-        g_ringView = nullptr;\r
-        delete g_imageRing;\r
-        return nullptr;\r
+    // 析构一个响铃闹钟视图\r
+    void FreeAlarmRingView(void)\r
+    {\r
+        if (g_ringView != nullptr)\r
+        {\r
+            DisableAlarmTimer(AlarmTimerType::NOTIFY_ALARM_DELAY);\r
+            g_ringView->RemoveAll();\r
+            if (g_imageRing)\r
+            {\r
+                delete g_imageRing;\r
+                g_imageRing = nullptr;\r
+            }\r
+            if (g_ringLable)\r
+            {\r
+                delete g_ringLable;\r
+                g_ringLable = nullptr;\r
+            }\r
+            RootView::GetInstance()->Remove(g_ringView);\r
+            delete g_ringView;\r
+            g_ringView = nullptr;\r
+            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "FreeAlarmRingView over!!");\r
+        }\r
     }\r
-    g_ringLable->SetPosition(DELAY_LABEL_X, DELAY_LABEL_Y, DELAY_LABEL_LENGTH, DELAY_LABEL_HEIGHT);\r
-    g_ringLable->SetFont(DEFAULT_VECTOR_FONT_FILENAME, DELAY_LABEL_FONT);\r
-    g_ringLable->SetText(RING_AGAIN);\r
-    g_ringView->Add(g_ringLable);\r
-    g_ringView->SetViewId(ALARM_VIEW_DELAY);\r
-    UIView::OnDragListener *listener = static_cast<UIView::OnDragListener*>(AlarmViewEventListener::GetInstance());\r
-    g_ringView->SetOnDragListener(listener);\r
-    g_ringView->SetDraggable(true);\r
-    g_ringView->SetTouchable(true);\r
-    NotificationManager::GetInstance()->RegisterNotifyCleanupFunction(FreeAlarmRingView);\r
-    return g_ringView;\r
-}\r
 \r
-void FreeAlarmRingView(void)\r
-{\r
-    if (g_ringView != nullptr) {\r
-        DisableAlarmTimer(AlarmTimerType::NOTIFY_ALARM_DELAY);\r
-        g_ringView->RemoveAll();\r
-        delete g_imageRing;\r
-        g_imageRing = nullptr;\r
-        delete g_ringLable;\r
-        g_ringLable = nullptr;\r
-        RootView::GetInstance()->Remove(g_ringView);\r
-        delete g_ringView;\r
-        g_ringView = nullptr;\r
+    // 创建一个闹钟弹窗视图\r
+    UIViewGroup *CreateAlarmView(void)\r
+    {\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "CreateAlarmView");\r
+        AlarmClockModel::GetInstance()->AlarmGetClockNum();\r
+        if (g_alarmView == nullptr)\r
+        {\r
+            g_alarmView = new UIViewGroup();\r
+            if (g_alarmView == nullptr)\r
+            {\r
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "CreateAlarmView g_alarmView null!");\r
+                return nullptr;\r
+            }\r
+            g_alarmView->SetPosition(CONTAINER_X, CONTAINER_Y, Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight());\r
+            g_alarmView->SetViewId(ALARM_VIEW_POPUP);\r
+            g_alarmView->SetDraggable(true);\r
+            g_alarmView->SetTouchable(true);\r
+            UIView::OnDragListener *listener = static_cast<UIView::OnDragListener *>(AlarmViewEventListener::GetInstance());\r
+            if (nullptr == listener)\r
+            {\r
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AlarmViewEventListener::GetInstance fail!!");\r
+                return nullptr;\r
+            }\r
+            g_alarmView->SetOnDragListener(listener);\r
+            /* -------------------------------------------------------------------------- */\r
+            if (g_mainLable == nullptr)\r
+            {\r
+                g_mainLable = new UILabelExt();\r
+                if (g_mainLable == nullptr)\r
+                {\r
+                    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "CreateAlarmView g_mainLable is nullptr");\r
+                    return nullptr;\r
+                }\r
+            }\r
+            g_mainLable->SetPosition(83, 50, 300, 35);\r
+            g_mainLable->SetTextId(STR_ALARM); // 闹钟\r
+            g_mainLable->SetStyle(STYLE_TEXT_FONT, 30);\r
+            g_mainLable->SetStyle(STYLE_LINE_HEIGHT, 35);\r
+            g_mainLable->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);\r
+            g_mainLable->SetLineBreakMode(UILabel::LINE_BREAK_OSCILLATION);\r
+            g_mainLable->SetRollSpeed(23);\r
+            g_mainLable->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
+            g_alarmView->Add(g_mainLable);\r
+            /* -------------------------------------------------------------------------- */\r
+            if (g_ClockPrompt == nullptr)\r
+            {\r
+                g_ClockPrompt = new UIImageView();\r
+                if (g_ClockPrompt == nullptr)\r
+                {\r
+                    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "CreateAlarmView g_ClockPrompt is nullptr");\r
+                    return nullptr;\r
+                }\r
+            }\r
+            g_ClockPrompt->SetPosition(184, 129, 100, 100);\r
+            g_ClockPrompt->SetSrc("/user/res/Alarm/alarm_prompt.bin");\r
+            g_alarmView->Add(g_ClockPrompt);\r
+            /* -------------------------------------------------------------------------- */\r
+            struct tm localTime;\r
+            int16 thisHour;\r
+            int16 thisMin;\r
+            if (g_dClock == nullptr)\r
+            {\r
+                g_dClock = new UIDigitalClock();\r
+                if (g_dClock == nullptr)\r
+                {\r
+                    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "CreateAlarmViewLabel g_dClock is nullptr");\r
+                    return nullptr;\r
+                }\r
+            }\r
+            g_dClock->SetPosition((g_alarmView->GetWidth() - 200) / 2, 236, 200, 70);\r
+            g_dClock->SetStyle(STYLE_TEXT_FONT, 60);\r
+            g_dClock->SetStyle(STYLE_LINE_HEIGHT, 69);\r
+            g_dClock->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 60);\r
+            time_t seconds = time(nullptr);\r
+            if (localtime_r(&seconds, &localTime) == nullptr)\r
+            {\r
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "CreateAlarmViewLabel get localtime error!");\r
+                return nullptr;\r
+            }\r
+            AlarmClockModel::GetInstance()->GetPopTimeData(&thisHour, &thisMin);\r
+            g_dClock->SetDisplayMode(UIDigitalClock::DISPLAY_24_HOUR_NO_SECONDS);\r
+            g_dClock->SetTime24Hour(thisHour, thisMin, 0);\r
+            g_dClock->SetVisible(false);\r
+            g_alarmView->Add(g_dClock);\r
+            /* -------------------------------- g_popTime ------------------------------- */\r
+            if (g_popTime == nullptr)\r
+            {\r
+                g_popTime = new UILabelExt();\r
+                if (g_popTime == nullptr)\r
+                {\r
+                    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "CreateAlarmView g_popTime is nullptr");\r
+                    return nullptr;\r
+                }\r
+            }\r
+            g_popTime->SetPosition(83, 236, 200, 70);\r
+            // std::string poptime = std::to_string(thisHour) + ":" + std::to_string(thisMin);\r
+            char poptime[12] = {0};\r
+            sprintf(poptime, "%02d:%02d", thisHour, thisMin);\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "poptime = %s",poptime);\r
+            g_popTime->SetText(poptime);\r
+            g_popTime->SetStyle(STYLE_TEXT_FONT, 60);\r
+            g_popTime->SetStyle(STYLE_LINE_HEIGHT, 70);\r
+            g_popTime->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 60);\r
+            g_popTime->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);\r
+            g_popTime->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
+            g_alarmView->Add(g_popTime);\r
+            g_popTime->SetPosition((g_alarmView->GetWidth() - g_popTime->GetTextWidth()) / 2, 236);\r
+            /* -------------------------------------------------------------------------- */\r
+            if (g_StopBtn == nullptr)\r
+            {\r
+                g_StopBtn = new UILabelButtonExt();\r
+                if (g_StopBtn == nullptr)\r
+                {\r
+                    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "CreateAlarmView g_StopBtn is nullptr");\r
+                    return nullptr;\r
+                }\r
+            }\r
+            g_StopBtn->SetPosition(0, 366, 466, 100);\r
+            g_StopBtn->SetViewId(ALARM_IMAGE_STOP);\r
+            g_StopBtn->SetTextId(STR_STOP); // 停止\r
+            g_StopBtn->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);\r
+            g_StopBtn->SetTextColor(Color::GetColorFromRGBA(0xff, 0x5a, 0x36, 0xff));\r
+            g_StopBtn->SetImageSrc(PNG_BUTTON_466x100_IMAGE, PNG_BUTTON_466x100_IMAGE);\r
+            g_StopBtn->SetStyleForState(STYLE_BACKGROUND_COLOR, 0x00, UIButton::PRESSED);\r
+            g_StopBtn->SetTouchable(true);\r
+            UIView::OnClickListener *closeListener = static_cast<UIView::OnClickListener *>(AlarmViewEventListener::GetInstance());\r
+            if (nullptr == closeListener)\r
+            {\r
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AlarmViewEventListener::GetInstance fail!!");\r
+                return nullptr;\r
+            }\r
+            g_StopBtn->SetOnClickListener(closeListener);\r
+            g_alarmView->Add(g_StopBtn);\r
+            /* -------------------------------------------------------------------------- */\r
+            StartAlarmTimer(AlarmTimerType::NOTIFY_ALARM_RING, NOTIFY_ONE_SECOND);\r
+\r
+            AlarmViewEventListener::GetInstance()->PopAlarmRing(); //闹钟响铃\r
+            g_onKeyActListener = RootView::GetInstance()->GetOnKeyActListener();\r
+            RootView::GetInstance()->SetOnKeyActListener(AlarmViewEventListener::GetInstance());\r
+\r
+            AlarmViewEventListener::pre_screen_status = uapi_dev_runtime_get_screen_always_on_status();//获取闹钟弹窗之前是否是长亮屏状态\r
+            if(!AlarmViewEventListener::pre_screen_status)\r
+            {\r
+                ScreenAlwaysOnCtr(OPEN_SCREEN_ALWAYS_ON);\r
+            }\r
+        }\r
+        NotificationManager::GetInstance()->RegisterNotifyCleanupFunction(FreeAlarmView);\r
+        return g_alarmView;\r
     }\r
-}\r
-\r
-static bool CreateAlarmViewImage(void)\r
-{\r
-    g_imageDelete = new UIImageView();\r
-    if (g_imageDelete == nullptr) {\r
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "showAlarmNotify g_imageDelete null!");\r
-        return false;\r
+    // 释放闹钟视图\r
+    void FreeAlarmView(void)\r
+    {\r
+        if (g_alarmView != nullptr)\r
+        {\r
+            AlarmViewEventListener::GetInstance()->CancelAlarmRing();//取消闹钟响铃\r
+            g_alarmView->RemoveAll();\r
+            if (g_mainLable != nullptr)\r
+            {\r
+                delete g_mainLable;\r
+                g_mainLable = nullptr;\r
+            }\r
+            if (g_dClock != nullptr)\r
+            {\r
+                delete g_dClock;\r
+                g_dClock = nullptr;\r
+            }\r
+            if (g_popTime != nullptr)\r
+            {\r
+                delete g_popTime;\r
+                g_popTime = nullptr;\r
+            }\r
+            if (g_ClockPrompt != nullptr)\r
+            {\r
+                delete g_ClockPrompt;\r
+                g_ClockPrompt = nullptr;\r
+            }\r
+            if (g_StopBtn != nullptr)\r
+            {\r
+                delete g_StopBtn;\r
+                g_StopBtn = nullptr;\r
+            }\r
+            RootView::GetInstance()->SetOnKeyActListener(g_onKeyActListener);\r
+            RootView::GetInstance()->Remove(g_alarmView);\r
+            delete g_alarmView; \r
+            g_alarmView = nullptr;\r
+            if(!AlarmViewEventListener::pre_screen_status) //如果闹钟弹窗之前不是长亮屏状态,就取消闹钟弹窗设置的常亮屏\r
+            {\r
+                ScreenAlwaysOnCtr(CANCEL_SCREEN_ALWAYS_ON);\r
+            }\r
+            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "FreeAlarmView over!!");\r
+        }\r
     }\r
-    g_imageDelete->SetPosition(IMAGE_DELETE_X, IMAGE_DELETE_Y);\r
-    g_imageDelete->SetWidth(MAX_SET_SRC_LEN);\r
-    g_imageDelete->SetHeight(MAX_SET_SRC_LEN);\r
-    g_imageDelete->SetViewId(ALARM_IMAGE_DELETE);\r
-    g_imageDelete->SetSrc(ALARM_DELETE_ADD_PATH);\r
-    g_imageDelete->SetTouchable(true);\r
-    UIView::OnClickListener *closeListener = static_cast<UIView::OnClickListener *>\\r
-        (AlarmViewEventListener::GetInstance());\r
-    g_imageDelete->SetOnClickListener(closeListener);\r
 \r
-    g_imageClock = new UIImageView();\r
-    if (g_imageClock == nullptr) {\r
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "showAlarmNotify g_imageClock null!");\r
-        delete g_imageDelete;\r
-        return false;\r
+    AlarmViewEventListener::AlarmViewEventListener()\r
+    {\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AlarmViewEventListener :%p", this);\r
     }\r
-    g_imageClock->SetPosition(IMAGE_CLOCK_X, IMAGE_CLOCK_Y);\r
-    g_imageClock->SetWidth(MAX_SET_SRC_LEN);\r
-    g_imageClock->SetHeight(MAX_SET_SRC_LEN);\r
-    g_imageClock->SetViewId(ALARM_IMAGE_CLOCK);\r
-    g_imageClock->SetSrc(ALARM_CLOCK_ADD_PATH);\r
-    g_imageClock->SetTouchable(true);\r
-    g_imageClock->SetTouchable(true);\r
-    UIView::OnClickListener *clockListener = static_cast<UIView::OnClickListener *>\\r
-        (OHOS::AlarmViewEventListener::GetInstance());\r
-    g_imageClock->SetOnClickListener(clockListener);\r
-    return true;\r
-}\r
-\r
-static void FreeAlarmViewImage(void)\r
-{\r
-    delete g_imageDelete;\r
-    g_imageDelete = nullptr;\r
-    delete g_imageClock;\r
-    g_imageClock = nullptr;\r
-}\r
-\r
-static bool CreateAlarmViewLabel(void)\r
-{\r
-    struct tm localTime;\r
-    int16 thisHour;\r
-    int16 thisMin;\r
 \r
-    g_mainLable = new UILabel();\r
-    if (g_mainLable == nullptr) {\r
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "CreateAlarmViewLabel g_mainLable is nullptr");\r
-        return false;\r
+    AlarmViewEventListener::~AlarmViewEventListener()\r
+    {\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "~AlarmViewEventListener");\r
     }\r
-    g_mainLable->SetPosition(LABEL_X, LABEL_Y, LABEL_WIDTH, LABEL_HEIGHT);\r
-    g_mainLable->SetText("闹钟");\r
-    g_mainLable->SetFont(DEFAULT_VECTOR_FONT_FILENAME, LABEL_FONT);\r
 \r
-    g_dClock = new UIDigitalClock();\r
-    if (g_dClock == nullptr) {\r
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "CreateAlarmViewLabel g_dClock is nullptr");\r
-        delete g_mainLable;\r
-        return false;\r
+    AlarmViewEventListener *AlarmViewEventListener::GetInstance(void)\r
+    {\r
+        static AlarmViewEventListener alarmViewEventListener;\r
+        return &alarmViewEventListener;\r
     }\r
-    g_dClock->SetPosition(CLOCK_X, CLOCK_Y);\r
-    g_dClock->Resize(DIGITAL_CLOCK_WIDTH, DIGITAL_CLOCK_HEIGHT);\r
-    g_dClock->SetFont(DEFAULT_VECTOR_FONT_FILENAME, CLOCK_FONT);\r
-    time_t seconds = time(nullptr);\r
-    if (localtime_r(&seconds, &localTime) == nullptr) {\r
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "CreateAlarmViewLabel get localtime error!");\r
-        delete g_mainLable;\r
-        delete g_dClock;\r
-        return false;\r
-    }\r
-    AlarmClockModel::GetInstance()->GetPopTimeData(&thisHour, &thisMin);\r
-    g_dClock->SetDisplayMode(UIDigitalClock::DISPLAY_24_HOUR_NO_SECONDS);\r
-    g_dClock->SetTime24Hour(thisHour, thisMin, 0);\r
-    return true;\r
-}\r
-\r
-static void FreeAlarmViewLabel(void)\r
-{\r
-    delete g_mainLable;\r
-    g_mainLable = nullptr;\r
-    delete g_dClock;\r
-    g_dClock = nullptr;\r
-}\r
 \r
-UIViewGroup* CreateAlarmView(void)\r
-{\r
-    AlarmClockModel::GetInstance()->AlarmGetClockNum();\r
-    g_alarmView = new UIViewGroup();\r
-    if (g_alarmView == nullptr) {\r
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "CreateAlarmView g_alarmView null!");\r
-        return nullptr;\r
+    bool AlarmViewEventListener::OnDrag(UIView &view, const DragEvent &event)\r
+    {\r
+        return true;\r
     }\r
-    g_alarmView->SetPosition(CONTAINER_X, CONTAINER_Y,\r
-                             Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight());\r
-    g_alarmView->SetViewId(ALARM_VIEW_POPUP);\r
 \r
-    if (!CreateAlarmViewLabel()) {\r
-        delete g_alarmView;\r
-        g_alarmView = nullptr;\r
-        return nullptr;\r
+    bool AlarmViewEventListener::OnDragEnd(UIView &view, const DragEvent &event)\r
+    {\r
+        if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT)\r
+        {\r
+            if (strcmp(view.GetViewId(), ALARM_VIEW_POPUP) == 0)\r
+            {   \r
+                NotificationManager::GetInstance()->StopNotify();\r
+            }\r
+        }\r
+        return true;\r
     }\r
 \r
-    if (!CreateAlarmViewImage()) {\r
-        delete g_alarmView;\r
-        g_alarmView = nullptr;\r
-        FreeAlarmViewLabel();\r
-        return nullptr;\r
+    bool AlarmViewEventListener::OnClick(UIView &view, const ClickEvent &event)\r
+    {\r
+        UNUSED(event);\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AlamNotify ClickListener %s", view.GetViewId());\r
+        if (strcmp(view.GetViewId(), ALARM_IMAGE_STOP) == 0) // 点击停止闹钟响铃\r
+        {\r
+            NotificationManager::GetInstance()->StopNotify();\r
+        }\r
+        return true;\r
     }\r
-    g_alarmView->Add(g_mainLable);\r
-    g_alarmView->Add(g_dClock);\r
-    g_alarmView->Add(g_imageDelete);\r
-    g_alarmView->Add(g_imageClock);\r
 \r
-    g_alarmView->SetDraggable(true);\r
-    g_alarmView->SetTouchable(true);\r
-    UIView::OnDragListener *listener = static_cast<UIView::OnDragListener*>(AlarmViewEventListener::GetInstance());\r
-    g_alarmView->SetOnDragListener(listener);\r
-    StartAlarmTimer(AlarmTimerType::NOTIFY_ALARM_RING, NOTOFY_NO_OPERATE_TIME);\r
-    NotificationManager::GetInstance()->RegisterNotifyCleanupFunction(FreeAlarmView);\r
-    return g_alarmView;\r
-}\r
-void FreeAlarmView(void)\r
-{\r
-    if (g_alarmView != nullptr) {\r
-        DisableAlarmTimer(AlarmTimerType::NOTIFY_ALARM_RING);\r
-        g_alarmView->RemoveAll();\r
-        FreeAlarmViewLabel();\r
-        FreeAlarmViewImage();\r
-        RootView::GetInstance()->Remove(g_alarmView);\r
-        delete g_alarmView;\r
-        g_alarmView = nullptr;\r
+    void AlarmViewEventListener::PopAlarmRing()\r
+    {\r
+#ifdef SINGLE_USER_PARTITION\r
+        FindWatchViewEventListener::GetInstance().PopInterPlayMusic("/user/music/ring/alarm.mp3");//播放铃声\r
+#else\r
+        FindWatchViewEventListener::GetInstance().PopInterPlayMusic("/music/ring/alarm.mp3");//播放铃声\r
+#endif\r
+        //如果闹钟铃声播放成功,记录该事件\r
+        uapi_save_runtime_log(RUNTIME_LOG_RING_PLAY_START_ALARM);//TOOD*\r
     }\r
-}\r
-\r
-AlarmViewEventListener::AlarmViewEventListener()\r
-{\r
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AlarmViewEventListener :%p", this);\r
-}\r
 \r
-AlarmViewEventListener::~AlarmViewEventListener()\r
-{\r
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "~AlarmViewEventListener");\r
-}\r
-\r
-AlarmViewEventListener *AlarmViewEventListener::GetInstance(void)\r
-{\r
-    static AlarmViewEventListener alarmViewEventListener;\r
-    return &alarmViewEventListener;\r
-}\r
-\r
-bool AlarmViewEventListener::OnDrag(UIView& view, const DragEvent& event)\r
-{\r
-    return true;\r
-}\r
-\r
-bool AlarmViewEventListener::OnDragEnd(UIView& view, const DragEvent& event)\r
-{\r
-    if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT) {\r
-        if (strcmp(view.GetViewId(), ALARM_VIEW_POPUP) == 0) {\r
-            DisableAlarmTimer(AlarmTimerType::NOTIFY_ALARM_RING);\r
-            AlarmPopUpPresenter::GetInstance()->DelayAlarmRing();\r
-            UIViewGroup* alarmRingView = CreateAlarmRingView();\r
-            NotificationManager::GetInstance()->screenContainer_->SetVisible(false);\r
-            RootView::GetInstance()->Add(alarmRingView);\r
-            alarmRingView->SetVisible(true);\r
-            StartAlarmTimer(AlarmTimerType::NOTIFY_ALARM_DELAY, NOTIFY_THREE_SECONDS);\r
-        } else if (strcmp(view.GetViewId(), ALARM_VIEW_CLOSE) == 0 ||\r
-                   strcmp(view.GetViewId(), ALARM_VIEW_DELAY) == 0) {\r
-            NotificationManager::GetInstance()->StopNotify();\r
-        }\r
+    void AlarmViewEventListener::CancelAlarmRing()\r
+    {\r
+        DisableAlarmTimer(AlarmTimerType::NOTIFY_ALARM_RING);\r
+        FindWatchViewEventListener::GetInstance().PopInterCancelMusic();\r
+        AlarmClockModel::GetInstance()->CancelAlarmRing();\r
+        //如果闹钟铃声停止播放成功,记录该事件\r
+        uapi_save_runtime_log(RUNTIME_LOG_RING_PLAY_STOP_ALARM);//TOOD*\r
     }\r
-    return true;\r
-}\r
 \r
-bool AlarmViewEventListener::OnClick(UIView& view, const ClickEvent& event)\r
-{\r
-    UNUSED(event);\r
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AlamNotify ClickListener %s", view.GetViewId());\r
-    if (strcmp(view.GetViewId(), ALARM_IMAGE_DELETE) == 0) {\r
-        DisableAlarmTimer(AlarmTimerType::NOTIFY_ALARM_RING);\r
-        AlarmPopUpPresenter::GetInstance()->CancelAlarmRing();\r
-        UIViewGroup* alarmCloseView = CreateAlarmCloseView();\r
-        NotificationManager::GetInstance()->screenContainer_->SetVisible(false);\r
-        RootView::GetInstance()->Add(alarmCloseView);\r
-        alarmCloseView->SetVisible(true);\r
-        StartAlarmTimer(AlarmTimerType::NOTIFY_ALARM_CLOSE, NOTIFY_THREE_SECONDS);\r
-        return true;\r
-    } else if (strcmp(view.GetViewId(), ALARM_IMAGE_CLOCK) == 0) {\r
-        DisableAlarmTimer(AlarmTimerType::NOTIFY_ALARM_RING);\r
-        AlarmPopUpPresenter::GetInstance()->DelayAlarmRing();\r
-        UIViewGroup* alarmRingView = CreateAlarmRingView();\r
-        NotificationManager::GetInstance()->screenContainer_->SetVisible(false);\r
-        RootView::GetInstance()->Add(alarmRingView);\r
-        alarmRingView->SetVisible(true);\r
-        StartAlarmTimer(AlarmTimerType::NOTIFY_ALARM_DELAY, NOTIFY_THREE_SECONDS);\r
+    void AlarmViewEventListener::DelayAlarmRing()\r
+    {\r
+        CancelAlarmRing();//先取消闹铃\r
+        AlarmClockModel::GetInstance()->AlarmGetClockNum();\r
+        AlarmClockModel::GetInstance()->DelayAlarmRing();\r
     }\r
-    return true;\r
-}\r
-}  // namespace OHOS\r
+} // namespace OHOS\r