/*---------------------------------------------------------------------------- * Copyright (c) TJD Technologies Co., Ltd. 2024. All rights reserved. * * Description: TjdUiAppPlayDialPresenter.cpp * * Author: liuguanwu * * Create: 2024-10 *--------------------------------------------------------------------------*/ #include "NativeAbility.h" #include "ble_api.h" #include "dock/input_device.h" #include "graphic_service.h" #include "sys_config.h" #include "TjdUiAppPlayDialAiView.h" #include "TjdUiAppPlayDialDrawView.h" #include "TjdUiAppPlayDialModel.h" #include "TjdUiAppPlayDialPresenter.h" #include "TjdUiAppPlayDialView.h" #include "TjdUiOnKeyListener.h" #include "common/key_code.h" #include "TjdUiRegisterManager.h" namespace TJD { TJD_REGIST_NATIVE_MENU(TJD_APP_VIEW_PLAY_DIAL, TjdUiAppPlayDialView, TjdUiAppPlayDialPresenter, IMG_MENU_LIST_MENU_WATCHFACE, STR_ID_34); // clang-format off #define DRAG_EXIT_DISTANCE 170 // clang-format on #define ENABLE_PRINT_INFO 0 #if ENABLE_PRINT_INFO #define static_print_info(...) sys_ui_log_i(__VA_ARGS__) // 一般信息打印宏控制 #define static_print_warn(...) sys_ui_log_w(__VA_ARGS__) // 警告信息打印一般常开 #define static_print_error(...) sys_ui_log_e(__VA_ARGS__) // 错误信息打印一般常开 #define static_print_debug(...) sys_ui_log_d(__VA_ARGS__) // 调试信息打印一般常开 #else #define static_print_info(...) #define static_print_warn(...) #define static_print_error(...) #define static_print_debug(...) #endif static TjdUiAppPlayDialPresenter *g_pv_PlayDialPresenter = nullptr; void PlayDialInterruptListener::OnInterrupt(int32_t type, int32_t hint) { static_print_info("PlayDial CaptureInterruptListener OnInterrupt, type:%d, hint:%d", type, hint); if (type == INTERRUPT_TYPE_BEGIN && hint == INTERRUPT_HINT_PAUSE) { static_print_info("PlayDial OnInterrupt pause not supported"); } if (type == INTERRUPT_TYPE_END && hint == INTERRUPT_HINT_RESUME) { static_print_info("PlayDial OnInterrupt resume not supported"); } if (type == INTERRUPT_TYPE_BEGIN && hint == INTERRUPT_HINT_STOP) { } if (type == INTERRUPT_TYPE_END && hint == INTERRUPT_HINT_STOP) { static_print_info("PlayDial OnInterrupt stop not supported"); } } TjdUiAppPlayDialPresenter::TjdUiAppPlayDialPresenter() { g_pv_PlayDialPresenter = this; TjdUiAppPlayDialModel::GetInstance().RegisterLefunAiDataCallback(TjdUiAppPlayDialModel::lefun_ai_data_callback); TjdUiAppPlayDialModel::GetInstance().RegisterLefunAiDataEndCallback( TjdUiAppPlayDialModel::lefun_ai_data_end_callback); TjdUiAppPlayDialModel::GetInstance().RegisterAppImageReadyCallback( TjdUiAppPlayDialModel::play_dial_app_ready_callback); TjdUiAppPlayDialModel::GetInstance().RegisterOriginalImageEndCallback( TjdUiAppPlayDialModel::play_dial_original_end_callback); } TjdUiAppPlayDialPresenter::~TjdUiAppPlayDialPresenter() { TjdUiAppPlayDialModel::GetInstance().UnregisterLefunAiDataCallback(); TjdUiAppPlayDialModel::GetInstance().UnregisterLefunAiDataEndCallback(); TjdUiAppPlayDialModel::GetInstance().UnregisterAppImageReadyCallback(); TjdUiAppPlayDialModel::GetInstance().UnregisterOriginalImageEndCallback(); g_pv_PlayDialPresenter = nullptr; } TjdUiAppPlayDialPresenter &TjdUiAppPlayDialPresenter::GetInstance(void) { return *g_pv_PlayDialPresenter; } void TjdUiAppPlayDialPresenter::OnStart() { static_print_info("[%s][%d]: %s", __FILE__, __LINE__, __func__); TjdUiCommonOnKeyListener::GetInstance()->SetOnKeyActListener(this, KeyModelType::APP_KEY_TYPE); } void TjdUiAppPlayDialPresenter::OnResume() { static_print_info("[%s][%d]: %s", __FILE__, __LINE__, __func__); Presenter::OnResume(); } void TjdUiAppPlayDialPresenter::OnPause() { static_print_info("[%s][%d]: %s", __FILE__, __LINE__, __func__); Presenter::OnPause(); } void TjdUiAppPlayDialPresenter::OnStop() { TjdUiCommonOnKeyListener::GetInstance()->ClearOnKeyActListener(KeyModelType::APP_KEY_TYPE); static_print_info("[%s][%d]: %s", __FILE__, __LINE__, __func__); } bool TjdUiAppPlayDialPresenter::OnClick(OHOS::UIView &view, const OHOS::ClickEvent &event) { std::string viewId = view.GetViewId(); static_print_info("[%s][%d]: %s:%s", __FILE__, __LINE__, __func__, viewId.c_str()); if (viewId.empty()) { return false; } // PLAYDIAL_HOME_VIEW if (viewId == PLAYDIAL_HOME_VIEW_BTN_LEFT_ID) { static_print_info("[%s][%d]: %s", __FILE__, __LINE__, __func__); TjdUiAppPlayDialView::selectType_ = DialSelectType::SELECT_TYPE_DRAW; TjdUiAppPlayDialView::GetInstance().ShowView(PlayDialViewIndex::PLAYDIAL_DRAW_HINT); } if (viewId == PLAYDIAL_HOME_VIEW_BTN_RIGHT_ID) { if (tjd_get_ble_is_connect()) { TjdUiAppPlayDialView::selectType_ = DialSelectType::SELECT_TYPE_AI; TjdUiAppPlayDialView::GetInstance().ShowView(PlayDialViewIndex::PLAYDIAL_AI_STYLE); } else { TjdUiAppPlayDialView::GetInstance().ShowView(PlayDialViewIndex::PLAYDIAL_TIPS_NO_CONNECT); // TjdUiAppPlayDialView::GetInstance().ShowView(PlayDialViewIndex::PLAYDIAL_AI_STYLE); } } if (viewId == PLAYDIAL_HOME_VIEW_BTN_RECORD_ID) { static_print_info("[%s][%d]: %s", __FILE__, __LINE__, __func__); TjdUiAppPlayDialView::GetInstance().ShowView(PlayDialViewIndex::PLAYDIAL_LOG_LIST); } if (viewId == PLAYDIAL_AI_STYLE_VIEW_ITEM_ID) { static_print_info("[%s][%d]: %s", __FILE__, __LINE__, __func__); TjdUiAppPlayDialModel::GetInstance().dialStyle_ = view.GetViewIndex(); TjdUiAppPlayDialView::GetInstance().Result_ = AI_RESULT_LISTEN; TjdUiAppPlayDialView::GetInstance().ShowView(PlayDialViewIndex::PLAYDIAL_AI_LISTEN); } // PLAYDIAL_AI_LISTEN_VIEW if (viewId == PLAYDIAL_AI_LISTEN_VIEW_BTN_ID) { static_print_info("[%s][%d]: %s", __FILE__, __LINE__, __func__); TjdUiAppPlayDialView::GetInstance().Result_ = AI_RESULT_LOADING_TXT; TjdUiAppPlayDialView::GetInstance().ShowView(PlayDialViewIndex::PLAYDIAL_AI_MAKING_TXT); } // PLAYDIAL_AI_MAKING_VIEW if (viewId == PLAYDIAL_AI_MAKING_VIEW_BTN_LEFT_ID) { static_print_info("[%s][%d]: %s", __FILE__, __LINE__, __func__); TjdUiAppPlayDialView::GetInstance().Result_ = AI_RESULT_LISTEN; TjdUiAppPlayDialView::GetInstance().ShowView(PlayDialViewIndex::PLAYDIAL_AI_LISTEN); } if (viewId == PLAYDIAL_AI_MAKING_VIEW_BTN_RIGHT_ID) { static_print_info("[%s][%d]: %s", __FILE__, __LINE__, __func__); if (TjdUiAppPlayDialView::GetInstance().Result_ == AI_RESULT_SELECT_TXT) { TjdUiAppPlayDialView::GetInstance().Result_ = AI_RESULT_APP_MAKING; TjdUiAppPlayDialView::GetInstance().ShowView(PlayDialViewIndex::PLAYDIAL_AI_MAKING_IMG); } // else if(TjdUiAppPlayDialView::GetInstance().Result_ == AI_RESULT_APP_DONE) { // TjdUiAppPlayDialView::GetInstance().ShowView(PlayDialViewIndex::PLAYDIAL_AI_MAKING_IMG); // } } // PLAYDIAL_AI_PREVIEW_VIEW if (viewId == PLAYDIAL_AI_PREVIEW_VIEW_BTN_LEFT_ID) { static_print_info("[%s][%d]: %s", __FILE__, __LINE__, __func__); if (TjdUiAppPlayDialView::GetInstance().previousViewIndex_ == PLAYDIAL_LOG_SINGLE) { TjdUiAppPlayDialView::GetInstance().Result_ = AI_RESULT_INVALID; TjdUiAppPlayDialView::GetInstance().ShowView(PlayDialViewIndex::PLAYDIAL_LOG_SINGLE); } else if (TjdUiAppPlayDialView::GetInstance().previousViewIndex_ == PLAYDIAL_DRAW_MAKING_IMG) { TjdUiAppPlayDialView::GetInstance().Result_ = AI_RESULT_INVALID; TjdUiAppPlayDialView::GetInstance().ShowView(PlayDialViewIndex::PLAYDIAL_DRAW_MAIN); } else { TjdUiAppPlayDialView::GetInstance().ShowView(PlayDialViewIndex::PLAYDIAL_HOME); } } if (viewId == PLAYDIAL_AI_PREVIEW_VIEW_BTN_RIGHT_ID) { static_print_info("[%s][%d]: %s", __FILE__, __LINE__, __func__); if (TjdUiAppPlayDialView::GetInstance().previousViewIndex_ == PLAYDIAL_LOG_SINGLE) { TjdUiAppPlayDialView::GetInstance().TipsIndex_ = PLAYDIAL_TIPS_SET_SUCCESS; TjdUiAppPlayDialView::GetInstance().ShowView(PlayDialViewIndex::PLAYDIAL_TIPSV_SUCCESS); } else if (TjdUiAppPlayDialView::GetInstance().previousViewIndex_ == PLAYDIAL_DRAW_MAKING_IMG) { TjdUiAppPlayDialView::GetInstance().TipsIndex_ = PLAYDIAL_TIPS_SET_SUCCESS; TjdUiAppPlayDialView::GetInstance().ShowView(PlayDialViewIndex::PLAYDIAL_TIPSV_SUCCESS); } else { if (TjdUiAppPlayDialView::GetInstance().Result_ == AI_RESULT_SELECT_IMG) { TjdUiAppPlayDialView::GetInstance().TipsIndex_ = PLAYDIAL_TIPS_SET_SUCCESS; TjdUiAppPlayDialView::GetInstance().ShowView(PlayDialViewIndex::PLAYDIAL_TIPSV_SUCCESS); } else { TjdUiAppPlayDialView::GetInstance().Result_ = AI_RESULT_LISTEN; TjdUiAppPlayDialView::GetInstance().ShowView(PlayDialViewIndex::PLAYDIAL_AI_LISTEN); } } } // PLAYDIAL_DRAW_MAIN_VIEW if (viewId == PLAYDIAL_DRAW_MAIN_VIEW_BTN_ID) { static_print_info("[%s][%d]: %s", __FILE__, __LINE__, __func__); #if 0 OHOS::UIImageView *logoClick = dynamic_cast(&view); PlayDialDrawMainView *item = dynamic_cast(logoClick->GetParent()); item->PersisCanvas(); TjdUiAppPlayDialView::GetInstance().ShowView(PlayDialViewIndex::PLAYDIAL_DRAW_PREVIEW); #else TjdUiAppPlayDialView::GetInstance().ShowView(PlayDialViewIndex::PLAYDIAL_DRAW_MAKING_IMG); #endif } // PLAYDIAL_DRAW_PREVIEW_VIEW if (viewId == PLAYDIAL_DRAW_PREVIEW_VIEW_BTN_LEFT_ID) { static_print_info("[%s][%d]: %s", __FILE__, __LINE__, __func__); TjdUiAppPlayDialView::GetInstance().ShowView(PlayDialViewIndex::PLAYDIAL_HOME); } if (viewId == PLAYDIAL_DRAW_PREVIEW_VIEW_BTN_RIGHT_ID) { static_print_info("[%s][%d]: %s", __FILE__, __LINE__, __func__); OHOS::UIImageView *logoClick = dynamic_cast(&view); PlayDialDrawPreviewView *item = dynamic_cast(logoClick->GetParent()); item->PersisImage(); TjdUiAppPlayDialView::GetInstance().TipsIndex_ = PLAYDIAL_TIPS_SET_SUCCESS; TjdUiAppPlayDialView::GetInstance().ShowView(PlayDialViewIndex::PLAYDIAL_TIPSV_SUCCESS); } // PLAYDIAL_LOG_LIST if (viewId == PLAYDIAL_LOG_LIST_VIEW_IMAGE_ID) { PlayDialHistoryView::GetInstance()->clickCallBackImage(view.GetParent()->GetViewIndex()); TjdUiAppPlayDialView::GetInstance().ShowView(PlayDialViewIndex::PLAYDIAL_LOG_SINGLE); } if (viewId == PLAYDIAL_LOG_LIST_VIEW_DELETE_ID) { PlayDialHistoryView::GetInstance()->clickCallBackDelete(view.GetParent()->GetViewIndex()); } // PLAYDIAL_LOG_SINGLE if (viewId == PLAYDIAL_LOG_SINGLE_VIEW_BTN_ID) { TjdUiAppPlayDialView::GetInstance().TipsIndex_ = PLAYDIAL_TIPS_SUCCESS; TjdUiAppPlayDialView::GetInstance().ShowView(PlayDialViewIndex::PLAYDIAL_AI_PREVIEW); } // keep adding... return false; } bool TjdUiAppPlayDialPresenter::OnDragStart(OHOS::UIView &view, const OHOS::DragEvent &event) { std::string viewId = view.GetViewId(); static_print_info("[%s][%d]: %s-%s", __FILE__, __LINE__, __func__, viewId.c_str()); // 如果在0-80的距离内开始滑动,并且拖动的距离大于设定值,则认为是退出标志 dragStartX_ = event.GetStartPoint().x; if (viewId.empty()) { return false; } // PLAYDIAL_DRAW_MAIN_VIEW if (viewId == PLAYDIAL_DRAW_MAIN_VIEW_CANVAS_ID) { PlayDialDrawMainView *item = dynamic_cast(&view); item->ClearPoint(); item->UpdatePoint(event.GetCurrentPos()); return true; } if (viewId == PLAYDIAL_LOG_LIST_VIEW_ITEM_ID) { static_print_info("event.GetDeltaX-Y:%d-%d", event.GetDeltaX(), event.GetDeltaY()); uint8_t direction = event.GetDragDirection(); if (direction == OHOS::DragEvent::DIRECTION_LEFT_TO_RIGHT || direction == OHOS::DragEvent::DIRECTION_RIGHT_TO_LEFT) { // view.SetIntercept(true); PlayDialHistoryView::GetInstance()->styleList_->ItemViewbackButOne(view.GetViewIndex()); } else { // TjdHistoryScrollView &castView = dynamic_cast(view); // castView.SetHorizontalScrollState(false); PlayDialHistoryView::GetInstance()->styleList_->ItemViewbackAll(); } } return view.IsIntercept(); } bool TjdUiAppPlayDialPresenter::OnDrag(OHOS::UIView &view, const OHOS::DragEvent &event) { std::string viewId = view.GetViewId(); static_print_info("[%s][%d]: %s [%s-%d]", __FILE__, __LINE__, __func__, viewId.c_str(), view.IsIntercept()); if (viewId.empty()) { return false; } // PLAYDIAL_DRAW_MAIN_VIEW if (viewId == PLAYDIAL_DRAW_MAIN_VIEW_CANVAS_ID) { PlayDialDrawMainView *item = dynamic_cast(&view); item->UpdatePoint(event.GetCurrentPos()); return true; } if (viewId == PLAYDIAL_LOG_LIST_VIEW_ITEM_ID) { return view.IsIntercept(); } dragDistance_ = dragCurrentX_ - dragStartX_; if (dragDistance_ >= DRAG_EXIT_DISTANCE && dragStartX_ < 80) { isExit_ = true; } else { isExit_ = false; } return false; } bool TjdUiAppPlayDialPresenter::OnDragEnd(OHOS::UIView &view, const OHOS::DragEvent &event) { bool tempRet = false; static_print_info("[%s][%d]: %s", __FILE__, __LINE__, __func__); std::string viewId = view.GetViewId(); if (viewId.empty()) { return false; } // PLAYDIAL_DRAW_MAIN_VIEW if (viewId == PLAYDIAL_DRAW_MAIN_VIEW_CANVAS_ID) { PlayDialDrawMainView *item = dynamic_cast(&view); item->UpdatePoint(event.GetCurrentPos()); return true; } if (viewId == PLAYDIAL_LOG_LIST_VIEW_ITEM_ID) { tempRet = view.IsIntercept(); // view.SetIntercept(false); TjdHistoryScrollView &castView = dynamic_cast(view); // castView.SetHorizontalScrollState(true); castView.StartAnimatorOnDragEnd(); } if (event.GetDragDirection() == OHOS::DragEvent::DIRECTION_LEFT_TO_RIGHT && dragStartX_ < 80) { if (TjdUiAppPlayDialView::GetInstance().currentViewIndex_ == PLAYDIAL_HOME) { OHOS::NativeAbility::GetInstance().ChangePreSlice(); // ExitCurrentView(); } else if (TjdUiAppPlayDialView::GetInstance().currentViewIndex_ == PLAYDIAL_AI_STYLE) { TjdUiAppPlayDialView::GetInstance().ShowView(PlayDialViewIndex::PLAYDIAL_HOME); } else if (TjdUiAppPlayDialView::GetInstance().currentViewIndex_ == PLAYDIAL_AI_LISTEN) { TjdUiAppPlayDialView::GetInstance().Result_ = AI_RESULT_INVALID; TjdUiAppPlayDialView::GetInstance().ShowView(PlayDialViewIndex::PLAYDIAL_AI_STYLE); } else if (TjdUiAppPlayDialView::GetInstance().currentViewIndex_ == PLAYDIAL_AI_MAKING_TXT) { TjdUiAppPlayDialView::GetInstance().Result_ = AI_RESULT_LISTEN; TjdUiAppPlayDialView::GetInstance().ShowView(PlayDialViewIndex::PLAYDIAL_AI_LISTEN); } else if (TjdUiAppPlayDialView::GetInstance().currentViewIndex_ == PLAYDIAL_AI_MAKING_IMG) { TjdUiAppPlayDialView::GetInstance().Result_ = AI_RESULT_LISTEN; TjdUiAppPlayDialView::GetInstance().ShowView(PlayDialViewIndex::PLAYDIAL_AI_LISTEN); } else if (TjdUiAppPlayDialView::GetInstance().currentViewIndex_ == PLAYDIAL_AI_PREVIEW) { if (TjdUiAppPlayDialView::GetInstance().previousViewIndex_ == PLAYDIAL_LOG_SINGLE) { TjdUiAppPlayDialView::GetInstance().Result_ = AI_RESULT_INVALID; TjdUiAppPlayDialView::GetInstance().ShowView(PlayDialViewIndex::PLAYDIAL_LOG_SINGLE); } else if (TjdUiAppPlayDialView::GetInstance().previousViewIndex_ == PLAYDIAL_DRAW_MAKING_IMG) { TjdUiAppPlayDialView::GetInstance().Result_ = AI_RESULT_INVALID; TjdUiAppPlayDialView::GetInstance().ShowView(PlayDialViewIndex::PLAYDIAL_DRAW_MAIN); } else { TjdUiAppPlayDialView::GetInstance().ShowView(PlayDialViewIndex::PLAYDIAL_HOME); } } else if (TjdUiAppPlayDialView::GetInstance().currentViewIndex_ == PLAYDIAL_LOG_SINGLE) { TjdUiAppPlayDialView::GetInstance().ShowView(PlayDialViewIndex::PLAYDIAL_LOG_LIST); } else { TjdUiAppPlayDialView::GetInstance().ShowView(PlayDialViewIndex::PLAYDIAL_HOME); } tempRet = true; } return tempRet; } bool TjdUiAppPlayDialPresenter::OnKeyAct(OHOS::UIView &view, const OHOS::KeyEvent &event) { static_print_info("[%s][%d]: %s", __FILE__, __LINE__, __func__); if (event.GetKeyId() == (uint16_t)(OHOS::ZliteKeyCode::ZLITE_KEY_TJD_RIGHTUP) && event.GetState() == OHOS::InputDevice::STATE_RELEASE) { if (TjdUiAppPlayDialView::GetInstance().currentViewIndex_ == PLAYDIAL_HOME) { OHOS::NativeAbility::GetInstance().ChangePreSlice(); // ExitCurrentView(); return true; } else if (TjdUiAppPlayDialView::GetInstance().currentViewIndex_ == PLAYDIAL_AI_STYLE) { TjdUiAppPlayDialView::GetInstance().ShowView(PlayDialViewIndex::PLAYDIAL_HOME); return true; } else if (TjdUiAppPlayDialView::GetInstance().currentViewIndex_ == PLAYDIAL_AI_LISTEN) { TjdUiAppPlayDialView::GetInstance().ShowView(PlayDialViewIndex::PLAYDIAL_AI_STYLE); TjdUiAppPlayDialView::GetInstance().Result_ = AI_RESULT_INVALID; return true; } else if (TjdUiAppPlayDialView::GetInstance().currentViewIndex_ == PLAYDIAL_AI_MAKING_TXT) { TjdUiAppPlayDialView::GetInstance().Result_ = AI_RESULT_LISTEN; TjdUiAppPlayDialView::GetInstance().ShowView(PlayDialViewIndex::PLAYDIAL_AI_LISTEN); return true; } else if (TjdUiAppPlayDialView::GetInstance().currentViewIndex_ == PLAYDIAL_AI_MAKING_IMG) { TjdUiAppPlayDialView::GetInstance().Result_ = AI_RESULT_LISTEN; TjdUiAppPlayDialView::GetInstance().ShowView(PlayDialViewIndex::PLAYDIAL_AI_LISTEN); return true; } else if (TjdUiAppPlayDialView::GetInstance().currentViewIndex_ == PLAYDIAL_AI_PREVIEW) { if (TjdUiAppPlayDialView::GetInstance().previousViewIndex_ == PLAYDIAL_LOG_SINGLE) { TjdUiAppPlayDialView::GetInstance().Result_ = AI_RESULT_INVALID; TjdUiAppPlayDialView::GetInstance().ShowView(PlayDialViewIndex::PLAYDIAL_LOG_SINGLE); } else if (TjdUiAppPlayDialView::GetInstance().previousViewIndex_ == PLAYDIAL_DRAW_MAKING_IMG) { TjdUiAppPlayDialView::GetInstance().Result_ = AI_RESULT_INVALID; TjdUiAppPlayDialView::GetInstance().ShowView(PlayDialViewIndex::PLAYDIAL_DRAW_MAIN); } else { TjdUiAppPlayDialView::GetInstance().ShowView(PlayDialViewIndex::PLAYDIAL_HOME); } return true; } else if (TjdUiAppPlayDialView::GetInstance().currentViewIndex_ == PLAYDIAL_LOG_SINGLE) { TjdUiAppPlayDialView::GetInstance().ShowView(PlayDialViewIndex::PLAYDIAL_LOG_LIST); return true; } else { TjdUiAppPlayDialView::GetInstance().ShowView(PlayDialViewIndex::PLAYDIAL_HOME); return true; } } return false; } bool TjdUiAppPlayDialPresenter::OnRotateStart(OHOS::UIView &view, const OHOS::RotateEvent &event) { std::string viewId = view.GetViewId(); if (viewId == PLAYDIAL_LOG_LIST_VIEW_LIST_ID) { PlayDialHistoryView::GetInstance()->styleList_->ItemViewbackAll(); } return view.IsIntercept(); } void TjdUiAppPlayDialPresenter::OnClickTrans(OHOS::UIView &view) {} } // namespace TJD