--- /dev/null
+#include "notification_manager.h"
+#include "wearable_log.h"
+#include "UiConfig.h"
+#include "AlarmPopUpPresenter.h"
+#include "components/ui_image_view.h"
+#include "components/ui_label.h"
+#include "components/ui_label_ext.h"
+#include "components/ui_label_button_ext.h"
+#include "battery_service.h"
+#include "NativeAbility.h"
+#include "custom_utils.h"
+#include "components/ui_slider.h"
+// #include "UiConfig.h"
+#include "bleEvent.h"
+
+namespace OHOS
+{
+ static UIImageView *imageCharge = nullptr;
+ static UIViewGroup *UIViewGroup_transmitting=nullptr;
+
+ static UIImageView *transmitting_img=nullptr;
+
+ static UISlider *updatasider=nullptr;
+
+ static UILabel *Title=nullptr;
+
+ static UILabel *label_=nullptr;
+
+ static UIImageAnimatorView *downImageAnimatorView=nullptr;
+
+ static constexpr char *ShutDownPaths = "/user/res/down/"; //关机图片路径
+ static constexpr int16_t SHUTDOWN_IMAGE_ANIMATOR_VIEW_NUM_FRAMES = 24; // 图片帧数
+ static constexpr int16_t SHUTDOWN_IMAGE_ANIMATOR_TIME = 150; // 图片更新间隔
+ static ImageAnimatorInfo ImageInfo[SHUTDOWN_IMAGE_ANIMATOR_VIEW_NUM_FRAMES]; // 关机图像的信息
+ static constexpr int16_t SHUTDOWN_IMAGE_ANIMATOR_VIEW_X = 183;
+ static constexpr int16_t SHUTDOWN_IMAGE_ANIMATOR_VIEW_Y = 140;
+ static constexpr int16_t SHUTDOWN_IMAGE_ANIMATOR_VIEW_W = 100;
+ static constexpr int16_t SHUTDOWN_IMAGE_ANIMATOR_VIEW_H = 100;
+ static const char **PathsArray{nullptr}; // 关机图片路径数组
+
+ #define TRANSMITTING_SUCC_PATH PNG_SUCC_IMAGE;
+ #define TRANSMITTING_FAIL_PATH PNG_ATTENTION_IMAGE;
+ #define TRANSMITTING_OTA_DOWN "/user/res/system/KUMILOGO.bin"
+
+
+
+ #define LOW_POWER_BUTTON "LOW_POWER_BUTTON"
+
+ static const char ** CreateImagePathsArray(const char *basePath, const char *fileExtension, int numImages)
+ {
+ const char **imagePaths = new const char *[numImages];
+ char buffer[256];
+ for (int i = 0; i < numImages; i++)
+ {
+ snprintf(buffer, sizeof(buffer), "%s%d.%s", basePath, i + 1, fileExtension);
+ imagePaths[i] = strdup(buffer);
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, " imagePaths[%d] = %s", i, imagePaths[i]);
+ }
+ return imagePaths;
+ }
+
+ static void CreatetransmittingAnimator(void)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ShutDownAnimatorView::ShowUpShutDownAnimatorView");
+ PathsArray = CreateImagePathsArray(ShutDownPaths, "bin", SHUTDOWN_IMAGE_ANIMATOR_VIEW_NUM_FRAMES);
+
+ if (downImageAnimatorView == nullptr)
+ {
+ downImageAnimatorView = new UIImageAnimatorView();
+ if (downImageAnimatorView == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BluetoothEarPhoneView new downImageAnimatorView fail");
+ return;
+ }
+ for (uint8_t i = 0; i < SHUTDOWN_IMAGE_ANIMATOR_VIEW_NUM_FRAMES; i++)
+ {
+ ImageInfo[i].imagePath = (PathsArray[i]);
+ ImageInfo[i].imageType = IMG_SRC_FILE_PATH;
+ ImageInfo[i].pos.x = SHUTDOWN_IMAGE_ANIMATOR_VIEW_X;
+ ImageInfo[i].pos.y = SHUTDOWN_IMAGE_ANIMATOR_VIEW_Y;
+ ImageInfo[i].width = SHUTDOWN_IMAGE_ANIMATOR_VIEW_W;
+ ImageInfo[i].height = SHUTDOWN_IMAGE_ANIMATOR_VIEW_H;
+ }
+ downImageAnimatorView->SetPosition(SHUTDOWN_IMAGE_ANIMATOR_VIEW_X, SHUTDOWN_IMAGE_ANIMATOR_VIEW_Y, SHUTDOWN_IMAGE_ANIMATOR_VIEW_W, SHUTDOWN_IMAGE_ANIMATOR_VIEW_H);
+ downImageAnimatorView->SetStyle(STYLE_BACKGROUND_COLOR, 0xffffffff);
+ downImageAnimatorView->SetStyle(STYLE_BACKGROUND_OPA, 0xff);
+ downImageAnimatorView->SetImageAnimatorSrc(ImageInfo, SHUTDOWN_IMAGE_ANIMATOR_VIEW_NUM_FRAMES, 100);
+ downImageAnimatorView->SetRepeat(true);
+ downImageAnimatorView->SetRepeatTimes(1);
+
+ }
+ downImageAnimatorView->SetVisible(true);
+ downImageAnimatorView->Start();
+ //downImageAnimatorView->Start();
+
+ return ;
+ }
+
+
+
+
+ static uint8_t Transmitting_falg=1;
+ void set_transmittingShow_falg(uint8_t falg)
+ {
+ Transmitting_falg=falg;
+ }
+
+ static osTimerId_t transmitting_timer= NULL;
+
+ void Freetransmitting(void)
+ {
+ if (UIViewGroup_transmitting != nullptr)
+ {
+ UIViewGroup_transmitting->RemoveAll();
+
+ if(transmitting_img)
+ {
+ delete transmitting_img;
+ transmitting_img = nullptr;
+ }
+ if(Title)
+ {
+ delete Title;
+ Title = nullptr;
+ }
+ if(label_)
+ {
+ delete label_;
+ label_ = nullptr;
+ }
+ if(downImageAnimatorView)
+ {
+ delete downImageAnimatorView;
+ downImageAnimatorView = nullptr;
+ }
+ if(updatasider)
+ {
+ delete updatasider;
+ updatasider = nullptr;
+ }
+ if(transmitting_timer)
+ {
+ osStatus_t ret = osTimerDelete(transmitting_timer);
+ if (ret != osOK) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Disatransmitting_timer failed ret = %lx!", ret);
+ return;
+ }
+ transmitting_timer = nullptr;
+ }
+
+
+ RootView::GetInstance()->Remove(UIViewGroup_transmitting);
+ delete UIViewGroup_transmitting;
+ UIViewGroup_transmitting = nullptr;
+ }
+ }
+ static uint8_t timer_falg_low_power=5;
+
+ void OTATimerCallBack(int data)
+ {
+ updatasider->SetValue(get_OTA_recv_value());
+ RootView::GetInstance()->Invalidate();
+ }
+
+
+
+ void creat_down_OTA()
+ {
+ if (Title == nullptr) {
+ Title = new UILabel();
+ }
+ Title->SetPosition(158, 51); // widget's left position and top position
+ Title->Resize(800, 88); // widget's width and height
+ Title->SetViewId("label1");// Set style
+ Title->SetStyle(STYLE_TEXT_FONT, 30);
+
+ // Set additional property
+ Title->SetText("OTA下载中");
+ Title->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);
+ Title->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
+ Title->SetRollSpeed(0);
+ Title->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);
+
+
+ // Add to rootView
+ UIViewGroup_transmitting->Add(Title);
+ updatasider = new UISlider();
+ if (updatasider == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemUpdateView new fail");
+ return ;
+ }
+
+ updatasider->SetSliderColor(Color::Gray(), Color::Silver());
+ updatasider->SetPosition(63, 317, 340, 50);
+ updatasider->SetViewId("SystemUpdateView_updatasider");
+ updatasider->SetRange(0, 100);
+
+ updatasider->SetStyle(STYLE_BORDER_RADIUS, 100);
+ updatasider->SetBackgroundStyle(STYLE_LINE_CAP, CapType::CAP_ROUND);
+ updatasider->SetForegroundStyle(STYLE_LINE_CAP, CapType::CAP_ROUND);
+ updatasider->SetSliderColor(Color::GetColorFromRGBA(0x19, 0x19, 0x19, 0xff), Color::GetColorFromRGBA(0xff, 0xff, 0xff, 0xff));
+ updatasider->SetForegroundStyle(STYLE_BACKGROUND_OPA, 0xff);
+ updatasider->SetDraggable(false);
+ updatasider->SetTouchable(false);
+ updatasider->SetValue(0);
+ UIViewGroup_transmitting->Add(updatasider);
+ //Add ImageView to App
+ transmitting_img = new UIImageView();
+ if (transmitting_img == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemUpdateView::KUMILOGOImage new fail!");
+ return ;
+ }
+ transmitting_img->SetPosition(117, 87, 230, 160);
+ const char *imagesPath = TRANSMITTING_OTA_DOWN;
+ transmitting_img->SetSrc(imagesPath);
+ UIViewGroup_transmitting->Add(transmitting_img);
+
+ uint32_t tick;
+ osStatus_t retTimer;
+
+ Set_OTA_recv_value();
+ transmitting_timer = osTimerNew((osTimerFunc_t)OTATimerCallBack, osTimerPeriodic, NULL, NULL);
+ tick =500;// osMs2Tick(1000);
+ retTimer = osTimerStart(transmitting_timer, tick);
+ if (retTimer != osOK && transmitting_timer != NULL) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"StartCallTimer osTimerStart failed, ret = %lx!!", retTimer);
+ osTimerDelete(transmitting_timer);
+ transmitting_timer = NULL;
+ return ;
+ }
+ }
+
+
+ void creat_down_OTA_FAIL()
+ {
+ if (Title == nullptr) {
+ Title = new UILabel();
+ }
+ Title->SetPosition(143, 51); // widget's left position and top position
+ Title->Resize(800, 88); // widget's width and height
+ Title->SetViewId("label1");// Set style
+ Title->SetStyle(STYLE_TEXT_FONT, 30);
+
+ // Set additional property
+ Title->SetText("OTA下载失败");
+ Title->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);
+ Title->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
+ Title->SetRollSpeed(0);
+ Title->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);
+
+
+ // Add to rootView
+ UIViewGroup_transmitting->Add(Title);
+ if (label_ == nullptr) {
+ label_ = new UILabel();
+ }
+ label_->SetPosition(60, 281); // widget's left position and top position
+ label_->Resize(345, 101); // widget's width and height
+ label_->SetViewId("label2");// Set style
+ label_->SetStyle(STYLE_TEXT_FONT, 30);
+
+ // Set additional property
+ label_->SetText("下载升级包失败,请退出或者重新下载");
+
+ label_->SetLineBreakMode(UILabel::LINE_BREAK_WRAP);
+ label_->SetTextColor(Color::GetColorFromRGBA(0xAA, 0xAA, 0xAA, 0xff));
+ label_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
+ label_->SetRollSpeed(0);
+ label_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);
+
+ UIViewGroup_transmitting->Add(label_);
+
+ //Add ImageView to App
+ transmitting_img = new UIImageView();
+ if (transmitting_img == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemUpdateView::KUMILOGOImage new fail!");
+ return ;
+ }
+ transmitting_img->SetPosition(117, 87, 230, 160);
+ const char *imagesPath = TRANSMITTING_OTA_DOWN;
+ transmitting_img->SetSrc(imagesPath);
+ UIViewGroup_transmitting->Add(transmitting_img);
+ }
+
+ void creat_down_OTA_SUCC()
+ {
+ if (Title == nullptr) {
+ Title = new UILabel();
+ }
+ Title->SetPosition(143, 51); // widget's left position and top position
+ Title->Resize(800, 88); // widget's width and height
+ Title->SetViewId("label1");// Set style
+ Title->SetStyle(STYLE_TEXT_FONT, 30);
+
+ // Set additional property
+ Title->SetText("OTA下载成功");
+ Title->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);
+ Title->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
+ Title->SetRollSpeed(0);
+ Title->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);
+
+
+ // Add to rootView
+ UIViewGroup_transmitting->Add(Title);
+
+ if (label_ == nullptr) {
+ label_ = new UILabel();
+ }
+ label_->SetPosition(60, 281); // widget's left position and top position
+ label_->Resize(345, 101); // widget's width and height
+ label_->SetViewId("label2");// Set style
+ label_->SetStyle(STYLE_TEXT_FONT, 30);
+
+ // Set additional property
+ label_->SetText("下载升级包成功,可以开始升级手表");
+ label_->SetLineBreakMode(UILabel::LINE_BREAK_WRAP);
+ label_->SetTextColor(Color::GetColorFromRGBA(0xAA, 0xAA, 0xAA, 0xff));
+ label_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
+ label_->SetRollSpeed(0);
+ label_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);
+
+ // Add to rootView
+ UIViewGroup_transmitting->Add(label_);
+
+
+ //Add ImageView to App
+ transmitting_img = new UIImageView();
+ if (transmitting_img == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemUpdateView::KUMILOGOImage new fail!");
+ return ;
+ }
+ transmitting_img->SetPosition(117, 87, 230, 160);
+ const char *imagesPath = TRANSMITTING_OTA_DOWN;
+ transmitting_img->SetSrc(imagesPath);
+ UIViewGroup_transmitting->Add(transmitting_img);
+ }
+
+
+
+
+ void creat_down_Dial()
+ {
+ if (Title == nullptr) {
+ Title = new UILabel();
+ }
+ Title->SetPosition(158, 51); // widget's left position and top position
+ Title->Resize(800, 88); // widget's width and height
+ Title->SetViewId("label1");// Set style
+ Title->SetStyle(STYLE_TEXT_FONT, 30);
+
+ // Set additional property
+ Title->SetText("表盘安装中");
+ Title->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);
+ Title->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
+ Title->SetRollSpeed(0);
+ Title->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);
+
+ // Add to rootView
+ UIViewGroup_transmitting->Add(Title);
+ Title->SetVisible(true);
+
+
+ if (label_ == nullptr) {
+ label_ = new UILabel();
+ }
+ label_->SetPosition(60, 281); // widget's left position and top position
+ label_->Resize(345, 101); // widget's width and height
+ label_->SetViewId("label2");// Set style
+ label_->SetStyle(STYLE_TEXT_FONT, 30);
+
+ // Set additional property
+ label_->SetText("正在安装表盘,请不要做其他操作或关闭手表");
+ label_->SetLineBreakMode(UILabel::LINE_BREAK_WRAP);
+ label_->SetTextColor(Color::GetColorFromRGBA(0xAA, 0xAA, 0xAA, 0xff));
+ label_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
+ label_->SetRollSpeed(0);
+ label_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);
+
+ // Add to rootView
+ UIViewGroup_transmitting->Add(label_);
+ label_->SetVisible(true);
+
+ CreatetransmittingAnimator();
+ // UIViewGroup_transmitting->Add(updatasider);
+
+ UIViewGroup_transmitting->Add(downImageAnimatorView);
+ }
+
+
+
+
+
+
+ void creat_down_Dial_succ()
+ {
+ if (Title == nullptr) {
+ Title = new UILabel();
+ }
+ Title->SetPosition(173, 51); // widget's left position and top position
+ Title->Resize(800, 88); // widget's width and height
+ Title->SetViewId("label1");// Set style
+ Title->SetStyle(STYLE_TEXT_FONT, 30);
+
+ // Set additional property
+ Title->SetText("安装成功");
+ Title->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);
+ Title->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
+ Title->SetRollSpeed(0);
+ Title->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);
+
+ // Add to rootView
+ UIViewGroup_transmitting->Add(Title);
+ Title->SetVisible(true);
+
+
+ if (label_ == nullptr) {
+ label_ = new UILabel();
+ }
+ label_->SetPosition(60, 281); // widget's left position and top position
+ label_->Resize(345, 101); // widget's width and height
+ label_->SetViewId("label2");// Set style
+ label_->SetStyle(STYLE_TEXT_FONT, 30);
+
+ // Set additional property
+ label_->SetText("表盘安装成功正在更新表盘,请稍等");
+ label_->SetLineBreakMode(UILabel::LINE_BREAK_WRAP);
+ label_->SetTextColor(Color::GetColorFromRGBA(0xAA, 0xAA, 0xAA, 0xff));
+ label_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
+ label_->SetRollSpeed(0);
+ label_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);
+
+
+ transmitting_img = new UIImageView();
+ if (transmitting_img == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemUpdateView::KUMILOGOImage new fail!");
+ return ;
+ }
+ transmitting_img->SetPosition(193, 150,80, 80);
+ const char *imagesPath = TRANSMITTING_SUCC_PATH;
+ transmitting_img->SetSrc(imagesPath);
+ UIViewGroup_transmitting->Add(transmitting_img);
+
+ // Add to rootView
+ UIViewGroup_transmitting->Add(label_);
+ label_->SetVisible(true);
+ }
+
+ void creat_down_Dial_fail()
+ {
+ if (Title == nullptr) {
+ Title = new UILabel();
+ }
+ Title->SetPosition(173, 51); // widget's left position and top position
+ Title->Resize(800, 88); // widget's width and height
+ Title->SetViewId("label1");// Set style
+ Title->SetStyle(STYLE_TEXT_FONT, 30);
+
+ // Set additional property
+ Title->SetText("安装失败");
+ Title->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);
+ Title->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
+ Title->SetRollSpeed(0);
+ Title->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);
+
+ // Add to rootView
+ UIViewGroup_transmitting->Add(Title);
+ Title->SetVisible(true);
+
+
+ if (label_ == nullptr) {
+ label_ = new UILabel();
+ }
+ label_->SetPosition(60, 281); // widget's left position and top position
+ label_->Resize(345, 101); // widget's width and height
+ label_->SetViewId("label2");// Set style
+ label_->SetStyle(STYLE_TEXT_FONT, 30);
+
+ // Set additional property
+ label_->SetText("表盘安装失败,请退出或重新安装");
+ label_->SetLineBreakMode(UILabel::LINE_BREAK_WRAP);
+ label_->SetTextColor(Color::GetColorFromRGBA(0xAA, 0xAA, 0xAA, 0xff));
+ label_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
+ label_->SetRollSpeed(0);
+ label_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);
+
+
+ transmitting_img = new UIImageView();
+ if (transmitting_img == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemUpdateView::KUMILOGOImage new fail!");
+ return ;
+ }
+ transmitting_img->SetPosition(193, 150,80, 80);
+ const char *imagesPath = TRANSMITTING_FAIL_PATH;
+ transmitting_img->SetSrc(imagesPath);
+ UIViewGroup_transmitting->Add(transmitting_img);
+
+ // Add to rootView
+ UIViewGroup_transmitting->Add(label_);
+ label_->SetVisible(true);
+
+
+
+ }
+
+
+
+
+ UIViewGroup *transmittingShow()
+ {
+
+ if (UIViewGroup_transmitting == nullptr) {
+ UIViewGroup_transmitting = new UIViewGroup();
+ UIViewGroup_transmitting->SetPosition(0, 0, 466, 466);
+ //UIViewGroup_transmitting->SetStyle(STYLE_BACKGROUND_OPA, 0);
+ }
+
+ switch (Transmitting_falg)
+ {
+ case TRANS_DIAL_TRANSMITTING:
+ creat_down_Dial();
+ break;
+ case TRANS_DIAL_SUCC:
+ creat_down_Dial_succ();
+ break;
+ case TRANS_DIAL_FAIL:
+ creat_down_Dial_fail();
+ break;
+ case TRANS_OTA_TRANSMITTING:
+ creat_down_OTA();
+ break;
+ case TRANS_OTA_SUCC:
+ creat_down_OTA_SUCC();
+ break;
+ case TRANS_OTA_FAIL:
+ creat_down_OTA_FAIL();
+ break;
+ default:
+ break;
+ }
+
+ UIView::OnClickListener *button1Click = static_cast<UIView::OnClickListener *>(transmittingViewEventListener::GetInstance());
+ UIViewGroup_transmitting->SetOnClickListener(button1Click);
+ UIViewGroup_transmitting->SetTouchable(true);
+
+
+
+
+ return UIViewGroup_transmitting;
+ }
+
+ transmittingViewEventListener::transmittingViewEventListener()
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "CallViewEventListener :%p", this);
+ }
+
+ transmittingViewEventListener::~transmittingViewEventListener()
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "~CallViewEventListener");
+ }
+
+ transmittingViewEventListener *transmittingViewEventListener::GetInstance(void)
+ {
+ static transmittingViewEventListener lowppowrViewEventListene_t;
+ return &lowppowrViewEventListene_t;
+ }
+
+ bool transmittingViewEventListener::OnClick(UIView& view, const ClickEvent& event)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "OnClick");
+ if(Transmitting_falg!=TRANS_DIAL_TRANSMITTING && Transmitting_falg!=TRANS_OTA_TRANSMITTING)
+ {
+ NotificationManager::GetInstance()->StopNotify();
+ }
+ return true;
+ UNUSED(event);
+ }
+
+}