From: 罗正yun <1732036298@qq.com> Date: Thu, 18 Jan 2024 12:27:37 +0000 (+0800) Subject: 音乐视图修改附带资源上传 X-Git-Tag: release_V1.2.70_20241020_135402~1359^2 X-Git-Url: http://git.snicker.com.cn/css/static/gitweb.css?a=commitdiff_plain;h=5af97b084900351c4e310422b0d6ad9a5e00da3b;p=mirrors%2FFD230.git 音乐视图修改附带资源上传 --- diff --git a/code/sdk/application/wearable/nativeapp/CMakeLists.txt b/code/sdk/application/wearable/nativeapp/CMakeLists.txt index 9f84f846a..9207ae679 100755 --- a/code/sdk/application/wearable/nativeapp/CMakeLists.txt +++ b/code/sdk/application/wearable/nativeapp/CMakeLists.txt @@ -149,6 +149,8 @@ set(SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/player/src/PlayersPresenter.cpp ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/player/src/PlayersModel.cpp ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/player/src/PlayersCaseListAdapter.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/player/src/PlayerListDelSongView.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/player/src/PlayerListitemView.cpp ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/activity/src/MainActivityView.cpp ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/activity/src/ActivityWeekView.cpp ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/activity/src/ActivityPresenter.cpp diff --git a/code/sdk/application/wearable/nativeapp/nativelauncher/include/UiConfig.h b/code/sdk/application/wearable/nativeapp/nativelauncher/include/UiConfig.h index ed306b143..c9e1f35b5 100755 --- a/code/sdk/application/wearable/nativeapp/nativelauncher/include/UiConfig.h +++ b/code/sdk/application/wearable/nativeapp/nativelauncher/include/UiConfig.h @@ -179,7 +179,6 @@ namespace OHOS static constexpr const char *TEMP_DELETE = APP_RES_PATH "/TEMP_DELETE.bin"; static constexpr const char *COMPASS_CALIBRATE_IMAGE = APP_RES_PATH "/COMPASS_CALIBRATE_IMAGE.bin"; - static constexpr const char *PNG_SETTING_NEXT_IMAGE = APP_RES_PATH "/SETTING_NEXT.bin"; static constexpr const char *PNG_VOICE_ASSISTANT_IMAGE01 = APP_RES_PATH "/VOICE_ASSISTANT_01.bin"; static constexpr const char *PNG_VOICE_ASSISTANT_IMAGE02 = APP_RES_PATH "/VOICE_ASSISTANT_02.bin"; @@ -325,6 +324,11 @@ namespace OHOS static constexpr const char *PNG_WALK_STEPS_IMAGE = APP_RES_PATH "/STEPS_IMAGE.bin"; static constexpr const char *PNG_APPLIST_UI_SAMPLE_IMAGE = APP_RES_PATH "/APPLIST_UI_SAMPLE.bin"; // Applist图标 + static constexpr const char *PNG_CHECKBOX_OFF_IMAGE = APP_RES_PATH "/CHECKBOX_OFF.bin"; // checkbox未选中图片 + static constexpr const char *PNG_CHECKBOX_ON_IMAGE = APP_RES_PATH "/CHECKBOX_ON.bin"; // checkbox选中图片 + static constexpr const char *PNG_SETTING_NEXT_IMAGE = APP_RES_PATH "/SETTING_NEXT.bin"; // 箭头图片 + static constexpr const char *PNG_SETTING_BACKGROUND_IMAGE = APP_RES_PATH "/SETTING_BACKGROUND.bin"; // 按钮的背景图片 + static constexpr const char *PNG_VOLUME_CONTROL_VECTOR = APP_RES_PATH "/VolumeControlVector.bin"; // 调节音量图片 } #endif // UI_CONFIG_H diff --git a/code/sdk/application/wearable/nativeapp/nativelauncher/include/ui_resource_image.h b/code/sdk/application/wearable/nativeapp/nativelauncher/include/ui_resource_image.h index c59a407f8..53562a7e4 100755 --- a/code/sdk/application/wearable/nativeapp/nativelauncher/include/ui_resource_image.h +++ b/code/sdk/application/wearable/nativeapp/nativelauncher/include/ui_resource_image.h @@ -8,20 +8,32 @@ namespace OHOS { static const int HEART_HEARTRATECOOR = 0x100001; static const int HEART_HEARTRATE_BOTTOM = 0x100002; static const int HEART_HEARTRATE_TOP = 0x100003; - static const int PLAYER_PLAYERSMODEL_RANDOM = 0x200001; - static const int PLAYER_INCREASE_BUTTON = 0x200002; - static const int PLAYER_PLAYERSMODEL_SEQUENCE = 0x200003; - static const int PLAYER_DECREASE_BUTTON = 0x200004; - static const int PLAYER_PLAYERSMODEL_LOOP = 0x200005; - static const int PLAYER_PLAYER = 0x200006; - static const int PLAYER_BACK_GROUND = 0x200007; - static const int PLAYER_SOUND_IMAGE = 0x200008; - static const int PLAYER_MUTE_BUTTON = 0x200009; - static const int PLAYER_OPTIONS_IMAGE = 0x20000a; - static const int PLAYER_NEXT_BUTTON = 0x20000b; - static const int PLAYER_PLAYERSMODEL_REPEATS = 0x20000c; - static const int PLAYER_PLAYERHIGHLIGHT = 0x20000d; - static const int PLAYER_PRE_BUTTOW = 0x20000e; + /* -------------------------------------------------------------------------- */ + static const int PLAYER_BACKGROUND = 0x200001; // 音乐背景 + static const int PLAYER_DECREASE_BUTTON = 0x200002; // 点击后声音减少 + static const int PLAYER_EARPHONE = 0x200003; // 大的蓝牙耳机的icon + static const int PLAYER_EARPHONE_COLOR = 0x200004; // 蓝牙耳机模式绿色图片 + static const int PLAYER_EARPHONE_WHITE = 0x200005; // 蓝牙耳机模式白色图片 + static const int PLAYER_ELLIPSE = 0x200006; // 椭圆 + static const int PLAYER_INCREASE_BUTTON = 0x200007; // 点击后声音加 + static const int PLAYER_LOCAL_MUSIC_COLOR = 0x200008; // 本地音乐模式绿色图片,默认本地模式 + static const int PLAYER_LOCAL_MUSIC_WHITE = 0x200009; // 本地音乐模式白色图片 + static const int PLAYER_MUSIC_DELETE = 0x20000a; // 删除音乐 + static const int PLAYER_MUSIC_LIST = 0x20000b; // 音乐列表 + static const int PLAYER_MUSIC_NEXT = 0x20000c; // 下一首音乐 + static const int PLAYER_MUSIC_PROVE = 0x20000d; // 上一首音乐 + static const int PLAYER_MUSIC_VOICE = 0x20000e; // 音量 + static const int PLAYER_MUTE_BUTTON = 0x20000f; // 静音 + static const int PLAYER_PAUSE = 0x200010; // 播放暂停 + static const int PLAYER_PHONE_COLOR = 0x200011; // 手机音乐模式绿色图片 + static const int PLAYER_PHONE_WHITE = 0x200012; // 手机音乐模式白色图片 + static const int PLAYER_PLAY = 0x200013; // 播放音乐 + static const int PLAYER_PLAYERSMODEL_LOOP = 0x200014; // 播放模式:循环播放 + static const int PLAYER_PLAYERSMODEL_RANDOM = 0x200015; // 播放模式:随机播放 + static const int PLAYER_PLAYERSMODEL_REPEATS = 0x200016; // 播放模式:单曲循环 + static const int PLAYER_PLAYERSMODEL_SEQUENCE = 0x200017; // 播放模式循序播放 + static const int PLAYER_PLAYING = 0x200018; // 播放音乐中 + /* -------------------------------------------------------------------------- */ static const int CLOCK_CLOCK0 = 0x300001; static const int CLOCK_CLOCK1 = 0x300002; static const int CLOCK_CLOCK10 = 0x300003; diff --git a/code/sdk/application/wearable/nativeapp/nativeui/main/include/VolumeSettingView.h b/code/sdk/application/wearable/nativeapp/nativeui/main/include/VolumeSettingView.h index 34022fe87..5248864f0 100755 --- a/code/sdk/application/wearable/nativeapp/nativeui/main/include/VolumeSettingView.h +++ b/code/sdk/application/wearable/nativeapp/nativeui/main/include/VolumeSettingView.h @@ -34,6 +34,7 @@ public: private: VolumeSliderEventListener *listener{nullptr}; UISlider *progress{nullptr}; + UIImageView* VolumeVetor = nullptr; UIButton *increaseButton{nullptr}; UIButton *decreaseButton{nullptr}; int ShowVolume(); diff --git a/code/sdk/application/wearable/nativeapp/nativeui/main/src/MainPresenterSample.cpp b/code/sdk/application/wearable/nativeapp/nativeui/main/src/MainPresenterSample.cpp index 5ed0a4a8f..6497b1fe6 100755 --- a/code/sdk/application/wearable/nativeapp/nativeui/main/src/MainPresenterSample.cpp +++ b/code/sdk/application/wearable/nativeapp/nativeui/main/src/MainPresenterSample.cpp @@ -123,11 +123,10 @@ map g_jumpView = { { MAIN_CLICK_WEATHER, VIEW_MAIN_SAMPLE }, HealthModel::GetInstance()->UpdateBriScrStatus(0); } } - - if (g_jumpView.count(curViewId) != 0) { - NativeAbility::GetInstance().ChangeSlice(g_jumpView[curViewId]); - } #endif + if (g_jumpView.count(curViewId) != 0) { + NativeAbility::GetInstance().ChangeSlice(g_jumpView[curViewId]); + } return true; } bool MainPresenterSample::OnLongPress(UIView &view, const LongPressEvent &event) diff --git a/code/sdk/application/wearable/nativeapp/nativeui/main/src/MainViewSample.cpp b/code/sdk/application/wearable/nativeapp/nativeui/main/src/MainViewSample.cpp index 891de3e92..7cd8aeadc 100755 --- a/code/sdk/application/wearable/nativeapp/nativeui/main/src/MainViewSample.cpp +++ b/code/sdk/application/wearable/nativeapp/nativeui/main/src/MainViewSample.cpp @@ -30,8 +30,8 @@ namespace OHOS {HEART_RATE, &MainViewSample::InitHeartRatePage}, {BloodOxygen, &MainViewSample::InitBloodOxygenPage}, {TRAINING, &MainViewSample::InitTrainingPage}, - {PLAYER,&MainViewSample::InitMusicPlayerPage} {COMPASS, &MainViewSample::InitCompassPage}, + {PLAYER,&MainViewSample::InitMusicPlayerPage}, #if 0 {APPLIST,&MainViewSample::InitApplistPage} #endif diff --git a/code/sdk/application/wearable/nativeapp/nativeui/main/src/VolumeSettingView.cpp b/code/sdk/application/wearable/nativeapp/nativeui/main/src/VolumeSettingView.cpp index 4276373a0..9c13aa45e 100755 --- a/code/sdk/application/wearable/nativeapp/nativeui/main/src/VolumeSettingView.cpp +++ b/code/sdk/application/wearable/nativeapp/nativeui/main/src/VolumeSettingView.cpp @@ -16,10 +16,10 @@ static constexpr uint16_t BUTTON_Y = 0; static constexpr uint16_t BUTTON_Y2 = 363; static constexpr uint16_t BUTTON_WIDTH = 90; static constexpr uint16_t BUTTON_HEIGHT = 90; -static constexpr uint16_t SLIDER_X = 207; -static constexpr uint16_t SLIDER_Y = 90; -static constexpr uint16_t SLIDER_WIDTH = 40; -static constexpr uint16_t SLIDER_HEIGHT = 274; +static constexpr uint16_t SLIDER_X = 167; +static constexpr uint16_t SLIDER_Y = 77; +static constexpr uint16_t SLIDER_WIDTH = 130; +static constexpr uint16_t SLIDER_HEIGHT = 310; constexpr uint16_t VOLUME_OK = 0; constexpr int16_t VOLUME_ERROR = (-1); @@ -77,6 +77,23 @@ bool VolumeSettingView::SetUpVolume(void) progress->SetViewId(VOLUME_PROGRESS); progress->SetRange(VOLUME_MAX, VOLUME_MIN); + progress->SetStyle(STYLE_BORDER_RADIUS, 100); + progress->SetBackgroundStyle(STYLE_LINE_CAP, CapType::CAP_ROUND); + progress->SetForegroundStyle(STYLE_LINE_CAP,CapType::CAP_ROUND); + progress->SetSliderColor(Color::GetColorFromRGBA(0x19, 0x19, 0x19, 0xff), Color::GetColorFromRGBA(0xff, 0xff, 0xff, 0xff)); + progress->SetForegroundStyle(STYLE_BACKGROUND_OPA, 0xff); + + if(VolumeVetor == nullptr) + { + VolumeVetor = new UIImageView(); + if (progress == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "VolumeVetor new fail"); + return false; + } + } + VolumeVetor->SetPosition(213, 213,40,40); + VolumeVetor->SetSrc("/user/res/VolumeControlVector.bin"); + if (listener == nullptr) { listener = new VolumeSliderEventListener(); if (listener == nullptr) { @@ -94,6 +111,7 @@ bool VolumeSettingView::SetUpVolume(void) SetDraggable(true); SetTouchable(true); Add(progress); + Add(VolumeVetor); ShowVolume(); return true; @@ -130,6 +148,7 @@ int VolumeSettingView::ShowVolume(void) image = ImageCacheManager::GetInstance().LoadOneInMultiRes(PLAYER_INCREASE_BUTTON, PLAYER_IAMGES); increaseButton->SetImageSrc(image, image); increaseButton->SetOnClickListener(clickListener); + increaseButton->SetVisible(false); Add(increaseButton); if (decreaseButton == nullptr) { @@ -144,6 +163,7 @@ int VolumeSettingView::ShowVolume(void) image = ImageCacheManager::GetInstance().LoadOneInMultiRes(PLAYER_DECREASE_BUTTON, PLAYER_IAMGES); decreaseButton->SetImageSrc(image, image); decreaseButton->SetOnClickListener(clickListener); + decreaseButton->SetVisible(false); Add(decreaseButton); return VOLUME_OK; diff --git a/code/sdk/application/wearable/nativeapp/nativeui/player/include/BluetoothView.h b/code/sdk/application/wearable/nativeapp/nativeui/player/include/BluetoothView.h index 52e2472f6..7e12904f1 100755 --- a/code/sdk/application/wearable/nativeapp/nativeui/player/include/BluetoothView.h +++ b/code/sdk/application/wearable/nativeapp/nativeui/player/include/BluetoothView.h @@ -1,51 +1,53 @@ -/* - * Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved. - * Description: Bluetooth view 设置页面 - * Create: 2021-09-5 - */ - -#ifndef BLUETOOTH_VIEW_H -#define BLUETOOTH_VIEW_H - -#include "components/ui_label.h" -#include "components/ui_image_view.h" -#include "components/ui_radio_button.h" -#include "components/ui_label_button.h" -#include "components/ui_view_group.h" -#include "BaseView.h" - -namespace OHOS { -class PlayerOnDragListener; -class BluetoothView { -public: - BluetoothView(); - virtual ~BluetoothView(); - UIViewGroup *LoadBluetoothView(void); - static BluetoothView *GetInstance(void); - UIViewGroup *group{nullptr}; - UIRadioButton *GetPhoneButton(void); - UIRadioButton *GetWatchButton(void); - UIButton *GetSettingButton(void); - UILabelButton *GetDeleteButton(void); -private: - UILabel *watchLabel{nullptr}; - UILabel *phoneLabel{nullptr}; - UILabel *bluetoothLabel{nullptr}; - UIImageView *watchImage{nullptr}; - UIImageView *phoneImage{nullptr}; - UIImageView *bluetoothImage{nullptr}; - UIRadioButton *watchButton{nullptr}; - UIRadioButton *phoneButton{nullptr}; - UIButton *settingButton{nullptr}; - UILabelButton *deleteButton{nullptr}; - int LoadRadioButton(); - int LoadButtonView(); - int LoadLabelButton(); - int LoadLabel(); - int LoadImage(); - - void SetUpButton(UILabelButton *btn, const Point& point, int16_t width, int16_t height, - UIView::OnClickListener *listener); -}; -} // namespace OHOS +/* + * Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved. + * Description: Bluetooth view 设置页面 + * Create: 2021-09-5 + */ + +#ifndef BLUETOOTH_VIEW_H +#define BLUETOOTH_VIEW_H + +#include "components/ui_label.h" +#include "components/ui_image_view.h" +#include "components/ui_radio_button.h" +#include "components/ui_label_button.h" +#include "components/ui_view_group.h" +#include "components/ui_scroll_view.h" +#include "BaseView.h" + +namespace OHOS { +class PlayerOnDragListener; +class BluetoothView { +public: + BluetoothView(); + virtual ~BluetoothView(); + UIViewGroup *LoadMusicSourceView(void); + static BluetoothView *GetInstance(void); + UIViewGroup *group{nullptr}; + UIScrollView *scrollView{nullptr}; + UIRadioButton *GetPhoneButton(void); + UIRadioButton *GetWatchButton(void); + UIButton *GetSettingButton(void); +private: + UILabel *titleLabel{nullptr}; + UIImageView *phoneBackground{nullptr}; + UIImageView *watchBackground{nullptr}; + UIImageView *bluetoothBackground{nullptr}; + UILabel *watchLabel{nullptr}; + UILabel *phoneLabel{nullptr}; + UILabel *bluetoothLabel{nullptr}; + UIImageView *watchImage{nullptr}; + UIImageView *phoneImage{nullptr}; + UIImageView *bluetoothImage{nullptr}; + UIRadioButton *watchButton{nullptr}; + UIRadioButton *phoneButton{nullptr}; + UIButton *settingButton{nullptr}; + int LoadTitleLabel(void); + int LoadImageBackGround(void); + int LoadRadioButton(void); + int LoadButtonView(void); + int LoadLabel(void); + int LoadImage(void); +}; +} // namespace OHOS #endif \ No newline at end of file diff --git a/code/sdk/application/wearable/nativeapp/nativeui/player/include/PlayerListDelSongView.h b/code/sdk/application/wearable/nativeapp/nativeui/player/include/PlayerListDelSongView.h new file mode 100644 index 000000000..6c5ff7a84 --- /dev/null +++ b/code/sdk/application/wearable/nativeapp/nativeui/player/include/PlayerListDelSongView.h @@ -0,0 +1,34 @@ +#ifndef PLAYER_LIST_DEL_SONG_VIEW_H +#define PLAYER_LIST_DEL_SONG_VIEW_H + +#include "BaseView.h" +#include "string" +#include "View.h" +#include "components/ui_scroll_view.h" +#include "components/ui_label.h" +#include "components/ui_button.h" + +namespace OHOS +{ + class PlayerListDelSongView + { + + public: + PlayerListDelSongView(); + virtual ~PlayerListDelSongView(); + static PlayerListDelSongView *GetInstance(void); + UIScrollView * InitDelSongView(); + void DeInitView(void); + void SetTheSongLabelStyle(const char * songName); + private: + UIScrollView *scrollView1_ = nullptr; + UILabel *label1_ = nullptr; + UILabel *songNameLabel = nullptr; + UIButton *button3_ = nullptr; + UILabel *label2_ = nullptr; + UIButton *button1_ = nullptr; + UIButton *button2_ = nullptr; + bool viewInitStatus{false}; +}; +} +#endif diff --git a/code/sdk/application/wearable/nativeapp/nativeui/player/include/PlayerListitemView.h b/code/sdk/application/wearable/nativeapp/nativeui/player/include/PlayerListitemView.h new file mode 100644 index 000000000..171d36e01 --- /dev/null +++ b/code/sdk/application/wearable/nativeapp/nativeui/player/include/PlayerListitemView.h @@ -0,0 +1,35 @@ +#ifndef PLAYER_LIST_ITEM_VIEW_H +#define PLAYER_LIST_ITEM_VIEW_H + +#include "components/ui_label.h" +#include "components/ui_view_group.h" +#include "components/ui_button.h" +#include "player/include/PlayersCaseListAdapter.h" +#include "PlayersPresenter.h" +namespace OHOS +{ + class PlayerListItemView : public UIViewGroup + { + public: + explicit PlayerListItemView(); + virtual ~PlayerListItemView(); + virtual void SetItemInfo(const PlayerListItem itemInfo); + virtual void SetUpChild(); + int GetPlayerListIndex(); + UILabel *GetLabel() + { + return &sLabel; + } + UIButton *GetButton() + { + return &sButton; + } + private: + PlayerListItemView(const PlayerListItemView &); + UILabel sLabel; + UIButton sButton; + PlayerListItem sItemInfo{0,nullptr}; + }; + +} +#endif \ No newline at end of file diff --git a/code/sdk/application/wearable/nativeapp/nativeui/player/include/PlayersCaseListAdapter.h b/code/sdk/application/wearable/nativeapp/nativeui/player/include/PlayersCaseListAdapter.h index bf1c48788..678b33588 100755 --- a/code/sdk/application/wearable/nativeapp/nativeui/player/include/PlayersCaseListAdapter.h +++ b/code/sdk/application/wearable/nativeapp/nativeui/player/include/PlayersCaseListAdapter.h @@ -1,30 +1,61 @@ -/* - * Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved. - * Description: Player view - * Author: - * Create: 2021-07-26 - */ - -#ifndef PLAYERS_CASE_LIST_ADAPTER_H -#define PLAYERS_CASE_LIST_ADAPTER_H - -#include "components/abstract_adapter.h" -#include "components/ui_label.h" -#include "components/ui_label_button.h" -#include "UiConfig.h" - -namespace OHOS { -class PlayersCaseListAdapter : public AbstractAdapter { -public: - PlayersCaseListAdapter() {} - ~PlayersCaseListAdapter(); - UIView *GetView(UIView *inView, int16_t index) override; - uint16_t GetCount() override; - -private: - void LabelButtonSet(); - UILabelButton *item{nullptr}; - UIView::OnClickListener *listener{nullptr}; -}; -} // namespace OHOS +/* + * Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved. + * Description: Player view + * Author: + * Create: 2021-07-26 + */ + +#ifndef PLAYERS_CASE_LIST_ADAPTER_H +#define PLAYERS_CASE_LIST_ADAPTER_H + +#include +#include +#include "components/abstract_adapter.h" +#include "components/ui_label.h" +#include "components/ui_label_button.h" +#include "components/ui_scroll_view.h" +#include "UiConfig.h" + +namespace OHOS { +class PlayersCaseListAdapter; +class BtnOnClickListListener : public UIView::OnClickListener { +public: + BtnOnClickListListener(){} + ~BtnOnClickListListener(){} + bool OnClick(UIView& view, const ClickEvent& event) override; + void SetButtonAndLabel(UILabel *label,UIButton *button,int index,UIView::OnClickListener *listener) + { + m_label[index] = label; + m_label[index]->SetTouchable(true); + m_label[index]->SetOnClickListener(listener); + m_button[index] = button; + m_button[index]->SetOnClickListener(listener); + } + void SongClick(PlayersCaseListAdapter *P_PlayersCaseListAdapter,int index); + void SongNotClick(PlayersCaseListAdapter *P_PlayersCaseListAdapter,int index); +private: + void BtnOnListData(UIView& view); + UILabel * m_label[256]{nullptr}; + UIButton *m_button[256]{nullptr}; + int playOrDeleteStatus[256]{0}; + char *sliceId_{nullptr};//歌名 + int16_t index_{0}; //歌曲索引 +}; +typedef struct +{ + int index; + const char *label; // 标签 +} PlayerListItem; +class PlayersCaseListAdapter : public AbstractAdapter { +public: + PlayersCaseListAdapter(); + ~PlayersCaseListAdapter(); + static PlayersCaseListAdapter *GetInstance(void); + UIView *GetView(UIView *inView, int16_t index) override; + uint16_t GetCount() override; + BtnOnClickListListener *p_BtnOnClickListListener{nullptr}; +private: + UIView::OnClickListener *listener{nullptr}; +}; +} // namespace OHOS #endif // PLAYERS_CASE_LIST_ADAPTER_H \ No newline at end of file diff --git a/code/sdk/application/wearable/nativeapp/nativeui/player/include/PlayersModel.h b/code/sdk/application/wearable/nativeapp/nativeui/player/include/PlayersModel.h index 724c7394d..2df70c160 100755 --- a/code/sdk/application/wearable/nativeapp/nativeui/player/include/PlayersModel.h +++ b/code/sdk/application/wearable/nativeapp/nativeui/player/include/PlayersModel.h @@ -17,7 +17,7 @@ #include "audio_base_type.h" #include "PlayersPresenter.h" #include "bts_avrcp_controller.h" - +#include "PlayersCaseListAdapter.h" namespace OHOS { using OHOS::Media::Player; using OHOS::Media::Source; @@ -94,6 +94,7 @@ public: void ClearActivateAudioInterrupt(void); void GetDuration(int64_t &duration); private: + PlayersCaseListAdapter *m_PlayersCaseListAdapter{nullptr}; int64_t duration_{0}; bool audioInitStatus{false}; char *sliceId{nullptr}; diff --git a/code/sdk/application/wearable/nativeapp/nativeui/player/include/PlayersPresenter.h b/code/sdk/application/wearable/nativeapp/nativeui/player/include/PlayersPresenter.h index f0df42347..9a6b473f3 100755 --- a/code/sdk/application/wearable/nativeapp/nativeui/player/include/PlayersPresenter.h +++ b/code/sdk/application/wearable/nativeapp/nativeui/player/include/PlayersPresenter.h @@ -1,247 +1,252 @@ -/* - * Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved. - * Description: Player view - * Author: - * Create: 2021-07-26 - */ - -#ifndef PLAYERS_PRESENTER_H -#define PLAYERS_PRESENTER_H -#include "gfx_utils/list.h" -#include "ohos_types.h" -#include "components/ui_view.h" -#include "player.h" -#include "audio_manager.h" -#include "audio_base_type.h" -#include "BluetoothView.h" -#include "VolumeSettingView.h" -#include "VolumeSettingPresenter.h" -#include "BluetoothModel.h" -#include "BluetoothEarPhoneView.h" -#include "BluetoothEarListView.h" -#include "BluetoothOptionsView.h" -#include "BluetoothReconnectView.h" -#include "TipsSuccMessageView.h" -#include "TipsConnFailMessageView.h" -#include "TipsFailMessageView.h" -#include "BluetoothDeviceListView.h" -#include "BluetoothItemView.h" - -namespace OHOS { -using OHOS::Media::Player; -using namespace OHOS::Media; -using namespace::Audio; -using Audio::AudioManager; -class VolumeSettingView; -#define DEC_NUM_256 256 -// 点击按钮视图ID -#define BLUETOOTH_RESCAN_BUTTON "rescanButton" -#define BLUETOOTH_NEWEQUIPMENT_BUTTON "newEquipmentButton" -#define BLUETOOTH_CANCELCONNEDREQUEST_BUTTON "cancelConnedRequestButton" -#define BLUETOOTH_UNPAIR_BUTTON "unpairButton" -#define BLUETOOTH_OPTIONONE_BUTTON "optionsOneButton" -#define BLUETOOTH_SETTING_BUTTON "settingButton" -#define BLUETOOTH_DELETE_BUTTON "deleteButton" -#define BLUETOOTH_SUCC_BACK_BUTTON "succBackButton" -#define BLUETOOTH_FAIL_BACK_BUTTON "failBackButton" // 重试按钮 -#define BLUETOOTH_CONN_FAIL_BACK_BUTTON "connfailBackButton" -// 视图滑动事件ID -#define BLUETOOTH_EARLIST_VIEW "BluetoothEarListView" -#define BLUETOOTH_DEVICE_LIST_VIEW "BluetoothDeviceListView" -#define BLUETOOTH_EAR_PHONE_VIEW "BluetoothEarPhoneView" -#define BLUETOOTH_OPTIONS_VIEW "BluetoothOptionsView" -#define BLUETOOTH_RECONNECT_VIEW "BluetoothReconnectView" -#define BLUETOOTH_VIEW "BluetoothView" -#define TIPS_SUCC_MESSAGE_VIEW "TipsSuccMessageView" -#define TIPS_FAIL_MESSAGE_VIEW "TipsFailMessageView" -#define TIPS_CONN_FAIL_MESSAGE_VIEW "TipsConnFailMessageView" - -static constexpr uint8_t FONT_THIRTY_SIZE = 30; // 30:字体大小 -static constexpr uint8_t FONT_FORTY_SIZE = 40; // 40:字体大小 - -struct PlayerCaseInfo { - char sliceId[DEC_NUM_256]; - int16_t index; -}; - - -class PlayersListGroup { -public: - PlayersListGroup() {} - ~PlayersListGroup(); - static PlayersListGroup *GetInstance() - { - static PlayersListGroup instance; - return &instance; - } - void SetUpListCase(); - List& GetCase(); - char *GetCase(int16_t index); - void AddCase(PlayerCaseInfo testCaseInfo); - -private: - List *playersCaseList_{nullptr}; - int GetAllFiles(List *playersCaseList); -}; - -// Button OnClick -class ButtonOnClickListener : public UIView::OnClickListener { -public: - enum VolumeSetState : uint8_t { - MUTE, - LOW, - MEDIUM, - LOUD, - }; - ButtonOnClickListener() {} - ButtonOnClickListener(UIView *view) : view_(view) {} - ~ButtonOnClickListener(); - static ButtonOnClickListener *GetInstance() - { - static ButtonOnClickListener instance; - return &instance; - } - bool OnClick(UIView& view, const ClickEvent& event) override; -private: - UIView *view_{nullptr}; - void PlayerButtonOnClick(); - void SoundButtonOnClick(); - void PlayerModelButtonOnClick(); - void OptionsButtonOnClick(); - VolumeSettingView *volumeSetting{nullptr}; - UIViewGroup *volumeSettingView{nullptr}; -}; - -// 播放器回调 -class PlayerCallbackImpl : public OHOS::Media::PlayerCallback { -public: - PlayerCallbackImpl(); - ~PlayerCallbackImpl(); - void OnPlaybackComplete(); - void OnError(int32_t errorType, int32_t errorCode); - void OnInfo(int type, int extra); - void OnRewindToComplete(); -private: -}; - -// 播放器 -class PlayerInterruptListener : public InterruptListener { -public: - PlayerInterruptListener(); - ~PlayerInterruptListener(); - - void SetOwner(std::shared_ptr player); - void SetPaused(bool value); - void SetResumed(bool value); - void RestFlag(); - bool IsPaused(); - bool IsDelayed(); - bool IsResumed(); - bool IsBeginStopped(); - bool IsEndStopped(); - void OnInterrupt(int32_t type, int32_t hint) override; - void PausePlayer(void); - void ResumePlayer(void); - void StopPlayer(void); - std::shared_ptr GetPlayer(); - -private: - std::shared_ptr player_{nullptr}; - bool isPaused_{false}; - bool isDelayed_{false}; - bool isResumed_{false}; - bool isBeginStopped_{false}; - bool isEndStopped_{false}; -}; - -// 滑动手势 -class PlayerOnDragListener : public UIView::OnDragListener, public RootView::OnKeyActListener { -public: - PlayerOnDragListener(); - ~PlayerOnDragListener(); - virtual bool OnDragEnd(UIView& view, const DragEvent& event) override; - bool OnDrag(UIView& view, const DragEvent& event) override; - bool OnKeyAct(UIView& view, const KeyEvent& event) override;//增加按键事件 - static PlayerOnDragListener *GetInstance(); -private: - void OnDragChangView(const DragEvent& event, int16_t hideView, int16_t showView, bool isStopScan); - void OnDragChangBluetoothView(const DragEvent& event); - void DropEarPhoneView(const DragEvent& event); - void DropEarListView(const DragEvent& event); - void CorrespondingJump(const DragEvent& event, int16_t hideView); -}; - -// Bluetooth View redirection -class BluetoothEarListView; -class BluetoothOptionsView; -class BluetoothDeviceListView; -class JumpView { -public: - enum BluetoothJumpViewNum : uint8_t { - BLUETOOTHEARPHONEVIEW = 0, // 扫描 - BLUETOOTHEARLISTVIEW, // 扫描列表 - BLUETOOTHDEVICELISTVIEW, // 已配对设备列表 - BLUETOOTHEOPTIONSVIEW, // 选择界面 - BLUETOOTHRECONNECTVIEW, - TIPSSUCCMESSAGEVIEW, // 连接成功 - TIPSCONNFAILMESSAGEVIEW, // 连接失败 - TIPSFAILMESSAGEVIEW, - BLUETOOTHEVIEW, // 设置界面 - BLUETOOTHEJUMP_MAX, - }; - JumpView(); - ~JumpView(); - static JumpView *GetInstance(); - void ChangeView(int16_t hideView, int16_t showView); -private: - bool ChangeTipsFailMessageView(int16_t hideView, int16_t thisView); - bool ChangeTipsConnFailMessageView(int16_t hideView, int16_t thisView); - bool ChangeTipsSuccMessageView(int16_t hideView, int16_t thisView); - bool ChangeBluetoothEarPhoneView(int16_t hideView, int16_t thisView); - bool ChangeBluetoothEarListView(int16_t hideView, int16_t thisView); - bool ChangeBluetoothView(int16_t hideView, int16_t thisView); - bool ChangeBluetoothOptionsView(int16_t hideView, int16_t thisView); - bool ChangeBluetoothDeviceListView(int16_t hideView, int16_t thisView); - bool ChangeBluetoothReconnectView(int16_t hideView, int16_t thisView); - bool CheckViewParam(int16_t hideView, int16_t showView); - void ResetEarListView(int16_t hideView); - UIViewGroup *container[BLUETOOTHEJUMP_MAX]{nullptr}; // CONTAINER_NUM :蓝牙耳机连接的9个界面容器 - BluetoothEarPhoneView *bluetoothEarPhoneView{nullptr}; - BluetoothEarListView *bluetoothEarListView{nullptr}; - BluetoothView *bluetoothView{nullptr}; - BluetoothOptionsView *bluetoothOptionsView{nullptr}; - BluetoothDeviceListView *bluetoothDeviceListView{nullptr}; - BluetoothReconnectView *bluetoothReconnectView{nullptr}; - TipsSuccMessageView *tipsSuccMessageView{nullptr}; - TipsConnFailMessageView *tipsConnFailMessageView{nullptr}; - TipsFailMessageView *tipsFailMessageView{nullptr}; - typedef bool (JumpView::*PreprosssChangeView)(int16_t hideView, int16_t thisView); - PreprosssChangeView preProcessView[BLUETOOTHEJUMP_MAX]; -}; - -class PlayersPresenter : public UIView::OnClickListener { -public: - PlayersPresenter(); - ~PlayersPresenter(); - static PlayersPresenter *GetInstance(); - void OnClickRescanButton(void); - void OnClickNewEquipmentButton(void); - void OnClickCancelConnedRequestButton(void); - void OnClickButtonUnpair(void); - void OnClickButtonOptionOne(void); - void OnClickSetting(void); - void OnClickDelete(void); - void OnClickSuccBack(void); - void OnClickConnFailBack(void); - void OnClickFailBack(void); - void SetTitleSetText(const char *text); - void SetPlaybackProgress(int64_t value); - void SetPlayerState(bool value); - void PlayerbackReset(void); - void PlayerHeadsetReset(void); - void ShowPlayerListGroup(void); -private: - bool OnClick(UIView& view, const ClickEvent& event) override; -}; -} // namespace OHOS -#endif +/* + * Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved. + * Description: Player view + * Author: + * Create: 2021-07-26 + */ + +#ifndef PLAYERS_PRESENTER_H +#define PLAYERS_PRESENTER_H +#include "gfx_utils/list.h" +#include "ohos_types.h" +#include "components/ui_view.h" +#include "player.h" +#include "audio_manager.h" +#include "audio_base_type.h" +#include "BluetoothView.h" +#include "VolumeSettingView.h" +#include "VolumeSettingPresenter.h" +#include "BluetoothModel.h" +#include "BluetoothEarPhoneView.h" +#include "BluetoothEarListView.h" +#include "BluetoothOptionsView.h" +#include "BluetoothReconnectView.h" +#include "TipsSuccMessageView.h" +#include "TipsConnFailMessageView.h" +#include "TipsFailMessageView.h" +#include "BluetoothDeviceListView.h" +#include "BluetoothItemView.h" +#include "PlayersCaseListAdapter.h" +namespace OHOS { +using OHOS::Media::Player; +using namespace OHOS::Media; +using namespace::Audio; +using Audio::AudioManager; +class VolumeSettingView; +#define DEC_NUM_256 256 +// 点击按钮视图ID +#define BLUETOOTH_RESCAN_BUTTON "rescanButton" +#define BLUETOOTH_NEWEQUIPMENT_BUTTON "newEquipmentButton" +#define BLUETOOTH_CANCELCONNEDREQUEST_BUTTON "cancelConnedRequestButton" +#define BLUETOOTH_UNPAIR_BUTTON "unpairButton" +#define BLUETOOTH_OPTIONONE_BUTTON "optionsOneButton" +#define BLUETOOTH_SETTING_BUTTON "settingButton" +#define BLUETOOTH_DELETE_BUTTON "deleteButton" +#define BLUETOOTH_SUCC_BACK_BUTTON "succBackButton" +#define BLUETOOTH_FAIL_BACK_BUTTON "failBackButton" // 重试按钮 +#define BLUETOOTH_CONN_FAIL_BACK_BUTTON "connfailBackButton" +// 视图滑动事件ID +#define BLUETOOTH_EARLIST_VIEW "BluetoothEarListView" +#define BLUETOOTH_DEVICE_LIST_VIEW "BluetoothDeviceListView" +#define BLUETOOTH_EAR_PHONE_VIEW "BluetoothEarPhoneView" +#define BLUETOOTH_OPTIONS_VIEW "BluetoothOptionsView" +#define BLUETOOTH_RECONNECT_VIEW "BluetoothReconnectView" +#define BLUETOOTH_VIEW "BluetoothView" +#define TIPS_SUCC_MESSAGE_VIEW "TipsSuccMessageView" +#define TIPS_FAIL_MESSAGE_VIEW "TipsFailMessageView" +#define TIPS_CONN_FAIL_MESSAGE_VIEW "TipsConnFailMessageView" + +static constexpr uint8_t FONT_THIRTY_SIZE = 30; // 30:字体大小 +static constexpr uint8_t FONT_FORTY_SIZE = 40; // 40:字体大小 + +struct PlayerCaseInfo { + char sliceId[DEC_NUM_256]; + int16_t index; +}; + + +class PlayersListGroup { +public: + PlayersListGroup() {} + ~PlayersListGroup(); + static PlayersListGroup *GetInstance() + { + static PlayersListGroup instance; + return &instance; + } + void SetUpListCase(); + List& GetCase(); + char *GetCase(int16_t index); + void AddCase(PlayerCaseInfo testCaseInfo); + +private: + List *playersCaseList_{nullptr}; + int GetAllFiles(List *playersCaseList); +}; + +// Button OnClick +class ButtonOnClickListener : public UIView::OnClickListener { +public: + enum VolumeSetState : uint8_t { + MUTE, + LOW, + MEDIUM, + LOUD, + }; + ButtonOnClickListener() {} + ButtonOnClickListener(UIView *view) : view_(view) {} + ~ButtonOnClickListener(); + static ButtonOnClickListener *GetInstance() + { + static ButtonOnClickListener instance; + return &instance; + } + bool OnClick(UIView& view, const ClickEvent& event) override; +private: + UIView *view_{nullptr}; + void PlayerButtonOnClick(); + void SoundButtonOnClick(); + void PlayerModelButtonOnClick(); + void OptionsButtonOnClick(); + PlayersCaseListAdapter *m_PlayersCaseListAdapter{nullptr}; + VolumeSettingView *volumeSetting{nullptr}; + UIViewGroup *volumeSettingView{nullptr}; +}; + +// 播放器回调 +class PlayerCallbackImpl : public OHOS::Media::PlayerCallback { +public: + PlayerCallbackImpl(); + ~PlayerCallbackImpl(); + void OnPlaybackComplete(); + void OnError(int32_t errorType, int32_t errorCode); + void OnInfo(int type, int extra); + void OnRewindToComplete(); +private: +}; + +// 播放器 +class PlayerInterruptListener : public InterruptListener { +public: + PlayerInterruptListener(); + ~PlayerInterruptListener(); + + void SetOwner(std::shared_ptr player); + void SetPaused(bool value); + void SetResumed(bool value); + void RestFlag(); + bool IsPaused(); + bool IsDelayed(); + bool IsResumed(); + bool IsBeginStopped(); + bool IsEndStopped(); + void OnInterrupt(int32_t type, int32_t hint) override; + void PausePlayer(void); + void ResumePlayer(void); + void StopPlayer(void); + std::shared_ptr GetPlayer(); + +private: + std::shared_ptr player_{nullptr}; + bool isPaused_{false}; + bool isDelayed_{false}; + bool isResumed_{false}; + bool isBeginStopped_{false}; + bool isEndStopped_{false}; +}; + +// 滑动手势 +class PlayerOnDragListener : public UIView::OnDragListener { +public: + PlayerOnDragListener(); + ~PlayerOnDragListener(); + virtual bool OnDragEnd(UIView& view, const DragEvent& event) override; + bool OnDrag(UIView& view, const DragEvent& event) override; + static PlayerOnDragListener *GetInstance(); +private: + void OnDragChangView(const DragEvent& event, int16_t hideView, int16_t showView, bool isStopScan); + void OnDragChangBluetoothView(const DragEvent& event); + void DropEarPhoneView(const DragEvent& event); + void DropEarListView(const DragEvent& event); + void CorrespondingJump(const DragEvent& event, int16_t hideView); +}; + +// Bluetooth View redirection +class BluetoothEarListView; +class BluetoothOptionsView; +class BluetoothDeviceListView; +class JumpView { +public: + enum BluetoothJumpViewNum : uint8_t { + BLUETOOTHEARPHONEVIEW = 0, // 扫描 + BLUETOOTHEARLISTVIEW, // 扫描列表 + BLUETOOTHDEVICELISTVIEW, // 已配对设备列表 + BLUETOOTHEOPTIONSVIEW, // 选择界面 + BLUETOOTHRECONNECTVIEW, + TIPSSUCCMESSAGEVIEW, // 连接成功 + TIPSCONNFAILMESSAGEVIEW, // 连接失败 + TIPSFAILMESSAGEVIEW, + BLUETOOTHEVIEW, // 蓝牙视图 + BLUETOOTHEJUMP_MAX, + }; + JumpView(); + ~JumpView(); + static JumpView *GetInstance(); + void ChangeView(int16_t hideView, int16_t showView); +private: + bool ChangeTipsFailMessageView(int16_t hideView, int16_t thisView); + bool ChangeTipsConnFailMessageView(int16_t hideView, int16_t thisView); + bool ChangeTipsSuccMessageView(int16_t hideView, int16_t thisView); + bool ChangeBluetoothEarPhoneView(int16_t hideView, int16_t thisView); + bool ChangeBluetoothEarListView(int16_t hideView, int16_t thisView); + bool ChangeBluetoothView(int16_t hideView, int16_t thisView); + bool ChangeBluetoothOptionsView(int16_t hideView, int16_t thisView); + bool ChangeBluetoothDeviceListView(int16_t hideView, int16_t thisView); + bool ChangeBluetoothReconnectView(int16_t hideView, int16_t thisView); + bool CheckViewParam(int16_t hideView, int16_t showView); + void ResetEarListView(int16_t hideView); + UIViewGroup *container[BLUETOOTHEJUMP_MAX]{nullptr}; // CONTAINER_NUM :蓝牙耳机连接的9个界面容器 + BluetoothEarPhoneView *bluetoothEarPhoneView{nullptr}; + BluetoothEarListView *bluetoothEarListView{nullptr}; + BluetoothView *bluetoothView{nullptr}; + BluetoothOptionsView *bluetoothOptionsView{nullptr}; + BluetoothDeviceListView *bluetoothDeviceListView{nullptr}; + BluetoothReconnectView *bluetoothReconnectView{nullptr}; + TipsSuccMessageView *tipsSuccMessageView{nullptr}; + TipsConnFailMessageView *tipsConnFailMessageView{nullptr}; + TipsFailMessageView *tipsFailMessageView{nullptr}; + typedef bool (JumpView::*PreprosssChangeView)(int16_t hideView, int16_t thisView); + PreprosssChangeView preProcessView[BLUETOOTHEJUMP_MAX]; +}; + +class PlayersPresenter : public UIView::OnClickListener { +public: + PlayersPresenter(); + ~PlayersPresenter(); + static PlayersPresenter *GetInstance(); + void OnClickRescanButton(void); + void OnClickNewEquipmentButton(void); + void OnClickCancelConnedRequestButton(void); + void OnClickButtonUnpair(void); + void OnClickButtonOptionOne(void); + void OnClickSetting(void); + void OnClickDelete(void); + void OnClickSuccBack(void); + void OnClickConnFailBack(void); + void OnClickFailBack(void); + void SetTitleSetText(const char *text); + void SetMusicSourceSetText(const char *text); + void SetPhoneMusicConnectStatusSetText(const char *text); + void SetPhoneMusicConnectStatusLabelIsVisible(bool status); + void SetMusicListButtonIsVisible(bool status); + void SetOptionsButtonImageStyle(ImageInfo *image); + void SetPlaybackProgress(int64_t value); + void SetPlayerState(bool value); + void PlayerbackReset(void); + void PlayerHeadsetReset(void); + void ShowPlayerListGroup(void); +private: + bool OnClick(UIView& view, const ClickEvent& event) override; +}; +} // namespace OHOS +#endif diff --git a/code/sdk/application/wearable/nativeapp/nativeui/player/include/PlayersView.h b/code/sdk/application/wearable/nativeapp/nativeui/player/include/PlayersView.h index 5f95d1d87..27d3b877f 100755 --- a/code/sdk/application/wearable/nativeapp/nativeui/player/include/PlayersView.h +++ b/code/sdk/application/wearable/nativeapp/nativeui/player/include/PlayersView.h @@ -1,114 +1,141 @@ -/* - * Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved. - * Description: Player view - * Author: - * Create: 2021-07-26 - */ - -#ifndef PLAYERS_VIEW_H -#define PLAYERS_VIEW_H - -#include -#include "components/ui_image_view.h" -#include "components/ui_label.h" -#include "components/root_view.h" -#include "components/ui_view_group.h" -#include "components/ui_button.h" -#include "components/ui_label_button.h" -#include "components/ui_abstract_scroll.h" -#include "components/ui_circle_progress.h" -#include "components/ui_checkbox.h" -#include "components/ui_list.h" -#include "BaseView.h" -#include "font/ui_font_bitmap.h" -#include "font/ui_font.h" -#include "graphic_config.h" -#include "components/ui_card_page.h" -#include "PlayersPresenter.h" - -namespace OHOS { -#define PLAY_PROGRESS_MIN 0 -#define PLAY_PROGRESS_MAX 100 -class JumpView; -class PlayersPresenter; -class PlayersCaseListAdapter; -class PlayersView : public UICardPage { -public: - PlayersView(); - virtual ~PlayersView(); - static PlayersView *GetInstance(void); - bool InitView(void); - void PreLoad(void) override; - void UnLoad(void) override; - bool OnDragEvent(const DragEvent& event) override; - - void SetUpLabel(const char *title, int16_t x, int16_t y); - void ShowUpListView(void); - void TitleSetText(const char *text); - void PlayerModelButtonSetSrc(uint32_t playMode); - int16_t GetVolumeRank(void); - void SetVolumeRank(int16_t value); - void SetVolumeAddOne(void); - UILabelButton *GetBackButton(void); - UIButton *GetPullButton(void); - UIButton *GetOptionsButton(void); - UIButton *GetPreButton(void); - UIButton *GetNextButton(void); - UILabel *GetTitleLabel(void); - UICheckBox *GetPlayerButton(void); - UIImageView *GetSoundButton(void); - UIImageView *GetPlayerModelButton(void); - UICircleProgress *GetPlaybackProgress(void); - UICheckBox::UICheckBoxState GetPlayerButtonState(void); - void SetPlayerButtonState(UICheckBox::UICheckBoxState state); - UIList *GetPlayerList(void); - void SetPlayerListGroupStatus(bool status); - void SetPlayerCtrVolume(float leftVolume, float rightVolume); - void CreateJumpView(void); - void CreatePlayersPresenter(void); - void CreatePlayerOnDragListener(void); -private: - bool InitBackGround(void); - void TearDownView(); - void CreatePlayerMusicName(); - int ShowUpCheckBoxButton(); - int ShowUpButton(); - int ShowUpButtonOptions(); - int ShowUpButtonView(); - int ShowUpCircleProgress(); - bool ShowUpPlayerMode(); - void SetUpButton(UIButton *btn, const Point& point, int16_t width, int16_t height, - UIView::OnClickListener *listener); - bool LoadPlayerImage(UIImageView *View, uint32_t resId); - bool LoadPlayerImage(UIButton *button, uint32_t resId, uint32_t hlResId); - - UIImageView *backGround{nullptr}; - UILabel *subTitleLabel{nullptr}; - PlayersCaseListAdapter *adapterText{nullptr}; - UILabel *titleLabel{nullptr}; - UILabelButton *backButton{nullptr}; - UIButton *pullButton{nullptr}; - UIButton *optionsButton{nullptr}; - UIButton *preButton{nullptr}; - UIButton *nextButton{nullptr}; - UIViewGroup *listGroup{nullptr}; - UIImageView *soundButton{nullptr}; - UIImageView *playerModelButton{nullptr}; - UICheckBox *playerButton{nullptr}; - UICircleProgress *playbackProgress{nullptr}; - int16_t volumeSet{0}; - UIList *list{nullptr}; - JumpView *jumpView{nullptr}; - PlayersPresenter *playersPresenter{nullptr}; - PlayerOnDragListener *playerOnDragListener{nullptr}; - uint8_t state = UICheckBox::UICheckBoxState::MAX_STATUS_NUM; - UIView::OnClickListener *playerlistener{nullptr}; - UIView::OnClickListener *soundlistener{nullptr}; - UIView::OnClickListener *nextlistener{nullptr}; - UIView::OnClickListener *prelistener{nullptr}; - UIView::OnClickListener *modellistener{nullptr}; - UIView::OnClickListener *optionslistener{nullptr}; - bool viewiInitStatus{false}; -}; -} // namespace OHOS -#endif // MAIN_VIEW_H +/* + * Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved. + * Description: Player view + * Author: + * Create: 2021-07-26 + */ + +#ifndef PLAYERS_VIEW_H +#define PLAYERS_VIEW_H + +#include +#include "components/ui_image_view.h" +#include "components/ui_label.h" +#include "components/root_view.h" +#include "components/ui_view_group.h" +#include "components/ui_button.h" +#include "components/ui_label_button.h" +#include "components/ui_abstract_scroll.h" +#include "components/ui_circle_progress.h" +#include "components/ui_checkbox.h" +#include "components/ui_list.h" +#include "BaseView.h" +#include "font/ui_font_bitmap.h" +#include "font/ui_font.h" +#include "graphic_config.h" +#include "components/ui_card_page.h" +#include "PlayersPresenter.h" +#include "components/ui_scroll_view.h" +#include "PlayerListDelSongView.h" +#include "common/image_cache_manager.h" +namespace OHOS { +#define PLAY_PROGRESS_MIN 0 +#define PLAY_PROGRESS_MAX 100 +class JumpView; +class PlayersPresenter; +class PlayersCaseListAdapter; +class PlayersView : public UICardPage{ +public: + PlayersView(); + virtual ~PlayersView(); + static PlayersView *GetInstance(void); + bool InitView(void); + void PreLoad(void) override; + void UnLoad(void) override; + bool OnDragEvent(const DragEvent& event) override; + + void SetUpLabel(const char *title, int16_t x, int16_t y); + void ShowUpListView(void); + void TitleSetText(const char *text); + void PlayerModelButtonSetSrc(uint32_t playMode); + void CreateMusicSourceLabel(void); + void MusicSourceLabelSetText(const char *text); + void CreatePhoneMusicConnectStatusLabel(void); + void PhoneMusicConnectStatusLabelSetText(const char *text); + void PhoneMusicConnectStatusLabelIsSetVisible(bool status); + void MusicListButtonIsSetVisible(bool status); + void OptionsButtonSetImageStyle(ImageInfo *image); + int16_t GetVolumeRank(void); + void SetVolumeRank(int16_t value); + void SetVolumeAddOne(void); + UILabelButton *GetBackButton(void); + UIButton *GetPullButton(void); + UIButton *GetOptionsButton(void); + UIButton *GetPreButton(void); + UIButton *GetNextButton(void); + UIButton *GetMusicListButton(void); + UILabel *GetTitleLabel(void); + UILabel *GetMusicSourceLabel(void); + UILabel *GetPhoneMusicConnectStatusLabel(void); + UICheckBox *GetPlayerButton(void); + UIImageView *GetSoundButton(void); + UIImageView *GetPlayerModelButton(void); + UICircleProgress *GetPlaybackProgress(void); + UICheckBox::UICheckBoxState GetPlayerButtonState(void); + void SetPlayerButtonState(UICheckBox::UICheckBoxState state); + UIList *GetPlayerList(void); + void SetPlayerListGroupStatus(bool status); + void SetPlayerCtrVolume(float leftVolume, float rightVolume); + void CreateJumpView(void); + void CreatePlayersPresenter(void); + void CreatePlayerOnDragListener(void); + void ShowUpDelSongView(void); + void SetPlayerDelSongViewStatus(bool status); + PlayerListDelSongView *GetDelSongView() + { + return p_PlayerListDelSongView; + } +private: + bool InitBackGround(void); + void TearDownView(); + void CreatePlayerMusicName(); + int ShowUpCheckBoxButton(); + int ShowUpButton(); + int ShowUpButtonOptions(); + int ShowUpButtonView(); + int ShowUpCircleProgress(); + int ShowUpMusicListbutton(); + bool ShowUpPlayerMode(); + void SetUpButton(UIButton *btn, const Point& point, int16_t width, int16_t height, + UIView::OnClickListener *listener); + bool LoadPlayerImage(UIImageView *View, uint32_t resId); + bool LoadPlayerImage(UIButton *button, uint32_t resId, uint32_t hlResId); + + UIImageView *backGround{nullptr}; //音乐播放器背景 + UIImageView *elipse{nullptr}; //放复选框的绿色椭圆图片 + UIButton * music_list_button{nullptr}; //音乐列表按钮 + UILabel *subTitleLabel{nullptr}; //副标题标签:在这里为音乐作者 + PlayersCaseListAdapter *adapterText{nullptr}; + UILabel *titleLabel{nullptr}; //主标题标签:在这里为音乐名 + UILabelButton *backButton{nullptr}; //返回按钮 + UIButton *pullButton{nullptr}; //上拉按钮 + UIButton *optionsButton{nullptr}; //选项按钮 + UIButton *preButton{nullptr}; //上一首按钮 + UIButton *nextButton{nullptr}; //下一首按钮 + UIScrollView *listGroup{nullptr}; //列表组:可能是歌单~暂定 + UIImageView *soundButton{nullptr}; //声音按钮 + UIImageView *playerModelButton{nullptr}; //播放模式按钮 + UICheckBox *playerButton{nullptr}; //播放按钮 + UICircleProgress *playbackProgress{nullptr};//播放进度条 + UILabel *musicListTitle{nullptr}; //歌单列表名 + int16_t volumeSet{0}; //声音值的大小设置 + PlayerListDelSongView *p_PlayerListDelSongView{nullptr}; + UILabel *MusciSourceLabel{nullptr}; //音乐来源标签 + UILabel *PhoneMusicConnectStatusLabel{nullptr};//手机音乐连接状态标签 + UIScrollView *DelSongView{nullptr}; + UIList *list{nullptr}; + JumpView *jumpView{nullptr}; + PlayersPresenter *playersPresenter{nullptr}; + PlayerOnDragListener *playerOnDragListener{nullptr}; + uint8_t state = UICheckBox::UICheckBoxState::MAX_STATUS_NUM; + UIView::OnClickListener *playerlistener{nullptr}; + UIView::OnClickListener *soundlistener{nullptr}; + UIView::OnClickListener *nextlistener{nullptr}; + UIView::OnClickListener *prelistener{nullptr}; + UIView::OnClickListener *modellistener{nullptr}; + UIView::OnClickListener *optionslistener{nullptr}; + UIView::OnClickListener *music_list_button_listener{nullptr}; + bool viewiInitStatus{false}; +}; +} // namespace OHOS +#endif // MAIN_VIEW_H diff --git a/code/sdk/application/wearable/nativeapp/nativeui/player/src/BluetoothView.cpp b/code/sdk/application/wearable/nativeapp/nativeui/player/src/BluetoothView.cpp index 2999ae676..1bbbc9590 100755 --- a/code/sdk/application/wearable/nativeapp/nativeui/player/src/BluetoothView.cpp +++ b/code/sdk/application/wearable/nativeapp/nativeui/player/src/BluetoothView.cpp @@ -1,362 +1,455 @@ -/* - * Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved. - * Description: bluetooth view 设置页面 - * Create: 2021-09-5 - */ -#include "BluetoothView.h" -#include "PlayersView.h" -#include "UiConfig.h" -#include "BluetoothEarPhoneView.h" -#include "PlayersPresenter.h" - -namespace OHOS { -static BluetoothView *g_bluetoothView{nullptr}; -static constexpr uint16_t TEXT_WIDTH = 155; -static constexpr uint16_t TEXT_HEIGHT = 40; -static constexpr uint16_t HEIGHT = 55; -static constexpr uint16_t HEIGHT2 = 75; -static constexpr uint16_t WIDTH = 55; -static constexpr uint16_t WIDTH2 = 75; -static constexpr uint16_t BUTTON_WIDTH = 180; -static constexpr uint16_t BUTTON_HEIGHT = 40; - -constexpr uint16_t BLUETOOTH_OK = 0; -constexpr int16_t BLUETOOTH_ERROR = (-1); - -static constexpr uint16_t IMAGE_X = 50; -static constexpr uint16_t IMAGE_Y = 98; -static constexpr uint16_t IMAGE_Y2 = 187; -static constexpr uint16_t IMAGE_Y3 = 278; -static constexpr uint16_t STEP_LABEL_X = 155; -static constexpr uint16_t BUTTON_X = 320; -static constexpr uint16_t BUTTON_X2 = 313; -static constexpr uint16_t BUTTON_X3 = 135; -static constexpr uint16_t BUTTON_Y = 104; -static constexpr uint16_t BUTTON_Y2 = 194; -static constexpr uint16_t BUTTON_Y3 = 278; -static constexpr uint16_t BUTTON_Y4 = 402; -static constexpr uint16_t STEP_LABEL_Y = 108; -static constexpr uint16_t STEP_LABEL_Y2 = 199; -static constexpr uint16_t STEP_LABEL_Y3 = 290; - -BluetoothView::BluetoothView() -{ - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BluetoothView::BluetoothView"); - g_bluetoothView = this; - -} - -BluetoothView::~BluetoothView() -{ - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BluetoothView::~BluetoothView"); - group->RemoveAll(); - UIView::OnClickListener *click = watchButton->GetOnClickListener(); - if (click != nullptr) { - delete click; - } - delete watchButton; - watchButton = nullptr; - click = phoneButton->GetOnClickListener(); - if (click != nullptr) { - delete click; - } - delete phoneButton; - phoneButton = nullptr; - delete settingButton; - settingButton = nullptr; - click = deleteButton->GetOnClickListener(); - if (click != nullptr) { - delete click; - } - click = nullptr; - delete deleteButton; - deleteButton = nullptr; - delete watchLabel; - watchLabel = nullptr; - delete phoneLabel; - phoneLabel = nullptr; - delete bluetoothLabel; - bluetoothLabel = nullptr; - delete watchImage; - watchImage = nullptr; - delete phoneImage; - phoneImage = nullptr; - delete bluetoothImage; - bluetoothImage = nullptr; - delete group; - group = nullptr; - g_bluetoothView = nullptr; -} - -BluetoothView *BluetoothView::GetInstance(void) -{ - return g_bluetoothView; -} - -UIButton *BluetoothView::GetSettingButton(void) -{ - return settingButton; -} - -UILabelButton *BluetoothView::GetDeleteButton(void) -{ - return deleteButton; -} - -UIRadioButton *BluetoothView::GetWatchButton(void) -{ - return watchButton; -} - -UIRadioButton *BluetoothView::GetPhoneButton(void) -{ - return phoneButton; -} - -// Button OnClick -class BluetoothOnClickListener : public UIView::OnClickListener { -public: - BluetoothOnClickListener(UIView* view) : view_(view){} - ~BluetoothOnClickListener() {} - - bool OnClick(UIView& view, const ClickEvent& event) override - { - UNUSED(view); - UNUSED(event); - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BluetoothOnClickListener OnClick"); - BluetoothView *bluetoothView = BluetoothView::GetInstance(); - if (bluetoothView == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bluetoothView is nullptr"); - return false; - } - if (view_ == (UIView *)bluetoothView->GetWatchButton()) { - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "watchButton OnClick"); - } else if (view_ == (UIView *)bluetoothView->GetPhoneButton()) { - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "phoneButton OnClick"); - } else if (view_ == (UIView *)bluetoothView->GetSettingButton()) { - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "settingButton OnClick"); - JumpView *jumpView = JumpView::GetInstance(); - if (jumpView == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "jumpView GetInstance fail"); - return false; - } - jumpView->ChangeView(JumpView::BluetoothJumpViewNum::BLUETOOTHEVIEW, - JumpView::BluetoothJumpViewNum::BLUETOOTHEARPHONEVIEW); - } else if (view_ == (UIView *)bluetoothView->GetDeleteButton()) { - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "deleteButton OnClick"); - } - return true; - } -private: - UIView *view_ = nullptr; -}; - -void BluetoothView::SetUpButton(UILabelButton *btn, const Point& point, - int16_t width, int16_t height, UIView::OnClickListener *listener) -{ - if (btn == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "btn null!"); - return; - } - btn->SetPosition(point.x, point.y, width, height); - btn->SetOnClickListener(listener); -} - -int BluetoothView::LoadRadioButton() -{ - if (watchButton == nullptr) { - watchButton = new UIRadioButton("MusicCategory"); - if (watchButton == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "watchButton UIRadio new fail"); - return BLUETOOTH_ERROR; - } - } - if (phoneButton == nullptr) { - phoneButton = new UIRadioButton("MusicCategory"); - if (phoneButton == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "phoneButton UIRadio new fail"); - return BLUETOOTH_ERROR; - } - } - UIView::OnClickListener *listener1 = new BluetoothOnClickListener(reinterpret_cast(watchButton)); - if (listener1 == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "listener1 new fail"); - return BLUETOOTH_ERROR; - } - watchButton->SetPosition(BUTTON_X, BUTTON_Y, WIDTH, HEIGHT); - watchButton->SetOnClickListener(listener1); - watchButton->SetTouchable(false); - UIView::OnClickListener *listener2 = new BluetoothOnClickListener(reinterpret_cast(phoneButton)); - if (listener2 == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "listener2 new fail"); - return BLUETOOTH_ERROR; - } - phoneButton->SetPosition(BUTTON_X, BUTTON_Y2, WIDTH, HEIGHT); - phoneButton->SetOnClickListener(listener2); - phoneButton->SetTouchable(false); - return BLUETOOTH_OK; -} - -int BluetoothView::LoadLabelButton() -{ - struct Point pointBtn; - // 跳转按钮 - pointBtn.x = BUTTON_X2; - pointBtn.y = BUTTON_Y3; - UIView::OnClickListener *clickListener = (UIView::OnClickListener *)OHOS::PlayersPresenter::GetInstance(); - if (clickListener == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "clickListener GetInstance fail"); - return BLUETOOTH_ERROR; - } - settingButton->SetPosition(pointBtn.x, pointBtn.y, WIDTH, HEIGHT); - settingButton->SetOnClickListener(clickListener); - settingButton->SetImageSrc(PNG_SETTTING_BUTTON_IMAGE, PNG_SETTTING_BUTTON_IMAGE); - settingButton->SetViewId(BLUETOOTH_SETTING_BUTTON); - // 删除按钮 - pointBtn.x = BUTTON_X3; - pointBtn.y = BUTTON_Y4; - UIView::OnClickListener *listener4 = new BluetoothOnClickListener(reinterpret_cast(deleteButton)); - if (listener4 == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "listener4 new fail"); - return BLUETOOTH_ERROR; - } - SetUpButton(deleteButton, pointBtn, BUTTON_WIDTH, BUTTON_HEIGHT, listener4); - deleteButton->SetText("删除音乐"); - deleteButton->SetVisible(false); - return BLUETOOTH_OK; -} - -int BluetoothView::LoadButtonView() -{ - if (LoadRadioButton() == BLUETOOTH_ERROR) { - return BLUETOOTH_ERROR; - } - if (settingButton == nullptr) { - settingButton = new UIButton(); - if (settingButton == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "settingButton UIButton new fail"); - return BLUETOOTH_ERROR; - } - } - if (deleteButton == nullptr) { - deleteButton = new UILabelButton(); - if (deleteButton == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "deleteButton UILabelButton new fail"); - return BLUETOOTH_ERROR; - } - } - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "LoadButtonView"); - if (LoadLabelButton() == BLUETOOTH_ERROR) { - return BLUETOOTH_ERROR; - } - return BLUETOOTH_OK; -} - -int BluetoothView::LoadLabel(void) -{ - // 标题文本 - if (watchLabel == nullptr) { - watchLabel = new UILabel(); - if (watchLabel == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "watchLabel new fail"); - return BLUETOOTH_ERROR; - } - } - watchLabel->SetPosition(STEP_LABEL_X, STEP_LABEL_Y, TEXT_WIDTH, TEXT_HEIGHT); - watchLabel->SetText("手表音乐"); - watchLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, FONT_THIRTY_SIZE); - if (phoneLabel == nullptr) { - phoneLabel = new UILabel(); - if (phoneLabel == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "phoneLabel new fail"); - return BLUETOOTH_ERROR; - } - } - phoneLabel->SetPosition(STEP_LABEL_X, STEP_LABEL_Y2, TEXT_WIDTH, TEXT_HEIGHT); - phoneLabel->SetText("手机音乐"); - phoneLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, FONT_THIRTY_SIZE); - if (bluetoothLabel == nullptr) { - bluetoothLabel = new UILabel(); - if (bluetoothLabel == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bluetoothLabel new fail"); - return BLUETOOTH_ERROR; - } - } - bluetoothLabel->SetPosition(STEP_LABEL_X, STEP_LABEL_Y3, TEXT_WIDTH, TEXT_HEIGHT); - bluetoothLabel->SetText("蓝牙音乐"); - bluetoothLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, FONT_THIRTY_SIZE); - return BLUETOOTH_OK; -} - -int BluetoothView::LoadImage(void) -{ - // 图片图标 - watchImage = new UIImageView(); - if (watchImage == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "watchImage new fail"); - return BLUETOOTH_ERROR; - } - watchImage->SetPosition(IMAGE_X, IMAGE_Y, WIDTH2, HEIGHT2); - watchImage->SetSrc(PNG_WATCH_IMAGE); - - phoneImage = new UIImageView(); - if (phoneImage == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "phoneImage new fail"); - return BLUETOOTH_ERROR; - } - phoneImage->SetPosition(IMAGE_X, IMAGE_Y2, WIDTH2, HEIGHT2); - phoneImage->SetSrc(PNG_PHONE_IMAGE); - - bluetoothImage = new UIImageView(); - if (bluetoothImage == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bluetoothImage new fail"); - return BLUETOOTH_ERROR; - } - bluetoothImage->SetPosition(IMAGE_X, IMAGE_Y3, WIDTH2, HEIGHT2); - bluetoothImage->SetSrc(PNG_BLUETOOTH_IMAGE); - return BLUETOOTH_OK; -} - -UIViewGroup *BluetoothView::LoadBluetoothView() -{ - if (group == nullptr) { - group = new UIViewGroup(); - if (group == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "group new fail"); - return nullptr; - } - } - group->SetPosition(0, 0); - group->SetWidth(HORIZONTAL_RESOLUTION); - group->SetHeight(VERTICAL_RESOLUTION); - LoadButtonView(); - LoadLabel(); - LoadImage(); - - group->Add(watchLabel); - group->Add(phoneLabel); - group->Add(bluetoothLabel); - group->Add(watchButton); - group->Add(phoneButton); - group->Add(settingButton); - group->Add(deleteButton); - group->Add(watchImage); - group->Add(phoneImage); - group->Add(bluetoothImage); - - //增加按键监听 - RootView::OnKeyActListener*keyactListener = (RootView::OnKeyActListener*)OHOS::PlayerOnDragListener::GetInstance(); - RootView::GetInstance()->SetOnKeyActListener(keyactListener); - - UIView::OnDragListener *earDragListener = (UIView::OnDragListener *)OHOS::PlayerOnDragListener::GetInstance(); - if (earDragListener == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "earDragListener GetInstance fail"); - return nullptr; - } - group->SetOnDragListener(earDragListener); - group->SetViewId(BLUETOOTH_VIEW); - group->SetDraggable(true); - group->SetTouchable(true); - return group; -} -} +/* + * Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved. + * Description: bluetooth view 设置页面 + * Create: 2021-09-5 + */ +#include "BluetoothView.h" +#include "PlayersView.h" +#include "UiConfig.h" +#include "BluetoothEarPhoneView.h" +#include "PlayersPresenter.h" +#include "ui_resource_image.h" +#include "common/image_cache_manager.h" +namespace OHOS { +static BluetoothView *g_bluetoothView{nullptr}; +static constexpr uint16_t TEXT_WIDTH = 120; +static constexpr uint16_t TEXT_HEIGHT = 35; +static constexpr uint16_t HEIGHT = 55; +static constexpr uint16_t HEIGHT2 = 40; +static constexpr uint16_t WIDTH = 80; +static constexpr uint16_t WIDTH2 = 80; +static constexpr uint16_t BUTTON_WIDTH = 180; +static constexpr uint16_t BUTTON_HEIGHT = 40; + +constexpr uint16_t BLUETOOTH_OK = 0; +constexpr int16_t BLUETOOTH_ERROR = (-1); + +static constexpr uint16_t IMAGE_X = 83; +static constexpr uint16_t IMAGE_Y = 150; +static constexpr uint16_t IMAGE_Y2 = 270; +static constexpr uint16_t IMAGE_Y3 = 390; +static constexpr uint16_t STEP_LABEL_X = 143; +static constexpr uint16_t BUTTON_X = 300; +static constexpr uint16_t BUTTON_X2 = 326; +static constexpr uint16_t BUTTON_X3 = 135; +static constexpr uint16_t BUTTON_Y = 140; +static constexpr uint16_t BUTTON_Y2 = 260; +static constexpr uint16_t BUTTON_Y3 = 397; +static constexpr uint16_t BUTTON_Y4 = 402; +static constexpr uint16_t STEP_LABEL_Y = 153; +static constexpr uint16_t STEP_LABEL_Y2 = 273; +static constexpr uint16_t STEP_LABEL_Y3 = 393; + +BluetoothView::BluetoothView() +{ + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BluetoothView::BluetoothView"); + g_bluetoothView = this; + +} + +BluetoothView::~BluetoothView() +{ + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BluetoothView::~BluetoothView"); + group->RemoveAll(); + UIView::OnClickListener *click = watchButton->GetOnClickListener(); + if (click != nullptr) { + delete click; + } + delete watchButton; + watchButton = nullptr; + click = phoneButton->GetOnClickListener(); + if (click != nullptr) { + delete click; + } + click = nullptr; + delete phoneButton; + phoneButton = nullptr; + delete settingButton; + settingButton = nullptr; + delete titleLabel; + titleLabel = nullptr; + delete phoneBackground; + phoneBackground = nullptr; + delete watchBackground; + watchBackground = nullptr; + delete bluetoothBackground; + bluetoothBackground = nullptr; + delete watchLabel; + watchLabel = nullptr; + delete phoneLabel; + phoneLabel = nullptr; + delete bluetoothLabel; + bluetoothLabel = nullptr; + delete watchImage; + watchImage = nullptr; + delete phoneImage; + phoneImage = nullptr; + delete bluetoothImage; + bluetoothImage = nullptr; + delete scrollView; + scrollView = nullptr; + delete group; + group = nullptr; + g_bluetoothView = nullptr; +} + +BluetoothView *BluetoothView::GetInstance(void) +{ + return g_bluetoothView; +} + +UIButton *BluetoothView::GetSettingButton(void) +{ + return settingButton; +} + +UIRadioButton *BluetoothView::GetWatchButton(void) +{ + return watchButton; +} + +UIRadioButton *BluetoothView::GetPhoneButton(void) +{ + return phoneButton; +} + +// Button OnClick +class BluetoothOnClickListener : public UIView::OnClickListener { +public: + BluetoothOnClickListener(UIView* view) : view_(view){} + ~BluetoothOnClickListener() {} + + bool OnClick(UIView& view, const ClickEvent& event) override + { + UNUSED(view); + UNUSED(event); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BluetoothOnClickListener OnClick"); + BluetoothView *bluetoothView = BluetoothView::GetInstance(); + PlayersPresenter *playersPresenter = PlayersPresenter::GetInstance(); + ImageInfo *image; + if (bluetoothView == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bluetoothView is nullptr"); + return false; + } + if (view_ == (UIView *)bluetoothView->GetWatchButton()) { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "watchButton OnClick");//手表音乐 + image = ImageCacheManager::GetInstance().LoadOneInMultiRes(PLAYER_LOCAL_MUSIC_COLOR, PLAYER_IAMGES); + playersPresenter->SetOptionsButtonImageStyle(image); + playersPresenter->SetPhoneMusicConnectStatusLabelIsVisible(false); + playersPresenter->SetMusicListButtonIsVisible(true); + playersPresenter->SetMusicSourceSetText("本地音乐"); + } else if (view_ == (UIView *)bluetoothView->GetPhoneButton()) { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "phoneButton OnClick");//手机音乐 + image = ImageCacheManager::GetInstance().LoadOneInMultiRes(PLAYER_PHONE_COLOR, PLAYER_IAMGES); + playersPresenter->SetOptionsButtonImageStyle(image); + playersPresenter->SetPhoneMusicConnectStatusLabelIsVisible(true); + playersPresenter->SetMusicListButtonIsVisible(false); + /* -------------------------------------------------------------------------- */ + // 以后会用 + // std::string phonemusic_connect_status_text = ""; + // if(获取连接状态。。。) + // { + // 获取成功。。。 + // phonemusic_connect_status_text = "已连接"; + // } + // else + // { + // 获取失败。。。 + // phonemusic_connect_status_text = "未连接"; + // } + // playersPresenter->SetPhoneMusicConnectStatusSetText(phonemusic_connect_status_text.c_str()); + /* -------------------------------------------------------------------------- */ + playersPresenter->SetPhoneMusicConnectStatusSetText("未连接"); + playersPresenter->SetMusicSourceSetText("手机音乐");//还有小bug,切换到其他界面时标签内容为“手机音乐”,会被还原成本地音乐 + } else if (view_ == (UIView *)bluetoothView->GetSettingButton()) { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "settingButton OnClick"); + image = ImageCacheManager::GetInstance().LoadOneInMultiRes(PLAYER_EARPHONE_COLOR, PLAYER_IAMGES); + playersPresenter->SetOptionsButtonImageStyle(image); + JumpView *jumpView = JumpView::GetInstance(); + if (jumpView == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "jumpView GetInstance fail"); + return false; + } + jumpView->ChangeView(JumpView::BluetoothJumpViewNum::BLUETOOTHEVIEW, + JumpView::BluetoothJumpViewNum::BLUETOOTHEARPHONEVIEW); + } + return true; + } +private: + UIView *view_ = nullptr; +}; + +/// @brief 加载标题文本:音乐来源 +/// @return +int BluetoothView::LoadTitleLabel(void) +{ + if (titleLabel == nullptr) { + titleLabel = new UILabel(); + if (titleLabel == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "titleLabel new fail"); + return BLUETOOTH_ERROR; + } + } + titleLabel->SetPosition(173, 52, 120, 35); + titleLabel->SetText("音乐来源"); + titleLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, FONT_THIRTY_SIZE); + return BLUETOOTH_OK; +} + +/// @brief 加载要放置各种组件的背景图片,一共三个 +/// @return +int BluetoothView::LoadImageBackGround(void) +{ + if(phoneBackground == nullptr){ + phoneBackground = new UIImageView(); + if (phoneBackground == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "phoneBackground UIImageView new fail"); + return BLUETOOTH_ERROR; + } + } + if(watchBackground == nullptr){ + watchBackground = new UIImageView(); + if (watchBackground == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "watchBackground UIImageView new fail"); + return BLUETOOTH_ERROR; + } + } + if(bluetoothBackground == nullptr){ + bluetoothBackground = new UIImageView(); + if (bluetoothBackground == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bluetoothBackground UIImageView new fail"); + return BLUETOOTH_ERROR; + } + } + + const char* BackgroundImage = "/user/res/SETTING_BACKGROUND.bin"; + phoneBackground->SetPosition(43,120); + phoneBackground->SetStyle(STYLE_BORDER_RADIUS, 100); + phoneBackground->SetSrc(BackgroundImage); + + watchBackground->SetPosition(43,240); + watchBackground->SetStyle(STYLE_BORDER_RADIUS, 100); + watchBackground->SetSrc(BackgroundImage); + + bluetoothBackground->SetPosition(43,360); + bluetoothBackground->SetStyle(STYLE_BORDER_RADIUS, 100); + bluetoothBackground->SetSrc(BackgroundImage); + return BLUETOOTH_OK; +} + +/// @brief 加载图片图标 +/// @param +/// @return +int BluetoothView::LoadImage(void) +{ + ImageInfo *image; + // 图片图标 + phoneImage = new UIImageView(); + if (phoneImage == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "phoneImage new fail"); + return BLUETOOTH_ERROR; + } + phoneImage->SetPosition(IMAGE_X, IMAGE_Y, WIDTH2, HEIGHT2); + image = ImageCacheManager::GetInstance().LoadOneInMultiRes(PLAYER_PHONE_WHITE, PLAYER_IAMGES); + phoneImage->SetSrc(image); + + + watchImage = new UIImageView(); + if (watchImage == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "watchImage new fail"); + return BLUETOOTH_ERROR; + } + watchImage->SetPosition(IMAGE_X, IMAGE_Y2, WIDTH2, HEIGHT2); + image = ImageCacheManager::GetInstance().LoadOneInMultiRes(PLAYER_LOCAL_MUSIC_WHITE, PLAYER_IAMGES); + watchImage->SetSrc(image); + + bluetoothImage = new UIImageView(); + if (bluetoothImage == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bluetoothImage new fail"); + return BLUETOOTH_ERROR; + } + bluetoothImage->SetPosition(IMAGE_X, IMAGE_Y3, WIDTH2, HEIGHT2); + image = ImageCacheManager::GetInstance().LoadOneInMultiRes(PLAYER_EARPHONE_WHITE, PLAYER_IAMGES); + bluetoothImage->SetSrc(image); + return BLUETOOTH_OK; +} + +/// @brief 加载文本 +/// @param +/// @return +int BluetoothView::LoadLabel(void) +{ + /* -------------------------------------------------------------------------- */ + if (phoneLabel == nullptr) { + phoneLabel = new UILabel(); + if (phoneLabel == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "phoneLabel new fail"); + return BLUETOOTH_ERROR; + } + } + phoneLabel->SetPosition(STEP_LABEL_X, STEP_LABEL_Y, TEXT_WIDTH, TEXT_HEIGHT); + phoneLabel->SetText("手机音乐"); + phoneLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, FONT_THIRTY_SIZE); + /* -------------------------------------------------------------------------- */ + if (watchLabel == nullptr) { + watchLabel = new UILabel(); + if (watchLabel == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "watchLabel new fail"); + return BLUETOOTH_ERROR; + } + } + watchLabel->SetPosition(STEP_LABEL_X, STEP_LABEL_Y2, TEXT_WIDTH, TEXT_HEIGHT); + watchLabel->SetText("本地音乐"); + watchLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, FONT_THIRTY_SIZE); + /* -------------------------------------------------------------------------- */ + if (bluetoothLabel == nullptr) { + bluetoothLabel = new UILabel(); + if (bluetoothLabel == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bluetoothLabel new fail"); + return BLUETOOTH_ERROR; + } + } + bluetoothLabel->SetPosition(STEP_LABEL_X, STEP_LABEL_Y3, TEXT_WIDTH, TEXT_HEIGHT); + bluetoothLabel->SetText("蓝牙音乐"); + bluetoothLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, FONT_THIRTY_SIZE); + /* -------------------------------------------------------------------------- */ + return BLUETOOTH_OK; +} + +/// @brief 加载两个radiobutton +/// @return +int BluetoothView::LoadRadioButton(void) +{ + /* -------------------------------------------------------------------------- */ + if (phoneButton == nullptr) { + phoneButton = new UIRadioButton("MusicCategory"); + if (phoneButton == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "phoneButton UIRadio new fail"); + return BLUETOOTH_ERROR; + } + } + UIView::OnClickListener *listener1 = new BluetoothOnClickListener(reinterpret_cast(phoneButton)); + if (listener1 == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "listener1 new fail"); + return BLUETOOTH_ERROR; + } + phoneButton->SetPosition(BUTTON_X, BUTTON_Y, WIDTH, HEIGHT); + + phoneButton->SetImages(PNG_CHECKBOX_ON_IMAGE,PNG_CHECKBOX_OFF_IMAGE); + phoneButton->SetOnClickListener(listener1); + + /* -------------------------------------------------------------------------- */ + if (watchButton == nullptr) { + watchButton = new UIRadioButton("MusicCategory"); + if (watchButton == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "watchButton UIRadio new fail"); + return BLUETOOTH_ERROR; + } + } + UIView::OnClickListener *listener2 = new BluetoothOnClickListener(reinterpret_cast(watchButton)); + if (listener2 == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "listener2 new fail"); + return BLUETOOTH_ERROR; + } + watchButton->SetState(UICheckBox::SELECTED); + watchButton->SetPosition(BUTTON_X, BUTTON_Y2, WIDTH, HEIGHT); + watchButton->SetImages(PNG_CHECKBOX_ON_IMAGE,PNG_CHECKBOX_OFF_IMAGE); + watchButton->SetOnClickListener(listener2); + /* -------------------------------------------------------------------------- */ + return BLUETOOTH_OK; +} + +/// @brief 加载蓝牙耳机按钮视图 +/// @return +int BluetoothView::LoadButtonView(void) +{ + if (settingButton == nullptr) { + settingButton = new UIButton(); + if (settingButton == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "settingButton UIButton new fail"); + return BLUETOOTH_ERROR; + } + } + // 跳转按钮 + UIView::OnClickListener *clickListener = (UIView::OnClickListener *)OHOS::PlayersPresenter::GetInstance(); + if (clickListener == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "clickListener GetInstance fail"); + return BLUETOOTH_ERROR; + } + settingButton->SetPosition(BUTTON_X2,BUTTON_Y3, WIDTH, HEIGHT); + settingButton->SetStyle(STYLE_BACKGROUND_COLOR, 0xffffffff); + settingButton->SetStyle(STYLE_BACKGROUND_OPA, 0x00); + settingButton->SetStyleForState(STYLE_BACKGROUND_OPA, 0x00, UIButton::PRESSED); + settingButton->SetStyleForState(STYLE_BORDER_COLOR, 0xffffffff, UIButton::PRESSED); + settingButton->SetStyleForState(STYLE_BORDER_OPA, 0x00, UIButton::PRESSED); + settingButton->SetOnClickListener(clickListener); + settingButton->SetImageSrc(PNG_SETTING_NEXT_IMAGE, PNG_SETTING_NEXT_IMAGE); + settingButton->SetViewId(BLUETOOTH_SETTING_BUTTON); + return BLUETOOTH_OK; +} + + +/// @brief 加载音乐来源视图 +/// @return +UIViewGroup *BluetoothView::LoadMusicSourceView(void) +{ + if(group == nullptr) + { + group = new UIViewGroup(); + if (group == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "group new fail"); + return nullptr; + } + } + group->SetPosition(0, 0, 466, 466); + group->SetStyle(STYLE_BACKGROUND_OPA, 0); + if (scrollView == nullptr) { + scrollView = new UIScrollView(); + if (scrollView == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "scrollView new fail"); + return nullptr; + } + } + scrollView->SetPosition(0, 0,466,466); + scrollView->SetScrollBlankSize(40); + scrollView->SetReboundSize(50); + scrollView->SetDirection(1); + group->Add(scrollView); + + LoadTitleLabel(); + LoadImageBackGround(); + LoadImage(); + LoadLabel(); + LoadRadioButton(); + LoadButtonView(); + + scrollView->Add(titleLabel); + + scrollView->Add(phoneBackground); + scrollView->Add(watchBackground); + scrollView->Add(bluetoothBackground); + + scrollView->Add(watchImage); + scrollView->Add(phoneImage); + scrollView->Add(bluetoothImage); + + scrollView->Add(watchLabel); + scrollView->Add(phoneLabel); + scrollView->Add(bluetoothLabel); + + scrollView->Add(watchButton); + scrollView->Add(phoneButton); + scrollView->Add(settingButton); + + UIView::OnDragListener *earDragListener = (UIView::OnDragListener *)OHOS::PlayerOnDragListener::GetInstance(); + if (earDragListener == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "earDragListener GetInstance fail"); + return nullptr; + } + group->SetOnDragListener(earDragListener); + group->SetViewId(BLUETOOTH_VIEW); + group->SetDraggable(true); + group->SetTouchable(true); + return group; +} +} diff --git a/code/sdk/application/wearable/nativeapp/nativeui/player/src/PlayerListDelSongView.cpp b/code/sdk/application/wearable/nativeapp/nativeui/player/src/PlayerListDelSongView.cpp new file mode 100644 index 000000000..03d6d6ae8 --- /dev/null +++ b/code/sdk/application/wearable/nativeapp/nativeui/player/src/PlayerListDelSongView.cpp @@ -0,0 +1,169 @@ +#include "PlayerListDelSongView.h" +#include "PlayersPresenter.h" +namespace OHOS +{ + + + + static PlayerListDelSongView *g_pPlayerListDelSongView{nullptr}; + + PlayerListDelSongView::PlayerListDelSongView() + { + g_pPlayerListDelSongView = this; + } + + PlayerListDelSongView::~PlayerListDelSongView() + { + if (viewInitStatus == true) + { + DeInitView(); + } + g_pPlayerListDelSongView = nullptr; + } + + PlayerListDelSongView *PlayerListDelSongView::GetInstance() + { + + return g_pPlayerListDelSongView; + } + + /// @brief 设置歌曲名标签样式 + /// @param songName 歌曲名 + void PlayerListDelSongView::SetTheSongLabelStyle(const char * songName) + { + songNameLabel->SetText(songName); + songNameLabel->Invalidate(); + } + + UIScrollView * PlayerListDelSongView::InitDelSongView() + { + if (scrollView1_ == nullptr) + { + scrollView1_ = new UIScrollView(); + } + scrollView1_->SetPosition(0, 0,466,466); + scrollView1_->SetStyle(STYLE_BACKGROUND_OPA, 0xff); + scrollView1_->SetDirection(1); + scrollView1_->SetVisible(true); + /* -------------------------------------------------------------------------- */ + if (label1_ == nullptr) + { + label1_ = new UILabel(); + } + label1_->SetPosition(172, 160); + label1_->SetStyle(STYLE_TEXT_FONT, 30); + label1_->SetStyle(STYLE_LINE_HEIGHT, 35); + label1_->SetText("是否删除"); + label1_->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT); + label1_->SetTextColor(Color::GetColorFromRGBA(0x66, 0x66, 0x66, 0xff)); + label1_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); + label1_->SetRollSpeed(0); + label1_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30); + scrollView1_->Add(label1_); + label1_->SetVisible(true); + /* -------------------------------------------------------------------------- */ + if (songNameLabel == nullptr) + { + songNameLabel = new UILabel(); + } + songNameLabel->SetPosition(83, 220,300,35); + songNameLabel->SetStyle(STYLE_TEXT_FONT, 30); + songNameLabel->SetStyle(STYLE_LINE_HEIGHT, 35); + songNameLabel->SetLineBreakMode(UILabel::LINE_BREAK_WRAP); + songNameLabel->SetTextColor(Color::GetColorFromRGBA(0x4f, 0xc3, 0x4c, 0xff)); + songNameLabel->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); + songNameLabel->SetRollSpeed(0); + songNameLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30); + scrollView1_->Add(songNameLabel); + songNameLabel->SetVisible(true); + /* -------------------------------------------------------------------------- */ + if (label2_ == nullptr) + { + label2_ = new UILabel(); + } + label2_->SetPosition(173, 52); + label2_->Resize(120, 35); + label2_->SetViewId("label1"); + label2_->SetStyle(STYLE_TEXT_FONT, 30); + label2_->SetStyle(STYLE_LINE_HEIGHT, 36); + label2_->SetText("删除歌曲"); + label2_->SetLineBreakMode(UILabel::LINE_BREAK_ELLIPSIS); + label2_->SetRollSpeed(0); + label2_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30); + scrollView1_->Add(label2_); + label2_->SetVisible(true); + /* -------------------------------------------------------------------------- */ + if (button1_ == nullptr) + { + button1_ = new UIButton(); + } + button1_->SetPosition(256, 299); + button1_->Resize(100, 100); + button1_->SetViewId("Delbutton"); + button1_->SetStyle(STYLE_BACKGROUND_COLOR, 0xff000000); + char *button1defaultImgSrc = "/user/res/SYSTEM_CheckOn.bin"; + button1_->SetImageSrc(button1defaultImgSrc, nullptr); + button1_->SetStyleForState(STYLE_BORDER_COLOR, 0xff0b1928, UIButton::PRESSED); + scrollView1_->Add(button1_); + button1_->SetVisible(true); + /* -------------------------------------------------------------------------- */ + if (button2_ == nullptr) + { + button2_ = new UIButton(); + } + button2_->SetPosition(111, 299); + button2_->Resize(100, 100); + button2_->SetViewId("returnbutton"); + button2_->SetStyle(STYLE_BACKGROUND_COLOR, 0xff000000); + char *button2defaultImgSrc = "/user/res/SYSTEM_CheckOff.bin"; + button2_->SetImageSrc(button2defaultImgSrc, nullptr); + button2_->SetStyleForState(STYLE_BORDER_COLOR, 0xff0b1928, UIButton::PRESSED); + scrollView1_->Add(button2_); + button2_->SetVisible(true); + + UIView::OnClickListener *buttonClickListener = static_cast(new ButtonOnClickListener()); + button1_->SetOnClickListener(buttonClickListener); + button2_->SetOnClickListener(buttonClickListener); + viewInitStatus = true; + return scrollView1_; + } + + void PlayerListDelSongView::DeInitView() + { + if (scrollView1_ != nullptr) + { + delete scrollView1_; + scrollView1_ = nullptr; + } + if (label1_ != nullptr) + { + delete label1_; + label1_ = nullptr; + } + if (songNameLabel != nullptr) + { + delete songNameLabel; + songNameLabel = nullptr; + } + if (button3_ != nullptr) + { + delete button3_; + button3_ = nullptr; + } + if (label2_ != nullptr) + { + delete label2_; + label2_ = nullptr; + } + if (button1_ != nullptr) + { + delete button1_; + button1_ = nullptr; + } + if (button2_ != nullptr) + { + delete button2_; + button2_ = nullptr; + } + } +} \ No newline at end of file diff --git a/code/sdk/application/wearable/nativeapp/nativeui/player/src/PlayerListitemView.cpp b/code/sdk/application/wearable/nativeapp/nativeui/player/src/PlayerListitemView.cpp new file mode 100644 index 000000000..b8798a64e --- /dev/null +++ b/code/sdk/application/wearable/nativeapp/nativeui/player/src/PlayerListitemView.cpp @@ -0,0 +1,60 @@ +#include "PlayerListitemView.h" +#include "ui_resource_image.h" +#include "common/image_cache_manager.h" +namespace OHOS +{ + + PlayerListItemView::PlayerListItemView() + { + SetPosition(0, 0, 332, 78); // 每一首歌曲的itemview宽高要配置好,因为每一首加到list歌曲都是以这个视图为基准 + SetStyle(STYLE_BACKGROUND_COLOR, Color::Black().full); + SetStyle(STYLE_BACKGROUND_OPA, 255); + SetTouchable(true); + SetUpChild(); + Add(&sLabel); + Add(&sButton); + } + + PlayerListItemView::~PlayerListItemView() + { + Remove(&sLabel); + Remove(&sButton); + } + + /// @brief 设置item的信息 + /// @param itemInfo + void PlayerListItemView::SetItemInfo(const PlayerListItem itemInfo) + { + sItemInfo = itemInfo; + sLabel.SetText(itemInfo.label); + } + + /// @brief 设置每一个itemview上的组件 + void PlayerListItemView::SetUpChild() + { + sLabel.SetPosition(0, 0, 200, 40); + sLabel.SetStyle(STYLE_TEXT_FONT, 30); + sLabel.SetStyle(STYLE_LINE_HEIGHT, 36); + sLabel.SetLineBreakMode(UILabel::LINE_BREAK_ELLIPSIS); + sLabel.SetTextColor(Color::GetColorFromRGBA(0xff, 0xff, 0xff, 0xff)); + sLabel.SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30); + + sButton.SetPosition(292, 0, 78, 78); + sButton.SetStyle(STYLE_BACKGROUND_COLOR, 0xffffffff); + sButton.SetStyle(STYLE_BACKGROUND_OPA, 0x00); + sButton.SetStyle(STYLE_BORDER_RADIUS, 0); + ImageInfo *image = ImageCacheManager::GetInstance().LoadOneInMultiRes(PLAYER_MUSIC_DELETE, PLAYER_IAMGES); + sButton.SetImageSrc(image, nullptr); + sButton.SetStyleForState(STYLE_BACKGROUND_COLOR, 0xff4fc34c, UIButton::PRESSED); + sButton.SetStyleForState(STYLE_BORDER_COLOR, 0xff0b1928, UIButton::PRESSED); + sButton.SetStyleForState(STYLE_BORDER_RADIUS, 0, UIButton::PRESSED); + } + + /// @brief 获取list歌单的中每首歌的在list的下标 + /// @return 返回歌曲下标 + int PlayerListItemView::GetPlayerListIndex() + { + return sItemInfo.index; + } + +} \ No newline at end of file diff --git a/code/sdk/application/wearable/nativeapp/nativeui/player/src/PlayersCaseListAdapter.cpp b/code/sdk/application/wearable/nativeapp/nativeui/player/src/PlayersCaseListAdapter.cpp index a6547efa4..526b2f2d1 100755 --- a/code/sdk/application/wearable/nativeapp/nativeui/player/src/PlayersCaseListAdapter.cpp +++ b/code/sdk/application/wearable/nativeapp/nativeui/player/src/PlayersCaseListAdapter.cpp @@ -1,173 +1,213 @@ -/* - * Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved. - * Description: Player view - * Author: - * Create: 2021-07-26 - */ -#include -#include "PlayersCaseListAdapter.h" -#include "gfx_utils/list.h" -#include "PlayersView.h" -#include "PlayersPresenter.h" -#include "wearable_log.h" -#include "PlayersModel.h" - -namespace OHOS { -constexpr uint16_t TESTCASE_BUTTON_HEIGHT = 64; -constexpr uint16_t STYLE_BORDER_WIDTH_VALUE = 4; -constexpr uint16_t STYLE_BORDER_RADIUS_VALUE = 12; -static constexpr uint32 BUTTON_STYLE_BACKGROUND_COLOR_VALUE = 0xFF333333; - -PlayersCaseListAdapter::~PlayersCaseListAdapter() -{ - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersCaseListAdapter::~PlayersCaseListAdapter"); - delete listener; - listener = nullptr; -} - -uint16_t PlayersCaseListAdapter::GetCount() -{ - return PlayersListGroup::GetInstance()->GetCase().Size(); -} - -class BtnOnClickListListener : public UIView::OnClickListener { -public: - BtnOnClickListListener() {} - ~BtnOnClickListListener() {} - bool OnClick(UIView& view, const ClickEvent& event) override; - -private: - void BtnOnListData(UIView& view); - char *sliceId_{nullptr}; - int16_t index_{0}; -}; - -bool BtnOnClickListListener::OnClick(UIView& view, const ClickEvent& event) -{ - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BtnOnClickListListener sliceId_: %s.", sliceId_); - UNUSED(event); - int ret; - int32_t playerState; - uint8_t state = UICheckBox::UICheckBoxState::MAX_STATUS_NUM; - PlayersView *playersView = PlayersView::GetInstance(); - if (playersView == nullptr) { - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "playersView null!"); - return false; - } - BtnOnListData(view); - // 标记当前播放歌曲index_ - PlayersModel::GetInstance()->SetCurrentIndex(index_); - // 本地播放文件路径和状态 - std::string strSrcMusic(APP_MUSIC_PATH); - std::string tempStr("/"); - std::string strName = sliceId_; - PlayersModel::GetInstance()->SetPlayerUri(strSrcMusic + tempStr + strName); - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "uri: %s.", PlayersModel::GetInstance()->GetPlayerUri().c_str()); - std::string strSongName = sliceId_; - std::string pureName = strSongName.substr(0, strSongName.rfind(".")); - const char *songName = pureName.c_str(); - playersView->TitleSetText(songName); - playersView->SetPlayerListGroupStatus(false); - // 刷新UI - RootView::GetInstance()->Invalidate(); - - state = playersView->GetPlayerButtonState(); - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "state %d", state); - if (state == UICheckBox::UICheckBoxState::UNSELECTED) { - playersView->SetPlayerButtonState(UICheckBox::UICheckBoxState::SELECTED); - /* start play */ - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "play"); - PlayersModel::GetInstance()->GetPlayerCtr()->GetPlayerState(playerState); - if (playerState == PlayerStates::PLAYER_PAUSED) { - ret = PlayersModel::GetInstance()->GetPlayerCtr()->Reset(); - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Reset, ret:%d", ret); - } - PlayersModel::GetInstance()->PlayerStat(); // 播放 - } else if (state == UICheckBox::UICheckBoxState::SELECTED) { - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "List to play"); - PlayersModel::GetInstance()->GetPlayerCtr()->GetPlayerState(playerState); - if (playerState == PlayerStates::PLAYER_STARTED) { - ret = PlayersModel::GetInstance()->GetPlayerCtr()->Stop(); // 停止 - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Stop, ret:%d", ret); - ret = PlayersModel::GetInstance()->GetPlayerCtr()->Reset(); - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Reset, ret:%d", ret); - } - PlayersModel::GetInstance()->PlayerStat(); - } - return true; -} - -void BtnOnClickListListener::BtnOnListData(UIView& view) -{ - index_ = view.GetViewIndex(); - List &playersCaseList = PlayersListGroup::GetInstance()->GetCase(); - ListNode* node = playersCaseList.Begin(); - for (uint16_t i = 0; i < index_; i++) { - node = node->next_; - } - sliceId_ = node->data_.sliceId; -} - -void PlayersCaseListAdapter::LabelButtonSet() -{ - if (item == nullptr) { - return; - } - item->SetStyleForState(STYLE_BORDER_RADIUS, STYLE_BORDER_RADIUS_VALUE, UIButton::RELEASED); - item->SetStyleForState(STYLE_BORDER_RADIUS, STYLE_BORDER_RADIUS_VALUE, UIButton::PRESSED); - item->SetStyleForState(STYLE_BORDER_RADIUS, STYLE_BORDER_RADIUS_VALUE, UIButton::INACTIVE); - item->SetStyleForState(STYLE_BACKGROUND_COLOR, BUTTON_STYLE_BACKGROUND_COLOR_VALUE, UIButton::RELEASED); - item->SetStyleForState(STYLE_BACKGROUND_COLOR, BUTTON_STYLE_BACKGROUND_COLOR_VALUE, UIButton::PRESSED); - item->SetStyleForState(STYLE_BACKGROUND_COLOR, BUTTON_STYLE_BACKGROUND_COLOR_VALUE, UIButton::INACTIVE); -} - -UIView *PlayersCaseListAdapter::GetView(UIView* inView, int16_t index) -{ - List &playersCaseList = PlayersListGroup::GetInstance()->GetCase(); - if (playersCaseList.IsEmpty()) { - return nullptr; - } - if ((index > playersCaseList.Size() - 1) || (index < 0)) { - return nullptr; - } - if (inView == nullptr) { - item = new UILabelButton(); - if (item == nullptr) { - return nullptr; - } - item->SetPosition(0, 0); - item->SetStyleForState(STYLE_BORDER_WIDTH, STYLE_BORDER_WIDTH_VALUE, UIButton::RELEASED); - item->SetStyleForState(STYLE_BORDER_WIDTH, STYLE_BORDER_WIDTH_VALUE, UIButton::PRESSED); - item->SetStyleForState(STYLE_BORDER_WIDTH, STYLE_BORDER_WIDTH_VALUE, UIButton::INACTIVE); - item->SetStyleForState(STYLE_BORDER_OPA, 0, UIButton::RELEASED); - item->SetStyleForState(STYLE_BORDER_OPA, 0, UIButton::PRESSED); - item->SetStyleForState(STYLE_BORDER_OPA, 0, UIButton::INACTIVE); - item->Resize(HORIZONTAL_RESOLUTION, TESTCASE_BUTTON_HEIGHT); - } else { - item = static_cast(inView); - } - ListNode* node = playersCaseList.Begin(); - for (uint16_t i = 0; i < index; i++) { - node = node->next_; - } - if (listener == nullptr) { - listener = new BtnOnClickListListener(); - if (listener == nullptr) { - return nullptr; - } - item->SetOnClickListener(listener); - } else { - item->SetOnClickListener(listener); - } - std::string strSongName = node->data_.sliceId; - std::string pureName = strSongName.substr(0, strSongName.rfind(".")); - const char *songName = pureName.c_str(); - item->SetText(songName); - item->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 24); // 24: means font size - item->SetViewIndex(index); - item->SetAlign(TEXT_ALIGNMENT_CENTER); - item->SetLabelPosition(24, 0); // 24: lable x-coordinate - LabelButtonSet(); - return item; -} -} // namespace OHOS +/* + * Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved. + * Description: Player view + * Author: + * Create: 2021-07-26 + */ +#include +#include "PlayersCaseListAdapter.h" +#include "gfx_utils/list.h" +#include "PlayersView.h" +#include "PlayersPresenter.h" +#include "wearable_log.h" +#include "PlayersModel.h" +#include "PlayerListitemView.h" +#include "ui_resource_image.h" +#include "common/image_cache_manager.h" +namespace OHOS { +constexpr uint16_t TESTCASE_BUTTON_HEIGHT = 64; +constexpr uint16_t STYLE_BORDER_WIDTH_VALUE = 4; +constexpr uint16_t STYLE_BORDER_RADIUS_VALUE = 12; +static constexpr uint32 BUTTON_STYLE_BACKGROUND_COLOR_VALUE = 0xFF333333; + +static PlayersCaseListAdapter *g_PlayersCaseListAdapter{nullptr}; +PlayersCaseListAdapter::PlayersCaseListAdapter() +{ + g_PlayersCaseListAdapter = this; +} + +PlayersCaseListAdapter::~PlayersCaseListAdapter() +{ + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersCaseListAdapter::~PlayersCaseListAdapter"); + delete listener; + listener = nullptr; + + g_PlayersCaseListAdapter = nullptr; + + if(p_BtnOnClickListListener != nullptr) + { + delete p_BtnOnClickListListener; + p_BtnOnClickListListener = nullptr; + } +} + +PlayersCaseListAdapter *PlayersCaseListAdapter::GetInstance(void) +{ + return g_PlayersCaseListAdapter; +} + +uint16_t PlayersCaseListAdapter::GetCount() +{ + return PlayersListGroup::GetInstance()->GetCase().Size(); +} + + +void BtnOnClickListListener::SongClick(PlayersCaseListAdapter *P_PlayersCaseListAdapter,int index) +{ + ImageInfo *imagePlaying = ImageCacheManager::GetInstance().LoadOneInMultiRes(PLAYER_PLAYING, PLAYER_IAMGES); + P_PlayersCaseListAdapter->p_BtnOnClickListListener->m_label[index]->SetTextColor(Color::GetColorFromRGBA(0x4f, 0xc3, 0x4c, 0xff)); + P_PlayersCaseListAdapter->p_BtnOnClickListListener->m_button[index]->SetImageSrc(imagePlaying,nullptr); + //P_PlayersCaseListAdapter->p_BtnOnClickListListener->m_button[index]->SetViewId("playing"); + P_PlayersCaseListAdapter->p_BtnOnClickListListener->playOrDeleteStatus[index] = 1; +} +void BtnOnClickListListener::SongNotClick(PlayersCaseListAdapter *P_PlayersCaseListAdapter,int index) +{ + ImageInfo *imageDeleye = ImageCacheManager::GetInstance().LoadOneInMultiRes(PLAYER_MUSIC_DELETE, PLAYER_IAMGES); + P_PlayersCaseListAdapter->p_BtnOnClickListListener->m_label[index]->SetTextColor(Color::GetColorFromRGBA(0xff, 0xff, 0xff, 0xff)); + P_PlayersCaseListAdapter->p_BtnOnClickListListener->m_button[index]->SetImageSrc(imageDeleye,nullptr); + //std::string viewId = "delete"; + //P_PlayersCaseListAdapter->p_BtnOnClickListListener->m_button[index]->SetViewId(viewId.c_str()); + P_PlayersCaseListAdapter->p_BtnOnClickListListener->playOrDeleteStatus[index] = 0; +} +/// @brief 这个函数是一个按钮点击事件监听器的回调函数 +/// @param view +/// @param event +/// @return +bool BtnOnClickListListener::OnClick(UIView& view, const ClickEvent& event) +{ + PlayersView *playersView = PlayersView::GetInstance(); + PlayersCaseListAdapter *P_PlayersCaseListAdapter = PlayersCaseListAdapter::GetInstance(); + //BtnOnListData该函数的作用是从传入的视图中提取相关数据 + BtnOnListData(view); + if((&view == P_PlayersCaseListAdapter->p_BtnOnClickListListener->m_button[index_]) && + P_PlayersCaseListAdapter->p_BtnOnClickListListener->playOrDeleteStatus[index_] == 0) + { + playersView->GetDelSongView()->SetTheSongLabelStyle(sliceId_); + playersView->SetPlayerDelSongViewStatus(true); + return false; + } + else if((&view == P_PlayersCaseListAdapter->p_BtnOnClickListListener->m_label[index_])){ + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BtnOnClickListListener sliceId_: %s.", sliceId_); + UNUSED(event); + int ret; + int32_t playerState; + uint8_t state = UICheckBox::UICheckBoxState::MAX_STATUS_NUM; + if (playersView == nullptr) { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "playersView null!"); + return false; + } + // 标记当前播放歌曲index_ + PlayersModel::GetInstance()->SetCurrentIndex(index_); //当前正在播放的歌曲 + // 本地播放文件路径和状态 + std::string strSrcMusic(APP_MUSIC_PATH);//"/user/music" + std::string tempStr("/"); + std::string strName = sliceId_; + PlayersModel::GetInstance()->SetPlayerUri(strSrcMusic + tempStr + strName); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "uri: %s.", PlayersModel::GetInstance()->GetPlayerUri().c_str()); + std::string strSongName = sliceId_; + std::string pureName = strSongName.substr(0, strSongName.rfind(".")); //获取纯粹歌曲名 + const char *songName = pureName.c_str(); + //playersView->TitleSetText(songName); + //playersView->SetPlayerListGroupStatus(false);//这是点击歌曲后就会播放歌曲歌单隐藏 + /* -------------------------------------------------------------------------- */ + SongClick(P_PlayersCaseListAdapter,index_); + for(int i= 0;iGetCount();i++) + { + if(i != index_) + { + SongNotClick(P_PlayersCaseListAdapter,i); + } + } + /* -------------------------------------------------------------------------- */ + // 刷新UI + RootView::GetInstance()->Invalidate(); + + state = playersView->GetPlayerButtonState(); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "state %d", state); + if (state == UICheckBox::UICheckBoxState::UNSELECTED) { + playersView->SetPlayerButtonState(UICheckBox::UICheckBoxState::SELECTED); + /* start play */ + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "play"); + PlayersModel::GetInstance()->GetPlayerCtr()->GetPlayerState(playerState); + if (playerState == PlayerStates::PLAYER_PAUSED) { + ret = PlayersModel::GetInstance()->GetPlayerCtr()->Reset(); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Reset, ret:%d", ret); + } + PlayersModel::GetInstance()->PlayerStat(); // 播放 + } else if (state == UICheckBox::UICheckBoxState::SELECTED) { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "List to play"); + PlayersModel::GetInstance()->GetPlayerCtr()->GetPlayerState(playerState); + if (playerState == PlayerStates::PLAYER_STARTED) { + ret = PlayersModel::GetInstance()->GetPlayerCtr()->Stop(); // 停止 + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Stop, ret:%d", ret); + ret = PlayersModel::GetInstance()->GetPlayerCtr()->Reset(); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Reset, ret:%d", ret); + } + PlayersModel::GetInstance()->PlayerStat(); + } + } + return true; +} + +void BtnOnClickListListener::BtnOnListData(UIView& view) +{ + //index_ = view.GetViewIndex(); + index_ = view.GetParent()->GetViewIndex(); //list中如果其他组件,想点击里面组件,得先获取父视图 + List &playersCaseList = PlayersListGroup::GetInstance()->GetCase(); + ListNode* node = playersCaseList.Begin(); + for (uint16_t i = 0; i < index_; i++) { + node = node->next_; + } + if(node != nullptr) + { + sliceId_ = node->data_.sliceId; + } +} + +UIView *PlayersCaseListAdapter::GetView(UIView* inView, int16_t index) +{ + List &playersCaseList = PlayersListGroup::GetInstance()->GetCase(); + if (playersCaseList.IsEmpty()) { + return nullptr; + } + if ((index > playersCaseList.Size() - 1) || (index < 0)) { + return nullptr; + } + ListNode* node = playersCaseList.Begin(); + for (uint16_t i = 0; i < index; i++) { + node = node->next_; + } + std::string strSongName = node->data_.sliceId; + std::string pureName = strSongName.substr(0, strSongName.rfind(".")); + const char *songName = pureName.c_str(); + PlayerListItemView *listitem = nullptr; + PlayerListItem listitemData; + listitemData.index = index; + listitemData.label = songName; + if (inView == nullptr) { + listitem = new PlayerListItemView(); + } else { + listitem = static_cast(inView); + } + listitem->SetItemInfo(listitemData); + if(listener == nullptr) + { + listener = new BtnOnClickListListener(); + p_BtnOnClickListListener = new BtnOnClickListListener(); + if(listener == nullptr) + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "listener == nullptr"); + return nullptr; + } + //listitem->SetOnClickListener(listener); + p_BtnOnClickListListener->SetButtonAndLabel(listitem->GetLabel(),listitem->GetButton(),index,listener); + } + else + { + //listitem->SetOnClickListener(listener); + p_BtnOnClickListListener->SetButtonAndLabel(listitem->GetLabel(),listitem->GetButton(),index,listener); + } + return listitem; + +} +} // namespace OHOS diff --git a/code/sdk/application/wearable/nativeapp/nativeui/player/src/PlayersModel.cpp b/code/sdk/application/wearable/nativeapp/nativeui/player/src/PlayersModel.cpp index f0509f811..ce172b326 100755 --- a/code/sdk/application/wearable/nativeapp/nativeui/player/src/PlayersModel.cpp +++ b/code/sdk/application/wearable/nativeapp/nativeui/player/src/PlayersModel.cpp @@ -170,6 +170,18 @@ int16_t PlayersModel::GetCurrentIndex(void) void PlayersModel::SetCurrentIndex(int16_t value) { currentIndex = value; + /* -------------------------------------------------------------------------- */ + m_PlayersCaseListAdapter = PlayersCaseListAdapter::GetInstance(); + m_PlayersCaseListAdapter->p_BtnOnClickListListener->SongClick(m_PlayersCaseListAdapter,currentIndex); + for(int i= 0;iGetCount();i++) + { + if(i != currentIndex) + { + m_PlayersCaseListAdapter->p_BtnOnClickListListener->SongNotClick(m_PlayersCaseListAdapter,i); + } + } + PlayersView::GetInstance()->GetPlayerList(); + /* -------------------------------------------------------------------------- */ } int16_t PlayersModel::GetPlayerModel(void) @@ -251,7 +263,7 @@ int PlayersModel::PlayerInit(void) WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PlayerInit playersPresenter GetInstance fail"); return OHOS_FAILURE; } - playersPresenter->SetTitleSetText(songName); + // playersPresenter->SetTitleSetText(songName); playersPresenter->SetPlaybackProgress(circleProgress); playersPresenter->SetPlayerState(playButtonState); // PlayerStat(); @@ -278,7 +290,7 @@ void PlayersModel::NextSong(int16_t index) const char *songName = pureName.c_str(); PlayersPresenter *playersPresenter = PlayersPresenter::GetInstance(); if (playersPresenter != nullptr) { - playersPresenter->SetTitleSetText(songName); + // playersPresenter->SetTitleSetText(songName); playersPresenter->SetPlaybackProgress(0); // 0:进度0% } int32_t ret; diff --git a/code/sdk/application/wearable/nativeapp/nativeui/player/src/PlayersPresenter.cpp b/code/sdk/application/wearable/nativeapp/nativeui/player/src/PlayersPresenter.cpp index c240f6e43..9f3c9c07e 100755 --- a/code/sdk/application/wearable/nativeapp/nativeui/player/src/PlayersPresenter.cpp +++ b/code/sdk/application/wearable/nativeapp/nativeui/player/src/PlayersPresenter.cpp @@ -1,1423 +1,1513 @@ -/* - * Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved. - * Description: Player view - * Author: - * Create: 2021-07-26 - */ -#include -#include -#include -#include -#include -#include "PlayersPresenter.h" -#include "wearable_log.h" -#include "common/image_cache_manager.h" -#include "UiConfig.h" -#include "ui_resource_image.h" -#include "PlayersView.h" -#include "PlayersModel.h" -#include "BluetoothPresenter.h" -#include "graphic_service.h" -#include "PhoneService.h" - -#include "bts_avrcp_controller.h" -#include "bts_avrcp_target.h" - -namespace OHOS { -static PlayerOnDragListener *g_pPlayerOnDragListener = nullptr; -static JumpView *g_pJumpView = nullptr; -static PlayersPresenter *g_pPlayersPresenter = nullptr; - -PlayersPresenter *PlayersPresenter::GetInstance(void) -{ - return g_pPlayersPresenter; -} - -PlayersPresenter::PlayersPresenter() -{ - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersPresenter"); - g_pPlayersPresenter = this; -} - -PlayersPresenter::~PlayersPresenter() -{ - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "~PlayersPresenter"); - g_pPlayersPresenter = nullptr; -} - -JumpView *JumpView::GetInstance(void) -{ - return g_pJumpView; -} - -JumpView::JumpView() -{ - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "JumpView::JumpView"); - g_pJumpView = this; - preProcessView[BLUETOOTHEARPHONEVIEW] = &JumpView::ChangeBluetoothEarPhoneView; - preProcessView[BLUETOOTHEARLISTVIEW] = &JumpView::ChangeBluetoothEarListView; - preProcessView[BLUETOOTHDEVICELISTVIEW] = &JumpView::ChangeBluetoothDeviceListView; - preProcessView[BLUETOOTHEOPTIONSVIEW] = &JumpView::ChangeBluetoothOptionsView; - preProcessView[BLUETOOTHRECONNECTVIEW] = &JumpView::ChangeBluetoothReconnectView; - preProcessView[TIPSSUCCMESSAGEVIEW] = &JumpView::ChangeTipsSuccMessageView; - preProcessView[TIPSCONNFAILMESSAGEVIEW] = &JumpView::ChangeTipsConnFailMessageView; - preProcessView[TIPSFAILMESSAGEVIEW] = &JumpView::ChangeTipsFailMessageView; - preProcessView[BLUETOOTHEVIEW] = &JumpView::ChangeBluetoothView; -} - -JumpView::~JumpView() -{ - delete bluetoothEarPhoneView; - bluetoothEarPhoneView = nullptr; - delete bluetoothOptionsView; - bluetoothOptionsView = nullptr; - delete bluetoothEarListView; - bluetoothEarListView = nullptr; - delete bluetoothReconnectView; - bluetoothReconnectView = nullptr; - delete bluetoothDeviceListView; - bluetoothDeviceListView = nullptr; - delete tipsSuccMessageView; - tipsSuccMessageView = nullptr; - delete tipsConnFailMessageView; - tipsConnFailMessageView = nullptr; - delete tipsFailMessageView; - tipsFailMessageView = nullptr; - delete bluetoothView; - bluetoothView = nullptr; - int i; - for (i = BLUETOOTHEARPHONEVIEW; i <= BLUETOOTHEJUMP_MAX; i++) { - container[i] = nullptr; - } - g_pJumpView = nullptr; -} - -bool JumpView::ChangeBluetoothEarPhoneView(int16_t hideView, int16_t thisView) -{ - UNUSED(hideView); - if (container[thisView] == nullptr) { - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ChangeBluetoothEarPhoneView"); - bluetoothEarPhoneView = new BluetoothEarPhoneView(); - if (bluetoothEarPhoneView == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bluetoothEarPhoneView new fail"); - return false; - } - UIViewGroup *group = bluetoothEarPhoneView->InitShowUpView(); // init view - if (group == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "group nullptr fail"); - return false; - } - container[thisView] = group; - RootView::GetInstance()->Add(container[thisView]); - } - // 动画开始 - bluetoothEarPhoneView->BtAnimatorStart(); - // 蓝牙扫描&清空列表 - bluetoothEarPhoneView->BtEnable(); - return true; -} - -bool JumpView::ChangeBluetoothEarListView(int16_t hideView, int16_t thisView) -{ - if (container[thisView] == nullptr) { - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ChangeBluetoothEarListView"); - bluetoothEarListView = new BluetoothEarListView(); - if (bluetoothEarListView == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bluetoothEarListView new fail"); - return false; - } - UIViewGroup *group = bluetoothEarListView->InitShowUpView(); // init view - if (group == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "group nullptr fail"); - return false; - } - container[thisView] = group; - RootView::GetInstance()->Add(container[thisView]); - } else { - // 刷新列表 - UIList *scanList = bluetoothEarListView->GetScanUIList(); - if (scanList == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "OnClick scanList nullptr"); - return false; - } - scanList->RefreshList(); - } - ResetEarListView(hideView); - return true; -} - -bool JumpView::ChangeBluetoothView(int16_t hideView, int16_t thisView) -{ - UNUSED(hideView); - if (container[thisView] == nullptr) { - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ChangeBluetoothView"); - bluetoothView = new BluetoothView(); - if (bluetoothView == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bluetoothView new fail"); - return false; - } - // init view - UIViewGroup *group = bluetoothView->LoadBluetoothView(); - if (group == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "group nullptr fail"); - return false; - } - container[thisView] = group; - RootView::GetInstance()->Add(container[thisView]); - } - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "JumpView::ChangeBluetoothView"); - BluetoothModel::GetInstance()->SetTagConnectView(false); - return true; -} - -bool JumpView::ChangeBluetoothOptionsView(int16_t hideView, int16_t thisView) -{ - UNUSED(hideView); - if (container[thisView] == nullptr) { - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ChangeBluetoothOptionsView"); - bluetoothOptionsView = new BluetoothOptionsView(); - if (bluetoothOptionsView == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bluetoothOptionsView new fail"); - return false; - } - // init view - UIViewGroup *group = bluetoothOptionsView->InitShowUpView(); - if (group == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "group nullptr fail"); - return false; - } - container[thisView] = group; - RootView::GetInstance()->Add(container[thisView]); - } - return true; -} - -bool JumpView::ChangeBluetoothDeviceListView(int16_t hideView, int16_t thisView) -{ - UNUSED(hideView); - if (container[thisView] == nullptr) { - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ChangeBluetoothDeviceListView"); - bluetoothDeviceListView = new BluetoothDeviceListView(); - if (bluetoothDeviceListView == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bluetoothDeviceListView new fail"); - return false; - } - // init view - UIViewGroup *group = bluetoothDeviceListView->InitShowUpView(); - if (group == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Device group nullptr fail"); - return false; - } - container[thisView] = group; - RootView::GetInstance()->Add(container[thisView]); - } else { - // 刷新列表 - UIList *deviceList = bluetoothDeviceListView->GetDeviceUIList(); - if (deviceList == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "OnClick deviceList nullptr"); - return false; - } - deviceList->RefreshList(); - } - BluetoothDeviceListView *bluetoothDeviceListView = BluetoothDeviceListView::GetInstance(); - if (bluetoothDeviceListView == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "OnClick bluetoothDeviceListView new fail"); - return false; - } - bluetoothDeviceListView->RefreshText(); - - return true; -} - -bool JumpView::ChangeBluetoothReconnectView(int16_t hideView, int16_t thisView) -{ - UNUSED(hideView); - if (container[thisView] == nullptr) { - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ChangeBluetoothReconnectView"); - bluetoothReconnectView = new BluetoothReconnectView(); - if (bluetoothReconnectView == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bluetoothReconnectView new fail"); - return false; - } - // init view - UIViewGroup *group = bluetoothReconnectView->InitShowUpView(); - if (group == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "group nullptr fail"); - return false; - } - container[thisView] = group; - RootView::GetInstance()->Add(container[thisView]); - } - BluetoothModel::GetInstance()->SetTagDisconnectView(true); - BluetoothReconnectView::GetInstance()->RefreshBluetoothNameLabel(); - bluetoothReconnectView->BtReconnectStart(); - return true; -} - -void JumpView::ResetEarListView(int16_t hideView) -{ - BluetoothEarListView *bluetoothEarListView = BluetoothEarListView::GetInstance(); - if (bluetoothEarListView == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "MainBluetoothView::ResetEarListView bluetoothEarListView == nullptr"); - return; - } - bluetoothEarListView->SetCancelConnedRequestButtonRemove(); - if (hideView == BLUETOOTHEARPHONEVIEW) { - bluetoothEarListView->SetTitleLabel("正在扫描"); - bluetoothEarListView->SetNewEquipmentButtonRemove(); - } else if (hideView == TIPSCONNFAILMESSAGEVIEW) { - bluetoothEarListView->SetTitleLabel("扫描完成"); - bluetoothEarListView->SetNewEquipmentButtonAdd(); - RootView::GetInstance()->Invalidate(); - } -} - -bool JumpView::ChangeTipsSuccMessageView(int16_t hideView, int16_t thisView) -{ - UNUSED(hideView); - if (container[thisView] == nullptr) { - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ChangeTipsSuccMessageView"); - tipsSuccMessageView = new TipsSuccMessageView(); - if (tipsSuccMessageView == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "tipsSuccMessageView new fail"); - return false; - } - // init view - UIViewGroup *group = tipsSuccMessageView->ShowUpViewInit(); - if (group == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "group nullptr fail"); - return false; - } - container[thisView] = group; - RootView::GetInstance()->Add(container[thisView]); - } - return true; -} - -bool JumpView::ChangeTipsConnFailMessageView(int16_t hideView, int16_t thisView) -{ - UNUSED(hideView); - if (container[thisView] == nullptr) { - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ChangeTipsConnFailMessageView"); - tipsConnFailMessageView = new TipsConnFailMessageView(); - if (tipsConnFailMessageView == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "tipsConnFailMessageView new fail"); - return false; - } - // init view - UIViewGroup *group = tipsConnFailMessageView->ShowUpViewInit(); - if (group == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "group nullptr fail"); - return false; - } - container[thisView] = group; - RootView::GetInstance()->Add(container[thisView]); - } - BluetoothReconnectView *bluetoothReconnectView = BluetoothReconnectView::GetInstance(); - if (bluetoothReconnectView == nullptr) { - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "GapAclStateChangedCallback bluetoothReconnectView == nullptr"); - } else { - container[BLUETOOTHRECONNECTVIEW]->SetVisible(false); - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ChangeTipsConnFailMessageView SetVisible(false)"); - } - return true; -} - -bool JumpView::ChangeTipsFailMessageView(int16_t hideView, int16_t thisView) -{ - UNUSED(hideView); - if (container[thisView] == nullptr) { - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ChangeTipsFailMessageView"); - tipsFailMessageView = new TipsFailMessageView(); - if (tipsFailMessageView == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "tipsFailMessageView new fail"); - return false; - } - // init view - UIViewGroup *group = tipsFailMessageView->ShowUpViewInit(); - if (group == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "group nullptr fail"); - return false; - } - container[thisView] = group; - RootView::GetInstance()->Add(container[thisView]); - } - return true; -} - -bool JumpView::CheckViewParam(int16_t hideView, int16_t showView) -{ - if (showView < 0 || showView >= BLUETOOTHEJUMP_MAX) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "JumpView::CheckViewParam showView err."); - return false; - } - - if (hideView < 0 || hideView > BLUETOOTHEJUMP_MAX) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "JumpView::CheckViewParam showView err."); - return false; - } - - if (hideView != BLUETOOTHEJUMP_MAX) { - if (container[hideView] == nullptr) { - return false; - } - container[hideView]->SetVisible(false); - } - - if (hideView == BLUETOOTHEARLISTVIEW || showView == BLUETOOTHEARLISTVIEW) { - BluetoothModel::GetInstance()->SetTagScanDeviceClicked(false); - } - - return true; -} - -void JumpView::ChangeView(int16_t hideView, int16_t showView) -{ - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "JumpView:: ChangeView %d", hideView); - if (CheckViewParam(hideView, showView) == false) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "JumpView::ChangeView check param err %d %d.", hideView, showView); - return; - } - - PreprosssChangeView tmpPreProcessView = preProcessView[showView]; - - if ((this->*tmpPreProcessView)(hideView, showView) == false) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "JumpView::ChangeView %d %d failed", showView, hideView); - return; - } - container[showView]->SetVisible(true); - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "JumpView:: ChangeView end!!!%d", showView); - RootView::GetInstance()->Invalidate(); - BluetoothModel::GetInstance()->SetCurView(showView); -} - -PlayersListGroup::~PlayersListGroup() -{ - if (playersCaseList_ != nullptr) { - playersCaseList_->Clear(); - } - delete playersCaseList_; - playersCaseList_ = nullptr; -} - -void PlayersListGroup::AddCase(PlayerCaseInfo testCaseInfo) -{ - if (playersCaseList_ == nullptr) { - return; - } - playersCaseList_->PushBack(testCaseInfo); -} - -void PlayersListGroup::SetUpListCase() -{ - int16_t ret; - if (playersCaseList_ == nullptr) { - playersCaseList_ = new List(); - if (playersCaseList_ == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PlayersListGroup playersCaseList_ new fail"); - return; - } - } - playersCaseList_->Clear(); - ret = GetAllFiles(playersCaseList_); - if (ret == OHOS_FAILURE) { - return; - } -} - -List& PlayersListGroup::GetCase() -{ - return *playersCaseList_; -} - -char *PlayersListGroup::GetCase(int16_t index) -{ - if (index < 0 || playersCaseList_ == nullptr) { - return nullptr; - } - ListNode *node = playersCaseList_->Begin(); - while (node != playersCaseList_->End()) { - if (index == node->data_.index) { - return node->data_.sliceId; - } - node = node->next_; - } - return nullptr; -} - -// 读取文件夹下文件名信息 -int PlayersListGroup::GetAllFiles(List *playersCaseList) -{ - int ret; - int i{0}; - struct dirent *direntp; - struct PlayerCaseInfo playerCaseInfo; - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersView::GetAllFiles"); - // 打开目录 - DIR *dirp = opendir(APP_MUSIC_PATH); - // 遍历文件 - if (dirp != NULL) { - while ((direntp = readdir(dirp)) != NULL) { - ret = memcpy_s(playerCaseInfo.sliceId, DEC_NUM_256, direntp->d_name, DEC_NUM_256); - if (ret != OHOS_SUCCESS) { - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "memcpy_s err %d.", ret); - closedir(dirp); - return OHOS_FAILURE; - } - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "song Name %s.", playerCaseInfo.sliceId); - playerCaseInfo.index = i; - i++; - playersCaseList->PushBack(playerCaseInfo); - } - } else { - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersView::opendir err!"); - return OHOS_FAILURE; - } - // 关闭目录 - closedir(dirp); - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersView::GetAllFiles end!"); - return OHOS_SUCCESS; -} - -ButtonOnClickListener::~ButtonOnClickListener() -{ - delete volumeSettingView; - volumeSettingView = nullptr; -} - -// Button OnClick -void ButtonOnClickListener::PlayerButtonOnClick() -{ - PlayersView *playersView = PlayersView::GetInstance(); - if (playersView == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "playersView GetInstance fail"); - return; - } - - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "playerButton OnClick"); - uint8_t state = UICheckBox::UICheckBoxState::MAX_STATUS_NUM; - int32_t playerState; - int32_t connCtState = avrcp_ct_get_device_connect_state(BluetoothModel::GetInstance()->GetLastConnedAddr()); - int32_t connTgState = avrcp_tg_get_device_connect_state(BluetoothModel::GetInstance()->GetLastConnedAddr()); - - state = playersView->GetPlayerButtonState(); - if (PlayersModel::GetInstance()->GetPlayerCtr() == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PlayersModel::GetInstance()->GetPlayerCtr() nullptr"); - return; - } - PlayersModel::GetInstance()->GetPlayerCtr()->GetPlayerState(playerState); - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "buttonState = %d playerState = %d", state, playerState); - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "connCtState = %d connTgState = %d", connCtState, connTgState); - - if (GetCurrCallNum() != 0 && GetScoConnectState() == HFP_SCO_STATE_CONNECTED) { - if (state == UICheckBox::UICheckBoxState::SELECTED) { - playersView->SetPlayerButtonState(UICheckBox::UICheckBoxState::UNSELECTED); - playersView->GetPlayerButton()->Invalidate(); - } else { - playersView->SetPlayerButtonState(UICheckBox::UICheckBoxState::SELECTED); - playersView->GetPlayerButton()->Invalidate(); - } - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[PlayerButtonOnClick] calling phone"); - return; - } - if (state == UICheckBox::UICheckBoxState::SELECTED) { - /* start play */ - PlayersModel::GetInstance()->ConnectBtAndLocalPlay(connCtState, connTgState, playerState); - } else if (state == UICheckBox::UICheckBoxState::UNSELECTED) { - PlayersModel::GetInstance()->ConnectBtAndLocalPause(connCtState, connTgState); - } -} - -void ButtonOnClickListener::SoundButtonOnClick() -{ - PlayersView *playersView = PlayersView::GetInstance(); - if (playersView == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SoundButtonOnClick playersView nullptr err"); - return; - } - if (volumeSettingView == nullptr) { - volumeSetting = new VolumeSettingView(); - if (volumeSetting == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "volumeSetting nullptr err"); - return; - } - if (volumeSetting->SetUpVolume() == false) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "volumeSetting SetUpVolume fail"); - return; - } - volumeSetting->GetProgress()->SetValue(AudioManager::GetInstance().GetVolume(AUDIO_STREAM_MUSIC)); - if (AudioManager::GetInstance().GetVolume(AUDIO_STREAM_MUSIC) == 0) { - ImageInfo *image = ImageCacheManager::GetInstance().LoadOneInMultiRes(PLAYER_MUTE_BUTTON, PLAYER_IAMGES); - volumeSetting->GetDecreaseButton()->SetImageSrc(image, image); - } - volumeSettingView = volumeSetting; - RootView::GetInstance()->Add(volumeSettingView); - } - VolumeSliderEventListener *volumeSliderEventListener = VolumeSliderEventListener::GetInstance(); - if (volumeSliderEventListener == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SoundButtonOnClick volumeSliderEventListener nullptr err"); - return; - } - volumeSliderEventListener->SetPlayerCoefficients(VOLUMEPLAYERS); // 进度条系数 - playersView->SetVisible(false); - volumeSettingView->SetVisible(true); - // 刷新UI - RootView::GetInstance()->Invalidate(); -} - -void ButtonOnClickListener::OptionsButtonOnClick() -{ - PlayersView *playersView = PlayersView::GetInstance(); - if (playersView == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "OptionsButtonOnClick playersView nullptr err"); - return; - } - JumpView *jumpView = JumpView::GetInstance(); - if (jumpView == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "jumpView GetInstance fail"); - return; - } - playersView->SetVisible(false); - jumpView->ChangeView(JumpView::BluetoothJumpViewNum::BLUETOOTHEJUMP_MAX, - JumpView::BluetoothJumpViewNum::BLUETOOTHEVIEW); -} - -void ButtonOnClickListener::PlayerModelButtonOnClick() -{ - PlayersView *playersView = PlayersView::GetInstance(); - if (playersView == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PlayerModelButtonOnClick playersView nullptr err"); - return; - } - switch (PlayersModel::GetInstance()->GetPlayerModel()) { - case LOOP: - playersView->PlayerModelButtonSetSrc(PLAYER_PLAYERSMODEL_LOOP); // 循环 - break; - case SEQUENCE: - playersView->PlayerModelButtonSetSrc(PLAYER_PLAYERSMODEL_SEQUENCE); // 顺序 - break; - case REPEATS: - playersView->PlayerModelButtonSetSrc(PLAYER_PLAYERSMODEL_REPEATS); // 重复 - break; - case RANDOM: - playersView->PlayerModelButtonSetSrc(PLAYER_PLAYERSMODEL_RANDOM); // 随机 - break; - default: - break; - } - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "playerModel %d", PlayersModel::GetInstance()->GetPlayerModel()); -} - -bool ButtonOnClickListener::OnClick(UIView& view, const ClickEvent& event) -{ - UNUSED(view); - UNUSED(event); - PlayersView *playersView = PlayersView::GetInstance(); - if (playersView == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PlayersView::GetInstance"); - return false; - } - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ButtonOnClickListener OnClick"); - if (view_ == (UIView *)playersView->GetPlayerButton()) { - PlayerButtonOnClick(); - } else if (view_ == (UIView *)playersView->GetNextButton()) { - if (playersView->GetPlaybackProgress() != nullptr) { - playersView->GetPlaybackProgress()->SetValue(0); // 0:进度0% - playersView->GetPlaybackProgress()->Invalidate(); - } - PlayersModel::GetInstance()->LoopingPlayout(); - } else if (view_ == (UIView *)playersView->GetPreButton()) { - if (playersView->GetPlaybackProgress() != nullptr) { - playersView->GetPlaybackProgress()->SetValue(0); // 0:进度0% - playersView->GetPlaybackProgress()->Invalidate(); - } - PlayersModel::GetInstance()->PreviousPlayout(); - } else if (view_ == (UIView *)playersView->GetPlayerModelButton()) { - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "playerModelButton OnClick"); - PlayersModel::GetInstance()->SetPlayerModelAddOne(); - if (PlayersModel::GetInstance()->GetPlayerModel() > RANDOM) { - PlayersModel::GetInstance()->SetPlayerModel(LOOP); - } - PlayerModelButtonOnClick(); - } else if (view_ == (UIView *)playersView->GetSoundButton()) { - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "soundButton OnClick"); - SoundButtonOnClick(); - } else if (view_ == (UIView *)playersView->GetOptionsButton()) { - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "optionsButton OnClick"); - OptionsButtonOnClick(); - } - return true; -} - -// 播放器回调 -PlayerCallbackImpl::PlayerCallbackImpl() -{ -} - -PlayerCallbackImpl::~PlayerCallbackImpl() -{ -} - -void PlayerCallbackImpl::OnPlaybackComplete() -{ - // 此处实现代码用于处理文件播放完成的事件 - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "OnPlaybackCompleten"); - PlayersView *playersView = PlayersView::GetInstance(); - if (playersView != nullptr) { - if (playersView->GetPlaybackProgress() != nullptr) { - playersView->GetPlaybackProgress()->SetValue(100); // 100:进度100% - playersView->GetPlaybackProgress()->Invalidate(); - } - } - usleep(20000); - GraphicService::GetInstance()->PostGraphicEvent(std::bind(&PlayersModel::PlaySwitching, PlayersModel::GetInstance())); -} - -void PlayerCallbackImpl::OnError(int32_t errorType, int32_t errorCode) -{ - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "OnError test, errorType %d, errorCode %d", errorType, errorCode); - // 此处实现代码处理错误事件 -} - -void PlayerCallbackImpl::OnInfo(int type, int extra) -{ - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "OnInfo test, type %d, extra %d.", type, extra); - // 此处实现代码处理普通事件 -} - -void PlayerCallbackImpl::OnRewindToComplete() -{ - // 此处实现代码处理进度控制完成的事件 - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "OnRewindToComplete test"); -} - -// 音频中断 -PlayerInterruptListener::PlayerInterruptListener() -{ -} - -PlayerInterruptListener::~PlayerInterruptListener() -{ -} - -void PlayerInterruptListener::SetOwner(std::shared_ptr player) -{ - player_ = player; -} - -std::shared_ptr PlayerInterruptListener::GetPlayer() -{ - return player_; -} - -void PlayerInterruptListener::RestFlag() -{ - isPaused_ = false; - isDelayed_ = false; - isResumed_ = false; - isBeginStopped_ = false; - isEndStopped_ = false; -} - -void PlayerInterruptListener::SetPaused(bool value) -{ - isPaused_ = value; -} - -void PlayerInterruptListener::SetResumed(bool value) -{ - isResumed_ = value; -} - -bool PlayerInterruptListener::IsPaused() -{ - return isPaused_; -} - -bool PlayerInterruptListener::IsDelayed() -{ - return isDelayed_; -} - -bool PlayerInterruptListener::IsResumed() -{ - return isResumed_; -} - -bool PlayerInterruptListener::IsBeginStopped() -{ - return isBeginStopped_; -} - -bool PlayerInterruptListener::IsEndStopped() -{ - return isEndStopped_; -} - -static void PlayerPostGraphicEvent(void (*fun)(void)) -{ - GraphicService::GetInstance()->PostGraphicEvent(*fun); -} - -static void Pause(void) -{ - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[PlayerInterruptListener::PausePlayer] start"); - int32_t state; - int32_t ret; - std::shared_ptr PlayerIntrptListener = - OHOS::PlayersModel::GetInstance()->GetPlayerIntrptListener(); - if (PlayerIntrptListener == nullptr) { - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[PlayerInterruptListener] Pause PlayerIntrptListener is null"); - return; - } - - std::shared_ptr player = PlayerIntrptListener->GetPlayer(); - if (player.get() == nullptr) { - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[PlayerInterruptListener::PausePlayer] player is nullptr"); - return; - } - - PlayersView *playersView = PlayersView::GetInstance(); - - player->GetPlayerState(state); - if (state == PLAYER_STARTED) { - ret = player->Pause(); - if (ret == 0) { - if (playersView == nullptr) { - PlayersModel::GetInstance()->SetPlayButtonState(false); - } else { - playersView->SetPlayerButtonState(UICheckBox::UICheckBoxState::UNSELECTED); - playersView->GetPlayerButton()->Invalidate(); - } - PlayerIntrptListener->RestFlag(); - PlayerIntrptListener->SetPaused(true); - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[PlayerInterruptListener::PausePlayer]"); - } - } -} - -void PlayerInterruptListener::PausePlayer(void) -{ - PlayerPostGraphicEvent(Pause); -} - -static void Resume(void) -{ - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[PlayerInterruptListener::Resume] start"); - int32_t state; - int32_t ret; - std::shared_ptr PlayerIntrptListener = - OHOS::PlayersModel::GetInstance()->GetPlayerIntrptListener(); - if (PlayerIntrptListener == nullptr) { - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[PlayerInterruptListener] Pause PlayerIntrptListener is null"); - return; - } - - std::shared_ptr player = PlayerIntrptListener->GetPlayer(); - if (player.get() == nullptr) { - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[PlayerInterruptListener::ResumePlayer] player is nullptr"); - return; - } - - PlayersView *playersView = PlayersView::GetInstance(); - - player->GetPlayerState(state); - if (state == PLAYER_PAUSED && PlayerIntrptListener->IsPaused() == true) { - ret = player->Play(); - if (ret == 0) { - if (playersView == nullptr) { - PlayersModel::GetInstance()->SetPlayButtonState(true); - } else { - playersView->SetPlayerButtonState(UICheckBox::UICheckBoxState::SELECTED); - playersView->GetPlayerButton()->Invalidate(); - } - PlayerIntrptListener->RestFlag(); - PlayerIntrptListener->SetResumed(true); - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[PlayerInterruptListener::ResumePlayer]"); - } - } -} - -void PlayerInterruptListener::ResumePlayer(void) -{ - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[PlayerInterruptListener::ResumePlayer] start"); - usleep(50000); // 确保界面切换完成 - if (NativeAbility::GetInstance().GetCurSliceId() == VIEW_MAEKPHONE_SAMPLE || - (GetCurrCallState() != HFP_HF_CALL_STATE_FINISHED && GetScoConnectState() == HFP_SCO_STATE_CONNECTED)) { - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[PlayerInterruptListener::ResumePlayer] this is in calling"); - return; // 通话界面,禁止音乐恢复播放 - } - AudioRelease(); // 适配某些机型不触发SCO - - PlayerPostGraphicEvent(Resume); -} - -static void Stop(void) -{ - PlayersModel::GetInstance()->PlayerStop(); - PlayersModel::GetInstance()->ClearActivateAudioInterrupt(); -} - -void PlayerInterruptListener::StopPlayer(void) -{ - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[PlayerInterruptListener::StopPlayer] start"); - PlayerPostGraphicEvent(Stop); -} - -void PlayerInterruptListener::OnInterrupt(int32_t type, int32_t hint) -{ - WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "[PlayerInterruptListener::] OnInterrupt go in, type %d, hint %d.", type, hint); - - if (type == INTERRUPT_TYPE_BEGIN && hint == INTERRUPT_HINT_PAUSE) { - PausePlayer(); - } - - if (type == INTERRUPT_TYPE_END && hint == INTERRUPT_HINT_RESUME) { - ResumePlayer(); - } - - if (hint == INTERRUPT_HINT_STOP) { - RestFlag(); - if (type == INTERRUPT_TYPE_BEGIN) { - isBeginStopped_ = true; - StopPlayer(); - } else if (type == INTERRUPT_TYPE_END) { - isEndStopped_ = true; - } - } -} - -PlayerOnDragListener::PlayerOnDragListener() -{ - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayerOnDragListener"); - g_pPlayerOnDragListener = this; -} - -PlayerOnDragListener::~PlayerOnDragListener() -{ - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "~PlayerOnDragListener"); - g_pPlayerOnDragListener = nullptr; -} - -PlayerOnDragListener *PlayerOnDragListener::GetInstance(void) -{ - return g_pPlayerOnDragListener; -} - -void PlayerOnDragListener::OnDragChangView(const DragEvent& event, int16_t hideView, int16_t showView, bool isStopScan) -{ - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "OnDragChangeView=%d showView=%d", hideView, showView); - if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT) { - if (isStopScan == true) { - BluetoothEarPhoneView *bluetoothEarPhoneView = BluetoothEarPhoneView::GetInstance(); - if (bluetoothEarPhoneView == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bluetoothEarPhoneView GetInstance fail"); - return; - } - bluetoothEarPhoneView->BtAnimatorStop(); - bluetoothEarPhoneView->StopBtDiscovery(); - } - // 跳转设置页面 - JumpView *jumpView = JumpView::GetInstance(); - if (jumpView == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "jumpView GetInstance fail"); - return; - } - jumpView->ChangeView(hideView, showView); - } -} - -//增加按键事件 -bool PlayerOnDragListener::OnKeyAct(UIView& view, const KeyEvent& event) -{ - WEARABLE_LOGD("","into the view is: %s\n", typeid(view).name()); - uint16 keyID = event.GetKeyId(); - WEARABLE_LOGD("","into key! keyID %u\n",keyID); - #if 0 - //如果是power键就返回上一级 - if (keyID == static_cast(ZliteKeyCode::ZLITE_KEY_POWER)) - { - uint16_t preSlice = NativeAbility::GetInstance().GetPreSliceId(); - NativeAbility::GetInstance().ChangeSlice(VIEW_APPLIST); - } - #endif - //目前只有一个按键。直接切换 - uint16_t preSlice = NativeAbility::GetInstance().GetPreSliceId(); - NativeAbility::GetInstance().ChangeSlice(preSlice); - return true; -} - -void PlayerOnDragListener::OnDragChangBluetoothView(const DragEvent& event) -{ - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "OnDragChangBluetoothView"); - if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT) { - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "DIRECTION_LEFT_TO_RIGHT"); - PlayersView *playersView = PlayersView::GetInstance(); - if (playersView == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "playersView GetInstance fail"); - return; - } - BluetoothView *bluetoothView = BluetoothView::GetInstance(); - if (bluetoothView == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bluetoothView GetInstance fail"); - return; - } - bluetoothView->group->SetVisible(false); - playersView->SetVisible(true); - // 刷新UI - RootView::GetInstance()->Invalidate(); - } -} - -void PlayerOnDragListener::DropEarPhoneView(const DragEvent& event) -{ - bool ret = BluetoothModel::GetInstance()->IsTagReturnToDeviceListView(); - if (ret == true) { - OnDragChangView(event, JumpView::BluetoothJumpViewNum::BLUETOOTHEARPHONEVIEW, - JumpView::BluetoothJumpViewNum::BLUETOOTHDEVICELISTVIEW, true); - } else { - OnDragChangView(event, JumpView::BluetoothJumpViewNum::BLUETOOTHEARPHONEVIEW, - JumpView::BluetoothJumpViewNum::BLUETOOTHEVIEW, true); - } -} - -void PlayerOnDragListener::DropEarListView(const DragEvent& event) -{ - bool ret = BluetoothModel::GetInstance()->IsTagScanDeviceClicked(); - if (ret == true) { - BluetoothCaseInfo *caseInfo = BluetoothModel::GetInstance()->GetTempMacValue(); - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayerOnDragListener::DropEarListView Addr: %02x%02x%02x%02x%02x%02x", - caseInfo->addr[5], caseInfo->addr[4], caseInfo->addr[3], /* mac下标 0 1 2 3 4 5 */ - caseInfo->addr[2], caseInfo->addr[1], caseInfo->addr[0]); /* mac下标 0 1 2 3 4 5 */ - ret = gap_disconnect_remote_device((const bd_addr_t *)caseInfo->addr); - if (ret == false) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PlayerOnDragListener::DropEarListView gap_disconnect_remote_device false"); - } - } - BluetoothItemView *pbItermView = BluetoothModel::GetInstance()->GetConnectionView(); - if (pbItermView == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "OnDragEnd The GetConnectionView nullptr."); - } else { - pbItermView->ConnectAnimatorStop(); - BluetoothModel::GetInstance()->SetConnectionView(nullptr); - } - OnDragChangView(event, JumpView::BluetoothJumpViewNum::BLUETOOTHEARLISTVIEW, - JumpView::BluetoothJumpViewNum::BLUETOOTHEVIEW, true); -} - -bool PlayerOnDragListener::OnDragEnd(UIView& view, const DragEvent& event) -{ - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayerOnDragListener::OnDragEnd- %s", view.GetViewId()); - if (view.GetViewId() == nullptr) { - return true; - } - if (strcmp(view.GetViewId(), BLUETOOTH_EAR_PHONE_VIEW) == 0) { - DropEarPhoneView(event); - } else if (strcmp(view.GetViewId(), TIPS_SUCC_MESSAGE_VIEW) == 0) { - OnDragChangView(event, JumpView::BluetoothJumpViewNum::TIPSSUCCMESSAGEVIEW, - JumpView::BluetoothJumpViewNum::BLUETOOTHDEVICELISTVIEW, false); - } else if (strcmp(view.GetViewId(), TIPS_FAIL_MESSAGE_VIEW) == 0) { - OnDragChangView(event, JumpView::BluetoothJumpViewNum::TIPSFAILMESSAGEVIEW, - JumpView::BluetoothJumpViewNum::BLUETOOTHEARPHONEVIEW, false); - } else if (strcmp(view.GetViewId(), TIPS_CONN_FAIL_MESSAGE_VIEW) == 0) { - CorrespondingJump(event, JumpView::BluetoothJumpViewNum::TIPSCONNFAILMESSAGEVIEW); - } else if (strcmp(view.GetViewId(), BLUETOOTH_EARLIST_VIEW) == 0) { - DropEarListView(event); - } else if (strcmp(view.GetViewId(), BLUETOOTH_RECONNECT_VIEW) == 0) { - BluetoothModel::GetInstance()->SetTagDisconnectView(false); - CorrespondingJump(event, JumpView::BluetoothJumpViewNum::BLUETOOTHRECONNECTVIEW); - BluetoothReconnectView *bluetoothReconnectView = BluetoothReconnectView::GetInstance(); - if (bluetoothReconnectView != nullptr) { - bluetoothReconnectView->BtReconnectStop(); - } - } else if (strcmp(view.GetViewId(), BLUETOOTH_OPTIONS_VIEW) == 0) { - OnDragChangView(event, JumpView::BluetoothJumpViewNum::BLUETOOTHEOPTIONSVIEW, - JumpView::BluetoothJumpViewNum::BLUETOOTHDEVICELISTVIEW, false); - } else if (strcmp(view.GetViewId(), BLUETOOTH_VIEW) == 0) { - OnDragChangBluetoothView(event); - } else if (strcmp(view.GetViewId(), BLUETOOTH_DEVICE_LIST_VIEW) == 0) { - OnDragChangView(event, JumpView::BluetoothJumpViewNum::BLUETOOTHDEVICELISTVIEW, - JumpView::BluetoothJumpViewNum::BLUETOOTHEVIEW, false); - } - return true; -} - - -void PlayerOnDragListener::CorrespondingJump(const DragEvent& event, int16_t hideView) -{ - BluetoothModel *bluetoothModel = BluetoothModel::GetInstance(); - if (bluetoothModel == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "MainBluetoothView::DropView bluetoothModel == nullptr"); - return; - } - if (bluetoothModel->GetTagReconnectJump() == true) { - OnDragChangView(event, hideView, - JumpView::BluetoothJumpViewNum::BLUETOOTHEOPTIONSVIEW, false); - } else { - std::list &bluetoothScanList = BluetoothModel::GetInstance()->GetCase(); - bool ret = bluetoothScanList.empty(); - if (ret != true) { - OnDragChangView(event, hideView, - JumpView::BluetoothJumpViewNum::BLUETOOTHEARLISTVIEW, false); - } else { - OnDragChangView(event, hideView, - JumpView::BluetoothJumpViewNum::BLUETOOTHEARPHONEVIEW, false); - } - } - return; -} - -bool PlayerOnDragListener::OnDrag(UIView& view, const DragEvent& event) -{ - UNUSED(view); - if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT) { - PlayersView *playersView = PlayersView::GetInstance(); - if (playersView == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PlayerbackReset playersView GetInstance fail"); - return false; - } - playersView->SetPlayerListGroupStatus(false); - RootView::GetInstance()->Invalidate(); - } - return false; -} - -void PlayersPresenter::OnClickRescanButton(void) -{ - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "RescanButtonOnClickListener OnClick"); - // 跳转正在搜索界面 - JumpView *jumpView = JumpView::GetInstance(); - if (jumpView == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "jumpView GetInstance fail"); - return; - } - jumpView->ChangeView(JumpView::BluetoothJumpViewNum::BLUETOOTHEARLISTVIEW, - JumpView::BluetoothJumpViewNum::BLUETOOTHEARPHONEVIEW); - return; -} -void PlayersPresenter::OnClickNewEquipmentButton(void) -{ - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "NewEquipmentButtonOnClickListener OnClick"); - BluetoothModel::GetInstance()->SetTagReturnToDeviceListView(true); - // 跳转正在搜索界面 - JumpView *jumpView = JumpView::GetInstance(); - if (jumpView == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "jumpView GetInstance fail"); - return; - } - jumpView->ChangeView(JumpView::BluetoothJumpViewNum::BLUETOOTHDEVICELISTVIEW, - JumpView::BluetoothJumpViewNum::BLUETOOTHEARPHONEVIEW); - return; -} - -void PlayersPresenter::OnClickCancelConnedRequestButton(void) -{ - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "CancelConnedRequestButton OnClick"); - BluetoothCaseInfo *caseInfo = BluetoothModel::GetInstance()->GetTempMacValue(); - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ClickCancelConnedRequestButton Addr: %02x%02x%02x%02x%02x%02x", - caseInfo->addr[5], caseInfo->addr[4], caseInfo->addr[3], /* mac下标 0 1 2 3 4 5 */ - caseInfo->addr[2], caseInfo->addr[1], caseInfo->addr[0]); /* mac下标 0 1 2 3 4 5 */ - bool ret = gap_disconnect_remote_device((const bd_addr_t *)caseInfo->addr); - if (ret == false) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "OnClickCancelConnedRequestButton DisconnectRemoteDevice false"); - } - BluetoothModel::GetInstance()->SetTagScanDeviceClicked(false); - // 刷新列表 - BluetoothEarListView *bluetoothEarListView = BluetoothEarListView::GetInstance(); - if (bluetoothEarListView == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ClickCancelConnedRequestButton bluetoothEarListView nullptr"); - return; - } - if (bluetoothEarListView->GetScanUIList() == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ClickCancelConnedRequestButton GetScanUIList nullptr"); - return; - } - bluetoothEarListView->GetScanUIList()->RefreshList(); - bluetoothEarListView->SetCancelConnedRequestButtonRemove(); - bluetoothEarListView->SetTitleLabel("扫描完成"); - - BluetoothItemView *pbItermView = BluetoothModel::GetInstance()->GetConnectionView(); - if (pbItermView == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "HandleBeforeChangeView The GetConnectionView get failed."); - return; - } - pbItermView->ConnectAnimatorStop(); - BluetoothModel::GetInstance()->SetConnectionView(nullptr); - bluetoothEarListView->SetNewEquipmentButtonAdd(); - RootView::GetInstance()->Invalidate(); - return; -} - -void PlayersPresenter::OnClickButtonUnpair(void) -{ - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersPresenter::OnClick BLUETOOTH_UNPAIR_BUTTON"); - BluetoothModel::GetInstance()->SetTagConnectNew(false); - BluetoothOptionsView *bluetoothOptionsView = BluetoothOptionsView::GetInstance(); - if (bluetoothOptionsView == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bluetoothOptionsView GetInstance fail"); - return; - } - bluetoothOptionsView->SetUnpair(); // 取消配对 - // 删除对应设备列表节点 - bd_addr_t bdAddr = bluetoothOptionsView->GetCurrentAddr(); - List &bluetoothCaseList = BluetoothModel::GetInstance()->GetConnedDevicesCase(); - ListNode *node = bluetoothCaseList.Begin(); - if (node == nullptr) { - return; - } - while (node != bluetoothCaseList.End()) { - if ((bdAddr.addr[0] == node->data_.addr[0]) && (bdAddr.addr[1] == node->data_.addr[1]) - && (bdAddr.addr[2] == node->data_.addr[2]) && (bdAddr.addr[3] == node->data_.addr[3]) - && (bdAddr.addr[4] == node->data_.addr[4]) && (bdAddr.addr[5] == node->data_.addr[5])) { - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "bdAddr true"); - bluetoothCaseList.Remove(node); - } - node = node->next_; - } - - // 跳转并刷新列表 - JumpView *jumpView = JumpView::GetInstance(); - if (jumpView == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "jumpView GetInstance fail"); - return; - } - jumpView->ChangeView(JumpView::BluetoothJumpViewNum::BLUETOOTHEOPTIONSVIEW, - JumpView::BluetoothJumpViewNum::BLUETOOTHDEVICELISTVIEW); -} - -void PlayersPresenter::OnClickButtonOptionOne(void) -{ - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersPresenter::OnClick BLUETOOTH_OPTIONONE_BUTTON"); - JumpView *jumpView = JumpView::GetInstance(); - if (jumpView == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "jumpView GetInstance fail"); - return; - } - BluetoothOptionsView *bluetoothOptionsView = BluetoothOptionsView::GetInstance(); - if (bluetoothOptionsView == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bluetoothOptionsView GetInstance fail"); - return; - } - BluetoothModel::GetInstance()->SetBtStatus(); - if (BluetoothModel::GetInstance()->GetAclConnected() == true) { - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersPresenter::OnClickButtonOptionOne GetAclConnected() == true"); - BluetoothModel::GetInstance()->SetTagConnectNew(false); - bluetoothOptionsView->SetBtDisconnect(); - jumpView->ChangeView(JumpView::BluetoothJumpViewNum::BLUETOOTHEOPTIONSVIEW, - JumpView::BluetoothJumpViewNum::BLUETOOTHDEVICELISTVIEW); - } else { - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersPresenter::OnClickButtonOptionOne GetAclConnected() ==false"); - BluetoothModel::GetInstance()->SetTagReconnectJump(true); - // 重连动画 - jumpView->ChangeView(JumpView::BluetoothJumpViewNum::BLUETOOTHEOPTIONSVIEW, - JumpView::BluetoothJumpViewNum::BLUETOOTHRECONNECTVIEW); - // 判断是否正在连接 - bd_addr_t *lastAddr = BluetoothModel::GetInstance()->GetLastConnedAddr(); - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BluetoothPresenter::ClickOptionsOneButton lastAddr: %02x%02x%02x%02x%02x%02x", - lastAddr->addr[5], lastAddr->addr[4], lastAddr->addr[3], /* mac下标 0 1 2 3 4 5 */ - lastAddr->addr[2], lastAddr->addr[1], lastAddr->addr[0]); /* mac下标 0 1 2 3 4 5 */ - bool ret = bt_is_acl_connected(lastAddr); - if (ret) { - BluetoothModel::GetInstance()->SetTagConnectNew(true); - bluetoothOptionsView->SetBtDisconnect(); - } else { - BluetoothCaseInfo *caseInfo = BluetoothModel::GetInstance()->GetTempMacValue(); - bool ret = gap_connect_remote_device((const bd_addr_t *)&caseInfo->addr); - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ClickOptionsOneButton gap_connect_remote_device ret = %d", ret); - } - } -} - - -void PlayersPresenter::OnClickSetting(void) -{ - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersPresenter::OnClick BLUETOOTH_SETTING_BUTTON"); - JumpView *jumpView = JumpView::GetInstance(); - if (jumpView == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "jumpView GetInstance fail"); - return; - } - BluetoothModel *bluetoothModel = BluetoothModel::GetInstance(); - if (bluetoothModel == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PlayersPresenter::OnClickSetting BluetoothModel GetInstance fail"); - return; - } - bluetoothModel->SetTagConnectView(true); - bluetoothModel->SetBluetoothCalleridStatus(CALLERPLAYERS); - BluetoothModel::GetInstance()->SetTagReturnToDeviceListView(false); - // 设备列表 - List &bluetoothCaseList = BluetoothModel::GetInstance()->GetConnedDevicesCase(); - bool ret = bluetoothCaseList.IsEmpty(); - if (ret != true) { - jumpView->ChangeView(JumpView::BluetoothJumpViewNum::BLUETOOTHEVIEW, - JumpView::BluetoothJumpViewNum::BLUETOOTHDEVICELISTVIEW); - } else { - jumpView->ChangeView(JumpView::BluetoothJumpViewNum::BLUETOOTHEVIEW, - JumpView::BluetoothJumpViewNum::BLUETOOTHEARPHONEVIEW); - } -} - -void PlayersPresenter::OnClickDelete(void) -{ - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersPresenter::OnClick BLUETOOTH_DELETE_BUTTON"); -} - -void PlayersPresenter::OnClickSuccBack(void) -{ - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersPresenter::OnClick BLUETOOTH_SUCC_BACK_BUTTON"); - JumpView *jumpView = JumpView::GetInstance(); - if (jumpView == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "jumpView GetInstance fail"); - return; - } - jumpView->ChangeView(JumpView::BluetoothJumpViewNum::TIPSSUCCMESSAGEVIEW, - JumpView::BluetoothJumpViewNum::BLUETOOTHDEVICELISTVIEW); -} - -void PlayersPresenter::OnClickConnFailBack(void) -{ - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersPresenter::OnClick BLUETOOTH_CONN_FAIL_BACK_BUTTON"); - JumpView *jumpView = JumpView::GetInstance(); - if (jumpView == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "jumpView GetInstance fail"); - return; - } - jumpView->ChangeView(JumpView::BluetoothJumpViewNum::TIPSCONNFAILMESSAGEVIEW, - JumpView::BluetoothJumpViewNum::BLUETOOTHRECONNECTVIEW); - BluetoothCaseInfo *caseInfo = BluetoothModel::GetInstance()->GetTempMacValue(); - bool ret = gap_connect_remote_device((const bd_addr_t *)&caseInfo->addr); - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "OnClickConnFailBack gap_connect_remote_device ret = %d", ret); -} - -void PlayersPresenter::OnClickFailBack(void) -{ - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersPresenter::OnClick BLUETOOTH_FAIL_BACK_BUTTON"); - JumpView *jumpView = JumpView::GetInstance(); - if (jumpView == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "jumpView GetInstance fail"); - return; - } - jumpView->ChangeView(JumpView::BluetoothJumpViewNum::TIPSFAILMESSAGEVIEW, - JumpView::BluetoothJumpViewNum::BLUETOOTHEARPHONEVIEW); -} - -struct PlayersOnClickMapper { - const char *id; - void (PlayersPresenter::*func)(void); -}; - -static const PlayersOnClickMapper OnClickMapper[] = { - {BLUETOOTH_RESCAN_BUTTON, &PlayersPresenter::OnClickRescanButton}, - {BLUETOOTH_NEWEQUIPMENT_BUTTON, &PlayersPresenter::OnClickNewEquipmentButton}, - {BLUETOOTH_CANCELCONNEDREQUEST_BUTTON, &PlayersPresenter::OnClickCancelConnedRequestButton}, - {BLUETOOTH_UNPAIR_BUTTON, &PlayersPresenter::OnClickButtonUnpair}, - {BLUETOOTH_OPTIONONE_BUTTON, &PlayersPresenter::OnClickButtonOptionOne}, - {BLUETOOTH_SETTING_BUTTON, &PlayersPresenter::OnClickSetting}, - {BLUETOOTH_DELETE_BUTTON, &PlayersPresenter::OnClickDelete}, - {BLUETOOTH_SUCC_BACK_BUTTON, &PlayersPresenter::OnClickSuccBack}, - {BLUETOOTH_CONN_FAIL_BACK_BUTTON, &PlayersPresenter::OnClickConnFailBack}, - {BLUETOOTH_FAIL_BACK_BUTTON, &PlayersPresenter::OnClickFailBack} -}; - -bool PlayersPresenter::OnClick(UIView &view, const ClickEvent &event) -{ - uint16_t i; - UNUSED(event); - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersPresenter::OnClick %s", view.GetViewId()); - for (i = 0; i < sizeof(OnClickMapper) / sizeof(OnClickMapper[0]); i++) { - if (strcmp(view.GetViewId(), OnClickMapper[i].id) == 0) { - (this->*(OnClickMapper[i].func))(); - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersPresenter::OnClick i %d", i); - return true; - } - } - return false; -} - -void PlayersPresenter::SetTitleSetText(const char *text) -{ - PlayersView *playersView = PlayersView::GetInstance(); - if (playersView == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SetTitleSetText playersView GetInstance fail"); - return; - } - if (playersView->GetTitleLabel() == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SetTitleSetText titleLabel nullptr"); - return; - } - playersView->TitleSetText(text); -} - -void PlayersPresenter::SetPlaybackProgress(int64_t value) -{ - PlayersView *playersView = PlayersView::GetInstance(); - if (playersView == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SetPlaybackProgress playersView GetInstance fail"); - return; - } - UICircleProgress *playbackProgress = playersView->GetPlaybackProgress(); - if (playbackProgress == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "playbackProgress nullptr err"); - return; - } - playbackProgress->SetValue(value); - playbackProgress->Invalidate(); -} - -void PlayersPresenter::SetPlayerState(bool value) -{ - PlayersView *playersView = PlayersView::GetInstance(); - if (playersView == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SetPlayerState playersView GetInstance fail"); - return; - } - if (value != false) { - playersView->SetPlayerButtonState(UICheckBox::UICheckBoxState::SELECTED); - PlayersModel::GetInstance()->SetPlayButtonState(false); - } -} - -void PlayersPresenter::PlayerbackReset(void) -{ - PlayersView *playersView = PlayersView::GetInstance(); - if (playersView == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PlayerbackReset playersView GetInstance fail"); - return; - } - playersView->SetPlayerButtonState(UICheckBox::UICheckBoxState::UNSELECTED); - playersView->GetPlayerButton()->Invalidate(); -} - -// 播放器按钮复位 -void PlayersPresenter::PlayerHeadsetReset(void) -{ - PlayersView *playersView = PlayersView::GetInstance(); - if (playersView == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PlayerbackReset playersView GetInstance fail"); - return; - } - - if (playersView->GetPlayerButtonState() == UICheckBox::UICheckBoxState::UNSELECTED) { - playersView->SetPlayerButtonState(UICheckBox::UICheckBoxState::SELECTED); - } else { - playersView->SetPlayerButtonState(UICheckBox::UICheckBoxState::UNSELECTED); - } - - playersView->GetPlayerButton()->Invalidate(); -} - -void PlayersPresenter::ShowPlayerListGroup() -{ - PlayersView *playersView = PlayersView::GetInstance(); - if (playersView == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PlayerbackReset playersView GetInstance fail"); - return; - } - // 添加list - playersView->SetPlayerListGroupStatus(true); - // 刷新UI - RootView::GetInstance()->Invalidate(); - return; -} - -} // namespace OHOS +/* + * Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved. + * Description: Player view + * Author: + * Create: 2021-07-26 + */ +#include +#include +#include +#include +#include +#include "PlayersPresenter.h" +#include "wearable_log.h" +#include "common/image_cache_manager.h" +#include "UiConfig.h" +#include "ui_resource_image.h" +#include "PlayersView.h" +#include "PlayersModel.h" +#include "BluetoothPresenter.h" +#include "graphic_service.h" +#include "PhoneService.h" + +#include "bts_avrcp_controller.h" +#include "bts_avrcp_target.h" + +namespace OHOS { +static PlayerOnDragListener *g_pPlayerOnDragListener = nullptr; +static JumpView *g_pJumpView = nullptr; +static PlayersPresenter *g_pPlayersPresenter = nullptr; + +PlayersPresenter *PlayersPresenter::GetInstance(void) +{ + return g_pPlayersPresenter; +} + +PlayersPresenter::PlayersPresenter() +{ + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersPresenter"); + g_pPlayersPresenter = this; +} + +PlayersPresenter::~PlayersPresenter() +{ + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "~PlayersPresenter"); + g_pPlayersPresenter = nullptr; +} + +JumpView *JumpView::GetInstance(void) +{ + return g_pJumpView; +} + +JumpView::JumpView() +{ + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "JumpView::JumpView"); + g_pJumpView = this; + preProcessView[BLUETOOTHEARPHONEVIEW] = &JumpView::ChangeBluetoothEarPhoneView; + preProcessView[BLUETOOTHEARLISTVIEW] = &JumpView::ChangeBluetoothEarListView; + preProcessView[BLUETOOTHDEVICELISTVIEW] = &JumpView::ChangeBluetoothDeviceListView; + preProcessView[BLUETOOTHEOPTIONSVIEW] = &JumpView::ChangeBluetoothOptionsView; + preProcessView[BLUETOOTHRECONNECTVIEW] = &JumpView::ChangeBluetoothReconnectView; + preProcessView[TIPSSUCCMESSAGEVIEW] = &JumpView::ChangeTipsSuccMessageView; + preProcessView[TIPSCONNFAILMESSAGEVIEW] = &JumpView::ChangeTipsConnFailMessageView; + preProcessView[TIPSFAILMESSAGEVIEW] = &JumpView::ChangeTipsFailMessageView; + preProcessView[BLUETOOTHEVIEW] = &JumpView::ChangeBluetoothView; +} + +JumpView::~JumpView() +{ + delete bluetoothEarPhoneView; + bluetoothEarPhoneView = nullptr; + delete bluetoothOptionsView; + bluetoothOptionsView = nullptr; + delete bluetoothEarListView; + bluetoothEarListView = nullptr; + delete bluetoothReconnectView; + bluetoothReconnectView = nullptr; + delete bluetoothDeviceListView; + bluetoothDeviceListView = nullptr; + delete tipsSuccMessageView; + tipsSuccMessageView = nullptr; + delete tipsConnFailMessageView; + tipsConnFailMessageView = nullptr; + delete tipsFailMessageView; + tipsFailMessageView = nullptr; + delete bluetoothView; + bluetoothView = nullptr; + int i; + for (i = BLUETOOTHEARPHONEVIEW; i <= BLUETOOTHEJUMP_MAX; i++) { + container[i] = nullptr; + } + g_pJumpView = nullptr; +} + +bool JumpView::ChangeBluetoothEarPhoneView(int16_t hideView, int16_t thisView) +{ + UNUSED(hideView); + if (container[thisView] == nullptr) { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ChangeBluetoothEarPhoneView"); + bluetoothEarPhoneView = new BluetoothEarPhoneView(); + if (bluetoothEarPhoneView == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bluetoothEarPhoneView new fail"); + return false; + } + UIViewGroup *group = bluetoothEarPhoneView->InitShowUpView(); // init view + if (group == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "group nullptr fail"); + return false; + } + container[thisView] = group; + RootView::GetInstance()->Add(container[thisView]); + } + // 动画开始 + bluetoothEarPhoneView->BtAnimatorStart(); + // 蓝牙扫描&清空列表 + bluetoothEarPhoneView->BtEnable(); + return true; +} + +bool JumpView::ChangeBluetoothEarListView(int16_t hideView, int16_t thisView) +{ + if (container[thisView] == nullptr) { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ChangeBluetoothEarListView"); + bluetoothEarListView = new BluetoothEarListView(); + if (bluetoothEarListView == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bluetoothEarListView new fail"); + return false; + } + UIViewGroup *group = bluetoothEarListView->InitShowUpView(); // init view + if (group == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "group nullptr fail"); + return false; + } + container[thisView] = group; + RootView::GetInstance()->Add(container[thisView]); + } else { + // 刷新列表 + UIList *scanList = bluetoothEarListView->GetScanUIList(); + if (scanList == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "OnClick scanList nullptr"); + return false; + } + scanList->RefreshList(); + } + ResetEarListView(hideView); + return true; +} + +//切换到音乐来源视图 +bool JumpView::ChangeBluetoothView(int16_t hideView, int16_t thisView) +{ + UNUSED(hideView); + if (container[thisView] == nullptr) { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ChangeBluetoothView"); + bluetoothView = new BluetoothView(); + if (bluetoothView == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bluetoothView new fail"); + return false; + } + // init view + UIViewGroup *group = bluetoothView->LoadMusicSourceView(); + if (group == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "group nullptr fail"); + return false; + } + container[thisView] = group; + RootView::GetInstance()->Add(container[thisView]); + } + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "JumpView::ChangeBluetoothView"); + BluetoothModel::GetInstance()->SetTagConnectView(false); + return true; +} + +bool JumpView::ChangeBluetoothOptionsView(int16_t hideView, int16_t thisView) +{ + UNUSED(hideView); + if (container[thisView] == nullptr) { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ChangeBluetoothOptionsView"); + bluetoothOptionsView = new BluetoothOptionsView(); + if (bluetoothOptionsView == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bluetoothOptionsView new fail"); + return false; + } + // init view + UIViewGroup *group = bluetoothOptionsView->InitShowUpView(); + if (group == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "group nullptr fail"); + return false; + } + container[thisView] = group; + RootView::GetInstance()->Add(container[thisView]); + } + return true; +} + +bool JumpView::ChangeBluetoothDeviceListView(int16_t hideView, int16_t thisView) +{ + UNUSED(hideView); + if (container[thisView] == nullptr) { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ChangeBluetoothDeviceListView"); + bluetoothDeviceListView = new BluetoothDeviceListView(); + if (bluetoothDeviceListView == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bluetoothDeviceListView new fail"); + return false; + } + // init view + UIViewGroup *group = bluetoothDeviceListView->InitShowUpView(); + if (group == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Device group nullptr fail"); + return false; + } + container[thisView] = group; + RootView::GetInstance()->Add(container[thisView]); + } else { + // 刷新列表 + UIList *deviceList = bluetoothDeviceListView->GetDeviceUIList(); + if (deviceList == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "OnClick deviceList nullptr"); + return false; + } + deviceList->RefreshList(); + } + BluetoothDeviceListView *bluetoothDeviceListView = BluetoothDeviceListView::GetInstance(); + if (bluetoothDeviceListView == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "OnClick bluetoothDeviceListView new fail"); + return false; + } + bluetoothDeviceListView->RefreshText(); + + return true; +} + +bool JumpView::ChangeBluetoothReconnectView(int16_t hideView, int16_t thisView) +{ + UNUSED(hideView); + if (container[thisView] == nullptr) { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ChangeBluetoothReconnectView"); + bluetoothReconnectView = new BluetoothReconnectView(); + if (bluetoothReconnectView == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bluetoothReconnectView new fail"); + return false; + } + // init view + UIViewGroup *group = bluetoothReconnectView->InitShowUpView(); + if (group == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "group nullptr fail"); + return false; + } + container[thisView] = group; + RootView::GetInstance()->Add(container[thisView]); + } + BluetoothModel::GetInstance()->SetTagDisconnectView(true); + BluetoothReconnectView::GetInstance()->RefreshBluetoothNameLabel(); + bluetoothReconnectView->BtReconnectStart(); + return true; +} + +void JumpView::ResetEarListView(int16_t hideView) +{ + BluetoothEarListView *bluetoothEarListView = BluetoothEarListView::GetInstance(); + if (bluetoothEarListView == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "MainBluetoothView::ResetEarListView bluetoothEarListView == nullptr"); + return; + } + bluetoothEarListView->SetCancelConnedRequestButtonRemove(); + if (hideView == BLUETOOTHEARPHONEVIEW) { + bluetoothEarListView->SetTitleLabel("正在扫描"); + bluetoothEarListView->SetNewEquipmentButtonRemove(); + } else if (hideView == TIPSCONNFAILMESSAGEVIEW) { + bluetoothEarListView->SetTitleLabel("扫描完成"); + bluetoothEarListView->SetNewEquipmentButtonAdd(); + RootView::GetInstance()->Invalidate(); + } +} + +bool JumpView::ChangeTipsSuccMessageView(int16_t hideView, int16_t thisView) +{ + UNUSED(hideView); + if (container[thisView] == nullptr) { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ChangeTipsSuccMessageView"); + tipsSuccMessageView = new TipsSuccMessageView(); + if (tipsSuccMessageView == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "tipsSuccMessageView new fail"); + return false; + } + // init view + UIViewGroup *group = tipsSuccMessageView->ShowUpViewInit(); + if (group == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "group nullptr fail"); + return false; + } + container[thisView] = group; + RootView::GetInstance()->Add(container[thisView]); + } + return true; +} + +bool JumpView::ChangeTipsConnFailMessageView(int16_t hideView, int16_t thisView) +{ + UNUSED(hideView); + if (container[thisView] == nullptr) { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ChangeTipsConnFailMessageView"); + tipsConnFailMessageView = new TipsConnFailMessageView(); + if (tipsConnFailMessageView == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "tipsConnFailMessageView new fail"); + return false; + } + // init view + UIViewGroup *group = tipsConnFailMessageView->ShowUpViewInit(); + if (group == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "group nullptr fail"); + return false; + } + container[thisView] = group; + RootView::GetInstance()->Add(container[thisView]); + } + BluetoothReconnectView *bluetoothReconnectView = BluetoothReconnectView::GetInstance(); + if (bluetoothReconnectView == nullptr) { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "GapAclStateChangedCallback bluetoothReconnectView == nullptr"); + } else { + container[BLUETOOTHRECONNECTVIEW]->SetVisible(false); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ChangeTipsConnFailMessageView SetVisible(false)"); + } + return true; +} + +bool JumpView::ChangeTipsFailMessageView(int16_t hideView, int16_t thisView) +{ + UNUSED(hideView); + if (container[thisView] == nullptr) { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ChangeTipsFailMessageView"); + tipsFailMessageView = new TipsFailMessageView(); + if (tipsFailMessageView == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "tipsFailMessageView new fail"); + return false; + } + // init view + UIViewGroup *group = tipsFailMessageView->ShowUpViewInit(); + if (group == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "group nullptr fail"); + return false; + } + container[thisView] = group; + RootView::GetInstance()->Add(container[thisView]); + } + return true; +} + +bool JumpView::CheckViewParam(int16_t hideView, int16_t showView) +{ + if (showView < 0 || showView >= BLUETOOTHEJUMP_MAX) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "JumpView::CheckViewParam showView err."); + return false; + } + + if (hideView < 0 || hideView > BLUETOOTHEJUMP_MAX) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "JumpView::CheckViewParam showView err."); + return false; + } + + if (hideView != BLUETOOTHEJUMP_MAX) { + if (container[hideView] == nullptr) { + return false; + } + container[hideView]->SetVisible(false); + } + + if (hideView == BLUETOOTHEARLISTVIEW || showView == BLUETOOTHEARLISTVIEW) { + BluetoothModel::GetInstance()->SetTagScanDeviceClicked(false); + } + + return true; +} + +void JumpView::ChangeView(int16_t hideView, int16_t showView) +{ + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "JumpView:: ChangeView %d", hideView); + if (CheckViewParam(hideView, showView) == false) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "JumpView::ChangeView check param err %d %d.", hideView, showView); + return; + } + + PreprosssChangeView tmpPreProcessView = preProcessView[showView]; + + if ((this->*tmpPreProcessView)(hideView, showView) == false) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "JumpView::ChangeView %d %d failed", showView, hideView); + return; + } + container[showView]->SetVisible(true); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "JumpView:: ChangeView end!!!%d", showView); + RootView::GetInstance()->Invalidate(); + BluetoothModel::GetInstance()->SetCurView(showView); +} + +PlayersListGroup::~PlayersListGroup() +{ + if (playersCaseList_ != nullptr) { + playersCaseList_->Clear(); + } + delete playersCaseList_; + playersCaseList_ = nullptr; +} + +void PlayersListGroup::AddCase(PlayerCaseInfo testCaseInfo) +{ + if (playersCaseList_ == nullptr) { + return; + } + playersCaseList_->PushBack(testCaseInfo); +} + +void PlayersListGroup::SetUpListCase() +{ + int16_t ret; + if (playersCaseList_ == nullptr) { + playersCaseList_ = new List(); + if (playersCaseList_ == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PlayersListGroup playersCaseList_ new fail"); + return; + } + } + playersCaseList_->Clear(); + ret = GetAllFiles(playersCaseList_); + if (ret == OHOS_FAILURE) { + return; + } +} + +List& PlayersListGroup::GetCase() +{ + return *playersCaseList_; +} + +char *PlayersListGroup::GetCase(int16_t index) +{ + if (index < 0 || playersCaseList_ == nullptr) { + return nullptr; + } + ListNode *node = playersCaseList_->Begin(); + while (node != playersCaseList_->End()) { + if (index == node->data_.index) { + return node->data_.sliceId; + } + node = node->next_; + } + return nullptr; +} + +// 读取文件夹下文件名信息 +int PlayersListGroup::GetAllFiles(List *playersCaseList) +{ + int ret; + int i{0}; + struct dirent *direntp; + struct PlayerCaseInfo playerCaseInfo; + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersView::GetAllFiles"); + // 打开目录 + DIR *dirp = opendir(APP_MUSIC_PATH); + // 遍历文件 + if (dirp != NULL) { + while ((direntp = readdir(dirp)) != NULL) { + ret = memcpy_s(playerCaseInfo.sliceId, DEC_NUM_256, direntp->d_name, DEC_NUM_256); + if (ret != OHOS_SUCCESS) { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "memcpy_s err %d.", ret); + closedir(dirp); + return OHOS_FAILURE; + } + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "song Name %s.", playerCaseInfo.sliceId); + playerCaseInfo.index = i; + i++; + playersCaseList->PushBack(playerCaseInfo); + } + } else { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersView::opendir err!"); + return OHOS_FAILURE; + } + // 关闭目录 + closedir(dirp); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersView::GetAllFiles end!"); + return OHOS_SUCCESS; +} + +ButtonOnClickListener::~ButtonOnClickListener() +{ + delete volumeSettingView; + volumeSettingView = nullptr; +} + +// Button OnClick +void ButtonOnClickListener::PlayerButtonOnClick() +{ + PlayersView *playersView = PlayersView::GetInstance(); + if (playersView == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "playersView GetInstance fail"); + return; + } + + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "playerButton OnClick"); + uint8_t state = UICheckBox::UICheckBoxState::MAX_STATUS_NUM; + int32_t playerState; + int32_t connCtState = avrcp_ct_get_device_connect_state(BluetoothModel::GetInstance()->GetLastConnedAddr()); + int32_t connTgState = avrcp_tg_get_device_connect_state(BluetoothModel::GetInstance()->GetLastConnedAddr()); + + state = playersView->GetPlayerButtonState(); + + if (PlayersModel::GetInstance()->GetPlayerCtr() == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PlayersModel::GetInstance()->GetPlayerCtr() nullptr"); + return; + } + PlayersModel::GetInstance()->GetPlayerCtr()->GetPlayerState(playerState); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "buttonState = %d playerState = %d", state, playerState); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "connCtState = %d connTgState = %d", connCtState, connTgState); + + if (GetCurrCallNum() != 0 && GetScoConnectState() == HFP_SCO_STATE_CONNECTED) { + if (state == UICheckBox::UICheckBoxState::SELECTED) { + playersView->SetPlayerButtonState(UICheckBox::UICheckBoxState::UNSELECTED); + playersView->GetPlayerButton()->Invalidate(); + } else { + playersView->SetPlayerButtonState(UICheckBox::UICheckBoxState::SELECTED); + playersView->GetPlayerButton()->Invalidate(); + } + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[PlayerButtonOnClick] calling phone"); + return; + } + if (state == UICheckBox::UICheckBoxState::SELECTED) { + /* start play */ + PlayersModel::GetInstance()->ConnectBtAndLocalPlay(connCtState, connTgState, playerState); + } else if (state == UICheckBox::UICheckBoxState::UNSELECTED) { + PlayersModel::GetInstance()->ConnectBtAndLocalPause(connCtState, connTgState); + } + /* -------------------------------------------------------------------------- */ + //点击播放音乐时,音乐列表当前歌曲名要变颜色 + m_PlayersCaseListAdapter = PlayersCaseListAdapter::GetInstance(); + m_PlayersCaseListAdapter->p_BtnOnClickListListener->SongClick(m_PlayersCaseListAdapter,PlayersModel::GetInstance()->GetCurrentIndex()); + for(int i= 0;iGetCount();i++) + { + if(i != PlayersModel::GetInstance()->GetCurrentIndex()) + { + m_PlayersCaseListAdapter->p_BtnOnClickListListener->SongNotClick(m_PlayersCaseListAdapter,i); + } + } + PlayersView::GetInstance()->GetPlayerList(); + /* -------------------------------------------------------------------------- */ +} + +void ButtonOnClickListener::SoundButtonOnClick() +{ + PlayersView *playersView = PlayersView::GetInstance(); + if (playersView == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SoundButtonOnClick playersView nullptr err"); + return; + } + if (volumeSettingView == nullptr) { + volumeSetting = new VolumeSettingView(); + if (volumeSetting == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "volumeSetting nullptr err"); + return; + } + if (volumeSetting->SetUpVolume() == false) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "volumeSetting SetUpVolume fail"); + return; + } + volumeSetting->GetProgress()->SetValue(AudioManager::GetInstance().GetVolume(AUDIO_STREAM_MUSIC)); + if (AudioManager::GetInstance().GetVolume(AUDIO_STREAM_MUSIC) == 0) { + ImageInfo *image = ImageCacheManager::GetInstance().LoadOneInMultiRes(PLAYER_MUTE_BUTTON, PLAYER_IAMGES); + volumeSetting->GetDecreaseButton()->SetImageSrc(image, image); + } + volumeSettingView = volumeSetting; + RootView::GetInstance()->Add(volumeSettingView); + } + VolumeSliderEventListener *volumeSliderEventListener = VolumeSliderEventListener::GetInstance(); + if (volumeSliderEventListener == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SoundButtonOnClick volumeSliderEventListener nullptr err"); + return; + } + volumeSliderEventListener->SetPlayerCoefficients(VOLUMEPLAYERS); // 进度条系数 + playersView->SetVisible(false); + volumeSettingView->SetVisible(true); + // 刷新UI + RootView::GetInstance()->Invalidate(); +} + +void ButtonOnClickListener::OptionsButtonOnClick() +{ + PlayersView *playersView = PlayersView::GetInstance(); + if (playersView == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "OptionsButtonOnClick playersView nullptr err"); + return; + } + JumpView *jumpView = JumpView::GetInstance(); + if (jumpView == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "jumpView GetInstance fail"); + return; + } + playersView->SetVisible(false); + jumpView->ChangeView(JumpView::BluetoothJumpViewNum::BLUETOOTHEJUMP_MAX, + JumpView::BluetoothJumpViewNum::BLUETOOTHEVIEW); +} + +void ButtonOnClickListener::PlayerModelButtonOnClick() +{ + PlayersView *playersView = PlayersView::GetInstance(); + if (playersView == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PlayerModelButtonOnClick playersView nullptr err"); + return; + } + switch (PlayersModel::GetInstance()->GetPlayerModel()) { + case LOOP: + playersView->PlayerModelButtonSetSrc(PLAYER_PLAYERSMODEL_LOOP); // 循环 + break; + case SEQUENCE: + playersView->PlayerModelButtonSetSrc(PLAYER_PLAYERSMODEL_SEQUENCE); // 顺序 + break; + case REPEATS: + playersView->PlayerModelButtonSetSrc(PLAYER_PLAYERSMODEL_REPEATS); // + break; + case RANDOM: + playersView->PlayerModelButtonSetSrc(PLAYER_PLAYERSMODEL_RANDOM); // 随机 + break; + default: + break; + } + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "playerModel %d", PlayersModel::GetInstance()->GetPlayerModel()); +} + +bool ButtonOnClickListener::OnClick(UIView& view, const ClickEvent& event) +{ + + UNUSED(event); + PlayersView *playersView = PlayersView::GetInstance(); + if (playersView == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PlayersView::GetInstance"); + return false; + } + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ButtonOnClickListener OnClick"); + if (view_ == (UIView *)playersView->GetPlayerButton()) { + PlayerButtonOnClick(); + } else if (view_ == (UIView *)playersView->GetNextButton()) { + if (playersView->GetPlaybackProgress() != nullptr) { + playersView->GetPlaybackProgress()->SetValue(0); // 0:进度0% + playersView->GetPlaybackProgress()->Invalidate(); + } + PlayersModel::GetInstance()->LoopingPlayout(); + } else if (view_ == (UIView *)playersView->GetPreButton()) { + if (playersView->GetPlaybackProgress() != nullptr) { + playersView->GetPlaybackProgress()->SetValue(0); // 0:进度0% + playersView->GetPlaybackProgress()->Invalidate(); + } + PlayersModel::GetInstance()->PreviousPlayout(); + } else if (view_ == (UIView *)playersView->GetPlayerModelButton()) { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "playerModelButton OnClick"); + PlayersModel::GetInstance()->SetPlayerModelAddOne(); + if (PlayersModel::GetInstance()->GetPlayerModel() > RANDOM) { + PlayersModel::GetInstance()->SetPlayerModel(LOOP); + } + PlayerModelButtonOnClick(); + } else if (view_ == (UIView *)playersView->GetSoundButton()) { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "soundButton OnClick"); + SoundButtonOnClick(); + } else if (view_ == (UIView *)playersView->GetOptionsButton()) { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "optionsButton OnClick"); + OptionsButtonOnClick(); + } + if(strcmp(view.GetViewId(),"music_list_button") == 0) + { + PlayersPresenter::GetInstance()->ShowPlayerListGroup(); + } + else if(strcmp(view.GetViewId(),"Delbutton") == 0) + { + printf("Delbutton %s %d\n",__func__,__LINE__); + } + else if(strcmp(view.GetViewId(),"returnbutton") == 0) + { + PlayersView *playersView = PlayersView::GetInstance(); + playersView->SetPlayerDelSongViewStatus(false); + playersView->SetPlayerListGroupStatus(true); + RootView::GetInstance()->Invalidate(); + } + return true; +} + +// 播放器回调 +PlayerCallbackImpl::PlayerCallbackImpl() +{ +} + +PlayerCallbackImpl::~PlayerCallbackImpl() +{ +} + +void PlayerCallbackImpl::OnPlaybackComplete() +{ + // 此处实现代码用于处理文件播放完成的事件 + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "OnPlaybackCompleten"); + PlayersView *playersView = PlayersView::GetInstance(); + if (playersView != nullptr) { + if (playersView->GetPlaybackProgress() != nullptr) { + playersView->GetPlaybackProgress()->SetValue(100); // 100:进度100% + playersView->GetPlaybackProgress()->Invalidate(); + } + } + usleep(20000); + GraphicService::GetInstance()->PostGraphicEvent(std::bind(&PlayersModel::PlaySwitching, PlayersModel::GetInstance())); +} + +void PlayerCallbackImpl::OnError(int32_t errorType, int32_t errorCode) +{ + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "OnError test, errorType %d, errorCode %d", errorType, errorCode); + // 此处实现代码处理错误事件 +} + +void PlayerCallbackImpl::OnInfo(int type, int extra) +{ + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "OnInfo test, type %d, extra %d.", type, extra); + // 此处实现代码处理普通事件 +} + +void PlayerCallbackImpl::OnRewindToComplete() +{ + // 此处实现代码处理进度控制完成的事件 + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "OnRewindToComplete test"); +} + +// 音频中断 +PlayerInterruptListener::PlayerInterruptListener() +{ +} + +PlayerInterruptListener::~PlayerInterruptListener() +{ +} + +void PlayerInterruptListener::SetOwner(std::shared_ptr player) +{ + player_ = player; +} + +std::shared_ptr PlayerInterruptListener::GetPlayer() +{ + return player_; +} + +void PlayerInterruptListener::RestFlag() +{ + isPaused_ = false; + isDelayed_ = false; + isResumed_ = false; + isBeginStopped_ = false; + isEndStopped_ = false; +} + +void PlayerInterruptListener::SetPaused(bool value) +{ + isPaused_ = value; +} + +void PlayerInterruptListener::SetResumed(bool value) +{ + isResumed_ = value; +} + +bool PlayerInterruptListener::IsPaused() +{ + return isPaused_; +} + +bool PlayerInterruptListener::IsDelayed() +{ + return isDelayed_; +} + +bool PlayerInterruptListener::IsResumed() +{ + return isResumed_; +} + +bool PlayerInterruptListener::IsBeginStopped() +{ + return isBeginStopped_; +} + +bool PlayerInterruptListener::IsEndStopped() +{ + return isEndStopped_; +} + +static void PlayerPostGraphicEvent(void (*fun)(void)) +{ + GraphicService::GetInstance()->PostGraphicEvent(*fun); +} + +static void Pause(void) +{ + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[PlayerInterruptListener::PausePlayer] start"); + int32_t state; + int32_t ret; + std::shared_ptr PlayerIntrptListener = + OHOS::PlayersModel::GetInstance()->GetPlayerIntrptListener(); + if (PlayerIntrptListener == nullptr) { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[PlayerInterruptListener] Pause PlayerIntrptListener is null"); + return; + } + + std::shared_ptr player = PlayerIntrptListener->GetPlayer(); + if (player.get() == nullptr) { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[PlayerInterruptListener::PausePlayer] player is nullptr"); + return; + } + + PlayersView *playersView = PlayersView::GetInstance(); + + player->GetPlayerState(state); + if (state == PLAYER_STARTED) { + ret = player->Pause(); + if (ret == 0) { + if (playersView == nullptr) { + PlayersModel::GetInstance()->SetPlayButtonState(false); + } else { + playersView->SetPlayerButtonState(UICheckBox::UICheckBoxState::UNSELECTED); + playersView->GetPlayerButton()->Invalidate(); + } + PlayerIntrptListener->RestFlag(); + PlayerIntrptListener->SetPaused(true); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[PlayerInterruptListener::PausePlayer]"); + } + } +} + +void PlayerInterruptListener::PausePlayer(void) +{ + PlayerPostGraphicEvent(Pause); +} + +static void Resume(void) +{ + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[PlayerInterruptListener::Resume] start"); + int32_t state; + int32_t ret; + std::shared_ptr PlayerIntrptListener = + OHOS::PlayersModel::GetInstance()->GetPlayerIntrptListener(); + if (PlayerIntrptListener == nullptr) { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[PlayerInterruptListener] Pause PlayerIntrptListener is null"); + return; + } + + std::shared_ptr player = PlayerIntrptListener->GetPlayer(); + if (player.get() == nullptr) { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[PlayerInterruptListener::ResumePlayer] player is nullptr"); + return; + } + + PlayersView *playersView = PlayersView::GetInstance(); + + player->GetPlayerState(state); + if (state == PLAYER_PAUSED && PlayerIntrptListener->IsPaused() == true) { + ret = player->Play(); + if (ret == 0) { + if (playersView == nullptr) { + PlayersModel::GetInstance()->SetPlayButtonState(true); + } else { + playersView->SetPlayerButtonState(UICheckBox::UICheckBoxState::SELECTED); + playersView->GetPlayerButton()->Invalidate(); + } + PlayerIntrptListener->RestFlag(); + PlayerIntrptListener->SetResumed(true); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[PlayerInterruptListener::ResumePlayer]"); + } + } +} + +void PlayerInterruptListener::ResumePlayer(void) +{ + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[PlayerInterruptListener::ResumePlayer] start"); + usleep(50000); // 确保界面切换完成 + if (NativeAbility::GetInstance().GetCurSliceId() == VIEW_MAEKPHONE_SAMPLE || + (GetCurrCallState() != HFP_HF_CALL_STATE_FINISHED && GetScoConnectState() == HFP_SCO_STATE_CONNECTED)) { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[PlayerInterruptListener::ResumePlayer] this is in calling"); + return; // 通话界面,禁止音乐恢复播放 + } + AudioRelease(); // 适配某些机型不触发SCO + + PlayerPostGraphicEvent(Resume); +} + +static void Stop(void) +{ + PlayersModel::GetInstance()->PlayerStop(); + PlayersModel::GetInstance()->ClearActivateAudioInterrupt(); +} + +void PlayerInterruptListener::StopPlayer(void) +{ + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[PlayerInterruptListener::StopPlayer] start"); + PlayerPostGraphicEvent(Stop); +} + +void PlayerInterruptListener::OnInterrupt(int32_t type, int32_t hint) +{ + WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "[PlayerInterruptListener::] OnInterrupt go in, type %d, hint %d.", type, hint); + + if (type == INTERRUPT_TYPE_BEGIN && hint == INTERRUPT_HINT_PAUSE) { + PausePlayer(); + } + + if (type == INTERRUPT_TYPE_END && hint == INTERRUPT_HINT_RESUME) { + ResumePlayer(); + } + + if (hint == INTERRUPT_HINT_STOP) { + RestFlag(); + if (type == INTERRUPT_TYPE_BEGIN) { + isBeginStopped_ = true; + StopPlayer(); + } else if (type == INTERRUPT_TYPE_END) { + isEndStopped_ = true; + } + } +} + +PlayerOnDragListener::PlayerOnDragListener() +{ + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayerOnDragListener"); + g_pPlayerOnDragListener = this; +} + +PlayerOnDragListener::~PlayerOnDragListener() +{ + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "~PlayerOnDragListener"); + g_pPlayerOnDragListener = nullptr; +} + +PlayerOnDragListener *PlayerOnDragListener::GetInstance(void) +{ + return g_pPlayerOnDragListener; +} + +void PlayerOnDragListener::OnDragChangView(const DragEvent& event, int16_t hideView, int16_t showView, bool isStopScan) +{ + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "OnDragChangeView=%d showView=%d", hideView, showView); + if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT) { + if (isStopScan == true) { + BluetoothEarPhoneView *bluetoothEarPhoneView = BluetoothEarPhoneView::GetInstance(); + if (bluetoothEarPhoneView == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bluetoothEarPhoneView GetInstance fail"); + return; + } + bluetoothEarPhoneView->BtAnimatorStop(); + bluetoothEarPhoneView->StopBtDiscovery(); + } + // 跳转设置页面 + JumpView *jumpView = JumpView::GetInstance(); + if (jumpView == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "jumpView GetInstance fail"); + return; + } + jumpView->ChangeView(hideView, showView); + } +} + +void PlayerOnDragListener::OnDragChangBluetoothView(const DragEvent& event) +{ + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "OnDragChangBluetoothView"); + if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT) { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "DIRECTION_LEFT_TO_RIGHT"); + PlayersView *playersView = PlayersView::GetInstance(); + if (playersView == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "playersView GetInstance fail"); + return; + } + BluetoothView *bluetoothView = BluetoothView::GetInstance(); + if (bluetoothView == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bluetoothView GetInstance fail"); + return; + } + bluetoothView->group->SetVisible(false); + playersView->SetVisible(true); + // 刷新UI + RootView::GetInstance()->Invalidate(); + } +} + +void PlayerOnDragListener::DropEarPhoneView(const DragEvent& event) +{ + bool ret = BluetoothModel::GetInstance()->IsTagReturnToDeviceListView(); + if (ret == true) { + OnDragChangView(event, JumpView::BluetoothJumpViewNum::BLUETOOTHEARPHONEVIEW, + JumpView::BluetoothJumpViewNum::BLUETOOTHDEVICELISTVIEW, true); + } else { + OnDragChangView(event, JumpView::BluetoothJumpViewNum::BLUETOOTHEARPHONEVIEW, + JumpView::BluetoothJumpViewNum::BLUETOOTHEVIEW, true); + } +} + +void PlayerOnDragListener::DropEarListView(const DragEvent& event) +{ + bool ret = BluetoothModel::GetInstance()->IsTagScanDeviceClicked(); + if (ret == true) { + BluetoothCaseInfo *caseInfo = BluetoothModel::GetInstance()->GetTempMacValue(); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayerOnDragListener::DropEarListView Addr: %02x%02x%02x%02x%02x%02x", + caseInfo->addr[5], caseInfo->addr[4], caseInfo->addr[3], /* mac下标 0 1 2 3 4 5 */ + caseInfo->addr[2], caseInfo->addr[1], caseInfo->addr[0]); /* mac下标 0 1 2 3 4 5 */ + ret = gap_disconnect_remote_device((const bd_addr_t *)caseInfo->addr); + if (ret == false) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PlayerOnDragListener::DropEarListView gap_disconnect_remote_device false"); + } + } + BluetoothItemView *pbItermView = BluetoothModel::GetInstance()->GetConnectionView(); + if (pbItermView == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "OnDragEnd The GetConnectionView nullptr."); + } else { + pbItermView->ConnectAnimatorStop(); + BluetoothModel::GetInstance()->SetConnectionView(nullptr); + } + OnDragChangView(event, JumpView::BluetoothJumpViewNum::BLUETOOTHEARLISTVIEW, + JumpView::BluetoothJumpViewNum::BLUETOOTHEVIEW, true); +} + +bool PlayerOnDragListener::OnDragEnd(UIView& view, const DragEvent& event) +{ + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayerOnDragListener::OnDragEnd- %s", view.GetViewId()); + if (view.GetViewId() == nullptr) { + return true; + } + if (strcmp(view.GetViewId(), BLUETOOTH_EAR_PHONE_VIEW) == 0) { + DropEarPhoneView(event); + } else if (strcmp(view.GetViewId(), TIPS_SUCC_MESSAGE_VIEW) == 0) { + OnDragChangView(event, JumpView::BluetoothJumpViewNum::TIPSSUCCMESSAGEVIEW, + JumpView::BluetoothJumpViewNum::BLUETOOTHDEVICELISTVIEW, false); + } else if (strcmp(view.GetViewId(), TIPS_FAIL_MESSAGE_VIEW) == 0) { + OnDragChangView(event, JumpView::BluetoothJumpViewNum::TIPSFAILMESSAGEVIEW, + JumpView::BluetoothJumpViewNum::BLUETOOTHEARPHONEVIEW, false); + } else if (strcmp(view.GetViewId(), TIPS_CONN_FAIL_MESSAGE_VIEW) == 0) { + CorrespondingJump(event, JumpView::BluetoothJumpViewNum::TIPSCONNFAILMESSAGEVIEW); + } else if (strcmp(view.GetViewId(), BLUETOOTH_EARLIST_VIEW) == 0) { + DropEarListView(event); + } else if (strcmp(view.GetViewId(), BLUETOOTH_RECONNECT_VIEW) == 0) { + BluetoothModel::GetInstance()->SetTagDisconnectView(false); + CorrespondingJump(event, JumpView::BluetoothJumpViewNum::BLUETOOTHRECONNECTVIEW); + BluetoothReconnectView *bluetoothReconnectView = BluetoothReconnectView::GetInstance(); + if (bluetoothReconnectView != nullptr) { + bluetoothReconnectView->BtReconnectStop(); + } + } else if (strcmp(view.GetViewId(), BLUETOOTH_OPTIONS_VIEW) == 0) { + OnDragChangView(event, JumpView::BluetoothJumpViewNum::BLUETOOTHEOPTIONSVIEW, + JumpView::BluetoothJumpViewNum::BLUETOOTHDEVICELISTVIEW, false); + } else if (strcmp(view.GetViewId(), BLUETOOTH_VIEW) == 0) { + OnDragChangBluetoothView(event); + } else if (strcmp(view.GetViewId(), BLUETOOTH_DEVICE_LIST_VIEW) == 0) { + OnDragChangView(event, JumpView::BluetoothJumpViewNum::BLUETOOTHDEVICELISTVIEW, + JumpView::BluetoothJumpViewNum::BLUETOOTHEVIEW, false); + } + return true; +} + + +void PlayerOnDragListener::CorrespondingJump(const DragEvent& event, int16_t hideView) +{ + BluetoothModel *bluetoothModel = BluetoothModel::GetInstance(); + if (bluetoothModel == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "MainBluetoothView::DropView bluetoothModel == nullptr"); + return; + } + if (bluetoothModel->GetTagReconnectJump() == true) { + OnDragChangView(event, hideView, + JumpView::BluetoothJumpViewNum::BLUETOOTHEOPTIONSVIEW, false); + } else { + std::list &bluetoothScanList = BluetoothModel::GetInstance()->GetCase(); + bool ret = bluetoothScanList.empty(); + if (ret != true) { + OnDragChangView(event, hideView, + JumpView::BluetoothJumpViewNum::BLUETOOTHEARLISTVIEW, false); + } else { + OnDragChangView(event, hideView, + JumpView::BluetoothJumpViewNum::BLUETOOTHEARPHONEVIEW, false); + } + } + return; +} + +bool PlayerOnDragListener::OnDrag(UIView& view, const DragEvent& event) +{ + UNUSED(view); + if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT) { + PlayersView *playersView = PlayersView::GetInstance(); + if (playersView == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PlayerbackReset playersView GetInstance fail"); + return false; + } + playersView->SetPlayerListGroupStatus(false); + RootView::GetInstance()->Invalidate(); + } + return false; +} + +void PlayersPresenter::OnClickRescanButton(void) +{ + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "RescanButtonOnClickListener OnClick"); + // 跳转正在搜索界面 + JumpView *jumpView = JumpView::GetInstance(); + if (jumpView == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "jumpView GetInstance fail"); + return; + } + jumpView->ChangeView(JumpView::BluetoothJumpViewNum::BLUETOOTHEARLISTVIEW, + JumpView::BluetoothJumpViewNum::BLUETOOTHEARPHONEVIEW); + return; +} +void PlayersPresenter::OnClickNewEquipmentButton(void) +{ + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "NewEquipmentButtonOnClickListener OnClick"); + BluetoothModel::GetInstance()->SetTagReturnToDeviceListView(true); + // 跳转正在搜索界面 + JumpView *jumpView = JumpView::GetInstance(); + if (jumpView == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "jumpView GetInstance fail"); + return; + } + jumpView->ChangeView(JumpView::BluetoothJumpViewNum::BLUETOOTHDEVICELISTVIEW, + JumpView::BluetoothJumpViewNum::BLUETOOTHEARPHONEVIEW); + return; +} + +void PlayersPresenter::OnClickCancelConnedRequestButton(void) +{ + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "CancelConnedRequestButton OnClick"); + BluetoothCaseInfo *caseInfo = BluetoothModel::GetInstance()->GetTempMacValue(); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ClickCancelConnedRequestButton Addr: %02x%02x%02x%02x%02x%02x", + caseInfo->addr[5], caseInfo->addr[4], caseInfo->addr[3], /* mac下标 0 1 2 3 4 5 */ + caseInfo->addr[2], caseInfo->addr[1], caseInfo->addr[0]); /* mac下标 0 1 2 3 4 5 */ + bool ret = gap_disconnect_remote_device((const bd_addr_t *)caseInfo->addr); + if (ret == false) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "OnClickCancelConnedRequestButton DisconnectRemoteDevice false"); + } + BluetoothModel::GetInstance()->SetTagScanDeviceClicked(false); + // 刷新列表 + BluetoothEarListView *bluetoothEarListView = BluetoothEarListView::GetInstance(); + if (bluetoothEarListView == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ClickCancelConnedRequestButton bluetoothEarListView nullptr"); + return; + } + if (bluetoothEarListView->GetScanUIList() == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ClickCancelConnedRequestButton GetScanUIList nullptr"); + return; + } + bluetoothEarListView->GetScanUIList()->RefreshList(); + bluetoothEarListView->SetCancelConnedRequestButtonRemove(); + bluetoothEarListView->SetTitleLabel("扫描完成"); + + BluetoothItemView *pbItermView = BluetoothModel::GetInstance()->GetConnectionView(); + if (pbItermView == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "HandleBeforeChangeView The GetConnectionView get failed."); + return; + } + pbItermView->ConnectAnimatorStop(); + BluetoothModel::GetInstance()->SetConnectionView(nullptr); + bluetoothEarListView->SetNewEquipmentButtonAdd(); + RootView::GetInstance()->Invalidate(); + return; +} + +void PlayersPresenter::OnClickButtonUnpair(void) +{ + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersPresenter::OnClick BLUETOOTH_UNPAIR_BUTTON"); + BluetoothModel::GetInstance()->SetTagConnectNew(false); + BluetoothOptionsView *bluetoothOptionsView = BluetoothOptionsView::GetInstance(); + if (bluetoothOptionsView == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bluetoothOptionsView GetInstance fail"); + return; + } + bluetoothOptionsView->SetUnpair(); // 取消配对 + // 删除对应设备列表节点 + bd_addr_t bdAddr = bluetoothOptionsView->GetCurrentAddr(); + List &bluetoothCaseList = BluetoothModel::GetInstance()->GetConnedDevicesCase(); + ListNode *node = bluetoothCaseList.Begin(); + if (node == nullptr) { + return; + } + while (node != bluetoothCaseList.End()) { + if ((bdAddr.addr[0] == node->data_.addr[0]) && (bdAddr.addr[1] == node->data_.addr[1]) + && (bdAddr.addr[2] == node->data_.addr[2]) && (bdAddr.addr[3] == node->data_.addr[3]) + && (bdAddr.addr[4] == node->data_.addr[4]) && (bdAddr.addr[5] == node->data_.addr[5])) { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "bdAddr true"); + bluetoothCaseList.Remove(node); + } + node = node->next_; + } + + // 跳转并刷新列表 + JumpView *jumpView = JumpView::GetInstance(); + if (jumpView == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "jumpView GetInstance fail"); + return; + } + jumpView->ChangeView(JumpView::BluetoothJumpViewNum::BLUETOOTHEOPTIONSVIEW, + JumpView::BluetoothJumpViewNum::BLUETOOTHDEVICELISTVIEW); +} + +void PlayersPresenter::OnClickButtonOptionOne(void) +{ + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersPresenter::OnClick BLUETOOTH_OPTIONONE_BUTTON"); + JumpView *jumpView = JumpView::GetInstance(); + if (jumpView == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "jumpView GetInstance fail"); + return; + } + BluetoothOptionsView *bluetoothOptionsView = BluetoothOptionsView::GetInstance(); + if (bluetoothOptionsView == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bluetoothOptionsView GetInstance fail"); + return; + } + BluetoothModel::GetInstance()->SetBtStatus(); + if (BluetoothModel::GetInstance()->GetAclConnected() == true) { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersPresenter::OnClickButtonOptionOne GetAclConnected() == true"); + BluetoothModel::GetInstance()->SetTagConnectNew(false); + bluetoothOptionsView->SetBtDisconnect(); + jumpView->ChangeView(JumpView::BluetoothJumpViewNum::BLUETOOTHEOPTIONSVIEW, + JumpView::BluetoothJumpViewNum::BLUETOOTHDEVICELISTVIEW); + } else { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersPresenter::OnClickButtonOptionOne GetAclConnected() ==false"); + BluetoothModel::GetInstance()->SetTagReconnectJump(true); + // 重连动画 + jumpView->ChangeView(JumpView::BluetoothJumpViewNum::BLUETOOTHEOPTIONSVIEW, + JumpView::BluetoothJumpViewNum::BLUETOOTHRECONNECTVIEW); + // 判断是否正在连接 + bd_addr_t *lastAddr = BluetoothModel::GetInstance()->GetLastConnedAddr(); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BluetoothPresenter::ClickOptionsOneButton lastAddr: %02x%02x%02x%02x%02x%02x", + lastAddr->addr[5], lastAddr->addr[4], lastAddr->addr[3], /* mac下标 0 1 2 3 4 5 */ + lastAddr->addr[2], lastAddr->addr[1], lastAddr->addr[0]); /* mac下标 0 1 2 3 4 5 */ + bool ret = bt_is_acl_connected(lastAddr); + if (ret) { + BluetoothModel::GetInstance()->SetTagConnectNew(true); + bluetoothOptionsView->SetBtDisconnect(); + } else { + BluetoothCaseInfo *caseInfo = BluetoothModel::GetInstance()->GetTempMacValue(); + bool ret = gap_connect_remote_device((const bd_addr_t *)&caseInfo->addr); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ClickOptionsOneButton gap_connect_remote_device ret = %d", ret); + } + } +} + + +void PlayersPresenter::OnClickSetting(void) +{ + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersPresenter::OnClick BLUETOOTH_SETTING_BUTTON"); + JumpView *jumpView = JumpView::GetInstance(); + if (jumpView == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "jumpView GetInstance fail"); + return; + } + BluetoothModel *bluetoothModel = BluetoothModel::GetInstance(); + if (bluetoothModel == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PlayersPresenter::OnClickSetting BluetoothModel GetInstance fail"); + return; + } + bluetoothModel->SetTagConnectView(true); + bluetoothModel->SetBluetoothCalleridStatus(CALLERPLAYERS); + BluetoothModel::GetInstance()->SetTagReturnToDeviceListView(false); + // 设备列表 + List &bluetoothCaseList = BluetoothModel::GetInstance()->GetConnedDevicesCase(); + bool ret = bluetoothCaseList.IsEmpty(); + if (ret != true) { + jumpView->ChangeView(JumpView::BluetoothJumpViewNum::BLUETOOTHEVIEW, + JumpView::BluetoothJumpViewNum::BLUETOOTHDEVICELISTVIEW); + } else { + jumpView->ChangeView(JumpView::BluetoothJumpViewNum::BLUETOOTHEVIEW, + JumpView::BluetoothJumpViewNum::BLUETOOTHEARPHONEVIEW); + } +} + +void PlayersPresenter::OnClickDelete(void) +{ + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersPresenter::OnClick BLUETOOTH_DELETE_BUTTON"); +} + +void PlayersPresenter::OnClickSuccBack(void) +{ + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersPresenter::OnClick BLUETOOTH_SUCC_BACK_BUTTON"); + JumpView *jumpView = JumpView::GetInstance(); + if (jumpView == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "jumpView GetInstance fail"); + return; + } + jumpView->ChangeView(JumpView::BluetoothJumpViewNum::TIPSSUCCMESSAGEVIEW, + JumpView::BluetoothJumpViewNum::BLUETOOTHDEVICELISTVIEW); +} + +void PlayersPresenter::OnClickConnFailBack(void) +{ + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersPresenter::OnClick BLUETOOTH_CONN_FAIL_BACK_BUTTON"); + JumpView *jumpView = JumpView::GetInstance(); + if (jumpView == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "jumpView GetInstance fail"); + return; + } + jumpView->ChangeView(JumpView::BluetoothJumpViewNum::TIPSCONNFAILMESSAGEVIEW, + JumpView::BluetoothJumpViewNum::BLUETOOTHRECONNECTVIEW); + BluetoothCaseInfo *caseInfo = BluetoothModel::GetInstance()->GetTempMacValue(); + bool ret = gap_connect_remote_device((const bd_addr_t *)&caseInfo->addr); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "OnClickConnFailBack gap_connect_remote_device ret = %d", ret); +} + +void PlayersPresenter::OnClickFailBack(void) +{ + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersPresenter::OnClick BLUETOOTH_FAIL_BACK_BUTTON"); + JumpView *jumpView = JumpView::GetInstance(); + if (jumpView == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "jumpView GetInstance fail"); + return; + } + jumpView->ChangeView(JumpView::BluetoothJumpViewNum::TIPSFAILMESSAGEVIEW, + JumpView::BluetoothJumpViewNum::BLUETOOTHEARPHONEVIEW); +} + +struct PlayersOnClickMapper { + const char *id; + void (PlayersPresenter::*func)(void); +}; + +static const PlayersOnClickMapper OnClickMapper[] = { + {BLUETOOTH_RESCAN_BUTTON, &PlayersPresenter::OnClickRescanButton}, + {BLUETOOTH_NEWEQUIPMENT_BUTTON, &PlayersPresenter::OnClickNewEquipmentButton}, + {BLUETOOTH_CANCELCONNEDREQUEST_BUTTON, &PlayersPresenter::OnClickCancelConnedRequestButton}, + {BLUETOOTH_UNPAIR_BUTTON, &PlayersPresenter::OnClickButtonUnpair}, + {BLUETOOTH_OPTIONONE_BUTTON, &PlayersPresenter::OnClickButtonOptionOne}, + {BLUETOOTH_SETTING_BUTTON, &PlayersPresenter::OnClickSetting}, + {BLUETOOTH_DELETE_BUTTON, &PlayersPresenter::OnClickDelete}, + {BLUETOOTH_SUCC_BACK_BUTTON, &PlayersPresenter::OnClickSuccBack}, + {BLUETOOTH_CONN_FAIL_BACK_BUTTON, &PlayersPresenter::OnClickConnFailBack}, + {BLUETOOTH_FAIL_BACK_BUTTON, &PlayersPresenter::OnClickFailBack} +}; + +bool PlayersPresenter::OnClick(UIView &view, const ClickEvent &event) +{ + uint16_t i; + UNUSED(event); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersPresenter::OnClick %s", view.GetViewId()); + for (i = 0; i < sizeof(OnClickMapper) / sizeof(OnClickMapper[0]); i++) { + if (strcmp(view.GetViewId(), OnClickMapper[i].id) == 0) { + (this->*(OnClickMapper[i].func))(); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersPresenter::OnClick i %d", i); + return true; + } + } + return false; +} + +void PlayersPresenter::SetTitleSetText(const char *text) +{ + PlayersView *playersView = PlayersView::GetInstance(); + if (playersView == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SetTitleSetText playersView GetInstance fail"); + return; + } + if (playersView->GetTitleLabel() == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SetTitleSetText titleLabel nullptr"); + return; + } + playersView->TitleSetText(text); +} + +/// @brief 设置音乐来源标签内容 +/// @param text 文本内容 +void PlayersPresenter::SetMusicSourceSetText(const char *text) +{ + PlayersView *playersView = PlayersView::GetInstance(); + if (playersView == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SetMusicSourceSetText playersView GetInstance fail"); + return; + } + if (playersView->GetMusicSourceLabel() == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SetMusicSourceSetText MusciSourceLabel nullptr"); + return; + } + playersView->MusicSourceLabelSetText(text); +} + +/// @brief 设置手机音乐连接状态文本内容 +/// @param text 文本内容 +void PlayersPresenter::SetPhoneMusicConnectStatusSetText(const char *text) +{ + PlayersView *playersView = PlayersView::GetInstance(); + if (playersView == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SetPhoneMusicConnectStatusSetText playersView GetInstance fail"); + return; + } + if (playersView->GetPhoneMusicConnectStatusLabel() == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SetPhoneMusicConnectStatusSetText PhoneMusicConnectStatusLabel nullptr"); + return; + } + playersView->PhoneMusicConnectStatusLabelSetText(text); +} + +/// @brief 设置手机音乐连接状态标签是否可见 +/// @param status true 可见 false 阴藏 +void PlayersPresenter::SetPhoneMusicConnectStatusLabelIsVisible(bool status) +{ + PlayersView *playersView = PlayersView::GetInstance(); + if (playersView == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SetPhoneMusicConnectStatusLabelIsVisible playersView GetInstance fail"); + return; + } + if (playersView->GetPhoneMusicConnectStatusLabel() == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SetPhoneMusicConnectStatusLabelIsVisible PhoneMusicConnectStatusLabel nullptr"); + return; + } + playersView->PhoneMusicConnectStatusLabelIsSetVisible(status); +} + +/// @brief 设置音乐列表按钮是否可见 +/// @param status true 可见 false 阴藏 +void PlayersPresenter::SetMusicListButtonIsVisible(bool status) +{ + PlayersView *playersView = PlayersView::GetInstance(); + if (playersView == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SetMusicListButtonIsVisible playersView GetInstance fail"); + return; + } + if (playersView->GetMusicListButton() == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SetMusicListButtonIsVisible music_list_button nullptr"); + return; + } + playersView->MusicListButtonIsSetVisible(status); +} + +/// @brief 设置选项按钮的图片样式:点击该按钮后进入音乐来源视图,点击里面的按钮,改选项按钮会被替换相应图片 +/// @param image 图片信息 +void PlayersPresenter::SetOptionsButtonImageStyle(ImageInfo *image) +{ + PlayersView *playersView = PlayersView::GetInstance(); + if (playersView == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SetOptionsButtonImageStyle playersView GetInstance fail"); + return; + } + if (playersView->GetOptionsButton() == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SetOptionsButtonImageStyle optionsButton nullptr"); + return; + } + playersView->OptionsButtonSetImageStyle(image); +} + +void PlayersPresenter::SetPlaybackProgress(int64_t value) +{ + PlayersView *playersView = PlayersView::GetInstance(); + if (playersView == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SetPlaybackProgress playersView GetInstance fail"); + return; + } + UICircleProgress *playbackProgress = playersView->GetPlaybackProgress(); + if (playbackProgress == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "playbackProgress nullptr err"); + return; + } + playbackProgress->SetValue(value); + playbackProgress->Invalidate(); +} + +void PlayersPresenter::SetPlayerState(bool value) +{ + PlayersView *playersView = PlayersView::GetInstance(); + if (playersView == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SetPlayerState playersView GetInstance fail"); + return; + } + if (value != false) { + playersView->SetPlayerButtonState(UICheckBox::UICheckBoxState::SELECTED); + PlayersModel::GetInstance()->SetPlayButtonState(false); + } +} + +void PlayersPresenter::PlayerbackReset(void) +{ + PlayersView *playersView = PlayersView::GetInstance(); + if (playersView == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PlayerbackReset playersView GetInstance fail"); + return; + } + playersView->SetPlayerButtonState(UICheckBox::UICheckBoxState::UNSELECTED); + playersView->GetPlayerButton()->Invalidate(); +} + +// 播放器按钮复位 +void PlayersPresenter::PlayerHeadsetReset(void) +{ + PlayersView *playersView = PlayersView::GetInstance(); + if (playersView == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PlayerbackReset playersView GetInstance fail"); + return; + } + + if (playersView->GetPlayerButtonState() == UICheckBox::UICheckBoxState::UNSELECTED) { + playersView->SetPlayerButtonState(UICheckBox::UICheckBoxState::SELECTED); + } else { + playersView->SetPlayerButtonState(UICheckBox::UICheckBoxState::UNSELECTED); + } + + playersView->GetPlayerButton()->Invalidate(); +} + +void PlayersPresenter::ShowPlayerListGroup() +{ + PlayersView *playersView = PlayersView::GetInstance(); + if (playersView == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PlayerbackReset playersView GetInstance fail"); + return; + } + // 添加list + playersView->SetPlayerListGroupStatus(true); + // 刷新UI + RootView::GetInstance()->Invalidate(); + return; +} + +} // namespace OHOS diff --git a/code/sdk/application/wearable/nativeapp/nativeui/player/src/PlayersView.cpp b/code/sdk/application/wearable/nativeapp/nativeui/player/src/PlayersView.cpp index 4b4168f80..73d0eb79c 100755 --- a/code/sdk/application/wearable/nativeapp/nativeui/player/src/PlayersView.cpp +++ b/code/sdk/application/wearable/nativeapp/nativeui/player/src/PlayersView.cpp @@ -1,621 +1,853 @@ -/* - * Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved. - * Description: Player view - * Author: - * Create: 2021-07-26 - */ -#include -#include -#include "common/image_cache_manager.h" -#include "ui_resource_image.h" -#include "PlayersView.h" -#include "UiConfig.h" -#include "PlayersModel.h" -#include "PlayersCaseListAdapter.h" -#include "MainViewSample.h" - -namespace OHOS { -static PlayersView* g_pPlayersView = nullptr; - -#define STEP_LABEL_X 166 -#define STEP_LABEL_Y 30 -#define TEXT_WIDTH 120 -#define TEXT_HEIGHT 30 - -PlayersView::PlayersView() -{ - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersView::PlayersView"); - SetPosition(0, 0, HORIZONTAL_RESOLUTION, VERTICAL_RESOLUTION); - g_pPlayersView = this; -} - -PlayersView::~PlayersView() -{ - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersView::~PlayersView"); - if (viewiInitStatus == true) { - state = GetPlayerButtonState(); - if (state == UICheckBox::UICheckBoxState::SELECTED) { - PlayersModel::GetInstance()->SetPlayButtonState(true); - } - RemoveAll(); - listGroup->RemoveAll(); - delete list; - list = nullptr; - delete playerlistener; - playerlistener = nullptr; - delete playerButton; - playerButton = nullptr; - delete soundlistener; - soundlistener = nullptr; - delete nextButton; - nextButton = nullptr; - delete nextlistener; - nextlistener = nullptr; - delete preButton; - preButton = nullptr; - TearDownView(); - delete adapterText; - adapterText = nullptr; - delete backGround; - delete titleLabel; - delete subTitleLabel; - backGround = nullptr; - titleLabel = nullptr; - subTitleLabel = nullptr; - delete playbackProgress; - playbackProgress = nullptr; - delete jumpView; - jumpView = nullptr; - delete playersPresenter; - playersPresenter = nullptr; - delete playerOnDragListener; - playerOnDragListener = nullptr; - } - g_pPlayersView = nullptr; -} - -void PlayersView::TitleSetText(const char *text) -{ - titleLabel->SetText(text); - titleLabel->SetLineBreakMode(UILabel::LINE_BREAK_MARQUEE); - titleLabel->SetAlign(UITextLanguageAlignment::TEXT_ALIGNMENT_CENTER, - UITextLanguageAlignment::TEXT_ALIGNMENT_CENTER); - -} - -void PlayersView::PlayerModelButtonSetSrc(uint32_t playMode) -{ - ImageInfo *image = ImageCacheManager::GetInstance().LoadOneInMultiRes(playMode, PLAYER_IAMGES); - playerModelButton->SetSrc(image); -} - -int16_t PlayersView::GetVolumeRank(void) -{ - return volumeSet; -} - -void PlayersView::SetVolumeRank(int16_t value) -{ - volumeSet = value; -} - -void PlayersView::SetVolumeAddOne(void) -{ - volumeSet++; -} - -UIButton *PlayersView::GetPullButton(void) -{ - return pullButton; -} - -UIButton *PlayersView::GetOptionsButton(void) -{ - return optionsButton; -} - -UIButton *PlayersView::GetPreButton(void) -{ - return preButton; -} - -UIButton *PlayersView::GetNextButton(void) -{ - return nextButton; -} - -UILabel *PlayersView::GetTitleLabel(void) -{ - return titleLabel; -} - -UICheckBox *PlayersView::GetPlayerButton(void) -{ - return playerButton; -} - -UIImageView *PlayersView::GetSoundButton(void) -{ - return soundButton; -} - -UICircleProgress *PlayersView::GetPlaybackProgress(void) -{ - return playbackProgress; -} - -UIImageView *PlayersView::GetPlayerModelButton(void) -{ - return playerModelButton; -} - -UICheckBox::UICheckBoxState PlayersView::GetPlayerButtonState(void) -{ - return playerButton->GetState(); -} - -void PlayersView::SetPlayerButtonState(UICheckBox::UICheckBoxState state) -{ - if (playerButton == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PlayersView::SetPlayerButtonState playerButton NULL"); - return; - } - return playerButton->SetState(state); -} - -UIList *PlayersView::GetPlayerList(void) -{ - return list; -} - -void PlayersView::SetPlayerListGroupStatus(bool status) -{ - if (listGroup == nullptr) { - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersView listGroup is NULL"); - return; - } - UIView *vew = MainViewSample::GetInstance()->GetMainViewGroup(); - if (vew != nullptr) { - vew->SetVisible(!status); - } - listGroup->SetVisible(status); - return; -} - -void PlayersView::SetPlayerCtrVolume(float leftVolume, float rightVolume) -{ - PlayersModel::GetInstance()->GetPlayerCtr()->SetVolume(leftVolume, rightVolume); -} - -void PlayersView::TearDownView() -{ - delete prelistener; - prelistener = nullptr; - delete playerModelButton; - playerModelButton = nullptr; - delete modellistener; - modellistener = nullptr; - delete soundButton; - soundButton = nullptr; - delete optionslistener; - optionslistener = nullptr; - delete optionsButton; - optionsButton = nullptr; - delete pullButton; - pullButton = nullptr; - delete listGroup; - listGroup = nullptr; -} - -PlayersView* PlayersView::GetInstance(void) -{ - return g_pPlayersView; -} - -// list -void PlayersView::ShowUpListView() -{ - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ShowUpListView"); - listGroup = new UIViewGroup(); - if (listGroup == nullptr) { - return; - } - listGroup->SetPosition(0, 0); - listGroup->Resize(VERTICAL_RESOLUTION, HORIZONTAL_RESOLUTION); - - // list type - if (adapterText == nullptr) { - adapterText = new PlayersCaseListAdapter(); - if (adapterText == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "adapterText new fail"); - return; - } - } - if (list == nullptr) { - list = new UIList(UIList::VERTICAL); - if (list == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "list new fail"); - return; - } - list->SetPosition(0, 0, HORIZONTAL_RESOLUTION, VERTICAL_RESOLUTION); - list->SetStartIndex(0); // 0 : list start index - list->SetAdapter(adapterText); - } - listGroup->Add(list); - RootView::GetInstance()->Add(listGroup); - - //增加按键监听 - //RootView::OnKeyActListener*keyactListener = (RootView::OnKeyActListener*)OHOS::PlayerOnDragListener::GetInstance(); - //RootView::GetInstance()->SetOnKeyActListener(keyactListener); - - UIView::OnDragListener *dragListener = (UIView::OnDragListener*)OHOS::PlayerOnDragListener::GetInstance(); - if (dragListener == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PlayersView::OnDragListener fail"); - return; - } - listGroup->SetDraggable(true); - listGroup->SetTouchable(true); - listGroup->SetOnDragListener(dragListener); - listGroup->SetVisible(false); - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ShowUpListView end"); -} - -void PlayersView::SetUpButton(UIButton *btn, const Point& point, - int16_t width, int16_t height, UIView::OnClickListener *listener) -{ - if (btn == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PlayersView::SetUpButton nullptr"); - return; - } - Add(btn); - btn->SetPosition(point.x, point.y, width, height); - btn->SetOnClickListener(listener); -} - -int PlayersView::ShowUpCheckBoxButton() -{ - ImageInfo *image; - ImageInfo *hlImage; - if (playerButton == nullptr) { - playerButton = new UICheckBox(); - } - if (soundButton == nullptr) { - soundButton = new UIImageView(); - } - if ((playerButton == nullptr) || (soundButton == nullptr)) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "new fail"); - return OHOS_FAILURE; - } - playerlistener = new ButtonOnClickListener(reinterpret_cast(playerButton)); - if (playerlistener == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "playerlistener new fail"); - return OHOS_FAILURE; - } - playerButton->SetPosition(140, 139, 172, 172); // 140:x 139:y 172:width 172:height - playerButton->SetOnClickListener(playerlistener); - image = ImageCacheManager::GetInstance().LoadOneInMultiRes(PLAYER_PLAYER, PLAYER_IAMGES); - hlImage = ImageCacheManager::GetInstance().LoadOneInMultiRes(PLAYER_PLAYERHIGHLIGHT, PLAYER_IAMGES); - playerButton->SetImages(hlImage, image); - Add(playerButton); - - soundlistener = new ButtonOnClickListener(reinterpret_cast(soundButton)); - if (soundlistener == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "soundlistener new fail"); - return OHOS_FAILURE; - } - soundButton->SetTouchable(true); - soundButton->SetPosition(178, 316, 95, 76); // 178:x 316:y 95:width 76:height - soundButton->SetOnClickListener(soundlistener); - if (LoadPlayerImage(soundButton, PLAYER_SOUND_IMAGE) == false) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "playerModelButton LoadPlayerImage fail"); - return false; - } - Add(soundButton); - return OHOS_SUCCESS; -} - -int PlayersView::ShowUpButton() -{ - struct Point pointBtn; - ImageInfo *image; - pointBtn.x = 331; // 331:x - pointBtn.y = 168; // 168:y - nextlistener = new ButtonOnClickListener(reinterpret_cast(nextButton)); - if (nextlistener == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "nextlistener new fail"); - return OHOS_FAILURE; - } - SetUpButton(nextButton, pointBtn, 93, 116, nextlistener); // 93:width 116:height - image = ImageCacheManager::GetInstance().LoadOneInMultiRes(PLAYER_NEXT_BUTTON, PLAYER_IAMGES); - nextButton->SetImageSrc(image, image); - pointBtn.x = 31; // 31:x - pointBtn.y = 168; // 168:y - prelistener = new ButtonOnClickListener(reinterpret_cast(preButton)); - if (prelistener == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "prelistener new fail"); - return OHOS_FAILURE; - } - SetUpButton(preButton, pointBtn, 86, 116, prelistener); // 86:width 116:height - image = ImageCacheManager::GetInstance().LoadOneInMultiRes(PLAYER_PRE_BUTTOW, PLAYER_IAMGES); - preButton->SetImageSrc(image, image); - - pointBtn.x = 87; // 87:x - pointBtn.y = 316; // 316:y - modellistener = new ButtonOnClickListener(reinterpret_cast(playerModelButton)); - if (modellistener == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "modellistener new fail"); - return OHOS_FAILURE; - } - playerModelButton->SetTouchable(true); - playerModelButton->SetPosition(pointBtn.x, pointBtn.y, 95, 76); // 95:width 76:height - playerModelButton->SetOnClickListener(modellistener); - if (ShowUpPlayerMode() == false) { - return OHOS_FAILURE; - } - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "playerModel %d", PlayersModel::GetInstance()->GetPlayerModel()); - Add(playerModelButton); - - return OHOS_SUCCESS; -} - -bool PlayersView::ShowUpPlayerMode() -{ - if (PlayersModel::GetInstance()->GetPlayerModel() == LOOP) { - if (LoadPlayerImage(playerModelButton, PLAYER_PLAYERSMODEL_LOOP) == false) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "load PLAYER_PLAYERSMODEL_LOOP fail"); - return false; - } - } else if (PlayersModel::GetInstance()->GetPlayerModel() == SEQUENCE) { - if (LoadPlayerImage(playerModelButton, PLAYER_PLAYERSMODEL_SEQUENCE) == false) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "load PLAYERSMODEL_SEQUENCE fail"); - return false; - } - } else if (PlayersModel::GetInstance()->GetPlayerModel() == REPEATS) { - if (LoadPlayerImage(playerModelButton, PLAYER_PLAYERSMODEL_REPEATS) == false) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "load PLAYERSMODEL_REPEATS fail"); - return false; - } - } else if (PlayersModel::GetInstance()->GetPlayerModel() == RANDOM) { - if (LoadPlayerImage(playerModelButton, PLAYER_PLAYERSMODEL_RANDOM) == false) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "load PLAYERSMODEL_RANDOM fail"); - return false; - } - } - return true; -} - -int PlayersView::ShowUpButtonView() -{ - int ret; - ret = ShowUpCheckBoxButton(); - if (ret == OHOS_FAILURE) { - return OHOS_FAILURE; - } - if (nextButton == nullptr) { - nextButton = new UIButton(); - } - if (preButton == nullptr) { - preButton = new UIButton(); - } - if (optionsButton == nullptr) { - optionsButton = new UIButton(); - } - if (pullButton == nullptr) { - pullButton = new UIButton(); - } - if (playerModelButton == nullptr) { - playerModelButton = new UIImageView(); - } - if ((nextButton == nullptr) || (preButton == nullptr) || (playerModelButton == nullptr) || (optionsButton == nullptr) || - (pullButton == nullptr)) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "UIButton new fail"); - return OHOS_FAILURE; - } - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ShowUpButtonView"); - - ret = ShowUpButton(); - if (ret == OHOS_FAILURE) { - return OHOS_FAILURE; - } - ret = ShowUpButtonOptions(); - if (ret == OHOS_FAILURE) { - return OHOS_FAILURE; - } - ret = ShowUpCircleProgress(); - if (ret == OHOS_FAILURE) { - return OHOS_FAILURE; - } - return OHOS_SUCCESS; -} - -int PlayersView::ShowUpButtonOptions() -{ - struct Point pointBtn; - pointBtn.x = 284; // 284 : x - pointBtn.y = 316; // 316 : y - optionslistener = new ButtonOnClickListener(reinterpret_cast(optionsButton)); - if (optionslistener == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "optionslistener new fail"); - return OHOS_FAILURE; - } - SetUpButton(optionsButton, pointBtn, 75, 76, optionslistener); // 75:width 76:height - ImageInfo *image = ImageCacheManager::GetInstance().LoadOneInMultiRes(PLAYER_OPTIONS_IMAGE, PLAYER_IAMGES); - optionsButton->SetImageSrc(image, image); - - pointBtn.x = 178; // 178:x - pointBtn.y = 394; // 394:y - SetUpButton(pullButton, pointBtn, 95, 48, nullptr); // 95:width 48:height - pullButton->SetImageSrc(PNG_PULLBUTTON_FACE_IMAGE, PNG_PULLBUTTON_FACE_IMAGE); - return OHOS_SUCCESS; -} - -int PlayersView::ShowUpCircleProgress() -{ - if (playbackProgress == nullptr) { - playbackProgress = new UICircleProgress(); - if (playbackProgress == nullptr) { - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "playbackProgress new fail"); - return OHOS_FAILURE; - } - } - playbackProgress->SetPosition(140, 139, 172, 172); // 140:x 139:y 172:width 172:height - playbackProgress->SetCenterPosition(86, 86); // 86:x 86:y - playbackProgress->SetRange(PLAY_PROGRESS_MAX, PLAY_PROGRESS_MIN); - playbackProgress->SetRadius(86); // 86:radius - playbackProgress->SetStartAngle(0); - playbackProgress->SetEndAngle(360); // 360: end angle - playbackProgress->SetValue(0); - playbackProgress->SetBackgroundStyle(STYLE_LINE_COLOR, Color::Gray().full); - playbackProgress->SetForegroundStyle(STYLE_LINE_COLOR, Color::Red().full); - playbackProgress->SetBackgroundStyle(STYLE_LINE_WIDTH, 3); // 3:width - playbackProgress->SetForegroundStyle(STYLE_LINE_WIDTH, 3); // 3:width - Add(playbackProgress); - return OHOS_SUCCESS; -} - -void PlayersView::CreateJumpView(void) -{ - if (jumpView == nullptr) { - jumpView = new JumpView(); - if (jumpView == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "jumpView new fail"); - return; - } - } -} - -void PlayersView::CreatePlayersPresenter(void) -{ - if (playersPresenter == nullptr) { - playersPresenter = new PlayersPresenter(); - if (playersPresenter == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "playersPresenter new fail"); - return; - } - } -} - -void PlayersView::CreatePlayerOnDragListener(void) -{ - if (playerOnDragListener == nullptr) { - playerOnDragListener = new PlayerOnDragListener(); - if (playerOnDragListener == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "playerOnDragListener new fail"); - return; - } - } -} -bool PlayersView::InitBackGround(void) -{ - if (backGround == nullptr) { - backGround = new UIImageView(); - if (backGround == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "backGround new fail"); - return false; - } - } - backGround->SetPosition(0, 0, HORIZONTAL_RESOLUTION, VERTICAL_RESOLUTION); - if (LoadPlayerImage(backGround, PLAYER_BACK_GROUND) == false) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "backGround LoadPlayerImage fail"); - return false; - } - Add(backGround); - return true; -} - -void PlayersView::CreatePlayerMusicName() -{ - if (titleLabel == nullptr) { - titleLabel = new UILabel(); - if (titleLabel == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "titleLabel new fail"); - return; - } - } - titleLabel->SetPosition(127, 35, 200, 53); // 127:x 35:y 200:width 53:height - titleLabel->SetText("Music Name"); - titleLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, FONT_FORTY_SIZE); - Add(titleLabel); - - if (subTitleLabel == nullptr) { - subTitleLabel = new UILabel(); - if (subTitleLabel == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "subTitleLabel new fail"); - return; - } - } - subTitleLabel->SetPosition(77, 92, 300, 38); // 77:x 92:y 300:width 38:height - subTitleLabel->SetText("Musical Authors"); - subTitleLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30); // 30:font data - subTitleLabel->SetAlign(UITextLanguageAlignment::TEXT_ALIGNMENT_CENTER, UITextLanguageAlignment::TEXT_ALIGNMENT_CENTER); - Add(subTitleLabel); - return; -} - -bool PlayersView::OnDragEvent(const DragEvent& event) -{ - /* 300: y limit of drag start point */ - if ((event.GetDragDirection() == DragEvent::DIRECTION_BOTTOM_TO_TOP) && (event.GetStartPoint().y > 300)) { - PlayersPresenter::GetInstance()->ShowPlayerListGroup(); - return true; - } - - return false; -} - -bool PlayersView::InitView(void) -{ - int ret; - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, " PlayersView InitView"); - - if (InitBackGround() == false) { - return false; - } - - CreatePlayerMusicName(); - // changeView - CreateJumpView(); - // OnClick - CreatePlayersPresenter(); - // OnDrag - CreatePlayerOnDragListener(); - // 按键设置 - ret = ShowUpButtonView(); - if (ret == OHOS_FAILURE) { - return false; - } - // 遍历文件名到list链表 - PlayersListGroup::GetInstance()->SetUpListCase(); - PlayersModel::GetInstance()->PlayerInit(); - ShowUpListView(); - SetTouchable(true); - SetDraggable(true); - return true; -} - -void PlayersView::PreLoad(void) -{ - if (!viewiInitStatus) { - if (InitView()) { - viewiInitStatus = true; - } - } -} - -void PlayersView::UnLoad(void) -{ - // Players's usage scenes is complicated, so we do not release it's resources inner slice. -} - -bool PlayersView::LoadPlayerImage(UIImageView *view, uint32_t resId) -{ - std::string file = PLAYER_IAMGES; - ImageInfo* image = ImageCacheManager::GetInstance().LoadOneInMultiRes(resId, file); - if (image == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PlayersView::LoadPlayerImage %x fail", resId); - return false; - } - view->SetSrc(image); - return true; -} -} +/* + * Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved. + * Description: Player view + * Author: + * Create: 2021-07-26 + */ +#include +#include +#include "common/image_cache_manager.h" +#include "ui_resource_image.h" +#include "PlayersView.h" +#include "UiConfig.h" +#include "PlayersModel.h" +#include "PlayersCaseListAdapter.h" +#include "MainViewSample.h" + +namespace OHOS { +static PlayersView* g_pPlayersView = nullptr; + +#define STEP_LABEL_X 166 +#define STEP_LABEL_Y 30 +#define TEXT_WIDTH 120 +#define TEXT_HEIGHT 30 + +PlayersView::PlayersView() +{ + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersView::PlayersView"); + SetPosition(0, 0, HORIZONTAL_RESOLUTION, VERTICAL_RESOLUTION); + g_pPlayersView = this; +} + +PlayersView::~PlayersView() +{ + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersView::~PlayersView"); + if (viewiInitStatus == true) { + state = GetPlayerButtonState(); + if (state == UICheckBox::UICheckBoxState::SELECTED) { + PlayersModel::GetInstance()->SetPlayButtonState(true); + } + RemoveAll(); + listGroup->RemoveAll(); + delete list; + list = nullptr; + delete playerlistener; + playerlistener = nullptr; + delete playerButton; + playerButton = nullptr; + delete soundlistener; + soundlistener = nullptr; + delete nextButton; + nextButton = nullptr; + delete nextlistener; + nextlistener = nullptr; + delete preButton; + preButton = nullptr; + TearDownView(); + delete adapterText; + adapterText = nullptr; + delete backGround; + delete titleLabel; + delete subTitleLabel; + delete MusciSourceLabel; + MusciSourceLabel = nullptr; + if(music_list_button != nullptr) + { + delete music_list_button; + music_list_button = nullptr; + } + if(PhoneMusicConnectStatusLabel != nullptr) + { + delete PhoneMusicConnectStatusLabel; + PhoneMusicConnectStatusLabel = nullptr; + } + backGround = nullptr; + titleLabel = nullptr; + subTitleLabel = nullptr; + delete playbackProgress; + playbackProgress = nullptr; + delete jumpView; + jumpView = nullptr; + delete playersPresenter; + playersPresenter = nullptr; + delete playerOnDragListener; + playerOnDragListener = nullptr; + } + g_pPlayersView = nullptr; +} + +void PlayersView::TitleSetText(const char *text) +{ + titleLabel->SetText(text); + titleLabel->SetLineBreakMode(UILabel::LINE_BREAK_MARQUEE); + titleLabel->SetAlign(UITextLanguageAlignment::TEXT_ALIGNMENT_CENTER, + UITextLanguageAlignment::TEXT_ALIGNMENT_CENTER); + +} + +void PlayersView::PlayerModelButtonSetSrc(uint32_t playMode) +{ + ImageInfo *image = ImageCacheManager::GetInstance().LoadOneInMultiRes(playMode, PLAYER_IAMGES); + playerModelButton->SetSrc(image); +} + +int16_t PlayersView::GetVolumeRank(void) +{ + return volumeSet; +} + +void PlayersView::SetVolumeRank(int16_t value) +{ + volumeSet = value; +} + +void PlayersView::SetVolumeAddOne(void) +{ + volumeSet++; +} + +UIButton *PlayersView::GetPullButton(void) +{ + return pullButton; +} + +UIButton *PlayersView::GetOptionsButton(void) +{ + return optionsButton; +} + +UIButton *PlayersView::GetPreButton(void) +{ + return preButton; +} + +UIButton *PlayersView::GetNextButton(void) +{ + return nextButton; +} + +//获取音乐列表按钮 +UIButton *PlayersView::GetMusicListButton(void) +{ + return music_list_button; +} + +UILabel *PlayersView::GetTitleLabel(void) +{ + return titleLabel; +} + +//获取音乐来源标签 +UILabel *PlayersView::GetMusicSourceLabel(void) +{ + return MusciSourceLabel; +} + +//获手机音乐连接状态标签 +UILabel *PlayersView::GetPhoneMusicConnectStatusLabel(void) +{ + return PhoneMusicConnectStatusLabel; +} + +UICheckBox *PlayersView::GetPlayerButton(void) +{ + return playerButton; +} + +UIImageView *PlayersView::GetSoundButton(void) +{ + return soundButton; +} + +UICircleProgress *PlayersView::GetPlaybackProgress(void) +{ + return playbackProgress; +} + +UIImageView *PlayersView::GetPlayerModelButton(void) +{ + return playerModelButton; +} + +UICheckBox::UICheckBoxState PlayersView::GetPlayerButtonState(void) +{ + return playerButton->GetState(); +} + +void PlayersView::SetPlayerButtonState(UICheckBox::UICheckBoxState state) +{ + if (playerButton == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PlayersView::SetPlayerButtonState playerButton NULL"); + return; + } + return playerButton->SetState(state); +} + +UIList *PlayersView::GetPlayerList(void) +{ + return list; +} +/// @brief 根据传入的status参数来控制歌曲列表组的显示与隐藏。 +/// @param status +void PlayersView::SetPlayerListGroupStatus(bool status) +{ + if (listGroup == nullptr) { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersView listGroup is NULL"); + return; + } + UIView *vew = MainViewSample::GetInstance()->GetMainViewGroup(); + if (vew != nullptr) { + vew->SetVisible(!status); + } + listGroup->SetVisible(status); + return; +} + +/// @brief 根据传入的status参数来控制删除歌曲视图的显示与隐藏。 +/// @param status +void PlayersView::SetPlayerDelSongViewStatus(bool status) +{ + if (DelSongView == nullptr) { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersView DelSongView is NULL"); + return; + } + UIView *vew = MainViewSample::GetInstance()->GetMainViewGroup(); + if (vew != nullptr) { + vew->SetVisible(!status); + } + DelSongView->SetVisible(status); + RootView::GetInstance()->Invalidate(); + return; + +} + +void PlayersView::SetPlayerCtrVolume(float leftVolume, float rightVolume) +{ + PlayersModel::GetInstance()->GetPlayerCtr()->SetVolume(leftVolume, rightVolume); +} + +void PlayersView::TearDownView() +{ + delete prelistener; + prelistener = nullptr; + delete playerModelButton; + playerModelButton = nullptr; + delete modellistener; + modellistener = nullptr; + delete soundButton; + soundButton = nullptr; + delete optionslistener; + optionslistener = nullptr; + delete optionsButton; + optionsButton = nullptr; + delete pullButton; + pullButton = nullptr; + delete listGroup; + listGroup = nullptr; +} + +PlayersView* PlayersView::GetInstance(void) +{ + return g_pPlayersView; +} + +// 显示音乐列表 +void PlayersView::ShowUpListView() +{ + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ShowUpListView"); + listGroup = new UIScrollView(); + if (listGroup == nullptr) { + return; + } + listGroup->SetPosition(0, 0); + listGroup->Resize(VERTICAL_RESOLUTION, HORIZONTAL_RESOLUTION); + listGroup->SetScrollBlankSize(20); + listGroup->SetReboundSize(50); + listGroup->SetDirection(1); + + musicListTitle = new UILabel(); + if(musicListTitle ==nullptr) + { + return; + } + musicListTitle->SetPosition(173, 52,120,35); + musicListTitle->SetStyle(STYLE_TEXT_FONT, 30); + musicListTitle->SetStyle(STYLE_LINE_HEIGHT, 36); + musicListTitle->SetText("音乐列表"); + musicListTitle->SetLineBreakMode(UILabel::LINE_BREAK_ELLIPSIS); + musicListTitle->SetTextColor(Color::GetColorFromRGBA(0xff, 0xf3, 0xff, 0xff)); + musicListTitle->SetRollSpeed(0); + musicListTitle->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30); + listGroup->Add(musicListTitle); + + // list type + if (adapterText == nullptr) { + adapterText = new PlayersCaseListAdapter(); + if (adapterText == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "adapterText new fail"); + return; + } + } + if (list == nullptr) { + list = new UIList(UIList::VERTICAL); + if (list == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "list new fail"); + return; + } + list->SetPosition(67, 138, 332, 500); + list->SetStartIndex(0); // 0 : list start index + list->SetAdapter(adapterText); + } + listGroup->Add(list); + RootView::GetInstance()->Add(listGroup); + UIView::OnDragListener *dragListener = (UIView::OnDragListener*)OHOS::PlayerOnDragListener::GetInstance(); + if (dragListener == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PlayersView::OnDragListener fail"); + return; + } + listGroup->SetDraggable(true); + listGroup->SetTouchable(true); + listGroup->SetOnDragListener(dragListener); + listGroup->SetVisible(false); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ShowUpListView end"); +} + +/// @brief 创建删除歌曲视图 +/// @param songName +void PlayersView::ShowUpDelSongView() +{ + if(p_PlayerListDelSongView == nullptr) + { + p_PlayerListDelSongView = new PlayerListDelSongView(); + } + DelSongView = p_PlayerListDelSongView->InitDelSongView(); + RootView::GetInstance()->Add(DelSongView); + DelSongView->SetTouchable(true); + DelSongView->SetVisible(false); +} + +//设置按钮的位置和监听 +void PlayersView::SetUpButton(UIButton *btn, const Point& point, + int16_t width, int16_t height, UIView::OnClickListener *listener) +{ + if (btn == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PlayersView::SetUpButton nullptr"); + return; + } + Add(btn); + btn->SetPosition(point.x, point.y, width, height); + btn->SetOnClickListener(listener); +} +//复选框:选中播放未选中暂停 +int PlayersView::ShowUpCheckBoxButton() +{ + ImageInfo *ImagePlay; + ImageInfo *ImagerPause; + if (playerButton == nullptr) { + playerButton = new UICheckBox(); + } + if (soundButton == nullptr) { + soundButton = new UIImageView(); + } + if ((playerButton == nullptr) || (soundButton == nullptr)) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "new fail"); + return OHOS_FAILURE; + } + playerlistener = new ButtonOnClickListener(reinterpret_cast(playerButton)); + if (playerlistener == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "playerlistener new fail"); + return OHOS_FAILURE; + } + playerButton->SetPosition(195, 195, 80, 80); // 140:x 139:y 172:width 172:height + playerButton->SetOnClickListener(playerlistener); + ImagePlay = ImageCacheManager::GetInstance().LoadOneInMultiRes(PLAYER_PLAY, PLAYER_IAMGES); //播放图片 + ImagerPause = ImageCacheManager::GetInstance().LoadOneInMultiRes(PLAYER_PAUSE, PLAYER_IAMGES);//暂停图片 + playerButton->SetImages(ImagePlay, ImagerPause); + Add(playerButton); + + soundlistener = new ButtonOnClickListener(reinterpret_cast(soundButton)); + if (soundlistener == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "soundlistener new fail"); + return OHOS_FAILURE; + } + soundButton->SetTouchable(true); + soundButton->SetPosition(321, 321, 60, 60); + soundButton->SetOnClickListener(soundlistener); + if (LoadPlayerImage(soundButton, PLAYER_MUSIC_VOICE) == false) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "playerModelButton LoadPlayerImage fail"); + return false; + } + Add(soundButton); + return OHOS_SUCCESS; +} +//显示按钮:下一首,上一首,播放模式 +int PlayersView::ShowUpButton() +{ + struct Point pointBtn; + ImageInfo *image; + pointBtn.x = 366; // 366:x + pointBtn.y = 213; // 213:y + nextlistener = new ButtonOnClickListener(reinterpret_cast(nextButton)); + if (nextlistener == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "nextlistener new fail"); + return OHOS_FAILURE; + } + SetUpButton(nextButton, pointBtn, 60, 60, nextlistener); // 93:width 116:height + image = ImageCacheManager::GetInstance().LoadOneInMultiRes(PLAYER_MUSIC_NEXT, PLAYER_IAMGES); + nextButton->SetImageSrc(image, image); + nextButton->SetStyle(STYLE_BACKGROUND_COLOR, 0xffffffff); + nextButton->SetStyle(STYLE_BACKGROUND_OPA, 0x00); + nextButton->SetStyleForState(STYLE_BACKGROUND_COLOR, 0xfffbfbfb, UIButton::PRESSED); + nextButton->SetStyleForState(STYLE_BACKGROUND_OPA, 0x00, UIButton::PRESSED); + nextButton->SetStyleForState(STYLE_BORDER_COLOR, 0xff0b1928, UIButton::PRESSED); + pointBtn.x = 60; // 60:x + pointBtn.y = 213; // 213:y + prelistener = new ButtonOnClickListener(reinterpret_cast(preButton)); + if (prelistener == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "prelistener new fail"); + return OHOS_FAILURE; + } + SetUpButton(preButton, pointBtn, 60, 60, prelistener); // 86:width 116:height + image = ImageCacheManager::GetInstance().LoadOneInMultiRes(PLAYER_MUSIC_PROVE, PLAYER_IAMGES); + preButton->SetImageSrc(image, image); + preButton->SetStyle(STYLE_BACKGROUND_COLOR, 0xffffffff); + preButton->SetStyle(STYLE_BACKGROUND_OPA, 0x00); + preButton->SetStyleForState(STYLE_BACKGROUND_COLOR, 0xfffbfbfb, UIButton::PRESSED); + preButton->SetStyleForState(STYLE_BACKGROUND_OPA, 0x00, UIButton::PRESSED); + preButton->SetStyleForState(STYLE_BORDER_COLOR, 0xff0b1928, UIButton::PRESSED); + pointBtn.x = 105; // 105:x + pointBtn.y = 321; // 321:y + modellistener = new ButtonOnClickListener(reinterpret_cast(playerModelButton)); + if (modellistener == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "modellistener new fail"); + return OHOS_FAILURE; + } + playerModelButton->SetTouchable(true); + playerModelButton->SetPosition(pointBtn.x, pointBtn.y, 60, 60); + playerModelButton->SetOnClickListener(modellistener); + if (ShowUpPlayerMode() == false) { + return OHOS_FAILURE; + } + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "playerModel %d", PlayersModel::GetInstance()->GetPlayerModel()); + Add(playerModelButton); + + return OHOS_SUCCESS; +} +//显示音乐播放模式:LOOP 循环播放 SEQUENCE 循序播放 REPEATS 单曲循环 RANDOM 随机播放 +bool PlayersView::ShowUpPlayerMode() +{ + if (PlayersModel::GetInstance()->GetPlayerModel() == LOOP) { + if (LoadPlayerImage(playerModelButton, PLAYER_PLAYERSMODEL_LOOP) == false) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "load PLAYER_PLAYERSMODEL_LOOP fail"); + return false; + } + } else if (PlayersModel::GetInstance()->GetPlayerModel() == SEQUENCE) { + if (LoadPlayerImage(playerModelButton, PLAYER_PLAYERSMODEL_SEQUENCE) == false) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "load PLAYERSMODEL_SEQUENCE fail"); + return false; + } + } else if (PlayersModel::GetInstance()->GetPlayerModel() == REPEATS) { + if (LoadPlayerImage(playerModelButton, PLAYER_PLAYERSMODEL_REPEATS) == false) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "load PLAYERSMODEL_REPEATS fail"); + return false; + } + } else if (PlayersModel::GetInstance()->GetPlayerModel() == RANDOM) { + if (LoadPlayerImage(playerModelButton, PLAYER_PLAYERSMODEL_RANDOM) == false) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "load PLAYERSMODEL_RANDOM fail"); + return false; + } + } + return true; +} +//显示按钮视图 +int PlayersView::ShowUpButtonView() +{ + int ret; + ret = ShowUpCheckBoxButton(); + if (ret == OHOS_FAILURE) { + return OHOS_FAILURE; + } + if (nextButton == nullptr) { + nextButton = new UIButton(); + } + if (preButton == nullptr) { + preButton = new UIButton(); + } + if (optionsButton == nullptr) { + optionsButton = new UIButton(); + } + if (music_list_button == nullptr) { + music_list_button = new UIButton(); + } + if (pullButton == nullptr) { + pullButton = new UIButton(); + } + if (playerModelButton == nullptr) { + playerModelButton = new UIImageView(); + } + if ((nextButton == nullptr) || (preButton == nullptr) || (playerModelButton == nullptr) || (optionsButton == nullptr) || + (pullButton == nullptr)) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "UIButton new fail"); + return OHOS_FAILURE; + } + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ShowUpButtonView"); + + ret = ShowUpButton(); + if (ret == OHOS_FAILURE) { + return OHOS_FAILURE; + } + ret = ShowUpButtonOptions(); + if (ret == OHOS_FAILURE) { + return OHOS_FAILURE; + } + ret = ShowUpCircleProgress(); + if (ret == OHOS_FAILURE) { + return OHOS_FAILURE; + } + ret = ShowUpMusicListbutton(); + if (ret == OHOS_FAILURE) { + return OHOS_FAILURE; + } + return OHOS_SUCCESS; +} + +//显示音乐列表按钮 +int PlayersView::ShowUpMusicListbutton() +{ + struct Point pointBtn; + pointBtn.x = 213; + pointBtn.y = 35; + music_list_button_listener = new ButtonOnClickListener(reinterpret_cast(music_list_button)); + if (music_list_button_listener == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "music_list_button_listener new fail"); + return OHOS_FAILURE; + } + SetUpButton(music_list_button, pointBtn, 60, 60, music_list_button_listener); // 75:width 76:height + ImageInfo *image = ImageCacheManager::GetInstance().LoadOneInMultiRes(PLAYER_MUSIC_LIST, PLAYER_IAMGES); + music_list_button->SetImageSrc(image, image); + music_list_button->SetViewId("music_list_button"); + music_list_button->SetStyle(STYLE_BACKGROUND_COLOR, 0xffffffff); + music_list_button->SetStyle(STYLE_BACKGROUND_OPA, 0x00); + music_list_button->SetStyleForState(STYLE_BACKGROUND_COLOR, 0xfffbfbfb, UIButton::PRESSED); + music_list_button->SetStyleForState(STYLE_BACKGROUND_OPA, 0x00, UIButton::PRESSED); + music_list_button->SetStyleForState(STYLE_BORDER_COLOR, 0xff0b1928, UIButton::PRESSED); + + return OHOS_SUCCESS; +} +/* + 创建了两个按钮:optionslistener:显示选项按钮,点击后里面有三种模式:1手机音乐,2本地音乐,3蓝牙耳机 + pullButton:上拉按钮上拉后显示歌单 +*/ +int PlayersView::ShowUpButtonOptions() +{ + struct Point pointBtn; + pointBtn.x = 213; + pointBtn.y = 366; + optionslistener = new ButtonOnClickListener(reinterpret_cast(optionsButton)); + if (optionslistener == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "optionslistener new fail"); + return OHOS_FAILURE; + } + SetUpButton(optionsButton, pointBtn, 60, 60, optionslistener); // 75:width 76:height + ImageInfo *image = ImageCacheManager::GetInstance().LoadOneInMultiRes(PLAYER_LOCAL_MUSIC_COLOR, PLAYER_IAMGES); + optionsButton->SetImageSrc(image, image); + optionsButton->SetStyle(STYLE_BACKGROUND_COLOR, 0xffffffff); + optionsButton->SetStyle(STYLE_BACKGROUND_OPA, 0x00); + optionsButton->SetStyleForState(STYLE_BACKGROUND_COLOR, 0xfffbfbfb, UIButton::PRESSED); + optionsButton->SetStyleForState(STYLE_BACKGROUND_OPA, 0x00, UIButton::PRESSED); + optionsButton->SetStyleForState(STYLE_BORDER_COLOR, 0xff0b1928, UIButton::PRESSED); + + pointBtn.x = 178; // 178:x + pointBtn.y = 394; // 394:y + SetUpButton(pullButton, pointBtn, 95, 48, nullptr); // 95:width 48:height + pullButton->SetImageSrc(PNG_PULLBUTTON_FACE_IMAGE, PNG_PULLBUTTON_FACE_IMAGE); + pullButton->SetVisible(false); + return OHOS_SUCCESS; +} +//显示播放进度条 +int PlayersView::ShowUpCircleProgress() +{ + if (playbackProgress == nullptr) { + playbackProgress = new UICircleProgress(); + if (playbackProgress == nullptr) { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "playbackProgress new fail"); + return OHOS_FAILURE; + } + } + playbackProgress->SetPosition(158, 158, 150, 150); + playbackProgress->SetCenterPosition(75, 75); + playbackProgress->SetRange(PLAY_PROGRESS_MAX, PLAY_PROGRESS_MIN); + playbackProgress->SetRadius(70); + playbackProgress->SetStartAngle(0); + playbackProgress->SetEndAngle(360); // 360: end angle + playbackProgress->SetValue(0); + playbackProgress->SetStyle(STYLE_BACKGROUND_OPA, 0x00); + playbackProgress->SetBackgroundStyle(STYLE_BACKGROUND_COLOR, 0xff000000); + playbackProgress->SetBackgroundStyle(STYLE_LINE_COLOR, 0xfff61313); + playbackProgress->SetBackgroundStyle(STYLE_LINE_WIDTH, 0); + playbackProgress->SetForegroundStyle(STYLE_BACKGROUND_COLOR, 0xfffbfbfb); + playbackProgress->SetForegroundStyle(STYLE_BORDER_COLOR, 0xffffffff); + playbackProgress->SetForegroundStyle(STYLE_LINE_COLOR, 0xffffffff); + playbackProgress->SetForegroundStyle(STYLE_LINE_WIDTH, 6); // 6:width + Add(playbackProgress); + return OHOS_SUCCESS; +} +//创建跳转视图 +void PlayersView::CreateJumpView(void) +{ + if (jumpView == nullptr) { + jumpView = new JumpView(); + if (jumpView == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "jumpView new fail"); + return; + } + } +} +//创建一个音乐播放器的逻辑层 +void PlayersView::CreatePlayersPresenter(void) +{ + if (playersPresenter == nullptr) { + playersPresenter = new PlayersPresenter(); + if (playersPresenter == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "playersPresenter new fail"); + return; + } + } +} +//创建一个音乐播放器的拖拽监听 +void PlayersView::CreatePlayerOnDragListener(void) +{ + if (playerOnDragListener == nullptr) { + playerOnDragListener = new PlayerOnDragListener(); + if (playerOnDragListener == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "playerOnDragListener new fail"); + return; + } + } +} +//初始化背景图片 +bool PlayersView::InitBackGround(void) +{ + if (backGround == nullptr) { + backGround = new UIImageView(); + if (backGround == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "backGround new fail"); + return false; + } + } + backGround->SetPosition(0, 0, HORIZONTAL_RESOLUTION, VERTICAL_RESOLUTION); + if (LoadPlayerImage(backGround, PLAYER_BACKGROUND) == false) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "backGround LoadPlayerImage fail"); + return false; + } + /* -------------------------------------------------------------------------- */ + if(elipse == nullptr){ + elipse = new UIImageView(); + if(elipse ==nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "elipse new fail"); + return false; + } + } + elipse->SetPosition(173,173,120,120); + if (LoadPlayerImage(elipse, PLAYER_ELLIPSE) == false) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "elipse LoadPlayerImage fail"); + return false; + } + Add(backGround); + Add(elipse); + return true; +} +//创建音乐名,作者名 +void PlayersView::CreatePlayerMusicName() +{ + if (titleLabel == nullptr) { + titleLabel = new UILabel(); + if (titleLabel == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "titleLabel new fail"); + return; + } + } + titleLabel->SetPosition(127, 35, 200, 53); // 127:x 35:y 200:width 53:height + titleLabel->SetText("Music Name"); + titleLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, FONT_FORTY_SIZE); + Add(titleLabel); + + if (subTitleLabel == nullptr) { + subTitleLabel = new UILabel(); + if (subTitleLabel == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "subTitleLabel new fail"); + return; + } + } + subTitleLabel->SetPosition(77, 92, 300, 38); // 77:x 92:y 300:width 38:height + subTitleLabel->SetText("Musical Authors"); + subTitleLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30); // 30:font data + subTitleLabel->SetAlign(UITextLanguageAlignment::TEXT_ALIGNMENT_CENTER, UITextLanguageAlignment::TEXT_ALIGNMENT_CENTER); + Add(subTitleLabel); + return; +} +//拖拽监听:从下到上拖拽后显示音乐列表 +bool PlayersView::OnDragEvent(const DragEvent& event) +{ + /* 300: y limit of drag start point */ + // if ((event.GetDragDirection() == DragEvent::DIRECTION_BOTTOM_TO_TOP) && (event.GetStartPoint().y > 300)) { + // PlayersPresenter::GetInstance()->ShowPlayerListGroup(); + // return true; + // } + return false; +} + +/// @brief 创建音乐来源标签 +/// @param +void PlayersView::CreateMusicSourceLabel(void) +{ + if (MusciSourceLabel == nullptr) { + MusciSourceLabel = new UILabel(); + if (MusciSourceLabel == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "MusciSourceLabel new fail"); + return; + } + } + MusciSourceLabel->SetPosition(163, 90, 140, 41); + MusciSourceLabel->SetText("本地音乐"); + MusciSourceLabel->SetStyle(STYLE_TEXT_FONT, 35); + MusciSourceLabel->SetStyle(STYLE_LINE_HEIGHT, 41); + MusciSourceLabel->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT); + MusciSourceLabel->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); + MusciSourceLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 35); + Add(MusciSourceLabel); +} + +/// @brief 设置音乐来源标签内容 +/// @param text 文本内容 +void PlayersView::MusicSourceLabelSetText(const char *text) +{ + MusciSourceLabel->SetText(text); + MusciSourceLabel->Invalidate(); +} + +/// @brief 创建手机音乐连接状态标签 +/// @param +void PlayersView::CreatePhoneMusicConnectStatusLabel(void) +{ + if (PhoneMusicConnectStatusLabel == nullptr) { + PhoneMusicConnectStatusLabel = new UILabel(); + if (PhoneMusicConnectStatusLabel == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PhoneMusicConnectStatusLabel new fail"); + return; + } + } + PhoneMusicConnectStatusLabel->SetPosition(188, 40, 90, 35); + PhoneMusicConnectStatusLabel->SetText("未连接"); + PhoneMusicConnectStatusLabel->SetTextColor(Color::GetColorFromRGBA(0xff, 0x5a, 0x36, 0xff)); + PhoneMusicConnectStatusLabel->SetStyle(STYLE_TEXT_FONT, 30); + PhoneMusicConnectStatusLabel->SetStyle(STYLE_LINE_HEIGHT, 35); + PhoneMusicConnectStatusLabel->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT); + PhoneMusicConnectStatusLabel->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); + PhoneMusicConnectStatusLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30); + PhoneMusicConnectStatusLabel->SetVisible(false); + Add(PhoneMusicConnectStatusLabel); +} + +/// @brief 设置手机音乐连接状态标签内容 +/// @param text 文本内容 +void PlayersView::PhoneMusicConnectStatusLabelSetText(const char *text) +{ + PhoneMusicConnectStatusLabel->SetText(text); + PhoneMusicConnectStatusLabel->Invalidate(); +} + +/// @brief 设置手机连接状态标签是否可见 +/// @param status +void PlayersView::PhoneMusicConnectStatusLabelIsSetVisible(bool status) +{ + PhoneMusicConnectStatusLabel->SetVisible(status); +} + +/// @brief 设置音乐列表按钮是否可见 +/// @param status +void PlayersView::MusicListButtonIsSetVisible(bool status) +{ + music_list_button->SetVisible(status); +} + +/// @brief 设置选项按钮的图片样式:点击该按钮后进入音乐来源视图,点击里面的按钮,改选项按钮会被替换相应图片 +/// @param image 图片信息 +void PlayersView::OptionsButtonSetImageStyle(ImageInfo *image) +{ + optionsButton->SetImageSrc(image, image); + optionsButton->Invalidate(); +} +//初始化音乐播放器主视图 +bool PlayersView::InitView(void) +{ + int ret; + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, " PlayersView InitView"); + + if (InitBackGround() == false) { + return false; + } + + //CreatePlayerMusicName(); + CreatePhoneMusicConnectStatusLabel(); + CreateMusicSourceLabel(); + // changeView + CreateJumpView(); + // OnClick + CreatePlayersPresenter(); + // OnDrag + CreatePlayerOnDragListener(); + // 按键设置 + ret = ShowUpButtonView(); + if (ret == OHOS_FAILURE) { + return false; + } + // 需要一个模拟信息,假装发生了按键点击,开始播放音乐 + // 调用 OnClick 回调函数来处理点击事件 + //playerButton.OnClick(,); + // 遍历文件名到list链表 + PlayersListGroup::GetInstance()->SetUpListCase(); + PlayersModel::GetInstance()->PlayerInit(); + ShowUpListView(); + ShowUpDelSongView(); + SetTouchable(true); + SetDraggable(true); + return true; +} + +void PlayersView::PreLoad(void) +{ + if (!viewiInitStatus) { + if (InitView()) { + viewiInitStatus = true; + } + } +} + +void PlayersView::UnLoad(void) +{ + // Players's usage scenes is complicated, so we do not release it's resources inner slice. +} +//加载音乐图片 +bool PlayersView::LoadPlayerImage(UIImageView *view, uint32_t resId) +{ + std::string file = PLAYER_IAMGES; + ImageInfo* image = ImageCacheManager::GetInstance().LoadOneInMultiRes(resId, file); + if (image == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PlayersView::LoadPlayerImage %x fail", resId); + return false; + } + view->SetSrc(image); + return true; +} +} diff --git a/code/sdk/application/wearable/nativeapp/nativeui/screensetting/src/ScreenModels.cpp b/code/sdk/application/wearable/nativeapp/nativeui/screensetting/src/ScreenModels.cpp index 6913973a3..56fc1908c 100755 --- a/code/sdk/application/wearable/nativeapp/nativeui/screensetting/src/ScreenModels.cpp +++ b/code/sdk/application/wearable/nativeapp/nativeui/screensetting/src/ScreenModels.cpp @@ -168,7 +168,7 @@ bool ScreenModels::LoadAppImages(std::string file, UIImageView *view, uint32_t r void ScreenModels::PreLoadAppimages(void) { - LoadAppMultiImages(PLAYER_IAMGES, PLAYER_PLAYERSMODEL_RANDOM, PLAYER_PLAYERHIGHLIGHT); + LoadAppMultiImages(PLAYER_IAMGES, PLAYER_BACKGROUND, PLAYER_PLAYING); LoadAppMultiImages(CLOCK_IAMGES, CLOCK_CLASSIC_GEOMETRY, CLOCK_SECOND); LoadAppMultiImages(COMPASS_IAMGES, COMPASS_COMPASS0, COMPASS_COMPASS2); LoadAppMultiImages(DROPDOWN_IAMGES, DROPDOWN_BLUETOOTHCONNECTED, DROPDOWN_SETTING); diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fs/user/res/CHECKBOX_OFF.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fs/user/res/CHECKBOX_OFF.bin new file mode 100644 index 000000000..02f4511df Binary files /dev/null and b/code/sdk/build/config/target_config/brandy/mk_fs_image/fs/user/res/CHECKBOX_OFF.bin differ diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fs/user/res/CHECKBOX_ON.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fs/user/res/CHECKBOX_ON.bin new file mode 100644 index 000000000..1212ce47e Binary files /dev/null and b/code/sdk/build/config/target_config/brandy/mk_fs_image/fs/user/res/CHECKBOX_ON.bin differ diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fs/user/res/SYSTEM_CheckOff.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fs/user/res/SYSTEM_CheckOff.bin new file mode 100644 index 000000000..fb89e49c2 Binary files /dev/null and b/code/sdk/build/config/target_config/brandy/mk_fs_image/fs/user/res/SYSTEM_CheckOff.bin differ diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fs/user/res/SYSTEM_CheckOn.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fs/user/res/SYSTEM_CheckOn.bin new file mode 100644 index 000000000..2e1463050 Binary files /dev/null and b/code/sdk/build/config/target_config/brandy/mk_fs_image/fs/user/res/SYSTEM_CheckOn.bin differ diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fs/user/res/VolumeControlVector.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fs/user/res/VolumeControlVector.bin new file mode 100644 index 000000000..da3928e81 Binary files /dev/null and b/code/sdk/build/config/target_config/brandy/mk_fs_image/fs/user/res/VolumeControlVector.bin differ diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fs/user/res/player/player.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fs/user/res/player/player.bin index 6743f92e6..4ad3caac2 100644 Binary files a/code/sdk/build/config/target_config/brandy/mk_fs_image/fs/user/res/player/player.bin and b/code/sdk/build/config/target_config/brandy/mk_fs_image/fs/user/res/player/player.bin differ