static constexpr const char *TB_LISTEN_IMAGE_93 = APP_RES_PATH"/animated_icon/listen/93.bin";
static constexpr const char *TB_LISTEN_IMAGE_94 = APP_RES_PATH"/animated_icon/listen/94.bin";
static constexpr const char *TB_LISTEN_IMAGE_95 = APP_RES_PATH"/animated_icon/listen/95.bin";
+
+ // Thunderbird animations: bind 1..45
+ static constexpr const char *TB_BIND_IMAGE_1 = APP_RES_PATH"/animated_icon/bind/1.bin";
+ static constexpr const char *TB_BIND_IMAGE_2 = APP_RES_PATH"/animated_icon/bind/2.bin";
+ static constexpr const char *TB_BIND_IMAGE_3 = APP_RES_PATH"/animated_icon/bind/3.bin";
+ static constexpr const char *TB_BIND_IMAGE_4 = APP_RES_PATH"/animated_icon/bind/4.bin";
+ static constexpr const char *TB_BIND_IMAGE_5 = APP_RES_PATH"/animated_icon/bind/5.bin";
+ static constexpr const char *TB_BIND_IMAGE_6 = APP_RES_PATH"/animated_icon/bind/6.bin";
+ static constexpr const char *TB_BIND_IMAGE_7 = APP_RES_PATH"/animated_icon/bind/7.bin";
+ static constexpr const char *TB_BIND_IMAGE_8 = APP_RES_PATH"/animated_icon/bind/8.bin";
+ static constexpr const char *TB_BIND_IMAGE_9 = APP_RES_PATH"/animated_icon/bind/9.bin";
+ static constexpr const char *TB_BIND_IMAGE_10 = APP_RES_PATH"/animated_icon/bind/10.bin";
+ static constexpr const char *TB_BIND_IMAGE_11 = APP_RES_PATH"/animated_icon/bind/11.bin";
+ static constexpr const char *TB_BIND_IMAGE_12 = APP_RES_PATH"/animated_icon/bind/12.bin";
+ static constexpr const char *TB_BIND_IMAGE_13 = APP_RES_PATH"/animated_icon/bind/13.bin";
+ static constexpr const char *TB_BIND_IMAGE_14 = APP_RES_PATH"/animated_icon/bind/14.bin";
+ static constexpr const char *TB_BIND_IMAGE_15 = APP_RES_PATH"/animated_icon/bind/15.bin";
+ static constexpr const char *TB_BIND_IMAGE_16 = APP_RES_PATH"/animated_icon/bind/16.bin";
+ static constexpr const char *TB_BIND_IMAGE_17 = APP_RES_PATH"/animated_icon/bind/17.bin";
+ static constexpr const char *TB_BIND_IMAGE_18 = APP_RES_PATH"/animated_icon/bind/18.bin";
+ static constexpr const char *TB_BIND_IMAGE_19 = APP_RES_PATH"/animated_icon/bind/19.bin";
+ static constexpr const char *TB_BIND_IMAGE_20 = APP_RES_PATH"/animated_icon/bind/20.bin";
+ static constexpr const char *TB_BIND_IMAGE_21 = APP_RES_PATH"/animated_icon/bind/21.bin";
+ static constexpr const char *TB_BIND_IMAGE_22 = APP_RES_PATH"/animated_icon/bind/22.bin";
+ static constexpr const char *TB_BIND_IMAGE_23 = APP_RES_PATH"/animated_icon/bind/23.bin";
+ static constexpr const char *TB_BIND_IMAGE_24 = APP_RES_PATH"/animated_icon/bind/24.bin";
+ static constexpr const char *TB_BIND_IMAGE_25 = APP_RES_PATH"/animated_icon/bind/25.bin";
+ static constexpr const char *TB_BIND_IMAGE_26 = APP_RES_PATH"/animated_icon/bind/26.bin";
+ static constexpr const char *TB_BIND_IMAGE_27 = APP_RES_PATH"/animated_icon/bind/27.bin";
+ static constexpr const char *TB_BIND_IMAGE_28 = APP_RES_PATH"/animated_icon/bind/28.bin";
+ static constexpr const char *TB_BIND_IMAGE_29 = APP_RES_PATH"/animated_icon/bind/29.bin";
+ static constexpr const char *TB_BIND_IMAGE_30 = APP_RES_PATH"/animated_icon/bind/30.bin";
+ static constexpr const char *TB_BIND_IMAGE_31 = APP_RES_PATH"/animated_icon/bind/31.bin";
+ static constexpr const char *TB_BIND_IMAGE_32 = APP_RES_PATH"/animated_icon/bind/32.bin";
+ static constexpr const char *TB_BIND_IMAGE_33 = APP_RES_PATH"/animated_icon/bind/33.bin";
+ static constexpr const char *TB_BIND_IMAGE_34 = APP_RES_PATH"/animated_icon/bind/34.bin";
+ static constexpr const char *TB_BIND_IMAGE_35 = APP_RES_PATH"/animated_icon/bind/35.bin";
+ static constexpr const char *TB_BIND_IMAGE_36 = APP_RES_PATH"/animated_icon/bind/36.bin";
+ static constexpr const char *TB_BIND_IMAGE_37 = APP_RES_PATH"/animated_icon/bind/37.bin";
+ static constexpr const char *TB_BIND_IMAGE_38 = APP_RES_PATH"/animated_icon/bind/38.bin";
+ static constexpr const char *TB_BIND_IMAGE_39 = APP_RES_PATH"/animated_icon/bind/39.bin";
+ static constexpr const char *TB_BIND_IMAGE_40 = APP_RES_PATH"/animated_icon/bind/40.bin";
+ static constexpr const char *TB_BIND_IMAGE_41 = APP_RES_PATH"/animated_icon/bind/41.bin";
+ static constexpr const char *TB_BIND_IMAGE_42 = APP_RES_PATH"/animated_icon/bind/42.bin";
+ static constexpr const char *TB_BIND_IMAGE_43 = APP_RES_PATH"/animated_icon/bind/43.bin";
+ static constexpr const char *TB_BIND_IMAGE_44 = APP_RES_PATH"/animated_icon/bind/44.bin";
+ static constexpr const char *TB_BIND_IMAGE_45 = APP_RES_PATH"/animated_icon/bind/45.bin";
// Thunderbird animations: search 1..30
static constexpr const char *TB_SEARCH_IMAGE_1 = APP_RES_PATH"/animated_icon/sreach/1.bin";
#include "components/ui_image_view.h"
#include "components/ui_label_button.h"
#include "components/ui_qrcode.h"
+#include "components/ui_image_animator.h"
+#include "UiConfig.h"
namespace OHOS
{
+ static constexpr int16_t TB_BIND_ANIM_X = 119;
+ static constexpr int16_t TB_BIND_ANIM_Y = 157;
+ static constexpr int16_t TB_BIND_ANIM_W = 111;
+ static constexpr int16_t TB_BIND_ANIM_H = 111;
+ static constexpr int16_t TB_BIND_ANIM_FRAMES = 45;
+ static constexpr int16_t TB_BIND_ANIM_INTERVAL = 49;
+ static constexpr const char *TB_BIND_ANIM_PATH = "/user/res/animated_icon/bind/";
+
+ static const char *TB_BIND_PATHS[TB_BIND_ANIM_FRAMES] = {
+ TB_BIND_IMAGE_1,
+ TB_BIND_IMAGE_2,
+ TB_BIND_IMAGE_3,
+ TB_BIND_IMAGE_4,
+ TB_BIND_IMAGE_5,
+ TB_BIND_IMAGE_6,
+ TB_BIND_IMAGE_7,
+ TB_BIND_IMAGE_8,
+ TB_BIND_IMAGE_9,
+ TB_BIND_IMAGE_10,
+ TB_BIND_IMAGE_11,
+ TB_BIND_IMAGE_12,
+ TB_BIND_IMAGE_13,
+ TB_BIND_IMAGE_14,
+ TB_BIND_IMAGE_15,
+ TB_BIND_IMAGE_16,
+ TB_BIND_IMAGE_17,
+ TB_BIND_IMAGE_18,
+ TB_BIND_IMAGE_19,
+ TB_BIND_IMAGE_20,
+ TB_BIND_IMAGE_21,
+ TB_BIND_IMAGE_22,
+ TB_BIND_IMAGE_23,
+ TB_BIND_IMAGE_24,
+ TB_BIND_IMAGE_25,
+ TB_BIND_IMAGE_26,
+ TB_BIND_IMAGE_27,
+ TB_BIND_IMAGE_28,
+ TB_BIND_IMAGE_29,
+ TB_BIND_IMAGE_30,
+ TB_BIND_IMAGE_31,
+ TB_BIND_IMAGE_32,
+ TB_BIND_IMAGE_33,
+ TB_BIND_IMAGE_34,
+ TB_BIND_IMAGE_35,
+ TB_BIND_IMAGE_36,
+ TB_BIND_IMAGE_37,
+ TB_BIND_IMAGE_38,
+ TB_BIND_IMAGE_39,
+ TB_BIND_IMAGE_40,
+ TB_BIND_IMAGE_41,
+ TB_BIND_IMAGE_42,
+ TB_BIND_IMAGE_43,
+ TB_BIND_IMAGE_44,
+ TB_BIND_IMAGE_45,
+ };
+
class ThunderBirdGuideView
{
public:
void Show(int16_t showView);
void UpdateQrcode();
void UpdateTextLabel(const char* text);
+ bool EnsureBandAnimator();
+ void OnWsConnected();
+
enum : int16_t {
THUNDERBIRD_GUIDEVIEW_1 = 0,
UIImageView *RemindGround{nullptr};
UIImageView *RemindIcon{nullptr};
UIImageView *RemindIcon2{nullptr};
+ UIImageAnimatorView *bandAnimator{nullptr};
+ ImageAnimatorInfo *bandImageInfo{nullptr};
+ const char **bandPaths{nullptr};
+ int16_t bandFrameCount{0};
};
}
return g_pThunderBirdGuideView;
}
+ void ThunderBirdGuideView::OnWsConnected()
+ {
+ // Called when WS becomes connected: stop band animation and show QR code
+ if (bandAnimator) {
+ bandAnimator->Stop();
+ bandAnimator->SetVisible(false);
+ }
+ if (qrcode_) {
+ qrcode_->SetQrcodeInfo(ThunderBirdModel::GetInstance()->GetQrcodeContent().c_str());
+ qrcode_->SetPosition(119, 157, 111, 111);
+ qrcode_->SetVisible(true);
+ }
+ if (TextLabel) {
+ TextLabel->SetText("换角色,挑声音,哄睡...\nAmby小程序扫码尽享");
+ }
+ }
+
void ThunderBirdGuideView::ClearAll(void)
{
if (group != nullptr)
if (RemindGround != nullptr) { delete RemindGround; RemindGround = nullptr; }
if (RemindIcon != nullptr) { delete RemindIcon; RemindIcon = nullptr; }
if (RemindIcon2 != nullptr) { delete RemindIcon2; RemindIcon2 = nullptr; }
+ if (bandAnimator != nullptr) { delete bandAnimator; bandAnimator = nullptr; }
+ if (bandImageInfo != nullptr) { delete[] bandImageInfo; bandImageInfo = nullptr; }
+ bandPaths = nullptr;
+ bandFrameCount = 0;
+ }
+
+ bool ThunderBirdGuideView::EnsureBandAnimator()
+ {
+ if (bandAnimator != nullptr) {
+ return true;
+ }
+ bandFrameCount = TB_BIND_ANIM_FRAMES;
+ bandPaths = TB_BIND_PATHS;
+ bandImageInfo = new ImageAnimatorInfo[bandFrameCount];
+ if (bandImageInfo == nullptr) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdGuideView new bandImageInfo fail");
+ return false;
+ }
+ bandAnimator = new UIImageAnimatorView();
+ if (bandAnimator == nullptr) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdGuideView new bandAnimator fail");
+ delete[] bandImageInfo;
+ bandImageInfo = nullptr;
+ return false;
+ }
+ bandAnimator->SetAutoEnable(false);
+ for (int16_t i = 0; i < bandFrameCount; i++)
+ {
+ bandImageInfo[i].imagePath = bandPaths[i];
+ bandImageInfo[i].imageType = IMG_SRC_FILE_PATH;
+ bandImageInfo[i].pos.x = TB_BIND_ANIM_X;
+ bandImageInfo[i].pos.y = TB_BIND_ANIM_Y;
+ bandImageInfo[i].width = TB_BIND_ANIM_W;
+ bandImageInfo[i].height = TB_BIND_ANIM_H;
+ }
+ bandAnimator->SetPosition(TB_BIND_ANIM_X, TB_BIND_ANIM_Y, TB_BIND_ANIM_W, TB_BIND_ANIM_H);
+ bandAnimator->SetStyle(STYLE_BACKGROUND_COLOR, 0xffffffff);
+ bandAnimator->SetStyle(STYLE_BACKGROUND_OPA, 0x00);
+ bandAnimator->SetImageAnimatorSrc(bandImageInfo, bandFrameCount, TB_BIND_ANIM_INTERVAL);
+ bandAnimator->SetRepeat(true);
+ bandAnimator->SetRepeatTimes(1);
+ bandAnimator->SetResizeMode(UIImageView::COVER);
+ bandAnimator->SetVisible(false);
+ if (group) {
+ group->Add(bandAnimator);
+ }
+ return true;
}
UIViewGroup *ThunderBirdGuideView::ThunderBirdGuideViewInit(void)
if (RemindLabel) { RemindLabel->SetVisible(false); }
if (RemindIcon) { RemindIcon->SetVisible(false); }
if (RemindIcon2) { RemindIcon2->SetVisible(false); }
+ if (bandAnimator) { bandAnimator->SetVisible(false); bandAnimator->Stop(); }
switch (showView)
{
case THUNDERBIRD_GUIDEVIEW_5:
{
ThunderBirdMainView::GetInstance()->OpenBackGround();
-
+
// 播放音频文件 - 使用PlayerSample直接调用
// const char* argv[] = {"xx", "/user/res/music/sxh.mp3", "1", "0"};
// int32_t argc = 4;
if (TextLabel)
{
TextLabel->SetPosition(35, 68, 300, 84);
- TextLabel->SetText("换角色,挑声音,哄睡...\nAmby小程序扫码尽享");
TextLabel->SetLineBreakMode(UILabel::LINE_BREAK_WRAP);//自动换行
TextLabel->SetVisible(true);
}
- if (qrcode_)
+
+ bool wsConnected = (ln_ws_get_connection_state() == 2); // WS_STATE_CONNECTED = 2
+
+ if (!wsConnected)
+ {
+ TextLabel->SetText("稍等片刻\n二维码正在刷新");
+ // 未连接WS:显示band序列帧,隐藏二维码
+ if (EnsureBandAnimator())
+ {
+ if (bandAnimator) { bandAnimator->SetVisible(true); bandAnimator->Start(); }
+ }
+ if (qrcode_) { qrcode_->SetVisible(false); }
+ }
+ else
{
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdGuideView::qrcode_ path:%s", ThunderBirdModel::GetInstance()->GetQrcodeContent().c_str());
- qrcode_->SetQrcodeInfo(ThunderBirdModel::GetInstance()->GetQrcodeContent().c_str());
- qrcode_->SetPosition(119, 157, 111, 111);
- qrcode_->SetVisible(true);
+ // 已连接WS:暂停序列帧,显示二维码
+ if (bandAnimator) { bandAnimator->Stop(); bandAnimator->SetVisible(false); }
+ TextLabel->SetText("换角色,挑声音,哄睡...\nAmby小程序扫码尽享");
+ if (qrcode_)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdGuideView::qrcode_ path:%s", ThunderBirdModel::GetInstance()->GetQrcodeContent().c_str());
+ qrcode_->SetQrcodeInfo(ThunderBirdModel::GetInstance()->GetQrcodeContent().c_str());
+ qrcode_->SetPosition(119, 157, 111, 111);
+ qrcode_->SetVisible(true);
+ }
}
+
+
if(RemindIcon)
{
RemindIcon->SetPosition(159, 296, 24, 24);