* @Author: luozheng 1732036298@qq.com
* @Date: 2024-06-20 15:14:50
* @LastEditors: luozheng 1732036298@qq.com
- * @LastEditTime: 2024-09-26 22:12:14
+ * @LastEditTime: 2024-09-28 10:30:19
* @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/aivoice/src/AiVoiceModel.cpp
*/
#include "aivoice/include/AiVoiceModel.h"
static void AIListeningCallbackProc(int data)
{
WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AIListeningCallbackProc %d", LISTENING_TIMEOUT);
+ LISTENING_TIMEOUT--;
if (LISTENING_TIMEOUT <= 0)
{
AiVoiceModel::GetInstance().StopListenAndRecordingUserQuestion(); //停止聆听用户问题
AiVoiceModel::GetInstance().stop_listening_timer(); //停止聆听定时器
if (AiVoiceView::GetInstance() && AivoiceListeningView::GetInstance() )
{
- AivoiceListeningView::GetInstance()->GetShowtimeoutLabel()->SetText("");
- AivoiceListeningView::GetInstance()->GetShowtimeoutLabel()->Invalidate();
AiVoiceView::GetInstance()->ChangeView(AIVOICE_LISTENING_VIEWID, AIVOICE_THINKING_VIEWID); // 切换到思考中界面
-
AiVoiceModel::GetInstance().AIVoice_StartTimer();
}
}
AivoiceListeningView::GetInstance()->GetShowtimeoutLabel()->Invalidate();
}
}
- LISTENING_TIMEOUT--;
}
static void AIListeningCallback(int data)
{
* @Author: luozheng 1732036298@qq.com
* @Date: 2024-05-07 11:25:58
* @LastEditors: luozheng 1732036298@qq.com
- * @LastEditTime: 2024-09-26 15:37:15
+ * @LastEditTime: 2024-09-28 14:18:24
* @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/AiVoice/src/AiVoiceView.cpp
*/
#include "aivoice/include/AiVoicePresenter.h"
AiVoiceScrollView[thisView] = p_AivoiceListeningView->CreateAivoiceListeningView();
container_->Add(AiVoiceScrollView[thisView]);
}
+ if(p_AivoiceListeningView)
+ {
+ p_AivoiceListeningView->GetShowtimeoutLabel()->SetText("15");
+ p_AivoiceListeningView->GetShowtimeoutLabel()->Invalidate();
+ }
AiVoiceModel::GetInstance().start_listening_timer();
return true;
}
* @Author: luozheng 1732036298@qq.com\r
* @Date: 2024-08-05 15:20:01\r
* @LastEditors: luozheng 1732036298@qq.com\r
- * @LastEditTime: 2024-09-04 15:43:50\r
+ * @LastEditTime: 2024-09-28 18:06:32\r
* @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/bluetooth/include/BluetoothPresenter.h\r
*/\r
\r
~BluetoothPresenter();\r
bool OnClick(UIView &view, const ClickEvent &event) override;\r
static BluetoothPresenter *GetInstance();\r
+ bool OnDrag(UIView& view, const DragEvent& event) override;\r
bool OnDragEnd(UIView& view, const DragEvent& event) override;\r
bool OnKeyAct(UIView &view, const KeyEvent &event) override;\r
void OnStart() override;\r
void ClickConnfailBackButton(void);\r
private:\r
BluetoothModel *bluetoothMode_{nullptr};\r
+ bool X_DRAG_FLAG{false};\r
};\r
} // namespace OHOS\r
#endif\r
return nullptr;
}
if ((static_cast<unsigned int>(index) > bluetoothCaseList.size() - 1) || (index < 0)) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BluetoothCaseListAdapter::GetView %d %d", index, bluetoothCaseList.size());
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BluetoothCaseListAdapter::GetView %d %d", index, bluetoothCaseList.size());
return nullptr;
}
std::list<BluetoothCaseInfo>::iterator node = bluetoothCaseList.begin();
list->Resize(380, 200);\r
break;\r
default:\r
- list->Resize(380, 300);\r
+ list->Resize(380, 250);\r
break;\r
}\r
newEquipmentButton->SetY(list->GetY() + list->GetHeight() + 20);\r
// list->SetIntercept(true);\r
list->SetDragACCLevel(5);\r
list->SetSwipeACCLevel(800);\r
- list->SetReboundSize(30);\r
+ // list->SetReboundSize(30);\r
// list->SetScrollBlankSize(30);\r
list->SetAdapter(adapterText);\r
group->Add(list);\r
return;\r
}\r
}\r
- rescanButton->SetPosition(173, list->GetY() + list->GetHeight() + 20, 120, 40);\r
+ rescanButton->SetPosition(173, 390, 120, 40);\r
rescanButton->SetTextId(STR_BT_HEADSET_RESCAN); // 重新搜索\r
rescanButton->SetViewId(BLUETOOTH_RESCAN_BUTTON);\r
rescanButton->SetStyle(STYLE_BACKGROUND_COLOR, 0xffffffff);\r
// 刷新扫描出来的设备列表\r
void BluetoothEarListView::RefreshBluetoothEarListView(void)\r
{\r
- if (list && rescanButton)\r
+ if (list)\r
{\r
switch (BluetoothModel::GetInstance()->GetCase().size())//根据扫描出的设备数量,设置扫描列表的高度,使其高度自适应\r
{\r
list->Resize(380, 200);\r
break;\r
default:\r
- list->Resize(380, 300);\r
+ list->Resize(380, 250);\r
break;\r
}\r
- rescanButton->SetY(list->GetY() + list->GetHeight() + 20);\r
list->RefreshList();\r
list->Invalidate();\r
- rescanButton->Invalidate();\r
}\r
}\r
}
\ No newline at end of file
}\r
}\r
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "index = %d", GetViewIndex());\r
- List<BluetoothCaseInfo> &bluetoothCaseList = BluetoothModel::GetInstance()->GetConnedDevicesCase();\r
- if (GetViewIndex() == bluetoothCaseList.Size() - 1)\r
+ List<BluetoothCaseInfo> &btConnedDevicesList_ = BluetoothModel::GetInstance()->GetConnedDevicesCase();\r
+ std::list<BluetoothCaseInfo> &btScansDevicesList_ = BluetoothModel::GetInstance()->GetCase();\r
+ if (GetViewIndex() == btConnedDevicesList_.Size() - 1 || GetViewIndex() == btScansDevicesList_.size() - 1)\r
{\r
lineImage.SetVisible(false);\r
}\r
WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ClickConnfailBackButton ConnectRemoteDevice retVal = %d", retVal);\r
}\r
\r
-bool BluetoothPresenter::OnDragEnd(UIView& view, const DragEvent& event)\r
+bool BluetoothPresenter::OnDrag(UIView& view, const DragEvent& event)\r
{\r
if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT) {\r
+ int16_t deltaX;\r
+ int16_t deltaY;\r
+ deltaX = event.GetDeltaX();\r
+ deltaY = event.GetDeltaY();\r
+ if (MATH_ABS(deltaX) >= MATH_ABS(deltaY) && MATH_ABS(deltaX) > 30) {\r
+ X_DRAG_FLAG = true;\r
+ }\r
+ }\r
+ return true;\r
+}\r
+\r
+bool BluetoothPresenter::OnDragEnd(UIView& view, const DragEvent& event)\r
+{\r
+ if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT && X_DRAG_FLAG) {\r
view_->DropView(view);\r
+ X_DRAG_FLAG = false;\r
}\r
return true;\r
}\r
WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MainViewSample::~MainViewSample");
mainSwipeGroup->RemoveAll();
- dropDownView->ClearBackgroundBlur();
- messageView->ClearBackgroundBlur();
-
for (int32_t i = 0; i < MAX_CARD; i++)
{
recordCard[i] = nullptr;
}
if (dropDownView != nullptr)
{
- dropDownView->RemoveAll();
+ dropDownView->ClearBackgroundBlur();
delete dropDownView;
dropDownView = nullptr;
}
}
if (messageView != nullptr)
{
+ messageView->ClearBackgroundBlur();
messageView->RemoveAll();
delete messageView;
messageView = nullptr;
View<MainPresenterSample>::OnStop();
container_ = nullptr;
- messageView->RemoveAll();
RootView::GetInstance()->ClearOnKeyActListener();
RootView::GetInstance()->RemoveAll();
return;
* @Author: luozheng 1732036298@qq.com
* @Date: 2024-08-05 15:20:03
* @LastEditors: luozheng 1732036298@qq.com
- * @LastEditTime: 2024-09-26 14:21:11
+ * @LastEditTime: 2024-09-28 14:58:16
* @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/player/include/PlayersModel.h
*/
void set_phone_music_play_state(avrcp_key_operation_t notify);
void get_avrcp_ct_get_element_attributes(void);
void set_player_state(bool value);
+ bool get_player_state();
// /* -------------------------------------------------------------------------- */
std::unordered_map<uint16_t, std::pair<std::string,std::string>> &getIdToMusicNameMap(void);
std::string getRealMusicNameById(int id);
void showIdToMusicNameMapData(void);
// /* -------------------------------------------------------------------------- */
private:
+ bool phonePlayButtonState{false};
bool musicSourceFlag{false};//音乐来源标志:false:默认为手表音乐,true:手机音乐
int64_t playerCurrentTime_{0};
int64_t playerMusicDuration_{0};
{
PlayersPresenter *playersPresenter = PlayersPresenter::GetInstance();
if (playersPresenter != nullptr)
- {
+ {
+ phonePlayButtonState = value;
playersPresenter->SetPhonePlayerState(value);
}
}
+ bool PlayersModel::get_player_state()
+ {
+ return phonePlayButtonState;
+ }
std::unordered_map<uint16_t, std::pair<std::string,std::string>> &PlayersModel::getIdToMusicNameMap(void)
{
return idToMusicNameMap;
return;\r
}\r
\r
- if(PlayersListGroup::GetInstance()->GetCase().IsEmpty() && !PlayersModel::GetInstance()->GetMusicSource()) //若当前歌曲列表为空且为本地音乐他跳转到音乐列表进行提示\r
- {\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "current playersCaseList_ is empty!!");\r
- playersView->SetPlayerButtonState(UICheckBox::UICheckBoxState::UNSELECTED);\r
- playersView->ChangeView(PlayersView::MAIN_MUSICPLAYER_VIEW,PlayersView::MUSIC_LIST_VIEW);\r
- return;\r
- }\r
-\r
WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "play_or_pause_Button OnClick");\r
uint8_t state = UICheckBox::UICheckBoxState::MAX_STATUS_NUM;\r
int32_t playerState;\r
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[PlayerButtonOnClick] calling phone");\r
return;\r
}\r
- /* -------------------------- 若ct或tg端是已连接状态且当前为手机音乐 ------------------------- */\r
- if(PlayersModel::GetInstance()->get_avrcp_ct_or_tg_is_connected() && PlayersModel::GetInstance()->GetMusicSource())\r
+\r
+ if( !PlayersModel::GetInstance()->GetMusicSource()) \r
{\r
- if (state == UICheckBox::UICheckBoxState::SELECTED) \r
+ if(PlayersListGroup::GetInstance()->GetCase().IsEmpty()) //若当前歌曲列表为空且为本地音乐他跳转到音乐列表进行提示\r
{\r
- PlayersModel::GetInstance()->set_phone_music_play_state(AVRCP_KEY_PLAY); //控制手机音乐播放\r
- } \r
- else if (state == UICheckBox::UICheckBoxState::UNSELECTED) \r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "current playersCaseList_ is empty!!");\r
+ playersView->SetPlayerButtonState(UICheckBox::UICheckBoxState::UNSELECTED);\r
+ playersView->ChangeView(PlayersView::MAIN_MUSICPLAYER_VIEW,PlayersView::MUSIC_LIST_VIEW);\r
+ return;\r
+ }\r
+ else\r
{\r
- PlayersModel::GetInstance()->set_phone_music_play_state(AVRCP_KEY_PAUSE);//控制手机音乐暂停\r
+ if (state == UICheckBox::UICheckBoxState::SELECTED) {\r
+ /* start play */\r
+ PlayersModel::GetInstance()->ConnectBtAndLocalPlay(connCtState, connTgState, playerState);\r
+ } else if (state == UICheckBox::UICheckBoxState::UNSELECTED) {\r
+ PlayersModel::GetInstance()->ConnectBtAndLocalPause(connCtState, connTgState);\r
+ }\r
+ PlayersModel::GetInstance()->SetCurrentIndex(PlayersModel::GetInstance()->GetCurrentIndex());\r
}\r
- return;\r
}\r
- /* -------------------------------------------------------------------------- */\r
- \r
- if (state == UICheckBox::UICheckBoxState::SELECTED) {\r
- /* start play */\r
- PlayersModel::GetInstance()->ConnectBtAndLocalPlay(connCtState, connTgState, playerState);\r
- } else if (state == UICheckBox::UICheckBoxState::UNSELECTED) {\r
- PlayersModel::GetInstance()->ConnectBtAndLocalPause(connCtState, connTgState);\r
+ else //手机音乐\r
+ {\r
+ /* -------------------------- 若ct或tg端是已连接状态且当前为手机音乐 ------------------------- */\r
+ if(PlayersModel::GetInstance()->get_avrcp_ct_or_tg_is_connected())\r
+ {\r
+ if (state == UICheckBox::UICheckBoxState::SELECTED) \r
+ {\r
+ PlayersModel::GetInstance()->set_phone_music_play_state(AVRCP_KEY_PLAY); //控制手机音乐播放\r
+ } \r
+ else if (state == UICheckBox::UICheckBoxState::UNSELECTED) \r
+ {\r
+ PlayersModel::GetInstance()->set_phone_music_play_state(AVRCP_KEY_PAUSE);//控制手机音乐暂停\r
+ }\r
+ return;\r
+ }\r
+ else\r
+ {\r
+ playersView->SetPlayerButtonState(UICheckBox::UICheckBoxState::UNSELECTED);\r
+ }\r
}\r
- /* -------------------------------------------------------------------------- */\r
- PlayersModel::GetInstance()->SetCurrentIndex(PlayersModel::GetInstance()->GetCurrentIndex());\r
}\r
/*下一首按钮被点击时调用*/\r
void ButtonOnClickListener::NextButtonOnClick()\r
{\r
PlayersView *playersView = PlayersView::GetInstance();\r
if (playersView != nullptr) {\r
- PlayersModel::GetInstance()->SetPlayButtonState(value);\r
playersView->SetPlayerButtonState(value ? UICheckBox::UICheckBoxState::SELECTED:UICheckBox::UICheckBoxState::UNSELECTED);\r
}\r
return;\r
/* -------------------------------------------------------------------------- */\r
if (musicSourceType) // 如果切換到手机音乐,且当前在放歌,就停止音乐\r
{\r
+ bool value = PlayersModel::GetInstance()->get_player_state();\r
+ SetPlayerButtonState(value ? UICheckBox::UICheckBoxState::SELECTED:UICheckBox::UICheckBoxState::UNSELECTED);\r
/*停止音乐*/\r
StopCurPlayingMusic();\r
}\r
* @Author: luozheng 1732036298@qq.com\r
* @Date: 2024-01-29 15:37:44\r
* @LastEditors: luozheng 1732036298@qq.com\r
- * @LastEditTime: 2024-06-19 09:52:56\r
+ * @LastEditTime: 2024-09-27 20:49:01\r
* @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/weather/src/GetWeatherDataErrorView.cpp\r
*/\r
#include "weather/include/GetWeatherDataErrorView.h"\r
\r
void GetWeatherDataErrorView::ClearAll()\r
{\r
- scrollView->RemoveAll();\r
-\r
- if (label != nullptr)\r
- {\r
- delete label;\r
- label = nullptr;\r
- }\r
-\r
- if (image != nullptr)\r
- {\r
- delete image;\r
- image = nullptr;\r
- }\r
-\r
if (scrollView != nullptr)\r
{\r
+ scrollView->RemoveAll();\r
+ if (label != nullptr)\r
+ {\r
+ delete label;\r
+ label = nullptr;\r
+ }\r
+ if (image != nullptr)\r
+ {\r
+ delete image;\r
+ image = nullptr;\r
+ }\r
delete scrollView;\r
scrollView = nullptr;\r
}\r
// FreeImagePathsArray(HumidityPathsArray, HUMIDITY_IMAGE_ANIMATOR_VIEW_NUM_FRAMES);\r
\r
FreeImageInfoArray(UVPathsArray, UVPaths, UV_IMAGE_ANIMATOR_VIEW_NUM_FRAMES);\r
- FreeImageInfoArray(UVPathsArray, WindSpeedPaths, WINDSPEED_IMAGE_ANIMATOR_VIEW_NUM_FRAMES);\r
+ FreeImageInfoArray(WindSpeedPathsArray, WindSpeedPaths, WINDSPEED_IMAGE_ANIMATOR_VIEW_NUM_FRAMES);\r
FreeImageInfoArray(HumidityPathsArray, HumidityPaths, HUMIDITY_IMAGE_ANIMATOR_VIEW_NUM_FRAMES);\r
}\r
}\r