393 lines
14 KiB
C++
393 lines
14 KiB
C++
/*----------------------------------------------------------------------------
|
|
* Copyright (c) TJD Technologies Co., Ltd. 2024. All rights reserved.
|
|
*
|
|
* Description:
|
|
*
|
|
* Author: huangshuyi
|
|
*
|
|
* Create: 2024-4
|
|
*--------------------------------------------------------------------------*/
|
|
|
|
#include "TjdUiAppMainPresenter.h"
|
|
#include "DialViewGroup.h"
|
|
#include "NativeAbility.h"
|
|
#include "TjdUiAppIds.h"
|
|
#include "TjdUiAppMainPageFavorite.h"
|
|
#include "TjdUiAppMainPageHealth.h"
|
|
#include "TjdUiAppMainPageMakeFriend.h"
|
|
#include "TjdUiAppMainPageMusic.h"
|
|
#include "TjdUiAppMainPageShortCut.h"
|
|
#include "TjdUiAppMainView.h"
|
|
#include "TjdUiDoubleClickListencer.h"
|
|
#include "TjdUiEditShortcutPresenter.h"
|
|
#include "TjdUiPreviewComponentModel.h"
|
|
#include "TjdUiRegisterManager.h"
|
|
#include "TjdUiScreenEvent.h"
|
|
#include "TjdUiScreenManage.h"
|
|
#include "TjdUiWatchFaceBase.h"
|
|
#include "common/key_code.h"
|
|
#include "dock/input_device.h"
|
|
#include "sql_setting.h"
|
|
#include "sys_config.h"
|
|
#include "transition/TjdPreZoomTransition.h"
|
|
#if ENABLE_MEMORY_CHECK
|
|
#include "gfx_utils/mem_check.h"
|
|
#endif
|
|
|
|
using namespace OHOS;
|
|
namespace TJD {
|
|
|
|
TJD_REGIST_SLICE(TJD_APP_VIEW_MAIN, TjdUiAppMainView, TjdUiAppMainPresenter);
|
|
|
|
#define ENABLE_PRINT_INFO 1
|
|
#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 constexpr uint16_t MAX_PERIOD = 1000;
|
|
static TjdUiAppMainPresenter *g_pMainClockPresenter = nullptr;
|
|
|
|
TjdUiAppMainPresenter::TjdUiAppMainPresenter()
|
|
{
|
|
// MemCheck::GetInstance()->EnableLeakCheck(true);
|
|
g_pMainClockPresenter = this;
|
|
}
|
|
|
|
TjdUiAppMainPresenter::~TjdUiAppMainPresenter()
|
|
{
|
|
g_pMainClockPresenter = nullptr;
|
|
// MemCheck::GetInstance()->EnableLeakCheck(false);
|
|
}
|
|
|
|
TjdUiAppMainPresenter *TjdUiAppMainPresenter::GetInstance(void) { return g_pMainClockPresenter; }
|
|
|
|
void TjdUiAppMainPresenter::OnStart()
|
|
{
|
|
mainPresenterState_ = MainPresenterState::RESUME;
|
|
TjdUiDoubleClickListencer::GetInstance().RegisterClickEvent(
|
|
std::bind(&TjdUiAppMainPresenter::OnKeyClickAct, this, std::placeholders::_1, std::placeholders::_2),
|
|
std::bind(&TjdUiAppMainPresenter::OnKeyDoubleClickAct, this, std::placeholders::_1, std::placeholders::_2));
|
|
TjdUiDoubleClickListencer::GetInstance().DoubleKeyCode(OHOS::ZliteKeyCode::ZLITE_KEY_TJD_RIGHTDOWN);
|
|
TjdUiCommonOnKeyListener::GetInstance()->SetOnKeyActListener(this, KeyModelType::APP_KEY_TYPE);
|
|
TjdUiScreenManage::ResetScreenKeepOnTimeout();
|
|
/* 用作开机第一次判断锁屏或密码是否存在 */
|
|
// TjdUiScreenEventInitEvent();
|
|
}
|
|
|
|
void TjdUiAppMainPresenter::OnSwipe(UISwipeView &view)
|
|
{
|
|
UNUSED(view);
|
|
TjdCardId cardId = view_->GetHorCurrentCard();
|
|
SetTaskPeroid(cardId);
|
|
|
|
if (cardId == TjdCardId::TJD_CARD_HEALTH) {
|
|
if (!isHearthRateSensorOpened_) {
|
|
// CompassModel::GetInstance()->OpenCompassSensor();
|
|
isHearthRateSensorOpened_ = true;
|
|
}
|
|
} else if (isHearthRateSensorOpened_) {
|
|
// CompassModel::GetInstance()->CloseCompassSensor();
|
|
isHearthRateSensorOpened_ = false;
|
|
}
|
|
}
|
|
|
|
void TjdUiAppMainPresenter::OnStop()
|
|
{
|
|
mainPresenterState_ = MainPresenterState::STOP;
|
|
TjdUiDoubleClickListencer::GetInstance().UnRegisterClickEvent();
|
|
if (isHearthRateSensorOpened_) {
|
|
// CompassModel::GetInstance()->CloseCompassSensor();
|
|
}
|
|
// TjdUiCommonOnKeyListener::GetInstance()->ClearOnKeyActListener(KeyModelType::APP_KEY_TYPE);
|
|
}
|
|
|
|
void TjdUiAppMainPresenter::OnResume()
|
|
{
|
|
Presenter::OnResume();
|
|
view_->ResetView();
|
|
mainPresenterState_ = MainPresenterState::RESUME;
|
|
// Set current page again to invoke OnActive method.
|
|
uint8_t curCardId = view_->GetHorCurrentCard();
|
|
view_->SwitchToCard(curCardId);
|
|
}
|
|
|
|
void TjdUiAppMainPresenter::OnPause()
|
|
{
|
|
Presenter::OnPause();
|
|
// Save watchface content for slide back
|
|
OHOS::UIView *watchFace = view_->GetViewById(TjdCardId::TJD_CARD_WATCH_FACE)->GetParent();
|
|
uint8_t opaScale = watchFace->GetOpaScale();
|
|
watchFace->SetOpaScale(OPA_OPAQUE);
|
|
PageTransitionMgr::GetInstance().SaveSlideBackSnapShotIfNecessary(watchFace);
|
|
watchFace->SetOpaScale(opaScale);
|
|
|
|
uint8_t curCardId = view_->GetHorCurrentCard();
|
|
OHOS::UICardPage *card = view_->GetViewById(curCardId);
|
|
if (card != nullptr) {
|
|
card->OnPause();
|
|
}
|
|
mainPresenterState_ = MainPresenterState::PAUSE;
|
|
}
|
|
|
|
bool TjdUiAppMainPresenter::OnClick(UIView &view, const ClickEvent &event)
|
|
{
|
|
TjdCardId horCardId = view_->GetHorCurrentCard();
|
|
TjdVerCardId verCardId = view_->GetVerCurrentCard();
|
|
|
|
if (horCardId != TjdCardId::TJD_CARD_WATCH_FACE) {
|
|
return true;
|
|
}
|
|
|
|
switch (verCardId) {
|
|
case TjdVerCardId::TJD_VER_CARD_SHORTCUT:
|
|
//位于快捷栏界面,分发到快捷栏界面处理
|
|
TjdUiAppMainPageShortcut::GetInstance()->OnClick(view, event);
|
|
break;
|
|
case TjdVerCardId::TJD_VER_CARD_WATCH_FACE:
|
|
//位于主页面,分发到主页面处理
|
|
view_->GetWfCommon()->OnClick(view, event);
|
|
break;
|
|
case TjdVerCardId::TJD_VER_CARD_MESSAGE:
|
|
break;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
bool TjdUiAppMainPresenter::OnLongPress(UIView &view, const LongPressEvent &event)
|
|
{
|
|
UNUSED(event);
|
|
UNUSED(view);
|
|
|
|
TjdCardId horCardId = view_->GetHorCurrentCard();
|
|
TjdVerCardId verCardId = view_->GetVerCurrentCard();
|
|
if (verCardId != TjdVerCardId::TJD_VER_CARD_WATCH_FACE || horCardId == TjdCardId::TJD_CARD_FAVORITE) {
|
|
return true;
|
|
}
|
|
|
|
if (horCardId != TjdCardId::TJD_CARD_WATCH_FACE) {
|
|
TjdSetPreZoomParams(0, 258);
|
|
SetFromComponentsView(true);
|
|
TjdUiAppMainModel::GetInstance().SetFromCardId(horCardId);
|
|
TjdUiPreviewComponentModel::GetInstance().SetSelectedCard(horCardId);
|
|
OHOS::NativeAbility::GetInstance().ChangeSlice(TJD_APP_VIEW_MAIN_PREVIEW_COMPONENT,
|
|
TransitionType::TJD_TRANSITION_PRE_ZOOM);
|
|
} else {
|
|
TjdSetPreZoomParams(0, 246);
|
|
OHOS::NativeAbility::GetInstance().ChangeSlice(TJD_APP_VIEW_WF_SELECT, TransitionType::TJD_TRANSITION_PRE_ZOOM);
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
bool TjdUiAppMainPresenter::OnKeyAct(UIView &view, const KeyEvent &event)
|
|
{
|
|
UNUSED(event);
|
|
UNUSED(view);
|
|
uint8_t cardId = view_->GetHorCurrentCard();
|
|
if (cardId == TjdCardId::TJD_CARD_FAVORITE) {
|
|
auto favoritePage = dynamic_cast<TjdUiAppMainPageFavorite *>(view_->GetViewById(TjdCardId::TJD_CARD_FAVORITE));
|
|
if (favoritePage && favoritePage->OnKeyEvent(event)) {
|
|
return true;
|
|
}
|
|
}
|
|
TjdUiDoubleClickListencer::GetInstance().OnKeyAct(view, event);
|
|
return true;
|
|
}
|
|
|
|
void TjdUiAppMainPresenter::DispatchUpDownViewClickEvent(TjdVerCardId verCardId)
|
|
{
|
|
if (verCardId == TjdVerCardId::TJD_VER_CARD_SHORTCUT) {
|
|
if (TjdUiAppMainPageShortcut::currentViewIndex_ == ShortcutView::SHORTCUT_EDIT) {
|
|
GraphicService::GetInstance()->PostGraphicEvent(
|
|
[]() { TjdUiEditShortcutPresenter::GetInstance()->ViewExitEvent(); });
|
|
}
|
|
GraphicService::GetInstance()->PostGraphicEvent([=]() {
|
|
TjdUiAppMainPageShortcut::GetInstance()->ReturnToTop();
|
|
TjdUiAppMainPageShortcut::GetInstance()->ClearFocus();
|
|
view_->SwitchToClockPage();
|
|
view_->ReloadVer();
|
|
});
|
|
} else if (verCardId == TjdVerCardId::TJD_VER_CARD_MESSAGE) {
|
|
GraphicService::GetInstance()->PostGraphicEvent([=]() { view_->SwitchToClockPage(); });
|
|
}
|
|
}
|
|
|
|
void TjdUiAppMainPresenter::DispatchWatchFaceClickEvent(uint16_t srcKeyId)
|
|
{
|
|
OHOS::ZliteKeyCode keyId = static_cast<ZliteKeyCode>(srcKeyId);
|
|
|
|
if (view_->IsShowFloatWindow()) {
|
|
GraphicService::GetInstance()->PostGraphicEvent([=]() { view_->HideFloatWindow(); });
|
|
return;
|
|
}
|
|
|
|
switch (keyId) {
|
|
case ZliteKeyCode::ZLITE_KEY_TJD_RIGHTUP: {
|
|
OHOS::NativeAbility::GetInstance().ChangeSlice(TJD_APP_VIEW_LIST, TransitionType::TJD_TRANSITION_ZOOM);
|
|
} break;
|
|
case ZliteKeyCode::ZLITE_KEY_TJD_LEFT: {
|
|
uint16_t sliceId = (uint16_t)sql_setting_get_switch_downkey_app();
|
|
if (TJD_APP_VIEW_INVALID != sliceId) {
|
|
OHOS::NativeAbility::GetInstance().ChangeSlice(sliceId, TransitionType::TJD_TRANSITION_ZOOM);
|
|
}
|
|
} break;
|
|
case ZliteKeyCode::ZLITE_KEY_TJD_RIGHTDOWN: {
|
|
GraphicService::GetInstance()->PostGraphicEvent([=]() { view_->ShowFloatWindow(); });
|
|
} break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
bool TjdUiAppMainPresenter::OnKeyClickAct(OHOS::UIView &view, const OHOS::KeyEvent &event)
|
|
{
|
|
UNUSED(view);
|
|
OHOS::ZliteKeyCode keyId = (ZliteKeyCode)event.GetKeyId();
|
|
TjdCardId cardId = view_->GetHorCurrentCard();
|
|
TjdVerCardId verCardId = view_->GetVerCurrentCard();
|
|
if (verCardId != TjdVerCardId::TJD_VER_CARD_WATCH_FACE) {
|
|
if (keyId != ZliteKeyCode::ZLITE_KEY_TJD_RIGHTUP) {
|
|
return true;
|
|
}
|
|
DispatchUpDownViewClickEvent(verCardId);
|
|
return true;
|
|
}
|
|
|
|
//位于表盘界面没有被上下界面覆盖
|
|
if (cardId == TjdCardId::TJD_CARD_WATCH_FACE) {
|
|
DispatchWatchFaceClickEvent(static_cast<uint16_t>(keyId));
|
|
return true;
|
|
}
|
|
|
|
// 没有位于主表盘界面且也不是在上下拉页面
|
|
if (keyId == ZliteKeyCode::ZLITE_KEY_TJD_RIGHTUP) {
|
|
view_->SwitchToClockPage();
|
|
} else if (keyId == ZliteKeyCode::ZLITE_KEY_TJD_LEFT) {
|
|
uint16_t sliceId = (uint16_t)sql_setting_get_switch_downkey_app();
|
|
if (TJD_APP_VIEW_INVALID == sliceId) {
|
|
sliceId = TJD_APP_VIEW_SPORT;
|
|
}
|
|
OHOS::NativeAbility::GetInstance().ChangeSlice(sliceId, TransitionType::TJD_TRANSITION_ZOOM);
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
bool TjdUiAppMainPresenter::OnKeyDoubleClickAct(OHOS::UIView &view, const OHOS::KeyEvent &event)
|
|
{
|
|
UNUSED(event);
|
|
UNUSED(view);
|
|
TjdVerCardId verCardId = view_->GetVerCurrentCard();
|
|
if (view_->IsShowFloatWindow()) {
|
|
view_->HideFloatWindow();
|
|
return true;
|
|
}
|
|
if (verCardId == TjdVerCardId::TJD_VER_CARD_MESSAGE || verCardId == TjdVerCardId::TJD_VER_CARD_SHORTCUT) {
|
|
return true;
|
|
}
|
|
GraphicService::GetInstance()->PostGraphicEvent([]() {
|
|
OHOS::NativeAbility::GetInstance().ChangeSlice(TJD_APP_VIEW_DOCK, TransitionType::TJD_TRANSITION_ZOOM);
|
|
});
|
|
return true;
|
|
}
|
|
|
|
void TjdUiAppMainPresenter::SetTaskPeroid(TjdCardId cardId)
|
|
{
|
|
SetLastRun(0); // refresh entering card in time
|
|
if (cardId == TjdCardId::TJD_CARD_FAVORITE) {
|
|
SetPeriod(DEFAULT_TASK_PERIOD);
|
|
} else if (cardId == TjdCardId::TJD_CARD_WATCH_FACE) {
|
|
uint32_t time;
|
|
// OHOS::DialSetting &setting = GetDialSetting();
|
|
// if (setting.dialFlag) {
|
|
// time = dynamic_cast<DialViewGroup*>(view_->GetViewById(WATCH_FACE))->GetPeriod();
|
|
// } else {
|
|
time = MAX_PERIOD;
|
|
// }
|
|
SetPeriod(time);
|
|
} else if (cardId == TjdCardId::TJD_CARD_MUSIC) {
|
|
SetPeriod(500);
|
|
} else {
|
|
SetPeriod(MAX_PERIOD);
|
|
}
|
|
}
|
|
|
|
bool TjdUiAppMainPresenter::IsFromComponentsView(void) const
|
|
{
|
|
return TjdUiAppMainModel::GetInstance().IsFromComponentsView();
|
|
}
|
|
|
|
void TjdUiAppMainPresenter::SetFromComponentsView(bool isFrom)
|
|
{
|
|
TjdUiAppMainModel::GetInstance().SetFromComponentsView(isFrom);
|
|
}
|
|
|
|
uint8_t TjdUiAppMainPresenter::GetFromComponentsCardId(void)
|
|
{
|
|
return TjdUiAppMainModel::GetInstance().GetFromComponentsCardId();
|
|
}
|
|
|
|
void TjdUiAppMainPresenter::OnStateChange(OHOS::UIView &view, TjdUiFloatWindowBlend::FloatWindowState state)
|
|
{
|
|
if (state == TjdUiFloatWindowBlend::FloatWindowState::FLOAT_WINDOW_HIDDEN) {
|
|
view_->SwitchToCard(view_->GetHorCurrentCard());
|
|
} else {
|
|
OHOS::UICardPage *card = view_->GetViewById(view_->GetHorCurrentCard());
|
|
if (card != nullptr) {
|
|
card->OnInactive();
|
|
}
|
|
}
|
|
}
|
|
|
|
const std::vector<TjdCardId> &TjdUiAppMainPresenter::GetCardSettings(void)
|
|
{
|
|
return TjdUiAppMainModel::GetInstance().GetCardSettings();
|
|
}
|
|
|
|
void TjdUiAppMainPresenter::Notify(void)
|
|
{
|
|
TjdCardId horPageId = view_->GetHorCurrentCard();
|
|
if (horPageId == TjdCardId::TJD_CARD_WATCH_FACE) {
|
|
TjdVerCardId verPageId = view_->GetVerCurrentCard();
|
|
auto *pTempWfBase = dynamic_cast<TjdUiWfBase *>(view_->GetViewById(TJD_CARD_WATCH_FACE));
|
|
if (pTempWfBase) {
|
|
pTempWfBase->Update();
|
|
}
|
|
if (verPageId == TjdVerCardId::TJD_VER_CARD_SHORTCUT) {
|
|
TjdUiAppMainPageShortcut::GetInstance()->UpdateView();
|
|
}
|
|
}
|
|
if (horPageId == TjdCardId::TJD_CARD_FAVORITE) {
|
|
auto *tmpView = dynamic_cast<TjdUiAppMainPageFavorite *>(view_->GetViewById(TJD_CARD_FAVORITE));
|
|
if (tmpView) {
|
|
tmpView->FavoriteClockTick();
|
|
}
|
|
} else if (horPageId == TjdCardId::TJD_CARD_HEALTH) {
|
|
auto *tmpView = dynamic_cast<TjdUiAppMainPageHealth *>(view_->GetViewById(TJD_CARD_FAVORITE));
|
|
if (tmpView) {
|
|
tmpView->NotifyTick();
|
|
}
|
|
} else if (horPageId == TjdCardId::TJD_CARD_MAKE_FRIEND) {
|
|
auto *tmpView = dynamic_cast<TjdUiAppMainPageMakeFriend *>(view_->GetViewById(TJD_CARD_FAVORITE));
|
|
if (tmpView) {
|
|
tmpView->NotifyTick();
|
|
}
|
|
} else if (horPageId == TjdCardId::TJD_CARD_MUSIC) {
|
|
auto *tmpView = dynamic_cast<TjdUiAppMainPageMusic *>(view_->GetViewById(TJD_CARD_FAVORITE));
|
|
if (tmpView) {
|
|
tmpView->NotifyTick();
|
|
}
|
|
}
|
|
}
|
|
|
|
} // namespace TJD
|