224 lines
7.6 KiB
C++
224 lines
7.6 KiB
C++
#include "TjdUiAppChargerPresenter.h"
|
|
#include "NativeAbility.h"
|
|
#include "TjdUiAppChargerModel.h"
|
|
#include "TjdUiAppChargerView.h"
|
|
#include "TjdUiMsgCenter.h"
|
|
#include "animator/easing_equation.h"
|
|
#include "broadcast_feature.h"
|
|
#include "common_pm.h"
|
|
#include "dock/input_device.h"
|
|
#include "draw/clip_img.h"
|
|
#include "graphic_service.h"
|
|
#include "notification_manager.h"
|
|
#include "sys_config.h"
|
|
|
|
namespace TJD {
|
|
|
|
static constexpr uint16_t ANIMATOR_TIME = 300;
|
|
|
|
#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 ChargerTime GetChargerTime()
|
|
{
|
|
rtc_time rtcTime = TjdUiAppChargerModel::GetInstance().GetRtcTime();
|
|
ChargerTime chargerTime = {
|
|
.hour = rtcTime.tm_hour, .min = rtcTime.tm_min, .date = rtcTime.tm_mday, .week = rtcTime.tm_wday};
|
|
return chargerTime;
|
|
}
|
|
|
|
/* 判断目前gsensor方向 */
|
|
static GsensorDir GetGsensorDir(GsensorData &xyzInfo)
|
|
{
|
|
if (xyzInfo.x > 1000) {
|
|
return GsensorDir::RIGHT;
|
|
} else if (xyzInfo.x < -1000) {
|
|
return GsensorDir::LEFT;
|
|
} else if (xyzInfo.y > 1000) {
|
|
return GsensorDir::UP;
|
|
} else if (xyzInfo.y < -1000) {
|
|
return GsensorDir::DOWN;
|
|
}
|
|
return GsensorDir::NONE;
|
|
}
|
|
|
|
static bool g_isBedside_ = false;
|
|
static TjdUiAppBedSideClockView *g_bedSideClockView = nullptr;
|
|
static ChargerMeassageView *g_messageChargerView = nullptr;
|
|
|
|
void ChargerExitAnimatorCallback::Callback(OHOS::UIView *view)
|
|
{
|
|
curTime_ += 25;
|
|
if (g_messageChargerView != nullptr) {
|
|
g_messageChargerView->SetOpa(OHOS::EasingEquation::LinearEaseNone(
|
|
direction_ ? OHOS::OPA_TRANSPARENT : OHOS::OPA_OPAQUE,
|
|
direction_ ? OHOS::OPA_OPAQUE : OHOS::OPA_TRANSPARENT, curTime_, animator_->GetTime()));
|
|
}
|
|
if (curTime_ >= animator_->GetTime()) {
|
|
animator_->Stop();
|
|
}
|
|
}
|
|
|
|
void ChargerExitAnimatorCallback::OnStop(OHOS::UIView &view)
|
|
{
|
|
curTime_ = 0;
|
|
if (direction_ == false) {
|
|
if (TjdUiAppChargerPresenter::GetInstance() != nullptr) {
|
|
TjdUiAppChargerPresenter::GetInstance()->ViewExitEvent(false);
|
|
}
|
|
}
|
|
}
|
|
|
|
static TjdUiAppChargerPresenter *g_appChargerPresenter = nullptr;
|
|
TjdUiAppChargerPresenter::TjdUiAppChargerPresenter()
|
|
{
|
|
g_appChargerPresenter = this;
|
|
SetPeriod(500);
|
|
}
|
|
|
|
TjdUiAppChargerPresenter::~TjdUiAppChargerPresenter() { g_appChargerPresenter = nullptr; }
|
|
|
|
TjdUiAppChargerPresenter *TjdUiAppChargerPresenter::GetInstance(void) { return g_appChargerPresenter; }
|
|
|
|
static void ScreenStatusNotify(screen_status_t status)
|
|
{
|
|
if (g_bedSideClockView == nullptr && g_messageChargerView == nullptr) {
|
|
return;
|
|
}
|
|
TjdUiAppChargerPresenter *presenter = TjdUiAppChargerPresenter::GetInstance();
|
|
if (presenter == nullptr) {
|
|
return;
|
|
}
|
|
if (status == screen_status_t::PM_STATUS_OFF) {
|
|
// presenter->StopTimer();
|
|
} else if (status == screen_status_t::PM_STATUS_ON) {
|
|
// presenter->StartTimer();
|
|
}
|
|
}
|
|
|
|
static void DeleteChargerView()
|
|
{
|
|
OHOS::NotificationManager::GetInstance()->SetNotifyPriority(TJD_UI_PRIO_LOWEST);
|
|
TjdUiCommonOnKeyListener::GetInstance()->ClearOnKeyActListener(KeyModelType::SYS_KEY_TYPE);
|
|
tjd_driver_common_pm_get_ops()->unregister_screen_on_event(ScreenStatusNotify);
|
|
|
|
delete g_appChargerPresenter;
|
|
if (g_isBedside_) {
|
|
OHOS::RootView::GetInstance()->Remove(g_bedSideClockView);
|
|
delete g_bedSideClockView;
|
|
g_bedSideClockView = nullptr;
|
|
} else {
|
|
OHOS::RootView::GetInstance()->Remove(g_messageChargerView);
|
|
delete g_messageChargerView;
|
|
g_messageChargerView = nullptr;
|
|
}
|
|
RunPopOutPageCallback();
|
|
}
|
|
|
|
static OHOS::UIViewGroup *ShowChargerView()
|
|
{
|
|
static_print_debug("TjdUiChargerMsgCenterMessageProc");
|
|
g_isBedside_ = TjdUiAppChargerModel::GetInstance().IsShowBedSideClockView();
|
|
int8_t power = TjdUiAppChargerModel::GetInstance().GetChargerValue();
|
|
/* 注册析构函数 */
|
|
OHOS::NotificationManager::GetInstance()->RegisterNotifyCleanupFunction(DeleteChargerView);
|
|
|
|
g_appChargerPresenter = new TjdUiAppChargerPresenter();
|
|
TjdUiCommonOnKeyListener::GetInstance()->SetOnKeyActListener(g_appChargerPresenter, KeyModelType::SYS_KEY_TYPE);
|
|
tjd_driver_common_pm_get_ops()->register_screen_on_event(ScreenStatusNotify);
|
|
|
|
if (g_isBedside_) {
|
|
if (g_bedSideClockView == nullptr) {
|
|
ChargerTime time = GetChargerTime();
|
|
g_bedSideClockView = new TjdUiAppBedSideClockView(power, time);
|
|
g_bedSideClockView->SetPosition(0, 0);
|
|
g_bedSideClockView->SetRotateView(GetGsensorDir(TjdUiAppChargerModel::GetInstance().GetGsensorInfo()));
|
|
}
|
|
// g_appChargerPresenter->StartTimer();
|
|
return g_bedSideClockView;
|
|
} else {
|
|
if (g_messageChargerView == nullptr) {
|
|
g_messageChargerView = new ChargerMeassageView(power);
|
|
g_messageChargerView->SetPosition(0, 0);
|
|
g_messageChargerView->SetTouchable(true);
|
|
g_messageChargerView->SetDraggable(true);
|
|
}
|
|
g_messageChargerView->StartAnimator(true);
|
|
// g_appChargerPresenter->StartTimer();
|
|
return g_messageChargerView;
|
|
}
|
|
}
|
|
|
|
void TjdUiChargerMsgCenterMessageProc(const Topic topic, Request *req)
|
|
{
|
|
bool show = *(bool *)req->data;
|
|
if (show) {
|
|
if (OHOS::NativeAbility::GetInstance().GetCurSliceId() == TJD_APP_BATTERY_SAVER) {
|
|
return;
|
|
}
|
|
OHOS::NotificationManager::GetInstance()->SetNotifyPriority(TjdUiMsgCenterGetPriority(topic));
|
|
OHOS::NotificationManager::GetInstance()->ShowNotify(ShowChargerView, static_cast<uint16_t>(topic), true);
|
|
return;
|
|
}
|
|
|
|
/* 取消充电页面 */
|
|
if (g_isBedside_) {
|
|
GraphicService::GetInstance()->PostGraphicEvent([]() {
|
|
if (g_bedSideClockView != nullptr && TjdUiAppChargerPresenter::GetInstance() != nullptr) {
|
|
TjdUiAppChargerPresenter::GetInstance()->ViewExitEvent(false);
|
|
}
|
|
});
|
|
} else {
|
|
if (g_messageChargerView != nullptr) {
|
|
GraphicService::GetInstance()->PostGraphicEvent([]() {
|
|
g_messageChargerView->SetChargeHide();
|
|
g_messageChargerView->StartAnimator(false);
|
|
});
|
|
}
|
|
}
|
|
}
|
|
|
|
bool TjdUiAppChargerPresenter::OnKeyAct(OHOS::UIView &view, const OHOS::KeyEvent &event)
|
|
{
|
|
if (!TjdUiCommonOnKeyListener::CheckIsExitEvent(event)) {
|
|
return true;
|
|
}
|
|
if (g_isBedside_) {
|
|
ViewExitEvent(false);
|
|
} else {
|
|
g_messageChargerView->SetChargeHide();
|
|
g_messageChargerView->StartAnimator(false);
|
|
}
|
|
return true;
|
|
}
|
|
|
|
void TjdUiAppChargerPresenter::ViewExitEvent(bool isSwipe) { OHOS::NotificationManager::GetInstance()->StopNotify(); }
|
|
|
|
void TjdUiAppChargerPresenter::Notify(void)
|
|
{
|
|
int8_t battery = TjdUiAppChargerModel::GetInstance().GetChargerValue();
|
|
if (g_isBedside_) {
|
|
GsensorDir dir = GetGsensorDir(TjdUiAppChargerModel::GetInstance().GetGsensorInfo());
|
|
if (g_bedSideClockView != nullptr) {
|
|
g_bedSideClockView->SetValue(battery);
|
|
g_bedSideClockView->SetRotateView(dir);
|
|
}
|
|
} else {
|
|
if (g_messageChargerView != nullptr) {
|
|
g_messageChargerView->SetValue(battery);
|
|
}
|
|
}
|
|
}
|
|
|
|
} // namespace TJD
|