mcu_hi3321_watch/tjd/ui/app/main/TjdUiAppMainPageShortCut.cpp
2025-05-31 10:45:15 +08:00

887 lines
38 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*----------------------------------------------------------------------------
* Copyright (c) TJD Technologies Co., Ltd. 2024. All rights reserved.
*
* Description:
*
* Author: huangshuyi
*
* Create: 2024-4
*--------------------------------------------------------------------------*/
#include "TjdUiAppMainPageShortCut.h"
#include "TjdUiAppAlipayModel.h"
#include "TjdUiAppLockScreenPresenter.h"
#include "TjdUiAppMainPresenter.h"
#include "TjdUiAppMainView.h"
#include "TjdUiAppSettingNormalListModel.h"
#include "TjdUiAppSettingView.h"
#include "TjdUiEditShortcutPresenter.h"
#include "TjdUiImageIds.h"
#include "TjdUiMemManage.h"
#include "TjdUiMultiLanguageExt.h"
#include "TjdUiScreenEvent.h"
#include "TjdUiScreenManage.h"
#include "ble_api.h"
#include "common/image_cache_manager.h"
#include "rtc_api.h"
#include "service_charger.h"
#include "sql_fit.h"
#include "sql_setting.h"
#include "sys_config.h"
#include "ui_screennotify.h"
#include <sstream>
using namespace OHOS;
namespace TJD {
#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
#define IMAGE_BIN_PATH TJD_IMAGE_PATH "img_main_shortcut.bin"
#define BATTERY_IMAGE_BIN_PATH TJD_IMAGE_PATH "img_battery.bin"
static TjdUiAppMainPageShortcut *g_pMainShortcutPage = nullptr;
static const char *week_ch[] = {"周日", "周一", "周二", "周三", "周四", "周五", "周六"};
static const char *week_en[] = {"Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"};
static uint8_t screenSetFlag = 0; // 0 disable 1 enable
// #define SHORTCUT_EDIT_INDEX 0
// #define SHORTCUT_BUSINESS_CARD_INDEX 1
// #define SHORTCUT_LOCK_SCREEN_INDEX 2
// #define SHORTCUT_ALIPAY_INDEX 3
// #define SHORTCUT_NOT_DISTURB_INDEX 4
// #define SHORTCUT_POWER_SAVE_INDEX 5
// #define SHORTCUT_CARD_PACKET_INDEX 6
// #define SHORTCUT_FIND_PHONE_INDEX 7
// #define SHORTCUT_SCREEN_SET_INDEX 8
// #define SHORTCUT_WATER_INDEX 9
// #define SHORTCUT_MENU_STYLE_INDEX 10
// #define SHORTCUT_CLOCK_INDEX 11
// #define SHORTCUT_SYSTEM_SET_INDEX 12
// #define SHORTCUT_BLUETOOTH_INDEX 13
// #define SHORTCUT_BRIGHTNESS_SET_INDEX 14
// #define SHORTCUT_FLASHLIGHT_INDEX 15
std::list<uint8_t> TjdUiAppMainPageShortcut::shortcutList = {
TjdUiAppMainPageShortcut::SHORTCUT_BRIGHT_SCREEN_INDEX, TjdUiAppMainPageShortcut::SHORTCUT_BUSINESS_CARD_INDEX,
TjdUiAppMainPageShortcut::SHORTCUT_ALIPAY_INDEX, TjdUiAppMainPageShortcut::SHORTCUT_CARD_PACKET_INDEX,
TjdUiAppMainPageShortcut::SHORTCUT_FIND_PHONE_INDEX, TjdUiAppMainPageShortcut::SHORTCUT_SCREEN_SET_INDEX,
TjdUiAppMainPageShortcut::SHORTCUT_WATER_INDEX, TjdUiAppMainPageShortcut::SHORTCUT_MENU_STYLE_INDEX,
TjdUiAppMainPageShortcut::SHORTCUT_CLOCK_INDEX, TjdUiAppMainPageShortcut::SHORTCUT_SYSTEM_SET_INDEX,
TjdUiAppMainPageShortcut::SHORTCUT_BLUETOOTH_INDEX, TjdUiAppMainPageShortcut::SHORTCUT_BRIGHTNESS_SET_INDEX,
TjdUiAppMainPageShortcut::SHORTCUT_FLASHLIGHT_INDEX,
};
std::list<uint8_t> TjdUiAppMainPageShortcut::shortcutAddList_ = {
TjdUiAppMainPageShortcut::SHORTCUT_LOCK_SCREEN_INDEX,
TjdUiAppMainPageShortcut::SHORTCUT_NOT_DISTURB_INDEX,
TjdUiAppMainPageShortcut::SHORTCUT_POWER_SAVE_INDEX,
};
ShortcutView TjdUiAppMainPageShortcut::currentViewIndex_ = SHORTCUT_NORMAL;
TjdUiAppMainPageShortcut::ShortcutItem TjdUiAppMainPageShortcut::shortcutItems[] = {
{STR_ID_494, TjdUiAppMainPageShortcut::SHORTCUT_BRIGHT_SCREEN_INDEX, IMG_MAIN_SHORTCUT_BRIGHT_SCREEN_OPEN,
IMG_MAIN_SHORTCUT_BRIGHT_SCREEN_CLOSE}, //抬腕亮屏
{STR_ID_22, TjdUiAppMainPageShortcut::SHORTCUT_BUSINESS_CARD_INDEX, IMG_MAIN_SHORTCUT_BUSSINE_CARD_CLOSE,
IMG_MAIN_SHORTCUT_BUSSINE_CARD_CLOSE}, //名片
{STR_ID_588, TjdUiAppMainPageShortcut::SHORTCUT_LOCK_SCREEN_INDEX, IMG_MAIN_SHORTCUT_LOCK_SCREEN_CLOSE,
IMG_MAIN_SHORTCUT_LOCK_SCREEN_CLOSE}, //锁屏
{STR_ID_32, TjdUiAppMainPageShortcut::SHORTCUT_ALIPAY_INDEX, IMG_MAIN_SHORTCUT_ALIPAY_CLOSE,
IMG_MAIN_SHORTCUT_ALIPAY_CLOSE}, //支付宝
{STR_ID_420, TjdUiAppMainPageShortcut::SHORTCUT_NOT_DISTURB_INDEX, IMG_MAIN_SHORTCUT_NOT_DISTURB_OPEN,
IMG_MAIN_SHORTCUT_NOT_DISTURB_CLOSE}, //勿扰模式
{STR_ID_421, TjdUiAppMainPageShortcut::SHORTCUT_POWER_SAVE_INDEX, IMG_MAIN_SHORTCUT_POWER_SAVE_CLOSE,
IMG_MAIN_SHORTCUT_POWER_SAVE_CLOSE}, //省电模式
{STR_ID_23, TjdUiAppMainPageShortcut::SHORTCUT_CARD_PACKET_INDEX, IMG_MAIN_SHORTCUT_CARD_PACKET_CLOSE,
IMG_MAIN_SHORTCUT_CARD_PACKET_CLOSE}, //卡包
{STR_ID_587, TjdUiAppMainPageShortcut::SHORTCUT_FIND_PHONE_INDEX, IMG_MAIN_SHORTCUT_FIND_PHONE_CLOSE,
IMG_MAIN_SHORTCUT_FIND_PHONE_CLOSE}, //查找手机
{STR_ID_586, TjdUiAppMainPageShortcut::SHORTCUT_SCREEN_SET_INDEX, IMG_MAIN_SHORTCUT_SCREEN_SET_OPEN,
IMG_MAIN_SHORTCUT_SCREEN_SET_CLOSE}, //常亮设置
{STR_ID_585, TjdUiAppMainPageShortcut::SHORTCUT_WATER_INDEX, IMG_MAIN_SHORTCUT_WATER_CLOSE,
IMG_MAIN_SHORTCUT_WATER_CLOSE}, //排水
{STR_ID_584, TjdUiAppMainPageShortcut::SHORTCUT_MENU_STYLE_INDEX, IMG_MAIN_SHORTCUT_MENU_STYLE_CLOSE,
IMG_MAIN_SHORTCUT_MENU_STYLE_CLOSE}, //菜单风格
{STR_ID_491, TjdUiAppMainPageShortcut::SHORTCUT_CLOCK_INDEX, IMG_MAIN_SHORTCUT_CLOCK_OPEN,
IMG_MAIN_SHORTCUT_CLOCK_CLOSE}, //床头钟
{STR_ID_28, TjdUiAppMainPageShortcut::SHORTCUT_SYSTEM_SET_INDEX, IMG_MAIN_SHORTCUT_SYSTEM_SET_CLOSE,
IMG_MAIN_SHORTCUT_SYSTEM_SET_CLOSE}, //系统设置
{STR_ID_416, TjdUiAppMainPageShortcut::SHORTCUT_BLUETOOTH_INDEX, IMG_MAIN_SHORTCUT_BT_OPEN_NOT_CONNECT,
IMG_MAIN_SHORTCUT_BT_CLOSE}, //蓝牙
{STR_ID_486, TjdUiAppMainPageShortcut::SHORTCUT_BRIGHTNESS_SET_INDEX, IMG_MAIN_SHORTCUT_BRIGHTNESS_SET_CLOSE,
IMG_MAIN_SHORTCUT_BRIGHTNESS_SET_CLOSE}, //亮度
{STR_ID_583, TjdUiAppMainPageShortcut::SHORTCUT_FLASHLIGHT_INDEX, IMG_MAIN_SHORTCUT_FLASHLIGHT_CLOSE,
IMG_MAIN_SHORTCUT_FLASHLIGHT_CLOSE}, //闪光灯
{STR_ID_69, TjdUiAppMainPageShortcut::SHORTCUT_EDIT_INDEX, IMG_MAIN_SHORTCUT_EDIT_BG,
IMG_MAIN_SHORTCUT_EDIT_BG}, //编辑
};
TjdUiAppMainPageShortcut::TjdUiAppMainPageShortcut()
{
SetPosition(0, 0, HORIZONTAL_RESOLUTION, VERTICAL_RESOLUTION);
g_pMainShortcutPage = this;
}
TjdUiAppMainPageShortcut::~TjdUiAppMainPageShortcut()
{
UnLoad();
g_pMainShortcutPage = nullptr;
}
TjdUiAppMainPageShortcut *TjdUiAppMainPageShortcut::GetInstance(void) { return g_pMainShortcutPage; }
std::list<uint8_t> &TjdUiAppMainPageShortcut::GetShortcutList(void) { return shortcutList; }
TjdUiAppMainPageShortcut::ShortcutItem *TjdUiAppMainPageShortcut::GetShortcutItems(void) { return shortcutItems; }
uint8_t TjdUiAppMainPageShortcut::GetShortcutItemsCnt(void) { return sizeof(shortcutItems) / sizeof(shortcutItems[0]); }
static void GraphicTimerCallback(void *param)
{
GraphicService::GetInstance()->PostGraphicEvent([] {
if (g_pMainShortcutPage) {
if (g_pMainShortcutPage->screenTipViewGroup_) {
OHOS::RootView::GetInstance()->RemoveSystemView(g_pMainShortcutPage->screenTipViewGroup_);
TjdUiMemManage::DeleteChildren(g_pMainShortcutPage->screenTipViewGroup_);
}
g_pMainShortcutPage->screenTipViewGroup_ = nullptr;
}
});
}
void TjdUiAppMainPageShortcut::DisplayScreenTips(uint8_t status, uint8_t min)
{
if (screenTipViewGroup_) {
OHOS::RootView::GetInstance()->RemoveSystemView(screenTipViewGroup_);
TjdUiMemManage::DeleteChildren(screenTipViewGroup_);
screenTipViewGroup_ = nullptr;
}
screenTipViewGroup_ = new UIViewGroup();
OHOS::RootView::GetInstance()->AddSystemView(screenTipViewGroup_);
screenTipViewGroup_->SetStyle(STYLE_BORDER_RADIUS, 55);
screenTipViewGroup_->SetStyle(STYLE_BACKGROUND_COLOR, 0xff646464);
screenTipViewGroup_->SetStyle(STYLE_BACKGROUND_OPA, OPA_OPAQUE * 0.9);
screenTipViewGroup_->SetWidth(320);
screenTipViewGroup_->SetHeight(110);
screenTipViewGroup_->LayoutCenterOfParent(0, 0);
UILabelExt *labelNotify = new UILabelExt();
screenTipViewGroup_->Add(labelNotify);
labelNotify->SetFont(TJD_VECTOR_FONT_FILENAME, TJD_FONT_SIZE_34);
labelNotify->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
char text[60];
if (status == 0) {
labelNotify->SetText("常亮已关闭");
} else {
std::string text = "屏幕将常亮" + std::to_string(min) + "分钟";
labelNotify->SetText(text.c_str()); // 使用格式化后的字符串
}
labelNotify->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);
labelNotify->LayoutCenterOfParent();
if (timerToReturn_ == nullptr) {
timerToReturn_ = new OHOS::GraphicTimer(2000, GraphicTimerCallback, nullptr, false);
timerToReturn_->Start();
} else {
timerToReturn_->Start();
}
}
void TjdUiAppMainPageShortcut::PreLoad(void)
{
static_print_debug("TjdUiAppMainPageShortcut::PreLoad");
if (!viewiInitStatus) {
InitView();
viewiInitStatus = true;
}
}
void TjdUiAppMainPageShortcut::ScrollBegin(bool isActive)
{
//为1时是正处于快捷栏页面为0时是没有处于快捷栏页面
if (isActive == 1) {
scrollCont->ClearFocus();
}
}
void TjdUiAppMainPageShortcut::ScrollEnd(bool isActive)
{
// isActive:滑动结束后先前在前台显示的界面被替换后上抛0新移入的界面上抛1
//为0的时候是该界面已经完全移出为1的时候是该界面已经完全移入
if (isActive == 1) {
scrollCont->RequestFocus();
}
}
void TjdUiAppMainPageShortcut::ReturnToTop(void)
{
if (scrollCont == nullptr) {
return;
}
scrollCont->SetReboundSize(0);
auto viewGroup = dynamic_cast<OHOS::UIViewGroup *>(scrollCont->GetChildrenTail());
if (viewGroup != nullptr) {
scrollCont->ScrollBy(0, -viewGroup->GetRect().GetBottom());
}
scrollCont->SetReboundSize(Screen::GetInstance().GetHeight() >> 1);
}
void TjdUiAppMainPageShortcut::ClearFocus()
{
if (scrollCont == nullptr) {
return;
}
scrollCont->ClearFocus();
}
void TjdUiAppMainPageShortcut::DeleteContainer(void)
{
if (container) {
this->Remove(container);
TjdUiMemManage::DeleteChildren(container);
}
}
void TjdUiAppMainPageShortcut::SetEditShortcutViewVisible(bool isVisible)
{
if (scrollCont == nullptr)
return;
scrollCont->SetVisible(isVisible);
}
void TjdUiAppMainPageShortcut::UnLoad(void)
{
if (viewiInitStatus) {
ImageCacheManager::GetInstance().UnloadAllInMultiRes(IMAGE_BIN_PATH);
ImageCacheManager::GetInstance().UnloadAllInMultiRes(BATTERY_IMAGE_BIN_PATH);
viewiInitStatus = false;
if (g_pMainShortcutPage->screenTipViewGroup_) {
OHOS::RootView::GetInstance()->RemoveSystemView(g_pMainShortcutPage->screenTipViewGroup_);
TjdUiMemManage::DeleteChildren(g_pMainShortcutPage->screenTipViewGroup_);
screenTipViewGroup_ = nullptr;
}
TjdUiMemManage::DeleteChildren(container);
if (timerToReturn_) {
delete timerToReturn_;
timerToReturn_ = nullptr;
}
}
// printf("TjdUiAppMainPageShortcut::UnLoad:%d..............\n");
// Main clock view is commonly used page, so we do not release it's resources inner slice.
}
static void ShortcuScreenStatusNotifyCallback(ScreenStatus status)
{
if (status != SCREEN_STATUS_OFF) {
return;
}
GraphicService::GetInstance()->PostGraphicEvent([]() {
if (TjdUiAppMainPageShortcut::GetInstance()) {
TjdUiAppMainPageShortcut::GetInstance()->ResetKeepScreenIcon();
}
TjdUiScreenManage::SetScreenOnSystime();
deregisterNotifyScreenStatus(ShortcuScreenStatusNotifyCallback);
});
}
bool TjdUiAppMainPageShortcut::OnClick(UIView &view, const ClickEvent &event)
{
uint8_t vieIndex = view.GetViewIndex();
ImageInfo *imgInfo;
if (vieIndex == SHORTCUT_MENU_STYLE_INDEX) {
TjdUiAppSettingNormalListModel::GetInstance().SetListType(
TjdUiAppSettingNormalListModel::SettingListType::SETTING_LIST_TYPE_MENU_STYLE);
OHOS::NativeAbility::GetInstance().ChangeSlice(TJD_APP_VIEW_SETTING_NORMAL_LIST,
OHOS::TransitionType::TRANSITION_INVALID,
OHOS::gSliceDefaultPriority, true);
} else if (vieIndex == SHORTCUT_SYSTEM_SET_INDEX) {
OHOS::NativeAbility::GetInstance().ChangeSlice(TJD_APP_VIEW_SETTING, OHOS::TransitionType::TRANSITION_INVALID,
OHOS::gSliceDefaultPriority, true);
} else if (vieIndex == SHORTCUT_BRIGHT_SCREEN_INDEX) {
uint8_t isBright = sql_fit_get_switch_bright_screen();
if (!isBright) {
imgInfo = ImageCacheManager::GetInstance().LoadOneInMultiRes(
shortcutItems[FindArrayIndex(SHORTCUT_BRIGHT_SCREEN_INDEX)].iconOpenId, IMAGE_BIN_PATH);
} else {
imgInfo = ImageCacheManager::GetInstance().LoadOneInMultiRes(
shortcutItems[FindArrayIndex(SHORTCUT_BRIGHT_SCREEN_INDEX)].iconCloseId, IMAGE_BIN_PATH);
}
imgBrightScreen_->SetSrc(imgInfo);
sql_fit_set_switch_bright_screen(!isBright);
} else if (vieIndex == SHORTCUT_WATER_INDEX) {
NativeAbility::GetInstance().ChangeSlice(TJD_APP_VIEW_DRAIN);
} else if (vieIndex == SHORTCUT_BUSINESS_CARD_INDEX) {
NativeAbility::GetInstance().ChangeSlice(TJD_APP_VIEW_BUSINESSCARD);
} else if (vieIndex == SHORTCUT_CARD_PACKET_INDEX) {
NativeAbility::GetInstance().ChangeSlice(TJD_APP_VIEW_WALLET);
} else if (vieIndex == SHORTCUT_BRIGHTNESS_SET_INDEX) {
OHOS::NativeAbility::GetInstance().ChangeSlice(TJD_APP_VIEW_SETTING_DISPLAY_AND_BRIGHTNESS,
OHOS::TransitionType::TRANSITION_INVALID,
OHOS::gSliceDefaultPriority, true);
} else if (vieIndex == SHORTCUT_POWER_SAVE_INDEX) {
OHOS::NativeAbility::GetInstance().ChangeSlice(TJD_APP_VIEW_SETTING_POWER_SAVING,
OHOS::TransitionType::TRANSITION_INVALID,
OHOS::gSliceDefaultPriority, true);
} else if (vieIndex == SHORTCUT_NOT_DISTURB_INDEX) {
OHOS::NativeAbility::GetInstance().ChangeSlice(TJD_APP_VIEW_SETTING_DO_NOT_DISTURB,
OHOS::TransitionType::TRANSITION_INVALID,
OHOS::gSliceDefaultPriority, true);
} else if (vieIndex == SHORTCUT_LOCK_SCREEN_INDEX) {
// NativeAbility::GetInstance().ChangeSlice(TJD_APP_VIEW_LOCKSCREEN);
TjdUiAppMainView::GetInstance()->SwitchToClockPage();
SetLockScreenEnable(true);
ShowLockScreenView();
} else if (vieIndex == SHORTCUT_FIND_PHONE_INDEX) {
NativeAbility::GetInstance().ChangeSlice(TJD_APP_VIEW_FINDPHONE);
} else if (vieIndex == SHORTCUT_FLASHLIGHT_INDEX) {
NativeAbility::GetInstance().ChangeSlice(TJD_APP_VIEW_FLASHLIGHT);
} else if (vieIndex == SHORTCUT_EDIT_INDEX) {
// NativeAbility::GetInstance().ChangeSlice(TJD_APP_VIEW_SHORTCUT_EDIT);
ShowShortcutEditView();
} else if (vieIndex == SHORTCUT_ALIPAY_INDEX) {
TjdUiAppAlipayModel::GetInstance().SetQuickEnterFlag(true);
NativeAbility::GetInstance().ChangeSlice(TJD_APP_VIEW_ALIPAY);
} else if (vieIndex == SHORTCUT_SCREEN_SET_INDEX) {
if (screenSetFlag) {
screenSetFlag = 0;
TjdUiScreenManage::SetScreenOnSystime();
DisplayScreenTips(0, 0);
deregisterNotifyScreenStatus(ShortcuScreenStatusNotifyCallback);
} else {
uint32_t time_s = sql_setting_get_keep_screen_time();
TjdUiScreenManage::SetScreenOnSystime(time_s * 1000);
DisplayScreenTips(1, time_s / 60);
screenSetFlag = 1;
registerNotifyScreenStatus(ShortcuScreenStatusNotifyCallback);
}
if (screenSetFlag == 1) {
imgInfo = ImageCacheManager::GetInstance().LoadOneInMultiRes(
shortcutItems[FindArrayIndex(SHORTCUT_SCREEN_SET_INDEX)].iconOpenId, IMAGE_BIN_PATH);
} else {
imgInfo = ImageCacheManager::GetInstance().LoadOneInMultiRes(
shortcutItems[FindArrayIndex(SHORTCUT_SCREEN_SET_INDEX)].iconCloseId, IMAGE_BIN_PATH);
}
imgScreenSet_->SetSrc(imgInfo);
} else if (vieIndex == SHORTCUT_BLUETOOTH_INDEX) {
if (tjd_get_bt_adv_statue()) {
imgInfo = ImageCacheManager::GetInstance().LoadOneInMultiRes(
shortcutItems[FindArrayIndex(SHORTCUT_BLUETOOTH_INDEX)].iconCloseId, IMAGE_BIN_PATH);
tjd_close_bluetooth_only();
} else {
imgInfo = ImageCacheManager::GetInstance().LoadOneInMultiRes(
shortcutItems[FindArrayIndex(SHORTCUT_BLUETOOTH_INDEX)].iconOpenId, IMAGE_BIN_PATH);
tjd_open_bluetooth_only();
}
imgBt_->SetSrc(imgInfo);
} else if (vieIndex == SHORTCUT_CLOCK_INDEX) {
sql_setting_set_bedside_clock(!sql_setting_get_bedside_clock());
if (sql_setting_get_bedside_clock()) {
imgInfo = ImageCacheManager::GetInstance().LoadOneInMultiRes(
shortcutItems[FindArrayIndex(SHORTCUT_CLOCK_INDEX)].iconOpenId, IMAGE_BIN_PATH);
} else {
imgInfo = ImageCacheManager::GetInstance().LoadOneInMultiRes(
shortcutItems[FindArrayIndex(SHORTCUT_CLOCK_INDEX)].iconCloseId, IMAGE_BIN_PATH);
}
imgBedClock_->SetSrc(imgInfo);
}
return true;
}
void TjdUiAppMainPageShortcut::ResetKeepScreenIcon(void)
{
if (screenSetFlag) {
auto imgInfo = ImageCacheManager::GetInstance().LoadOneInMultiRes(
shortcutItems[FindArrayIndex(SHORTCUT_SCREEN_SET_INDEX)].iconCloseId, IMAGE_BIN_PATH);
if (imgScreenSet_) {
imgScreenSet_->SetSrc(imgInfo);
}
}
}
class TjdShortcutScrollView : public OHOS::UIScrollView
{
public:
bool scrollControl_ = false;
bool OnDragEvent(const DragEvent &event) override
{
UIView *child = GetChildrenHead();
Rect coor = child->GetRect();
Rect coor1 = GetRect();
// Rect coor = child->GetRelativeRect();
// Rect coor1 = GetRelativeRect();
bool dir = event.GetDeltaY() > 0 ? true : false; // true:向下滑动false:向上滑动
// printf("get absolution coor of viewgroup x:%d,y:%d, top:%d, bottom:%d, h:%d,name:%s\n", coor.GetX(), coor.GetY(),
// coor.GetTop(), coor.GetBottom(), coor.GetHeight(), child->GetViewId()); printf("get absolution coor of scroll
// x:%d,y:%d, top:%d, bottom:%d, h:%d,name:%s\n", coor1.GetX(), coor1.GetY(), coor1.GetTop(), coor1.GetBottom(),
// coor1.GetHeight(), GetViewId());
#if 0
if (!scrollControl_) {
if (coor1.GetY() < 0) {
return false;
} else {
UIScrollView::OnDragEvent(event);
scrollControl_ = true;
return true;
}
} else {
UIScrollView::OnDragEvent(event);
coor = child->GetRect();
if (coor.GetBottom() < Screen::GetInstance().GetHeight() - 1) {
scrollControl_ = false;
return false;
}
return true;
}
#endif
#if 1
if (dir == false) {
if ((coor.GetBottom() < Screen::GetInstance().GetHeight() - 1)) {
//返回false表示不拦截事件继续传递给父控件
return false;
}
UIScrollView::OnDragEvent(event);
//返回true表示拦截事件不继续传递给父控件,自己滚动
return true;
} else if (dir == true) {
if ((coor.GetBottom() < Screen::GetInstance().GetHeight() - 1)) {
if (coor1.GetBottom() == Screen::GetInstance().GetHeight() - 1) {
UIScrollView::OnDragEvent(event);
return true;
}
//返回false表示不拦截事件继续传递给父控件
return false;
}
//返回true表示拦截事件不继续传递给父控件,自己滚动
UIScrollView::OnDragEvent(event);
return true;
}
// UIScrollView::OnDragEvent(event);
return true;
#endif
}
private:
bool isConsumed = true;
};
void TjdUiAppMainPageShortcut::CreateShortcutItemView(UIViewGroup *viewGroup, uint8_t index, int16_t itemX,
int16_t itemY, UIView::OnClickListener *clickListener)
{
uint8_t cntItem = sizeof(shortcutItems) / sizeof(shortcutItems[0]);
uint8_t i;
for (i = 0; i < cntItem; i++) {
if (index == shortcutItems[i].index) {
break;
}
}
if (i >= cntItem) {
return;
}
ImageInfo *imgInfo;
UIImageView *img = new UIImageView();
viewGroup->Add(img);
if (index == SHORTCUT_BLUETOOTH_INDEX) {
imgBt_ = img;
if (tjd_get_bt_adv_statue()) {
if (tjd_get_bt_is_connect()) {
imgInfo = ImageCacheManager::GetInstance().LoadOneInMultiRes(IMG_MAIN_SHORTCUT_BT_OPEN_CONNECT,
IMAGE_BIN_PATH);
} else {
imgInfo = ImageCacheManager::GetInstance().LoadOneInMultiRes(
shortcutItems[FindArrayIndex(SHORTCUT_BLUETOOTH_INDEX)].iconOpenId, IMAGE_BIN_PATH);
}
} else {
imgInfo = ImageCacheManager::GetInstance().LoadOneInMultiRes(
shortcutItems[FindArrayIndex(SHORTCUT_BLUETOOTH_INDEX)].iconCloseId, IMAGE_BIN_PATH);
}
} else if (index == SHORTCUT_BRIGHT_SCREEN_INDEX) {
imgBrightScreen_ = img;
if (sql_fit_get_switch_bright_screen()) {
imgInfo = ImageCacheManager::GetInstance().LoadOneInMultiRes(shortcutItems[i].iconOpenId, IMAGE_BIN_PATH);
} else {
imgInfo = ImageCacheManager::GetInstance().LoadOneInMultiRes(shortcutItems[i].iconCloseId, IMAGE_BIN_PATH);
}
} else if (index == SHORTCUT_CLOCK_INDEX) {
imgBedClock_ = img;
if (sql_setting_get_bedside_clock()) {
imgInfo = ImageCacheManager::GetInstance().LoadOneInMultiRes(shortcutItems[i].iconOpenId, IMAGE_BIN_PATH);
} else {
imgInfo = ImageCacheManager::GetInstance().LoadOneInMultiRes(shortcutItems[i].iconCloseId, IMAGE_BIN_PATH);
}
} else if (index == SHORTCUT_NOT_DISTURB_INDEX) {
imgNotDisturb_ = img;
if (sql_setting_get_dnd_all_day()) {
imgInfo = ImageCacheManager::GetInstance().LoadOneInMultiRes(shortcutItems[i].iconOpenId, IMAGE_BIN_PATH);
} else {
imgInfo = ImageCacheManager::GetInstance().LoadOneInMultiRes(shortcutItems[i].iconCloseId, IMAGE_BIN_PATH);
}
} else if (index == SHORTCUT_SCREEN_SET_INDEX) {
imgScreenSet_ = img;
if (screenSetFlag == 1) {
imgInfo = ImageCacheManager::GetInstance().LoadOneInMultiRes(shortcutItems[i].iconOpenId, IMAGE_BIN_PATH);
} else {
imgInfo = ImageCacheManager::GetInstance().LoadOneInMultiRes(shortcutItems[i].iconCloseId, IMAGE_BIN_PATH);
}
} else {
imgInfo = ImageCacheManager::GetInstance().LoadOneInMultiRes(shortcutItems[i].iconOpenId, IMAGE_BIN_PATH);
}
img->SetSrc(imgInfo);
img->SetPosition(itemX, itemY);
img->SetOnClickListener(clickListener);
img->SetTouchable(true);
img->SetViewIndex(index);
}
uint8_t TjdUiAppMainPageShortcut::FindArrayIndex(uint8_t index)
{
uint8_t cntItem = sizeof(shortcutItems) / sizeof(shortcutItems[0]);
for (uint8_t i = 0; i < cntItem; i++) {
if (index == shortcutItems[i].index) {
return i;
}
}
return 0;
}
void TjdUiAppMainPageShortcut::UpdateView(void)
{
ImageInfo *imgInfo;
char dig_text[20];
rtc_class_ops *rtc = tjd_driver_rtc_get_ops();
struct rtc_time localTime;
rtc->get_rtc_time(&localTime);
uint8_t battery = tjd_service_charger_get_battery();
std::ostringstream oss;
uint8_t month = localTime.tm_mon; //获得当前的月份
uint8_t day = localTime.tm_mday; //获得当前的日期
uint8_t weekIndex = localTime.tm_wday; //获得当前是星期几
if (img_bat_level) {
uint8_t bat_level = battery / 10;
imgInfo =
ImageCacheManager::GetInstance().LoadOneInMultiRes(IMG_BATTERY_BAT_0 + bat_level, BATTERY_IMAGE_BIN_PATH);
img_bat_level->SetSrc(imgInfo);
}
if (label_bat_dig) {
uint8_t bat_level_dig = (uint8_t)battery;
oss.str("");
oss << static_cast<int>(bat_level_dig) << '%';
std::string result = oss.str();
strcpy(dig_text, result.c_str());
label_bat_dig->SetText(dig_text);
}
if (img_ble_status) {
uint8_t ble_connected = tjd_get_ble_is_connect();
//蓝牙图标
if (ble_connected) {
imgInfo =
ImageCacheManager::GetInstance().LoadOneInMultiRes(IMG_MAIN_SHORTCUT_BLUETOOTH_ON, IMAGE_BIN_PATH);
} else {
imgInfo =
ImageCacheManager::GetInstance().LoadOneInMultiRes(IMG_MAIN_SHORTCUT_BLUETOOTH_OFF, IMAGE_BIN_PATH);
}
img_ble_status->SetSrc(imgInfo);
}
if (label_date) {
std::string result;
oss.str("");
oss << static_cast<int>(month) << '/' << static_cast<int>(day);
result = oss.str();
memset(dig_text, 0, sizeof(dig_text));
strcpy(dig_text, result.c_str());
label_date->SetText(dig_text);
}
if (label_week) {
const char *weekStr = nullptr;
TjdUiLanguageId language = TjdUiMultiLanguageExt::GetCurrentLanguage();
if (language == LANGUAGE_ID_CHS) {
weekStr = week_ch[weekIndex];
} else {
weekStr = week_en[weekIndex];
}
label_week->SetText(weekStr);
}
if (imgBt_) {
if (tjd_get_bt_adv_statue()) {
if (tjd_get_bt_is_connect()) {
imgInfo = ImageCacheManager::GetInstance().LoadOneInMultiRes(IMG_MAIN_SHORTCUT_BT_OPEN_CONNECT,
IMAGE_BIN_PATH);
} else {
imgInfo = ImageCacheManager::GetInstance().LoadOneInMultiRes(
shortcutItems[FindArrayIndex(SHORTCUT_BLUETOOTH_INDEX)].iconOpenId, IMAGE_BIN_PATH);
}
} else {
imgInfo = ImageCacheManager::GetInstance().LoadOneInMultiRes(
shortcutItems[FindArrayIndex(SHORTCUT_BLUETOOTH_INDEX)].iconCloseId, IMAGE_BIN_PATH);
}
imgBt_->SetSrc(imgInfo);
}
viewGroup1->Remove(label_bat_dig);
viewGroup1->Add(label_bat_dig);
viewGroup2->Remove(label_week);
viewGroup2->Add(label_week);
}
bool TjdUiAppMainPageShortcut::InitView(void)
{
container = new UIViewGroup();
container->SetStyle(STYLE_BACKGROUND_OPA, OPA_TRANSPARENT);
container->SetPosition(0, 0, Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight());
UIView::OnClickListener *clickListener = (UIView::OnClickListener *)TjdUiAppMainPresenter::GetInstance();
// UIView::OnDragListener *dragListener = (UIView::OnDragListener *)TjdUiAppMainPresenter::GetInstance();
// UIScrollView *scrollCont = new UIScrollView();
// scrollCont->SetOnDragListener(dragListener);
scrollCont = new TjdShortcutScrollView();
scrollCont->SetStyle(STYLE_BACKGROUND_OPA, OPA_TRANSPARENT);
scrollCont->SetScrollBlankSize(0);
scrollCont->SetHorizontalScrollState(false);
scrollCont->SetThrowDrag(true); //设置结束拖动时,是否产生惯性滑动动效
scrollCont->SetSwipeACCLevel(5); // 越大距离越长
scrollCont->SetDragACCLevel(10); //越大时间越短
// scrollCont->SetReboundSize(100);
scrollCont->SetMaxScrollDistance(1000);
scrollCont->SetElastic(true);
scrollCont->SetReboundSize(Screen::GetInstance().GetHeight() >> 1);
scrollCont->SetPosition(0, 0);
scrollCont->SetWidth(Screen::GetInstance().GetWidth());
scrollCont->SetHeight(Screen::GetInstance().GetHeight());
viewGroup = new UIViewGroup();
viewGroup->SetViewId("viewGroup");
viewGroup->SetStyle(STYLE_BACKGROUND_OPA, OPA_TRANSPARENT);
// viewGroup->SetOnDragListener(dragListener);
viewGroup->SetPosition(0, 0);
viewGroup->SetAutoSize(true);
scrollCont->Add(viewGroup);
ImageInfo *imgInfo;
UIImageView *editBackground = new UIImageView();
imgInfo = ImageCacheManager::GetInstance().LoadOneInMultiRes(
shortcutItems[FindArrayIndex(SHORTCUT_EDIT_INDEX)].iconCloseId, IMAGE_BIN_PATH);
editBackground->SetPosition(143, 43);
editBackground->SetSrc(imgInfo);
editBackground->SetOnClickListener(clickListener);
editBackground->SetTouchable(true);
editBackground->SetViewIndex(SHORTCUT_EDIT_INDEX);
editBackground->SetViewId("editBackground");
viewGroup->Add(editBackground);
UILabelExt *labelEdit = new UILabelExt();
viewGroup->Add(labelEdit);
// labelEdit->SetText("编辑");//需要换成多语言
labelEdit->SetTextId(STR_ID_69); //需要换成多语言
labelEdit->SetFont(TJD_VECTOR_FONT_FILENAME, 30);
labelEdit->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);
labelEdit->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
labelEdit->AlignHorCenterToSibling(editBackground->GetViewId(), 0);
labelEdit->AlignVerCenterToSibling(editBackground->GetViewId(), 0);
uint8_t itemVerGap = 32;
uint8_t itemHorGap = 32;
uint8_t imageHeight = 110;
uint8_t imageWidth = 110;
uint8_t listCnt = shortcutList.size();
if (listCnt < minShortcutNum) {
static_print_error("shortcut num is too small, cnt:%d", listCnt);
listCnt = minShortcutNum;
}
uint8_t cntItem = sizeof(shortcutItems) / sizeof(shortcutItems[0]);
uint8_t numReminder = listCnt % 3;
auto begin = shortcutList.begin();
auto end = shortcutList.end();
int x = 36;
int y = 151;
if (numReminder == 1) {
auto it = shortcutList.begin();
auto &firstItem = *it; // 第一个元素
CreateShortcutItemView(viewGroup, firstItem, 178, 151, clickListener);
begin = std::next(begin, 1); // 移动迭代器到下一个元素
y += itemHorGap + imageWidth;
} else if (numReminder == 2) {
auto it = shortcutList.begin();
auto &firstItem = *it; // 第一个元素
CreateShortcutItemView(viewGroup, firstItem, 105, 151, clickListener);
std::advance(it, 1); // 移动迭代器到下一个元素
auto &secondItem = *it; // 第二个元素
CreateShortcutItemView(viewGroup, secondItem, 247, 151, clickListener);
begin = std::next(begin, 2); // 移动迭代器到下一个元素
y += itemHorGap + imageWidth;
}
int index = 0;
for (auto it = begin; it != end; ++it, ++index) {
const auto &item = *it;
x = 36 + (index % 3) * (itemHorGap + imageWidth);
if (index != 0 && index % 3 == 0) {
y += (itemVerGap + imageHeight);
}
CreateShortcutItemView(viewGroup, item, x, y, clickListener);
}
viewGroup1 = new UIViewGroup();
viewGroup->Add(viewGroup1);
viewGroup1->SetViewId("viewGroup1");
viewGroup1->SetStyle(STYLE_BACKGROUND_OPA, OPA_TRANSPARENT);
// viewGroup->SetOnDragListener(dragListener);
viewGroup1->SetAutoSize(true);
uint8_t ble_connected = tjd_get_ble_is_connect();
//蓝牙图标以及电量星期显示
img_ble_status = new UIImageView();
viewGroup1->Add(img_ble_status);
if (ble_connected) {
imgInfo = ImageCacheManager::GetInstance().LoadOneInMultiRes(IMG_MAIN_SHORTCUT_BLUETOOTH_ON, IMAGE_BIN_PATH);
} else {
imgInfo = ImageCacheManager::GetInstance().LoadOneInMultiRes(IMG_MAIN_SHORTCUT_BLUETOOTH_OFF, IMAGE_BIN_PATH);
}
img_ble_status->SetSrc(imgInfo);
img_ble_status->SetViewId("img_ble_status");
// img_ble_status->SetX(146);
// img_ble_status->SetY(y + imageHeight + 32);
img_ble_status->SetX(0);
img_ble_status->SetY(0);
// img_ble_status->LayoutBottomToSibling(img_flashlight->GetViewId(), 40);
uint8_t battery = tjd_service_charger_get_battery();
uint8_t bat_level = battery / 10;
img_bat_level = new UIImageView();
viewGroup1->Add(img_bat_level);
imgInfo = ImageCacheManager::GetInstance().LoadOneInMultiRes(IMG_BATTERY_BAT_0 + bat_level, BATTERY_IMAGE_BIN_PATH);
img_bat_level->SetSrc(imgInfo);
img_bat_level->SetViewId("img_bat_level");
// img_bat_level->SetX(150);
img_bat_level->LayoutRightToSibling(img_ble_status->GetViewId(), 20);
img_bat_level->AlignVerCenterToSibling(img_ble_status->GetViewId(), 0);
viewGroup1->Remove(img_bat_level);
viewGroup1->Add(img_bat_level);
uint8_t bat_level_dig = (uint8_t)battery;
// bat_level_dig = 100;
label_bat_dig = new UILabel();
viewGroup1->Add(label_bat_dig);
char dig_text[20];
std::ostringstream oss;
oss << static_cast<int>(bat_level_dig) << '%';
std::string result = oss.str();
strcpy(dig_text, result.c_str());
label_bat_dig->SetText(dig_text);
label_bat_dig->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
label_bat_dig->SetFont(TJD_VECTOR_FONT_FILENAME, 36);
label_bat_dig->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);
label_bat_dig->LayoutRightToSibling(img_bat_level->GetViewId(), 20);
int16_t offsety = (img_bat_level->GetHeight() - label_bat_dig->GetHeight()) / 2;
label_bat_dig->SetY(img_bat_level->GetY() + offsety);
// label_bat_dig->AlignVerCenterToSibling(img_bat_level->GetViewId(), -1);
// printf("label bat level x:%d,y:%d, w:%d,%d, h:%d,%d\n", label_bat_dig->GetX(), label_bat_dig->GetY(),
// label_bat_dig->GetWidth(), label_bat_dig->GetRect().GetWidth(),
// label_bat_dig->GetHeight(),label_bat_dig->GetRect().GetHeight());
viewGroup1->Remove(label_bat_dig);
viewGroup1->Add(label_bat_dig);
viewGroup1->SetX((Screen::GetInstance().GetWidth() - viewGroup1->GetWidth()) / 2);
viewGroup1->SetY(y + imageHeight + 32);
// viewGroup1->SetStyle(STYLE_BACKGROUND_COLOR, Color::Green().full);
viewGroup->Remove(viewGroup1);
viewGroup->Add(viewGroup1);
viewGroup2 = new UIViewGroup();
viewGroup->Add(viewGroup2);
viewGroup2->SetViewId("viewGroup2");
viewGroup2->SetStyle(STYLE_BACKGROUND_OPA, OPA_TRANSPARENT);
// viewGroup->SetOnDragListener(dragListener);
viewGroup2->SetAutoSize(true);
rtc_class_ops *rtc = tjd_driver_rtc_get_ops();
struct rtc_time localTime;
rtc->get_rtc_time(&localTime);
uint8_t month = localTime.tm_mon; //获得当前的月份
uint8_t day = localTime.tm_mday; //获得当前的日期
uint8_t weekIndex = localTime.tm_wday; //获得当前是星期几
label_date = new UILabel();
viewGroup2->Add(label_date);
oss.str("");
oss << static_cast<int>(month) << '/' << static_cast<int>(day);
result = oss.str();
memset(dig_text, 0, sizeof(dig_text));
strcpy(dig_text, result.c_str());
label_date->SetViewId("label_date");
label_date->SetFont(TJD_DIN_MEDIUM_FONT_FILENAME, 36);
label_date->SetText(dig_text);
label_date->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);
label_date->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
label_date->SetX(0);
label_date->SetY(0);
// printf("label date x:%d,y:%d, w:%d, h:%d\n", label_date->GetX(), label_date->GetY(),
// label_date->GetRect().GetWidth(), label_date->GetRect().GetHeight());
// printf("label date x:%d,y:%d, w:%d, h:%d\n", label_date->GetX(), label_date->GetY(), label_date->GetWidth(),
// label_date->GetHeight());
viewGroup2->Remove(label_date);
viewGroup2->Add(label_date);
// printf("group2 width:%d, height:%d\n", viewGroup2->GetWidth(), viewGroup2->GetHeight());
const char *weekStr = nullptr;
TjdUiLanguageId language = TjdUiMultiLanguageExt::GetCurrentLanguage();
if (language == LANGUAGE_ID_CHS) {
weekStr = week_ch[weekIndex];
} else {
weekStr = week_en[weekIndex];
}
label_week = new UILabel();
viewGroup2->Add(label_week);
label_week->SetText(weekStr);
label_week->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);
label_week->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
label_week->SetFont(TJD_VECTOR_FONT_FILENAME, 36);
label_week->LayoutRightToSibling(label_date->GetViewId(), 13);
offsety = (label_date->GetHeight() - label_week->GetHeight()) / 2;
label_week->SetY(label_date->GetY() + offsety);
// printf("label label_week x:%d,y:%d, w:%d,%d, h:%d,%d\n", label_week->GetX(), label_week->GetY(),
// label_week->GetWidth(), label_week->GetRect().GetWidth(),
// label_week->GetHeight(),label_week->GetRect().GetHeight());
viewGroup2->Remove(label_week);
viewGroup2->Add(label_week);
// printf("group2 width:%d, height:%d\n", viewGroup2->GetWidth(), viewGroup2->GetHeight());
viewGroup2->SetX((Screen::GetInstance().GetWidth() - viewGroup2->GetWidth()) / 2);
viewGroup2->SetY(viewGroup1->GetY() + viewGroup1->GetHeight() + 10);
viewGroup->Remove(viewGroup2);
viewGroup->Add(viewGroup2);
UIViewGroup *blankGroup = new UIViewGroup();
viewGroup->Add(blankGroup);
blankGroup->SetViewId("blankGroup");
blankGroup->SetStyle(STYLE_BACKGROUND_OPA, OPA_TRANSPARENT);
blankGroup->SetAutoSize(false);
blankGroup->SetWidth(Screen::GetInstance().GetWidth());
blankGroup->SetHeight(40);
blankGroup->LayoutBottomToSibling(viewGroup2->GetViewId(), 0);
blankGroup->LayoutLeftToSibling(viewGroup2->GetViewId(), 0);
viewGroup->Remove(blankGroup);
viewGroup->Add(blankGroup);
container->Add(scrollCont);
container->SetViewId("shortcut");
Add(container);
scrollCont->ScrollBy(0, -((viewGroup->GetHeight() - 1) - (Screen::GetInstance().GetHeight() - 1)));
// printf("---------------------group top:%d, height:%d,scroll to:%d,bottom:%d\n", viewGroup->GetRect().GetTop(),
// viewGroup->GetHeight(), -(viewGroup->GetHeight() - Screen::GetInstance().GetHeight() - 1),
// viewGroup->GetRect().GetBottom());
return true;
}
} // namespace TJD