mcu_hi3321_watch/tjd/ui/app/flashlight/TjdUiAppFlashlightView.cpp
2025-05-26 20:15:20 +08:00

324 lines
14 KiB
C++

#include "TjdUiAppFlashlightView.h"
#include "TjdUiImageIds.h"
#include "TjdUiMultiLanguageExt.h"
#include "common/image_cache_manager.h"
#include "gfx_utils/mem_check.h"
#include "wearable_log.h"
#include "TjdUiScreenManage.h"
namespace TJD {
using namespace OHOS;
#define FLASHLIGHT_IMAGE_BIN_PATH TJD_IMAGE_PATH "img_flashlight.bin"
#define IF_MEM_CHECK 0
enum FlashlightImageInfoIndex
{
FLASHLIGHT_INFO_WRITE,
FLASHLIGHT_INFO_BLACK,
FLASHLIGHT_INFO_WRITEFLA,
FLASHLIGHT_INFO_BLACKFLA,
FLASHLIGHT_INFO_FLASHLIGHT,
FLASHLIGHT_INFO_COUNT
};
int last_brightness = 0;//记录进入前手电筒前的亮度
static OHOS::ImageInfo *g_pv_flashlightimageInfo[FlashlightImageInfoIndex::FLASHLIGHT_INFO_COUNT]{nullptr};
static TjdUiAppFlashlightView *g_pv_AppFlashlightView = nullptr;
static int8_t change_ = 0;
static constexpr uint64_t MS_TWO_HANDRED_MILLISECONDS = 200; // 定时器时间
static inline void SetRotateEnable(OHOS::UIScrollView &view)
{
view.SetThrowDrag(true);
view.SetReboundSize(200);
// view.SetRotateFactor(ROTATE_FACTOR);
// view.SetRotateThreshold(ROTATE_THRESHOLD);
// view.SetYScrollBarVisible(true);
}
TjdUiAppFlashlightView::TjdUiAppFlashlightView()
{
if (IF_MEM_CHECK)
OHOS::MemCheck::GetInstance()->EnableLeakCheck(true);
g_pv_AppFlashlightView = this;
}
TjdUiAppFlashlightView::~TjdUiAppFlashlightView()
{
g_pv_AppFlashlightView = nullptr;
if (IF_MEM_CHECK)
OHOS::MemCheck::GetInstance()->EnableLeakCheck(false);
}
TjdUiAppFlashlightView *TjdUiAppFlashlightView::GetInstance(void) { return g_pv_AppFlashlightView; }
bool FlashLightUIScrollView::OnRotateEvent(const OHOS::RotateEvent &event)
{
printf("cxin is OnRotateEvent = %d\n", event.GetRotate());
TjdUiAppFlashlightView *flashlightView = TjdUiAppFlashlightView::GetInstance();
if ( event.GetRotate() > 0) {
if( flashlightView->GetCurrentView() != FlashlightViewIndex::FLASHLIGHT_ON_VIEW)
return true;
if (flashlightView->GetCurrentView() == FlashlightViewIndex::FLASHLIGHT_ON_VIEW) {
flashlightView->ShowView(FlashlightViewIndex::FLASHLIGHT_ON_VIEW, FlashlightViewIndex::FLASHLIGHT_OFF_VIEW);
TjdUiAppFlashlightPresenter::GetInstance()->changeFlag =
!TjdUiAppFlashlightPresenter::GetInstance()->changeFlag;
return true;
}
} else if ( event.GetRotate() < 0 ) {
if( flashlightView->GetCurrentView() == FlashlightViewIndex::FLASHLIGHT_ON_VIEW)
return true;
if (flashlightView->GetCurrentView() == FlashlightViewIndex::FLASHLIGHT_OFF_VIEW ||
flashlightView->GetCurrentView() == FlashlightViewIndex::FLASHLIGHT_ON_TO_OFF_VIEW) {
flashlightView->ShowView_(FlashlightViewIndex::FLASHLIGHT_OFF_VIEW,
FlashlightViewIndex::FLASHLIGHT_ON_TO_OFF_VIEW,
FlashlightViewIndex::FLASHLIGHT_ON_VIEW);
TjdUiAppFlashlightPresenter::GetInstance()->changeFlag =
!TjdUiAppFlashlightPresenter::GetInstance()->changeFlag;
return true;
}
}
return true;
}
void TjdUiAppFlashlightView::OnStart()
{
last_brightness = TjdUiAppFlashlightPresenter::GetInstance()->GetScreenBrightness();
printf("cxin is OnStart last_brightness = %d\n", last_brightness);
TjdUiAppFlashlightPresenter::GetInstance()->SetScreenBrightness(255);
View<TjdUiAppFlashlightPresenter>::OnStart();
TjdUiScreenManage::SetScreenKeepOnTimeout(1000 * 60 * 60);
InitImage();
if (containerAll_ == nullptr) {
containerAll_ = new FlashLightUIScrollView();
}
containerAll_->SetPosition(0, 0, OHOS::HORIZONTAL_RESOLUTION, OHOS::VERTICAL_RESOLUTION);
flashlightView[FlashlightViewIndex::FLASHLIGHT_ON_VIEW] = InitFlashlightOnView();
flashlightView[FlashlightViewIndex::FLASHLIGHT_OFF_VIEW] = InitFlashlightOffView();
flashlightView[FlashlightViewIndex::Flashlight_VIEW] = InitFlashlightUiView();
flashlightView[FlashlightViewIndex::FLASHLIGHT_ON_TO_OFF_VIEW] = InitFlashlightOnToOffView();
containerAll_->Add(flashlightView[FlashlightViewIndex::FLASHLIGHT_ON_VIEW]);
containerAll_->Add(flashlightView[FlashlightViewIndex::FLASHLIGHT_OFF_VIEW]);
containerAll_->Add(flashlightView[FlashlightViewIndex::Flashlight_VIEW]);
containerAll_->Add(flashlightView[FlashlightViewIndex::FLASHLIGHT_ON_TO_OFF_VIEW]);
containerAll_->RequestFocus();
AddViewToRootContainer(containerAll_);
SetRotateEnable(*containerAll_);
}
void TjdUiAppFlashlightView::OnStop()
{
TjdUiAppFlashlightPresenter::GetInstance()->SetScreenBrightness(last_brightness);
containerAll_->ClearFocus();
TjdUiScreenManage::ResetScreenKeepOnTimeout();
ImageCacheManager::GetInstance().UnloadAllInMultiRes(FLASHLIGHT_IMAGE_BIN_PATH);
TjdUiMemManage::DeleteChildren(containerAll_);
}
void TjdUiAppFlashlightView::ShowView(FlashlightViewIndex hideView, FlashlightViewIndex showView)
{
if (showView == Flashlight_VIEW)
TjdUiScreenManage::ResetScreenKeepOnTimeout();
else
TjdUiScreenManage::SetScreenKeepOnTimeout(1000 * 60 * 60);
if (flashlightView[hideView] != nullptr) {
flashlightView[hideView]->SetVisible(false);
}
if (flashlightView[showView] != nullptr) {
flashlightView[showView]->SetVisible(true);
currentView_ = showView;
}
}
void TjdUiAppFlashlightView::ShowView_(FlashlightViewIndex hideView1, FlashlightViewIndex hideView2,
FlashlightViewIndex showView)
{
if (showView == Flashlight_VIEW)
TjdUiScreenManage::ResetScreenKeepOnTimeout();
else
TjdUiScreenManage::SetScreenKeepOnTimeout(1000 * 60 * 60);
if (flashlightView[hideView1] != nullptr) {
flashlightView[hideView1]->SetVisible(false);
}
if (flashlightView[hideView2] != nullptr) {
flashlightView[hideView2]->SetVisible(false);
}
if (flashlightView[showView] != nullptr) {
flashlightView[showView]->SetVisible(true);
currentView_ = showView;
}
}
void TjdUiAppFlashlightView::InitImage()
{
g_pv_flashlightimageInfo[FlashlightImageInfoIndex::FLASHLIGHT_INFO_FLASHLIGHT] =
OHOS::ImageCacheManager::GetInstance().LoadOneInMultiRes(IMG_FLASHLIGHT_FLASHLIGHT, FLASHLIGHT_IMAGE_BIN_PATH);
g_pv_flashlightimageInfo[FlashlightImageInfoIndex::FLASHLIGHT_INFO_WRITE] =
OHOS::ImageCacheManager::GetInstance().LoadOneInMultiRes(IMG_FLASHLIGHT_WRITE_ELLIPTICAL,
FLASHLIGHT_IMAGE_BIN_PATH);
g_pv_flashlightimageInfo[FlashlightImageInfoIndex::FLASHLIGHT_INFO_BLACK] =
OHOS::ImageCacheManager::GetInstance().LoadOneInMultiRes(IMG_FLASHLIGHT_BLCAK_ELLIPTICAL,
FLASHLIGHT_IMAGE_BIN_PATH);
g_pv_flashlightimageInfo[FlashlightImageInfoIndex::FLASHLIGHT_INFO_WRITEFLA] =
OHOS::ImageCacheManager::GetInstance().LoadOneInMultiRes(IMG_FLASHLIGHT_LIGHT_ON, FLASHLIGHT_IMAGE_BIN_PATH);
g_pv_flashlightimageInfo[FlashlightImageInfoIndex::FLASHLIGHT_INFO_BLACKFLA] =
OHOS::ImageCacheManager::GetInstance().LoadOneInMultiRes(IMG_FLASHLIGHT_LIGHT_OFF, FLASHLIGHT_IMAGE_BIN_PATH);
}
OHOS::UIScrollView *TjdUiAppFlashlightView::InitFlashlightUiView()
{
OHOS::UIScrollView *flashlightUiView = new OHOS::UIScrollView();
flashlightUiView->SetPosition(0, 0, 466, 466);
flashlightUiView->SetOnDragListener(TjdUiAppFlashlightPresenter::GetInstance());
if (flashlight_ == nullptr) {
flashlight_ = new OHOS::UIImageView();
}
flashlight_->SetPosition(180, 160, 106, 146);
flashlight_->SetViewId(FLASHLIGHT_ID);
flashlight_->SetTouchable(true);
flashlight_->SetOnClickListener(TjdUiAppFlashlightPresenter::GetInstance());
if (g_pv_flashlightimageInfo[FlashlightImageInfoIndex::FLASHLIGHT_INFO_FLASHLIGHT] != nullptr) {
flashlight_->SetSrc(g_pv_flashlightimageInfo[FlashlightImageInfoIndex::FLASHLIGHT_INFO_FLASHLIGHT]);
}
flashlightUiView->Add(flashlight_);
flashlightUiView->SetVisible(false);
return flashlightUiView;
}
OHOS::UIScrollView *TjdUiAppFlashlightView::InitFlashlightOnView()
{
OHOS::UIScrollView *flashlightOnView = new OHOS::UIScrollView();
flashlightOnView->SetPosition(0, 0, 466, 466);
flashlightOnView->SetOnDragListener(TjdUiAppFlashlightPresenter::GetInstance());
if (lighton == nullptr) {
lighton = new OHOS::UIImageView();
}
lighton->SetPosition(0, 0, 466, 466);
if (g_pv_flashlightimageInfo[FlashlightImageInfoIndex::FLASHLIGHT_INFO_WRITEFLA] != nullptr) {
lighton->SetSrc(g_pv_flashlightimageInfo[FlashlightImageInfoIndex::FLASHLIGHT_INFO_WRITEFLA]);
}
lighton->SetViewId(LASHLIGHT_ON_ID);
lighton->SetTouchable(true);
lighton->SetOnClickListener(TjdUiAppFlashlightPresenter::GetInstance());
if (writeElliptical == nullptr) {
writeElliptical = new OHOS::UIImageView();
}
writeElliptical->SetPosition(443, 237, 12, 12);
if (g_pv_flashlightimageInfo[FlashlightImageInfoIndex::FLASHLIGHT_INFO_WRITE] != nullptr) {
writeElliptical->SetSrc(g_pv_flashlightimageInfo[FlashlightImageInfoIndex::FLASHLIGHT_INFO_WRITE]);
}
if (blackElliptical == nullptr) {
blackElliptical = new OHOS::UIImageView();
}
blackElliptical->SetPosition(443, 217, 12, 12);
if (g_pv_flashlightimageInfo[FlashlightImageInfoIndex::FLASHLIGHT_INFO_BLACK] != nullptr) {
blackElliptical->SetSrc(g_pv_flashlightimageInfo[FlashlightImageInfoIndex::FLASHLIGHT_INFO_BLACK]);
}
flashlightOnView->Add(lighton);
flashlightOnView->Add(writeElliptical);
flashlightOnView->Add(blackElliptical);
flashlightOnView->SetVisible(true);
return flashlightOnView;
}
void TjdUiAppFlashlightView::Changestatus()
{
if (change_ == 0) {
TjdUiAppFlashlightView::GetInstance()->ShowView(FlashlightViewIndex::FLASHLIGHT_OFF_VIEW,
FlashlightViewIndex::FLASHLIGHT_ON_TO_OFF_VIEW);
change_ = 1;
} else {
TjdUiAppFlashlightView::GetInstance()->ShowView(FlashlightViewIndex::FLASHLIGHT_ON_TO_OFF_VIEW,
FlashlightViewIndex::FLASHLIGHT_OFF_VIEW);
change_ = 0;
}
}
void TimerCallback_0(void *param) { TjdUiAppFlashlightView::GetInstance()->Changestatus(); }
OHOS::UIScrollView *TjdUiAppFlashlightView::InitFlashlightOffView()
{
OHOS::UIScrollView *flashlightOffView = new OHOS::UIScrollView();
flashlightOffView->SetPosition(0, 0, 466, 466);
flashlightOffView->SetOnDragListener(TjdUiAppFlashlightPresenter::GetInstance());
if (lightoff == nullptr) {
lightoff = new OHOS::UIImageView();
}
lightoff->SetPosition(0, 0, 466, 466);
lightoff->SetViewId(LASHLIGHT_OFF_ID);
lightoff->SetTouchable(true);
lightoff->SetOnClickListener(TjdUiAppFlashlightPresenter::GetInstance());
if (writeElliptical_ == nullptr) {
writeElliptical_ = new OHOS::UIImageView();
}
writeElliptical_->SetPosition(443, 217, 12, 12);
if (g_pv_flashlightimageInfo[FlashlightImageInfoIndex::FLASHLIGHT_INFO_WRITE] != nullptr) {
writeElliptical_->SetSrc(g_pv_flashlightimageInfo[FlashlightImageInfoIndex::FLASHLIGHT_INFO_WRITE]);
}
if (blackElliptical_ == nullptr) {
blackElliptical_ = new OHOS::UIImageView();
}
blackElliptical_->SetPosition(443, 237, 12, 12);
if (g_pv_flashlightimageInfo[FlashlightImageInfoIndex::FLASHLIGHT_INFO_BLACK] != nullptr) {
blackElliptical_->SetSrc(g_pv_flashlightimageInfo[FlashlightImageInfoIndex::FLASHLIGHT_INFO_BLACK]);
}
flashlightOffView->Add(lightoff);
flashlightOffView->Add(writeElliptical_);
flashlightOffView->Add(blackElliptical_);
flashlightOffView->SetVisible(false);
return flashlightOffView;
}
OHOS::UIScrollView *TjdUiAppFlashlightView::InitFlashlightOnToOffView()
{
OHOS::UIScrollView *flashlightOnToOffView = new OHOS::UIScrollView();
flashlightOnToOffView->SetPosition(0, 0, 466, 466);
flashlightOnToOffView->SetOnDragListener(TjdUiAppFlashlightPresenter::GetInstance());
if (lighton1 == nullptr) {
lighton1 = new OHOS::UIImageView();
}
lighton1->SetPosition(0, 0, 466, 466);
if (g_pv_flashlightimageInfo[FlashlightImageInfoIndex::FLASHLIGHT_INFO_WRITEFLA] != nullptr) {
lighton1->SetSrc(g_pv_flashlightimageInfo[FlashlightImageInfoIndex::FLASHLIGHT_INFO_WRITEFLA]);
}
lighton1->SetViewId(FLASHLIGHT_ONOFF_ID);
lighton1->SetTouchable(true);
lighton1->SetOnClickListener(TjdUiAppFlashlightPresenter::GetInstance());
if (writeElliptical1_ == nullptr) {
writeElliptical1_ = new OHOS::UIImageView();
}
writeElliptical1_->SetPosition(443, 217, 12, 12);
if (g_pv_flashlightimageInfo[FlashlightImageInfoIndex::FLASHLIGHT_INFO_WRITE] != nullptr) {
writeElliptical1_->SetSrc(g_pv_flashlightimageInfo[FlashlightImageInfoIndex::FLASHLIGHT_INFO_WRITE]);
}
if (blackElliptical1_ == nullptr) {
blackElliptical1_ = new OHOS::UIImageView();
}
blackElliptical1_->SetPosition(443, 237, 12, 12);
if (g_pv_flashlightimageInfo[FlashlightImageInfoIndex::FLASHLIGHT_INFO_BLACK] != nullptr) {
blackElliptical1_->SetSrc(g_pv_flashlightimageInfo[FlashlightImageInfoIndex::FLASHLIGHT_INFO_BLACK]);
}
flashlightOnToOffView->Add(lighton1);
flashlightOnToOffView->Add(writeElliptical1_);
flashlightOnToOffView->Add(blackElliptical1_);
flashlightOnToOffView->SetVisible(false);
return flashlightOnToOffView;
}
} // namespace TJD