mcu_hi3321_watch/tjd/ui/app/player/TjdUiAppPlayerView.cpp
2025-05-26 20:15:20 +08:00

1380 lines
49 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*----------------------------------------------------------------------------
* Copyright (c) TJD Technologies Co., Ltd. 2025. All rights reserved.
*
* Description: TjdUiAppPlayerView.cpp
*
* Author: luziquan@ss-tjd.com
*
* Create: 2024-06-07
*--------------------------------------------------------------------------*/
#include "TjdUiAppPlayerView.h"
#include "TjdUiImageIds.h"
#include "TjdUiMultiLanguageExt.h"
#include "TjdUiUtils.h"
#include "common/image_cache_manager.h"
#include "ui_image_animator.h"
#include <iomanip>
#include <sstream>
namespace TJD {
#define MUSIC_IMAGE_BIN_PATH TJD_IMAGE_PATH "img_music.bin"
#define LOADING_IMAGE_BIN_PATH TJD_IMAGE_PATH "img_loading.bin"
static inline void SetRotateEnable(OHOS::UIScrollView &view) { TjdUiUtils::SetDefaultRollingEffect(view); }
static TjdUiAppPlayerView *g_playerView = nullptr;
bool PlayerUIScrollView::OnDragStartEvent(const OHOS::DragEvent &event)
{
if (TjdUiAppPlayerView::GetInstance()->GetCurrentView() != PlayerViewIndex::PLAYER_VIEW) {
return true;
}
isOnStart_ = true;
return OHOS::UIScrollViewNested::OnDragStartEvent(event);
}
bool PlayerUIScrollView::OnDragEvent(const OHOS::DragEvent &event)
{
if (!isOnStart_) {
return true;
}
if (TjdUiAppPlayerView::GetInstance()->GetCurrentView() != PlayerViewIndex::PLAYER_VIEW) {
return true;
}
return OHOS::UIScrollViewNested::OnDragEvent(event);
}
bool PlayerUIScrollView::OnDragEndEvent(const OHOS::DragEvent &event)
{
if (!isOnStart_) {
return true;
}
isOnStart_ = false;
if (TjdUiAppPlayerView::GetInstance()->GetCurrentView() != PlayerViewIndex::PLAYER_VIEW) {
return true;
}
return OHOS::UIScrollViewNested::OnDragEndEvent(event);
}
TjdUiAppPlayerView::TjdUiAppPlayerView() { g_playerView = this; }
TjdUiAppPlayerView::~TjdUiAppPlayerView() { g_playerView = nullptr; }
TjdUiAppPlayerView *TjdUiAppPlayerView::GetInstance(void) { return g_playerView; }
void TjdUiAppPlayerView::OnStart()
{
InitImageInfo();
if (mainView_ == nullptr) {
mainView_ = new PlayerUIScrollView();
mainView_->SetPosition(0, 0, OHOS::HORIZONTAL_RESOLUTION, OHOS::VERTICAL_RESOLUTION);
// mainView_->SetOnDragListener(TjdUiAppPlayerPresenter::GetInstance());
}
InitTargetView(PlayerViewIndex::PLAYER_VIEW);
AddViewToRootContainer(mainView_);
}
void TjdUiAppPlayerView::OnStop()
{
RemoveAll();
if (mainView_ != nullptr) {
mainView_->RemoveAll();
delete mainView_;
mainView_ = nullptr;
}
for (int i = 0; i < PLAYER_UNKNOWN; i++) {
if (viewManager_[i] == nullptr) {
continue;
}
delete viewManager_[i];
viewManager_[i] = nullptr;
}
delete[] musicStateAnimator_;
OHOS::ImageCacheManager::GetInstance().UnloadAllInMultiRes(MUSIC_IMAGE_BIN_PATH);
}
OHOS::ImageAnimatorInfo *TjdUiAppPlayerView::GetImageAnimatorInfo(void) { return musicStateAnimator_; }
void TjdUiAppPlayerView::InitImageInfo()
{
const int resId[] = {IMG_MUSIC_VOICE01, IMG_MUSIC_VOICE02, IMG_MUSIC_VOICE03};
auto &image = OHOS::ImageCacheManager::GetInstance();
image.LoadAllInMultiRes(MUSIC_IMAGE_BIN_PATH);
const int size = sizeof(resId) / sizeof(resId[0]);
musicStateAnimator_ = new OHOS::ImageAnimatorInfo[size];
// 播放动效
OHOS::ImageAnimatorInfo baseinfo = {nullptr, {383, 35}, 39, 37, OHOS::IMG_SRC_IMAGE_INFO};
for (int i = 0; i < 3; i++) {
musicStateAnimator_[i] = baseinfo;
musicStateAnimator_[i].imageInfo = image.LoadOneInMultiRes(resId[i], MUSIC_IMAGE_BIN_PATH);
}
}
void TjdUiAppPlayerView::InitTargetView(PlayerViewIndex index)
{
if (viewManager_[index] != nullptr) {
return;
}
// clang-format off
switch (index) {
case PLAYER_VIEW: viewManager_[index] = new PlayerMainView(); break;
case MUSIC_LIST_VIEW: viewManager_[index] = new PlayerListView(); break;
case VOLUME_VIEW: viewManager_[index] = new PlayerVolumeView(); break;
case DEVICE_VIEW: viewManager_[index] = new PlayerDeviceView(); break;
case LOW_POWER_VIEW: viewManager_[index] = new PlayerLowPowerView(); break;
case SEARCH_LIST_VIEW: viewManager_[index] = new PlayerSearchView(); break;
case SEARCHING_VIEW: viewManager_[index] = new PlayerWaitView(); break;
case DEVICE_CONNECT_VIEW: viewManager_[index] = new PlayerDeviceConnectView(); break;
case CONNECT_SUCCESS_VIEW: viewManager_[index] = new PlayerConnectSuccessView(); break;
case CONNECT_FAIL_VIEW: viewManager_[index] = new PlayerConnectFailView(); break;
case CONNECT_APP_FAIL_VIEW: viewManager_[index] = new PlayerConnectAppFailView(); break;
case DELETE_MUSIC_VIEW: viewManager_[index] = new PlayerCaseDeleteEntryView(); break;
default: break;
}
// clang-format on
if (viewManager_[index] == nullptr) {
return;
}
viewManager_[index]->SetPosition(0, 0);
viewManager_[index]->SetVisible(false);
mainView_->Add(viewManager_[index]);
}
void TjdUiAppPlayerView::ShowView(PlayerViewIndex showIndex)
{
if (showIndex < 0 || showIndex >= PlayerViewIndex::PLAYER_UNKNOWN) {
return;
}
InitTargetView(showIndex);
if (currentViewIndex_ >= 0 && currentViewIndex_ < PlayerViewIndex::PLAYER_UNKNOWN) {
if (showIndex != currentViewIndex_ && viewManager_[currentViewIndex_] != nullptr) {
viewManager_[currentViewIndex_]->HideView();
}
}
if (viewManager_[showIndex] != nullptr) {
viewManager_[showIndex]->ShowView();
}
currentViewIndex_ = showIndex;
}
#pragma region 支持缩放的Slider
class PlayerMainView::SliderAnimatorCallback : public OHOS::AnimatorCallback
{
public:
virtual void Callback(UIView *view)
{
if (animator_->GetRunTime() >= animator_->GetTime()) {
animator_->Stop();
return;
}
auto *slider = dynamic_cast<OHOS::UISlider *>(view);
if (slider == nullptr) {
return;
}
int16_t knobSize =
OHOS::EasingEquation::LinearEaseNone(startSize_, endSize_, animator_->GetRunTime(), animator_->GetTime());
slider->SetKnobWidth(knobSize);
slider->SetKnobRadius(knobSize >> 1);
slider->Invalidate();
}
virtual void OnStop(UIView &view) {}
void SetAnimator(OHOS::Animator *animator) { animator_ = animator; }
void SetAnimatorSize(int16_t startSize, int16_t endSize)
{
startSize_ = startSize;
endSize_ = endSize;
}
private:
OHOS::Animator *animator_{nullptr};
int16_t startSize_{0};
int16_t endSize_{0};
};
PlayerMainView::CustomSlider::~CustomSlider()
{
if (sliderAnimatorCallback_ != nullptr) {
delete sliderAnimatorCallback_;
sliderAnimatorCallback_ = nullptr;
}
if (animator_ != nullptr) {
delete animator_;
animator_ = nullptr;
}
}
bool PlayerMainView::CustomSlider::OnDragStartEvent(const OHOS::DragEvent &event)
{
TjdUiAppPlayerPresenter::GetInstance()->IsDragSlider = true;
StartAnimator(20, 30);
return UISlider::OnDragStartEvent(event);
}
bool PlayerMainView::CustomSlider::OnDragEndEvent(const OHOS::DragEvent &event)
{
TjdUiAppPlayerPresenter::GetInstance()->IsDragSlider = false;
StartAnimator(30, 20);
return UISlider::OnDragEndEvent(event);
}
void PlayerMainView::CustomSlider::StartAnimator(uint16_t startSize, uint16_t endSize)
{
if (animator_ == nullptr) {
sliderAnimatorCallback_ = new SliderAnimatorCallback();
animator_ = new OHOS::Animator(sliderAnimatorCallback_, this, 100, true);
sliderAnimatorCallback_->SetAnimator(animator_);
}
sliderAnimatorCallback_->SetAnimatorSize(startSize, endSize);
animator_->Start();
}
#pragma endregion
#pragma region 方法转发
void TjdUiAppPlayerView::SyncLyric(const char *lyric)
{
InitTargetView(PlayerViewIndex::PLAYER_VIEW);
dynamic_cast<PlayerMainView *>(viewManager_[PlayerViewIndex::PLAYER_VIEW])->SetLyricText(lyric);
}
void TjdUiAppPlayerView::ChangedVolume(int32_t volume)
{
InitTargetView(PlayerViewIndex::VOLUME_VIEW);
dynamic_cast<PlayerVolumeView *>(viewManager_[PlayerViewIndex::VOLUME_VIEW])->SetVolume(volume);
}
void TjdUiAppPlayerView::SetCurrentMusicName(const char *musicName)
{
InitTargetView(PlayerViewIndex::PLAYER_VIEW);
dynamic_cast<PlayerMainView *>(viewManager_[PlayerViewIndex::PLAYER_VIEW])->SetMusicNameText(musicName);
}
void TjdUiAppPlayerView::SwitchPlayerButtonState(void)
{
InitTargetView(PlayerViewIndex::PLAYER_VIEW);
auto playerView = dynamic_cast<PlayerMainView *>(viewManager_[PlayerViewIndex::PLAYER_VIEW]);
auto state = playerView->GetPlayerButtonState();
state = state == OHOS::UICheckBox::UICheckBoxState::SELECTED ? OHOS::UICheckBox::UICheckBoxState::UNSELECTED
: OHOS::UICheckBox::UICheckBoxState::SELECTED;
playerView->SetPlayerButtonState(state);
}
void TjdUiAppPlayerView::SetPlayerButtonState(OHOS::UICheckBox::UICheckBoxState state)
{
InitTargetView(PlayerViewIndex::PLAYER_VIEW);
auto playerView = dynamic_cast<PlayerMainView *>(viewManager_[PlayerViewIndex::PLAYER_VIEW]);
playerView->SetPlayerButtonState(state);
}
void TjdUiAppPlayerView::SetConnectDevice(OHOS::UICheckBox::UICheckBoxState state)
{
InitTargetView(PlayerViewIndex::DEVICE_VIEW);
dynamic_cast<PlayerDeviceView *>(viewManager_[PlayerViewIndex::DEVICE_VIEW])->SetHeadsetState(state);
}
OHOS::UICheckBox::UICheckBoxState TjdUiAppPlayerView::GetPlayerButtonState(void)
{
InitTargetView(PlayerViewIndex::PLAYER_VIEW);
auto playerView = dynamic_cast<PlayerMainView *>(viewManager_[PlayerViewIndex::PLAYER_VIEW]);
return playerView->GetPlayerButtonState();
}
void TjdUiAppPlayerView::SetDeviceState(PlayerSource state, bool isConnectEarpod)
{
InitTargetView(PlayerViewIndex::PLAYER_VIEW);
InitTargetView(PlayerViewIndex::DEVICE_VIEW);
dynamic_cast<PlayerDeviceView *>(viewManager_[PlayerViewIndex::DEVICE_VIEW])->SetDeviceType(state);
dynamic_cast<PlayerMainView *>(viewManager_[PlayerViewIndex::PLAYER_VIEW])->SetDeviceType(state);
}
void TjdUiAppPlayerView::ChangedImage(int resId)
{
InitTargetView(PlayerViewIndex::PLAYER_VIEW);
dynamic_cast<PlayerMainView *>(viewManager_[PlayerViewIndex::PLAYER_VIEW])->ChangedImage(resId);
}
void TjdUiAppPlayerView::SetDeviceInfo(const char *name, bool connectState)
{
InitTargetView(PlayerViewIndex::DEVICE_CONNECT_VIEW);
dynamic_cast<PlayerDeviceConnectView *>(viewManager_[PlayerViewIndex::DEVICE_CONNECT_VIEW])
->SetDeviceInfo(name, connectState);
}
void TjdUiAppPlayerView::SetWaitViewInfo(uint16_t textId)
{
InitTargetView(PlayerViewIndex::SEARCHING_VIEW);
dynamic_cast<PlayerWaitView *>(viewManager_[PlayerViewIndex::SEARCHING_VIEW])->SetDesc(textId);
}
void TjdUiAppPlayerView::SetPlayingMusic(int16_t index, bool isPlaying)
{
InitTargetView(PlayerViewIndex::MUSIC_LIST_VIEW);
dynamic_cast<PlayerListView *>(viewManager_[PlayerViewIndex::MUSIC_LIST_VIEW])->SetTargetPlaying(index, isPlaying);
}
void TjdUiAppPlayerView::SetDeleteEntryDesc(const char *name)
{
InitTargetView(PlayerViewIndex::DELETE_MUSIC_VIEW);
dynamic_cast<PlayerCaseDeleteEntryView *>(viewManager_[PlayerViewIndex::DELETE_MUSIC_VIEW])->SetDesc(name);
}
void TjdUiAppPlayerView::RefrashMusicList(void)
{
InitTargetView(PlayerViewIndex::MUSIC_LIST_VIEW);
dynamic_cast<PlayerListView *>(viewManager_[PlayerViewIndex::MUSIC_LIST_VIEW])->RefrashView();
}
static std::string ConvertToTimeFormat(uint64_t Seconds)
{
uint64_t minutes = Seconds / 1000 / 60; // 计算分钟数
uint64_t seconds = Seconds / 1000 % 60; // 计算剩余的秒数
// 使用setw设置宽度setfill设置填充字符确保分钟和秒都是两位数
std::stringstream ss;
ss << std::setw(2) << std::setfill('0') << minutes << ":" << std::setw(2) << std::setfill('0') << seconds;
return ss.str();
}
void TjdUiAppPlayerView::SetTime(int64_t curTime, uint64_t duration, bool dragging)
{
InitTargetView(PlayerViewIndex::PLAYER_VIEW);
auto mainView = dynamic_cast<PlayerMainView *>(viewManager_[PlayerViewIndex::PLAYER_VIEW]);
if (mainView == nullptr) {
return;
}
if (lastDuration_ != duration) {
mainView->SetDurationText(ConvertToTimeFormat(duration).c_str());
lastDuration_ = duration;
}
if (!presenter_->IsDragSlider) {
mainView->SetCurTimeText(ConvertToTimeFormat(curTime).c_str());
mainView->SetSliderValue(curTime * 100 / duration);
}
if (dragging) {
mainView->SetCurTimeText(ConvertToTimeFormat(curTime).c_str());
}
}
#pragma endregion
#pragma region 音乐主界面
PlayerMainView::PlayerMainView()
{
auto &image = OHOS::ImageCacheManager::GetInstance();
OHOS::ImageInfo *res = nullptr;
Resize(OHOS::HORIZONTAL_RESOLUTION, OHOS::VERTICAL_RESOLUTION);
if (OHOS::PageTransitionMgr::GetInstance().GetTopSlideBackImage() == nullptr) {
SetOnDragListener(TjdUiAppPlayerPresenter::GetInstance());
}
title_.SetTextId(STR_ID_10);
title_.SetFont(TJD_VECTOR_FONT_FILENAME, 32);
title_.Resize(200, 100);
title_.SetX((GetWidth() >> 1) - (title_.GetWidth() >> 1));
title_.SetAlign(OHOS::TEXT_ALIGNMENT_CENTER, OHOS::TEXT_ALIGNMENT_CENTER);
songPicture_.SetPosition(163, 72, 142, 142);
res = image.LoadOneInMultiRes(IMG_MUSIC_MUSIC_BJ, MUSIC_IMAGE_BIN_PATH);
songPicture_.SetSrc(res);
musicName_.SetPosition(100, 224, 266, 38);
musicName_.SetLineBreakMode(OHOS::UILabel::LINE_BREAK_ELLIPSIS);
musicName_.SetAlign(OHOS::TEXT_ALIGNMENT_CENTER, OHOS::TEXT_ALIGNMENT_CENTER);
musicName_.SetFont(TJD_VECTOR_FONT_FILENAME, 30);
lyric_.SetPosition(70, 269, 327, 32);
lyric_.SetLineBreakMode(OHOS::UILabel::LINE_BREAK_MARQUEE);
lyric_.SetStyle(OHOS::STYLE_TEXT_OPA, OHOS::OPA_OPAQUE * 0.3);
lyric_.SetAlign(OHOS::TEXT_ALIGNMENT_CENTER, OHOS::TEXT_ALIGNMENT_CENTER);
lyric_.SetRollSpeed(60);
lyric_.SetFont(TJD_VECTOR_FONT_FILENAME, 24);
imgbackGround_.SetPosition(0, 0, OHOS::HORIZONTAL_RESOLUTION, OHOS::VERTICAL_RESOLUTION);
res = image.LoadOneInMultiRes(IMG_MUSIC_BJ, MUSIC_IMAGE_BIN_PATH);
imgbackGround_.SetSrc(res);
// 音乐列表
musicList_.SetOnClickListener(TjdUiAppPlayerPresenter::GetInstance());
musicList_.SetTouchable(true);
musicList_.SetViewId(BTN_MUSIC_LIST_VIEW_ID);
musicList_.SetAutoEnable(false);
musicList_.SetResizeMode(OHOS::UIImageView::ImageResizeMode::CENTER);
musicList_.SetPosition(391, 116, 48, 48);
res = image.LoadOneInMultiRes(IMG_MUSIC_LIST, MUSIC_IMAGE_BIN_PATH);
musicList_.SetSrc(res);
// 上一首
left_.SetOnClickListener(TjdUiAppPlayerPresenter::GetInstance());
left_.SetTouchable(true);
left_.SetViewId(BTN_LEFT_VIEW_ID);
left_.SetAutoEnable(false);
left_.SetResizeMode(OHOS::UIImageView::ImageResizeMode::CENTER);
left_.SetPosition(107, 360, 58, 43);
res = image.LoadOneInMultiRes(IMG_MUSIC_LEFT_ICON, MUSIC_IMAGE_BIN_PATH);
left_.SetSrc(res);
// 下一首
right_.SetOnClickListener(TjdUiAppPlayerPresenter::GetInstance());
right_.SetTouchable(true);
right_.SetViewId(BTN_RIGHT_VIEW_ID);
right_.SetAutoEnable(false);
right_.SetResizeMode(OHOS::UIImageView::ImageResizeMode::CENTER);
right_.SetPosition(301, 360, 58, 44);
res = image.LoadOneInMultiRes(IMG_MUSIC_RIGHT_ICON, MUSIC_IMAGE_BIN_PATH);
right_.SetSrc(res);
// 连接
connect_.SetOnClickListener(TjdUiAppPlayerPresenter::GetInstance());
connect_.SetTouchable(true);
connect_.SetViewId(BTN_CONNECT_VIEW_ID);
connect_.SetAutoEnable(false);
connect_.SetResizeMode(OHOS::UIImageView::ImageResizeMode::CENTER);
connect_.SetPosition(415, 184, 45, 55);
res = image.LoadOneInMultiRes(IMG_MUSIC_PHONE, MUSIC_IMAGE_BIN_PATH);
connect_.SetSrc(res);
// 循环
loop_.SetOnClickListener(TjdUiAppPlayerPresenter::GetInstance());
loop_.SetTouchable(true);
loop_.SetViewId(BTN_LOOP_VIEW_ID);
loop_.SetAutoEnable(false);
loop_.SetResizeMode(OHOS::UIImageView::ImageResizeMode::CENTER);
loop_.SetPosition(35, 117, 52, 47);
res = image.LoadOneInMultiRes(IMG_MUSIC_RANDOM, MUSIC_IMAGE_BIN_PATH);
loop_.SetSrc(res);
// 音量
volume_.SetOnClickListener(TjdUiAppPlayerPresenter::GetInstance());
volume_.SetTouchable(true);
volume_.SetViewId(BTN_VOLUME_VIEW_ID);
volume_.SetAutoEnable(false);
volume_.SetResizeMode(OHOS::UIImageView::ImageResizeMode::CENTER);
volume_.SetPosition(6, 188, 54, 48);
res = image.LoadOneInMultiRes(IMG_MUSIC_VOLUME, MUSIC_IMAGE_BIN_PATH);
volume_.SetSrc(res);
// 播放/暂停
btnPlayer_.SetPosition(211, 355, 44, 50);
btnPlayer_.SetViewId(BTN_START_VIEW_ID);
btnPlayer_.SetStyleForState(OHOS::STYLE_BACKGROUND_OPA, OHOS::OPA_TRANSPARENT,
OHOS::UIButton::ButtonState::PRESSED);
btnPlayer_.SetStyleForState(OHOS::STYLE_BACKGROUND_OPA, OHOS::OPA_TRANSPARENT,
OHOS::UIButton::ButtonState::RELEASED);
btnPlayer_.SetOnClickListener(TjdUiAppPlayerPresenter::GetInstance());
auto startRes = image.LoadOneInMultiRes(IMG_MUSIC_SUSPEND_ICON, MUSIC_IMAGE_BIN_PATH);
auto startLightRes = image.LoadOneInMultiRes(IMG_MUSIC_SUSPEND_ICON_LIGHT, MUSIC_IMAGE_BIN_PATH);
if (startRes != nullptr && startLightRes != nullptr) {
btnPlayer_.SetImageSrc(startRes, startLightRes);
}
slider_.SetPosition(103, 307, 261, 36);
slider_.SetValidWidth(slider_.GetWidth() - 32);
slider_.SetValidHeight(6);
slider_.SetKnobWidth(20);
slider_.SetIntercept(true);
slider_.SetKnobRadius((slider_.GetKnobWidth() >> 1));
slider_.SetKnobColor(OHOS::Color::White());
slider_.SetCapType(OHOS::CapType::CAP_ROUND);
slider_.SetSliderColor(OHOS::Color::Gray(), OHOS::Color::White());
slider_.SetSliderEventListener(TjdUiAppPlayerPresenter::GetInstance());
curTime_.SetLineBreakMode(OHOS::UILabel::LINE_BREAK_WRAP);
curTime_.SetPosition(41, 308, 57, 24);
curTime_.SetText("00:00");
curTime_.SetAlign(OHOS::TEXT_ALIGNMENT_CENTER, OHOS::TEXT_ALIGNMENT_CENTER);
curTime_.SetFont(TJD_DIN_MEDIUM_FONT_FILENAME, 24);
duration_.SetLineBreakMode(OHOS::UILabel::LINE_BREAK_WRAP);
duration_.SetPosition(366, 308, 57, 24);
duration_.SetText("00:00");
duration_.SetAlign(OHOS::TEXT_ALIGNMENT_CENTER, OHOS::TEXT_ALIGNMENT_CENTER);
duration_.SetFont(TJD_DIN_MEDIUM_FONT_FILENAME, 24);
Add(&imgbackGround_);
Add(&songPicture_);
Add(&title_);
Add(&musicName_);
Add(&lyric_);
Add(&btnPlayer_);
Add(&musicList_);
Add(&left_);
Add(&right_);
Add(&connect_);
Add(&loop_);
Add(&slider_);
Add(&volume_);
Add(&curTime_);
Add(&duration_);
}
PlayerMainView::~PlayerMainView() { RemoveAll(); }
void PlayerMainView::SetPlayerButtonState(OHOS::UICheckBox::UICheckBoxState state)
{
auto &image = OHOS::ImageCacheManager::GetInstance();
OHOS::ImageInfo *defaultRes = nullptr;
OHOS::ImageInfo *triggeredRes = nullptr;
btnPlayerState_ = state;
if (btnPlayerState_ == OHOS::UICheckBox::UICheckBoxState::SELECTED) {
defaultRes = image.LoadOneInMultiRes(IMG_MUSIC_START_ICON, MUSIC_IMAGE_BIN_PATH);
triggeredRes = image.LoadOneInMultiRes(IMG_MUSIC_START_ICON_LIGHT, MUSIC_IMAGE_BIN_PATH);
} else {
defaultRes = image.LoadOneInMultiRes(IMG_MUSIC_SUSPEND_ICON, MUSIC_IMAGE_BIN_PATH);
triggeredRes = image.LoadOneInMultiRes(IMG_MUSIC_SUSPEND_ICON_LIGHT, MUSIC_IMAGE_BIN_PATH);
}
if (defaultRes != nullptr && triggeredRes != nullptr) {
btnPlayer_.SetImageSrc(defaultRes, triggeredRes);
}
btnPlayer_.Invalidate();
}
void PlayerMainView::ChangedImage(int resId)
{
OHOS::ImageInfo *res = OHOS::ImageCacheManager::GetInstance().LoadOneInMultiRes(resId, MUSIC_IMAGE_BIN_PATH);
if (res != nullptr) {
loop_.SetSrc(res);
}
}
void PlayerMainView::SetDeviceType(PlayerSource state)
{
musicList_.SetTouchable(state != PlayerSource::PLAYER_SOURCE_PHONE);
musicList_.SetOpaScale(state != PlayerSource::PLAYER_SOURCE_PHONE ? OHOS::OPA_OPAQUE : 0.3 * OHOS::OPA_OPAQUE);
slider_.SetTouchable(state != PlayerSource::PLAYER_SOURCE_PHONE);
slider_.SetKnobStyle(OHOS::STYLE_BACKGROUND_OPA,
state != PlayerSource::PLAYER_SOURCE_PHONE ? OHOS::OPA_OPAQUE : 0.3 * OHOS::OPA_OPAQUE);
slider_.SetOpaScale(state != PlayerSource::PLAYER_SOURCE_PHONE ? OHOS::OPA_OPAQUE : 0.3 * OHOS::OPA_OPAQUE);
loop_.SetTouchable(state != PlayerSource::PLAYER_SOURCE_PHONE);
loop_.SetOpaScale(state != PlayerSource::PLAYER_SOURCE_PHONE ? OHOS::OPA_OPAQUE : 0.3 * OHOS::OPA_OPAQUE);
}
#pragma endregion
#pragma region 音乐列表项
PlayersCaseView::PlayersCaseView()
{
auto *imageAnimatorInfo = TjdUiAppPlayerView::GetInstance()->GetImageAnimatorInfo();
auto &image = OHOS::ImageCacheManager::GetInstance();
auto deleteRes = image.LoadOneInMultiRes(IMG_MUSIC_DELETE, MUSIC_IMAGE_BIN_PATH);
Resize(122 + 450, 110);
SetStyle(OHOS::STYLE_MARGIN_BOTTOM, 8);
mainView_.SetViewId("play");
mainView_.SetPosition(0, 0, 450, GetHeight());
mainView_.SetStyle(OHOS::STYLE_BACKGROUND_OPA, 0XFF);
mainView_.SetStyle(OHOS::STYLE_BACKGROUND_COLOR, 0XFF262626);
mainView_.SetStyle(OHOS::STYLE_BORDER_RADIUS, GetHeight() / 2);
mainView_.SetTouchable(true);
mainView_.SetDraggable(true);
leftHide_.SetPosition(0, 0, 0, 0);
rightHide_.SetPosition(450 + 22 + 250, 0, 0, 0);
deleteIcon_.SetPosition(450 + 22, 10, 100, 100);
if (deleteRes != nullptr) {
deleteIcon_.SetSrc(deleteRes);
}
deleteIcon_.SetTouchable(true);
deleteIcon_.SetViewId("delete");
name_.SetText(" ");
name_.SetFont(TJD_VECTOR_FONT_FILENAME, 34);
name_.SetLineBreakMode(OHOS::UILabel::LINE_BREAK_MARQUEE);
name_.SetAlign(OHOS::TEXT_ALIGNMENT_LEFT, OHOS::TEXT_ALIGNMENT_CENTER);
name_.SetPosition(43, 33, 320, 55);
mainView_.Add(&name_);
mainView_.Add(&imageAnimator_);
imageAnimator_.SetPosition(383, 35, 39, 37);
imageAnimator_.SetImageAnimatorSrc(imageAnimatorInfo, 3, 75);
SetPlaying(false);
Add(&mainView_);
Add(&deleteIcon_);
Add(&leftHide_);
Add(&rightHide_);
}
PlayersCaseView::~PlayersCaseView()
{
mainView_.RemoveAll();
RemoveAll();
}
void PlayersCaseView::SetPlaying(bool isPlaying)
{
imageAnimator_.SetVisible(isPlaying);
if (isPlaying) {
imageAnimator_.Start();
} else {
imageAnimator_.Stop();
}
}
void PlayersCaseView::StartAnimator(uint16_t ACCLevel, int16_t dragDistanceX, int16_t dragDistanceY)
{
UIScrollView::SetDragACCLevel(ACCLevel);
UIScrollView::StartAnimator(dragDistanceX, dragDistanceY);
}
bool PlayersCaseView::OnDragStartEvent(const OHOS::DragEvent &event)
{
TjdUiAppPlayerPresenter *presenter = TjdUiAppPlayerPresenter::GetInstance();
if (presenter == nullptr) {
return false;
}
auto direction = event.GetDragDirection();
if (direction == OHOS::DragEvent::DIRECTION_LEFT_TO_RIGHT) {
auto *lastView = static_cast<PlayersCaseView *>(TjdUiAppPlayerPresenter::GetInstance()->GetSelectView());
if (lastView != nullptr && lastView != this) {
lastView->StartAnimator(3, 466, 0);
}
TjdUiAppPlayerPresenter::GetInstance()->SetSelectView(this);
OHOS::UIScrollView::OnDragEvent(event);
startDrag = true;
intercept = true;
} else {
startDrag = false;
intercept = false;
}
return false;
}
bool PlayersCaseView::OnDragEvent(const OHOS::DragEvent &event)
{
if (!startDrag) {
return false;
}
OHOS::UIScrollView::OnDragEvent(event);
return intercept;
}
bool PlayersCaseView::OnDragEndEvent(const OHOS::DragEvent &event)
{
if (!startDrag) {
startDrag = false;
return false;
}
OHOS::Rect coor = deleteIcon_.GetRect();
int16_t val = 480 - 22 - coor.GetLeft();
if (val >= deleteIcon_.GetWidth() / 2) {
auto scroll = (deleteIcon_.GetWidth() - val);
StartAnimator(2, -466, 0);
} else {
auto scroll = -(deleteIcon_.GetWidth() - val);
StartAnimator(2, 466, 0);
}
return intercept;
}
#pragma endregion
#pragma region 音乐列表容器
PlayersCaseViewGroup::PlayersCaseViewGroup(std::list<PlayerCaseInfo> *list)
{
SetAutoSize(true);
playersItemList_ = new std::list<PlayersCaseView *>();
playerCaseList_ = list;
clickListener_ = new PlayerListOnClickListener();
int16_t startY = 0;
for (auto &item : *playerCaseList_) {
auto view = new PlayersCaseView();
view->SetName(item.sliceId);
view->SetViewIndex(item.index);
view->SetPosition(0, startY);
startY += view->GetHeight() + 8;
view->SetOnClickListener(clickListener_);
playersItemList_->emplace_back(view);
Add(view);
}
}
PlayersCaseViewGroup::~PlayersCaseViewGroup()
{
RemoveAll();
for (auto &item : *playersItemList_) {
delete item;
}
if (clickListener_ != nullptr) {
delete clickListener_;
clickListener_ = nullptr;
}
delete playersItemList_;
playersItemList_ = nullptr;
}
void PlayersCaseViewGroup::RefreshView(void)
{
PlayersCaseView *view = nullptr;
// 如果当前个数大于列表个数,删除多余的。
while (playerCaseList_->size() > playersItemList_->size()) {
view = new PlayersCaseView();
if (playersItemList_->size() == 0) {
view->SetPosition(0, 0);
} else {
view->SetPosition(0, playersItemList_->back()->GetY() + playersItemList_->back()->GetHeight() + 8);
}
view->SetViewIndex(playersItemList_->size());
view->SetOnClickListener(clickListener_);
playersItemList_->emplace_back(view);
Add(view);
}
// 如果小于,删除多余的
while (playerCaseList_->size() < playersItemList_->size()) {
view = playersItemList_->back();
playersItemList_->pop_back();
Remove(view);
delete view;
if (playersItemList_->size() != 0) {
view = playersItemList_->back();
}
}
// 刷新数据
auto itemIt = playersItemList_->begin();
auto dataIt = playerCaseList_->begin();
for (; itemIt != playersItemList_->end() && dataIt != playerCaseList_->end(); ++itemIt, ++dataIt) {
(*itemIt)->SetName(dataIt->sliceId);
(*itemIt)->SetViewIndex(dataIt->index);
(*itemIt)->ScrollBy(466, 0);
}
SetHeight(playersItemList_->size() * (110 + 8));
}
#pragma endregion
#pragma region 音乐列表界面
PlayerListView::PlayerListView()
{
Resize(OHOS::HORIZONTAL_RESOLUTION, OHOS::VERTICAL_RESOLUTION);
SetOnDragListener(TjdUiAppPlayerPresenter::GetInstance());
title_.SetTextId(STR_ID_10);
title_.SetFont(TJD_VECTOR_FONT_FILENAME, 32);
title_.Resize(200, 100);
title_.SetX((GetWidth() >> 1) - (title_.GetWidth() >> 1));
title_.SetAlign(OHOS::TEXT_ALIGNMENT_CENTER, OHOS::TEXT_ALIGNMENT_CENTER);
SetRotateEnable(*this);
listGroup_ = new PlayersCaseViewGroup(&PlayersListGroup::GetInstance()->GetCase());
listGroup_->SetPosition(0, 173);
const int16_t bottomY = (listGroup_->GetY() + listGroup_->GetHeight() + (OHOS::VERTICAL_RESOLUTION / 2)) - 110 / 2;
bottomLine_.SetY(bottomY);
bottomLine_.Invalidate();
desc_.SetTextId(STR_ID_277);
desc_.SetFont(TJD_VECTOR_FONT_FILENAME, 30);
desc_.Resize(330, 330);
desc_.SetPosition(68, 68);
desc_.SetAlign(OHOS::TEXT_ALIGNMENT_CENTER, OHOS::TEXT_ALIGNMENT_CENTER);
desc_.SetVisible(false);
topLine_.SetPosition(0, 0, 0, 0);
Add(&title_);
Add(listGroup_);
Add(&topLine_);
Add(&bottomLine_);
Add(&desc_);
}
PlayerListView::~PlayerListView()
{
if (listGroup_ != nullptr) {
delete listGroup_;
listGroup_ = nullptr;
}
RemoveAll();
}
void PlayerListView::ShowView()
{
SetVisible(true);
TjdUiUtils::ViewRequestFocus(*this);
}
void PlayerListView::HideView()
{
SetVisible(false);
ClearFocus();
}
void PlayerListView::SetTargetPlaying(int16_t index, bool isPlaying)
{
std::list<PlayersCaseView *> *list = listGroup_->GetPlayersItemList();
if (list == nullptr) {
return;
}
for (auto &item : *list) {
item->SetPlaying(isPlaying && item->GetViewIndex() == index);
}
}
void PlayerListView::RefrashView()
{
if (listGroup_ == nullptr) {
return;
}
if (PlayersListGroup::GetInstance()->GetCase().size() == 0) {
desc_.SetVisible(true);
listGroup_->SetVisible(false);
} else {
desc_.SetVisible(false);
listGroup_->SetVisible(true);
listGroup_->RefreshView();
const int16_t bottomY =
(listGroup_->GetY() + listGroup_->GetHeight() + (OHOS::VERTICAL_RESOLUTION / 2)) - 110 / 2;
bottomLine_.SetY(bottomY);
bottomLine_.Invalidate();
}
}
#pragma endregion
#pragma region 音量界面
PlayerVolumeView::PlayerVolumeView()
{
auto &image = OHOS::ImageCacheManager::GetInstance();
auto volumeRes = image.LoadOneInMultiRes(IMG_MUSIC_VOLUME_LIGHT, MUSIC_IMAGE_BIN_PATH);
Resize(OHOS::HORIZONTAL_RESOLUTION, OHOS::VERTICAL_RESOLUTION);
SetOnDragListener(TjdUiAppPlayerPresenter::GetInstance());
sliderVolume_.SetPosition(173, 55, 120, 320);
sliderVolume_.SetDirection(OHOS::UISlider::Direction::DIR_BOTTOM_TO_TOP);
sliderVolume_.SetValidWidth(sliderVolume_.GetWidth());
sliderVolume_.SetValidHeight(sliderVolume_.GetHeight());
sliderVolume_.SetSliderColor(OHOS::Color::GetColorFromRGBA(0x66, 0x66, 0x66, 0x4C),
OHOS::Color::GetColorFromRGBA(0x66, 0x66, 0x66, 0xff));
sliderVolume_.SetSliderEventListener(TjdUiAppPlayerPresenter::GetInstance()->GetVolumeListener().get());
sliderVolume_.SetValue(50);
sliderVolume_.SetSliderRadius(32, 32);
imgVolume_.SetPosition(216, 401, 34, 34);
if (volumeRes != nullptr) {
imgVolume_.SetSrc(volumeRes);
}
Add(&sliderVolume_);
Add(&imgVolume_);
}
void PlayerVolumeView::ShowView()
{
SetVisible(true);
TjdUiUtils::ViewRequestFocus(sliderVolume_);
}
void PlayerVolumeView::HideView()
{
SetVisible(false);
sliderVolume_.ClearFocus();
}
#pragma endregion
#pragma region 设备界面
PlayerDeviceView::PlayerDeviceView()
{
Resize(OHOS::HORIZONTAL_RESOLUTION, OHOS::VERTICAL_RESOLUTION);
SetOnDragListener(TjdUiAppPlayerPresenter::GetInstance());
auto &image = OHOS::ImageCacheManager::GetInstance();
phoneItemInfo.deviceIndex = PlayerDeviceType::DEVICE_PHONE;
phoneItemInfo.textId = STR_ID_265;
phoneItemInfo.state = false;
phoneItemInfo.active = true;
phoneItemInfo.iconInfo = image.LoadOneInMultiRes(IMG_MUSIC_PHONE_COLOR, MUSIC_IMAGE_BIN_PATH);
phoneItemInfo.selectInfo = image.LoadOneInMultiRes(IMG_MUSIC_ICON_SELECT, MUSIC_IMAGE_BIN_PATH);
phoneItemInfo.unSelectInfo = image.LoadOneInMultiRes(IMG_MUSIC_ICON_NO, MUSIC_IMAGE_BIN_PATH);
watchItemInfo.deviceIndex = PlayerDeviceType::DEVICE_WATCH;
watchItemInfo.textId = STR_ID_266;
watchItemInfo.state = true;
watchItemInfo.active = true;
watchItemInfo.iconInfo = image.LoadOneInMultiRes(IMG_MUSIC_CALL, MUSIC_IMAGE_BIN_PATH);
watchItemInfo.selectInfo = image.LoadOneInMultiRes(IMG_MUSIC_ICON_SELECT, MUSIC_IMAGE_BIN_PATH);
watchItemInfo.unSelectInfo = image.LoadOneInMultiRes(IMG_MUSIC_ICON_NO, MUSIC_IMAGE_BIN_PATH);
// btItemInfo.deviceIndex = PlayerDeviceType::DEVICE_HEADSET;
// btItemInfo.textId = STR_ID_267;
// btItemInfo.state = false;
// btItemInfo.active = true;
// btItemInfo.selectInfo = image.LoadOneInMultiRes(IMG_MUSIC_OPEN, MUSIC_IMAGE_BIN_PATH);
// btItemInfo.unSelectInfo = image.LoadOneInMultiRes(IMG_MUSIC_COLSE, MUSIC_IMAGE_BIN_PATH);
deviceSelectInfoList.emplace_back(phoneItemInfo);
deviceSelectInfoList.emplace_back(watchItemInfo);
// deviceSelectInfoList.emplace_back(btItemInfo);
deviceSelectListAdapter_ =
new TjdUITransformListGroupAdapter<DeviceSelectListItemInfo, DeviceSelectListItemView,
std::list<DeviceSelectListItemInfo>>(deviceSelectInfoList);
deviceSelectList_ = new TjdUITransformListGroup(deviceSelectListAdapter_, "音乐");
Add(deviceSelectList_);
}
PlayerDeviceView::~PlayerDeviceView()
{
RemoveAll();
if (deviceSelectList_ != nullptr) {
deviceSelectList_->RemoveAll();
delete deviceSelectList_;
deviceSelectList_ = nullptr;
}
if (deviceSelectListAdapter_ != nullptr) {
delete deviceSelectListAdapter_;
deviceSelectListAdapter_ = nullptr;
}
}
void PlayerDeviceView::SetHeadsetState(OHOS::UICheckBox::UICheckBoxState state)
{
for (auto &item : deviceSelectInfoList) {
if (item.deviceIndex == PlayerDeviceType::DEVICE_HEADSET) {
item.state = state == OHOS::UICheckBox::UICheckBoxState::SELECTED;
break;
}
}
deviceSelectList_->RefreshList();
}
void PlayerDeviceView::SetDeviceType(PlayerSource state)
{
for (auto &item : deviceSelectInfoList) {
if (item.deviceIndex == PlayerDeviceType::DEVICE_PHONE) {
item.state = state == PlayerSource::PLAYER_SOURCE_PHONE;
} else if (item.deviceIndex == PlayerDeviceType::DEVICE_WATCH) {
item.state = state == PlayerSource::PLAYER_SOURCE_WATCH;
} else if (item.deviceIndex == PlayerDeviceType::DEVICE_HEADSET) {
item.active = state == PlayerSource::PLAYER_SOURCE_WATCH;
}
}
deviceSelectList_->RefreshList();
}
void PlayerDeviceView::ShowView()
{
SetVisible(true);
deviceSelectList_->RequestFocus();
}
void PlayerDeviceView::HideView()
{
SetVisible(false);
deviceSelectList_->ClearFocus();
}
#pragma endregion
#pragma region 连接列表界面
PlayerSearchView::PlayerSearchView()
{
imageRes[0] = IMG_MUSIC_ICON01;
imageRes[1] = IMG_MUSIC_ICON02;
imageRes[2] = IMG_MUSIC_ICON03;
auto &image = OHOS::ImageCacheManager::GetInstance();
Resize(OHOS::HORIZONTAL_RESOLUTION, OHOS::VERTICAL_RESOLUTION);
SetOnDragListener(TjdUiAppPlayerPresenter::GetInstance());
auto searchRes = image.LoadOneInMultiRes(IMG_MUSIC_SEARCH, MUSIC_IMAGE_BIN_PATH);
desc_.SetFont(TJD_VECTOR_FONT_FILENAME, 36);
desc_.SetTextId(STR_ID_269);
desc_.SetLineBreakMode(OHOS::UILabel::LINE_BREAK_WRAP);
desc_.Resize(300, 300);
desc_.SetAlign(OHOS::TEXT_ALIGNMENT_CENTER, OHOS::TEXT_ALIGNMENT_CENTER);
desc_.SetPosition(((GetWidth() - desc_.GetWidth()) >> 1), (GetHeight() - desc_.GetHeight()) >> 1);
searchBtn_.SetPosition(187, 0, 92, 92);
searchBtn_.SetViewId(BTN_SEARCH_VIEW_ID);
searchBtn_.SetTouchable(true);
searchBtn_.SetOnClickListener(TjdUiAppPlayerPresenter::GetInstance());
searchBtn_.SetSrc(searchRes);
listSearchBtn_.SetPosition(187, 0, 92, 92);
listSearchBtn_.SetViewId(BTN_SEARCH_VIEW_ID);
listSearchBtn_.SetTouchable(true);
listSearchBtn_.SetOnClickListener(TjdUiAppPlayerPresenter::GetInstance());
listSearchBtn_.SetSrc(searchRes);
headsetListAdapter_ =
new TjdUITransformListGroupAdapter<HeadsetListItemInfo, HeadsetListItemView, std::list<HeadsetListItemInfo>>(
headsetInfoList);
headsetList_ = new TjdUITransformListGroup(headsetListAdapter_);
headsetList_->AddCustomView(&listSearchBtn_, TjdUITransformListGroup::CustomViewPos::BOTTOM);
title_.SetTextId(STR_ID_268);
title_.SetFont(TJD_VECTOR_FONT_FILENAME, 32);
title_.Resize(200, 100);
title_.SetX((headsetList_->GetWidth() >> 1) - (title_.GetWidth() >> 1));
title_.SetAlign(OHOS::TEXT_ALIGNMENT_CENTER, OHOS::TEXT_ALIGNMENT_CENTER);
auto titleOffset_ = ((OHOS::Screen::GetInstance().GetHeight() >> 1) - (128 >> 1) - 17 - title_.GetHeight());
headsetList_->AddCustomView(&title_, TjdUITransformListGroup::CustomViewPos::TITLE);
headsetList_->SetTitleOffset(titleOffset_);
headsetList_->RequestFocus();
Add(&desc_);
Add(&searchBtn_);
Add(headsetList_);
}
PlayerSearchView::~PlayerSearchView()
{
RemoveAll();
if (headsetList_ != nullptr) {
headsetList_->RemoveAll();
delete headsetList_;
headsetList_ = nullptr;
}
if (headsetListAdapter_ != nullptr) {
delete headsetListAdapter_;
headsetListAdapter_ = nullptr;
}
}
void PlayerSearchView::ShowView()
{
TjdUiAppPlayerPresenter *presenter = TjdUiAppPlayerPresenter::GetInstance();
if (presenter->IsNeedUpdateHeadsetList) {
RefreshList();
presenter->IsNeedUpdateHeadsetList = false;
}
if (headsetInfoList.size() == 0) {
desc_.SetVisible(true);
searchBtn_.SetVisible(true);
headsetList_->SetVisible(false);
} else {
desc_.SetVisible(false);
searchBtn_.SetVisible(false);
headsetList_->SetVisible(true);
}
SetVisible(true);
headsetList_->RequestFocus();
}
void PlayerSearchView::HideView()
{
SetVisible(false);
headsetList_->ClearFocus();
}
void PlayerSearchView::RefreshList()
{
auto &image = OHOS::ImageCacheManager::GetInstance();
TjdUiAppPlayerPresenter *presenter = TjdUiAppPlayerPresenter::GetInstance();
std::list<HeadsetInfo> &headsetInfo = presenter->GetHeadsetList();
int index = 0;
headsetInfoList.clear();
HeadsetListItemInfo info;
info.moreInfo = image.LoadOneInMultiRes(IMG_MUSIC_MORE, MUSIC_IMAGE_BIN_PATH);
for (HeadsetInfo &item : headsetInfo) {
info.headsetInfo = &item;
info.iconInfo = image.LoadOneInMultiRes(imageRes[index++ % 3], MUSIC_IMAGE_BIN_PATH);
headsetInfoList.emplace_back(info);
}
headsetList_->RefreshList();
auto *transformList_ = headsetList_->GetTransformList();
OHOS::UIView *head = transformList_->GetChildrenHead();
if (head != nullptr) {
int16_t headCenterY = head->GetRect().GetTop() + (head->GetHeight() >> 1);
transformList_->ScrollBy((transformList_->GetHeight() >> 1) - headCenterY);
}
}
#pragma endregion
#pragma region 低电量界面
PlayerLowPowerView::PlayerLowPowerView()
{
Resize(OHOS::HORIZONTAL_RESOLUTION, OHOS::VERTICAL_RESOLUTION);
SetOnDragListener(TjdUiAppPlayerPresenter::GetInstance());
lowPowerLabel_.SetTextId(STR_ID_591);
lowPowerLabel_.SetFont(TJD_VECTOR_FONT_FILENAME, 34);
lowPowerLabel_.Resize(340, 100);
lowPowerLabel_.SetX((GetWidth() >> 1) - (lowPowerLabel_.GetWidth() >> 1));
lowPowerLabel_.SetY(120);
lowPowerLabel_.SetAlign(OHOS::TEXT_ALIGNMENT_CENTER, OHOS::TEXT_ALIGNMENT_BOTTOM);
desc_.SetTextId(STR_ID_592);
desc_.SetFont(TJD_VECTOR_FONT_FILENAME, 34);
desc_.Resize(340, 150);
desc_.SetX((GetWidth() >> 1) - (desc_.GetWidth() >> 1));
desc_.SetY(lowPowerLabel_.GetY() + lowPowerLabel_.GetHeight());
desc_.SetAlign(OHOS::TEXT_ALIGNMENT_CENTER, OHOS::TEXT_ALIGNMENT_TOP);
desc_.SetStyle(OHOS::STYLE_TEXT_OPA, OHOS::OPA_OPAQUE * 0.3);
Add(&lowPowerLabel_);
Add(&desc_);
}
#pragma endregion
#pragma region 等待界面
PlayerWaitView::PlayerWaitView()
{
Resize(OHOS::HORIZONTAL_RESOLUTION, OHOS::VERTICAL_RESOLUTION);
/* 动画页面不允许滑动 */
SetIntercept(true);
SetTouchable(false);
const int waitAnimatorId[] = {
IMG_LOADING_LOADING_01_06, IMG_LOADING_LOADING_02_06, IMG_LOADING_LOADING_03_06, IMG_LOADING_LOADING_04_06,
IMG_LOADING_LOADING_05_06, IMG_LOADING_LOADING_06_06, IMG_LOADING_LOADING_07_06, IMG_LOADING_LOADING_08_06,
IMG_LOADING_LOADING_09_06, IMG_LOADING_LOADING_10_06, IMG_LOADING_LOADING_11_06,
};
const int16_t animatorX = 178;
const int16_t animatorY = 154;
const int16_t animatorWidth = 121;
const int16_t animatorHeight = 121;
animator_.SetPosition(animatorX, animatorY, animatorWidth, animatorHeight);
auto &imgManager = OHOS::ImageCacheManager::GetInstance();
const int size = sizeof(waitAnimatorId) / sizeof(waitAnimatorId[0]);
waitInfo_ = new OHOS::ImageAnimatorInfo[size];
for (int i = 0; i < size; i++) {
waitInfo_[i].imageInfo = imgManager.LoadOneInMultiRes(waitAnimatorId[i], LOADING_IMAGE_BIN_PATH);
waitInfo_[i].pos = {animatorX, animatorY};
waitInfo_[i].width = animatorWidth;
waitInfo_[i].height = animatorHeight;
waitInfo_[i].imageType = OHOS::IMG_SRC_IMAGE_INFO;
}
animator_.SetImageAnimatorSrc(waitInfo_, size, 100);
desc_.SetTextId(STR_ID_273);
desc_.SetFont(TJD_VECTOR_FONT_FILENAME, 34);
desc_.Resize(340, 150);
desc_.SetX((GetWidth() >> 1) - (desc_.GetWidth() >> 1));
desc_.SetY(animator_.GetY() + animator_.GetHeight() + 30);
desc_.SetAlign(OHOS::TEXT_ALIGNMENT_CENTER, OHOS::TEXT_ALIGNMENT_TOP);
Add(&animator_);
Add(&desc_);
Add(&animator_);
}
PlayerWaitView::~PlayerWaitView()
{
if (waitInfo_ != nullptr) {
delete[] waitInfo_;
waitInfo_ = nullptr;
}
RemoveAll();
}
void PlayerWaitView::ShowView()
{
animator_.Start();
SetVisible(true);
}
void PlayerWaitView::HideView()
{
animator_.Stop();
SetVisible(false);
}
void PlayerWaitView::SetDesc(uint16_t textId) { desc_.SetTextId(textId); }
#pragma endregion
#pragma region 设备连接界面
PlayerDeviceConnectView::PlayerDeviceConnectView()
{
auto &imgManager = OHOS::ImageCacheManager::GetInstance();
Resize(OHOS::HORIZONTAL_RESOLUTION, OHOS::VERTICAL_RESOLUTION);
SetOnDragListener(TjdUiAppPlayerPresenter::GetInstance());
title_.SetTextId(STR_ID_267);
title_.SetFont(TJD_VECTOR_FONT_FILENAME, 32);
title_.Resize(200, 100);
title_.SetX((GetWidth() >> 1) - (title_.GetWidth() >> 1));
title_.SetAlign(OHOS::TEXT_ALIGNMENT_CENTER, OHOS::TEXT_ALIGNMENT_CENTER);
name_.SetFont(TJD_VECTOR_FONT_FILENAME, 42);
name_.Resize(350, 50);
name_.SetX((GetWidth() >> 1) - (name_.GetWidth() >> 1));
name_.SetY(150);
name_.SetAlign(OHOS::TEXT_ALIGNMENT_CENTER, OHOS::TEXT_ALIGNMENT_CENTER);
name_.SetLineBreakMode(OHOS::UILabel::LINE_BREAK_MARQUEE);
connectState_.SetFont(TJD_VECTOR_FONT_FILENAME, 32);
connectState_.Resize(350, 100);
connectState_.SetX((GetWidth() >> 1) - (connectState_.GetWidth() >> 1));
connectState_.SetY(name_.GetY() + name_.GetHeight());
connectState_.SetAlign(OHOS::TEXT_ALIGNMENT_CENTER, OHOS::TEXT_ALIGNMENT_TOP);
connectState_.SetStyle(OHOS::STYLE_TEXT_OPA, OHOS::OPA_OPAQUE * 0.3);
connEnterButton_.SetPosition(271, 326, 92, 92);
connEnterButton_.SetViewId(BTN_CONNECT_ENTER_VIEW_ID);
connEnterButton_.SetTouchable(true);
connEnterButton_.SetOnClickListener(TjdUiAppPlayerPresenter::GetInstance());
connEnterButton_.SetSrc(imgManager.LoadOneInMultiRes(IMG_MUSIC_QUEDING, MUSIC_IMAGE_BIN_PATH));
connCancelButton_.SetPosition(103, 326, 92, 92);
connCancelButton_.SetViewId(BTN_CONNECT_CANCEL_VIEW_ID);
connCancelButton_.SetTouchable(true);
connCancelButton_.SetOnClickListener(TjdUiAppPlayerPresenter::GetInstance());
connCancelButton_.SetSrc(imgManager.LoadOneInMultiRes(IMG_MUSIC_QUXIAO, MUSIC_IMAGE_BIN_PATH));
unpairButton_.SetPosition(187, 352, 92, 92);
unpairButton_.SetViewId(BTN_DEVICE_UNPAIR_VIEW_ID);
unpairButton_.SetTouchable(true);
unpairButton_.SetOnClickListener(TjdUiAppPlayerPresenter::GetInstance());
unpairButton_.SetSrc(imgManager.LoadOneInMultiRes(IMG_MUSIC_QUXIAO, MUSIC_IMAGE_BIN_PATH));
SetDeviceInfo("Tianjin pro", false);
Add(&title_);
Add(&name_);
Add(&connectState_);
Add(&connEnterButton_);
Add(&connCancelButton_);
Add(&unpairButton_);
}
void PlayerDeviceConnectView::SetDeviceInfo(const char *name, bool connectState)
{
name_.SetText(name);
connectState_.SetTextId(connectState ? STR_ID_589 : STR_ID_590);
connEnterButton_.SetVisible(!connectState);
connCancelButton_.SetVisible(!connectState);
unpairButton_.SetVisible(connectState);
}
#pragma endregion
#pragma region 连接成功界面
PlayerConnectSuccessView::PlayerConnectSuccessView()
{
Resize(OHOS::HORIZONTAL_RESOLUTION, OHOS::VERTICAL_RESOLUTION);
SetOnDragListener(TjdUiAppPlayerPresenter::GetInstance());
bg_.SetPosition(144, 140, 173, 154);
bg_.SetSrc(OHOS::ImageCacheManager::GetInstance().LoadOneInMultiRes(IMG_MUSIC_BLE_SUCC, MUSIC_IMAGE_BIN_PATH));
title_.SetTextId(STR_ID_278);
title_.SetFont(TJD_VECTOR_FONT_FILENAME, 32);
title_.Resize(300, 140);
title_.SetX((GetWidth() >> 1) - (title_.GetWidth() >> 1));
title_.SetY(bg_.GetY() + bg_.GetHeight() + 10);
title_.SetAlign(OHOS::TEXT_ALIGNMENT_CENTER, OHOS::TEXT_ALIGNMENT_TOP);
Add(&title_);
Add(&bg_);
}
#pragma endregion
#pragma region 连接失败界面
PlayerConnectFailView::PlayerConnectFailView()
{
Resize(OHOS::HORIZONTAL_RESOLUTION, OHOS::VERTICAL_RESOLUTION);
SetOnDragListener(TjdUiAppPlayerPresenter::GetInstance());
bg_.SetPosition(144, 140, 173, 154);
bg_.SetSrc(OHOS::ImageCacheManager::GetInstance().LoadOneInMultiRes(IMG_MUSIC_BLE_FAIL, MUSIC_IMAGE_BIN_PATH));
title_.SetTextId(STR_ID_279);
title_.SetFont(TJD_VECTOR_FONT_FILENAME, 32);
title_.Resize(300, 140);
title_.SetX((GetWidth() >> 1) - (title_.GetWidth() >> 1));
title_.SetY(bg_.GetY() + bg_.GetHeight() + 10);
title_.SetAlign(OHOS::TEXT_ALIGNMENT_CENTER, OHOS::TEXT_ALIGNMENT_TOP);
Add(&title_);
Add(&bg_);
}
#pragma endregion
#pragma region 未连接界面
PlayerConnectAppFailView::PlayerConnectAppFailView()
{
Resize(OHOS::HORIZONTAL_RESOLUTION, OHOS::VERTICAL_RESOLUTION);
SetOnDragListener(TjdUiAppPlayerPresenter::GetInstance());
bg_.SetPosition(144, 140, 173, 154);
bg_.SetSrc(OHOS::ImageCacheManager::GetInstance().LoadOneInMultiRes(IMG_MUSIC_BLE_FAIL, MUSIC_IMAGE_BIN_PATH));
title_.SetTextId(STR_ID_557);
title_.SetFont(TJD_VECTOR_FONT_FILENAME, 32);
title_.Resize(300, 140);
title_.SetX((GetWidth() >> 1) - (title_.GetWidth() >> 1));
title_.SetY(bg_.GetY() + bg_.GetHeight() + 10);
title_.SetAlign(OHOS::TEXT_ALIGNMENT_CENTER, OHOS::TEXT_ALIGNMENT_TOP);
Add(&title_);
Add(&bg_);
}
#pragma endregion
#pragma region 删除歌曲界面
PlayerCaseDeleteEntryView::PlayerCaseDeleteEntryView()
{
auto &image = OHOS::ImageCacheManager::GetInstance();
Resize(OHOS::HORIZONTAL_RESOLUTION, OHOS::VERTICAL_RESOLUTION);
SetOnDragListener(TjdUiAppPlayerPresenter::GetInstance());
title_.SetTextId(STR_ID_282);
title_.SetFont(TJD_VECTOR_FONT_FILENAME, 32);
title_.Resize(200, 100);
title_.SetX((GetWidth() >> 1) - (title_.GetWidth() >> 1));
title_.SetAlign(OHOS::TEXT_ALIGNMENT_CENTER, OHOS::TEXT_ALIGNMENT_CENTER);
title_.SetStyle(OHOS::STYLE_TEXT_COLOR, 0XFFFF0000);
name_.SetFont(TJD_VECTOR_FONT_FILENAME, 32);
name_.Resize(350, 50);
name_.SetX((GetWidth() >> 1) - (name_.GetWidth() >> 1));
name_.SetY(150);
name_.SetAlign(OHOS::TEXT_ALIGNMENT_CENTER, OHOS::TEXT_ALIGNMENT_CENTER);
name_.SetLineBreakMode(OHOS::UILabel::LINE_BREAK_MARQUEE);
desc_.SetTextId(STR_ID_272);
desc_.SetFont(TJD_VECTOR_FONT_FILENAME, 32);
desc_.Resize(350, 100);
desc_.SetX((GetWidth() >> 1) - (desc_.GetWidth() >> 1));
desc_.SetY(name_.GetY() + name_.GetHeight());
desc_.SetAlign(OHOS::TEXT_ALIGNMENT_CENTER, OHOS::TEXT_ALIGNMENT_TOP);
btnCancel_.SetPosition(102, 326, 92, 92);
btnCancel_.SetSrc(image.LoadOneInMultiRes(IMG_MUSIC_QUXIAO, MUSIC_IMAGE_BIN_PATH));
btnCancel_.SetViewId(BTN_DELETE_CANCEL_MUSIC_VIEW_ID);
btnCancel_.SetOnClickListener(TjdUiAppPlayerPresenter::GetInstance());
btnCancel_.SetTouchable(true);
btnEntry_.SetPosition(270, 326, 92, 92);
btnEntry_.SetSrc(image.LoadOneInMultiRes(IMG_MUSIC_QUEDING, MUSIC_IMAGE_BIN_PATH));
btnEntry_.SetViewId(BTN_DELETE_ENTRY_MUSIC_VIEW_ID);
btnEntry_.SetOnClickListener(TjdUiAppPlayerPresenter::GetInstance());
btnEntry_.SetTouchable(true);
Add(&title_);
Add(&name_);
Add(&desc_);
Add(&btnCancel_);
Add(&btnEntry_);
}
void PlayerCaseDeleteEntryView::SetDesc(const char *date) { name_.SetText(date); }
#pragma endregion
} // namespace TJD