From fb5b00f5d9f628300fa273346a5ea2e6a731b4df Mon Sep 17 00:00:00 2001 From: luozheng <1732036298@qq.com> Date: Fri, 24 Apr 2026 16:13:50 +0800 Subject: [PATCH] =?utf8?q?applist1201patch=E5=88=97=E8=A1=A8=E6=A0=B7?= =?utf8?q?=E5=BC=8F=E5=8D=87=E7=BA=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../n9/nativeabilityfwk/src/AbilitySlice.cpp | 7 - .../nativeui/applist/include/AppItemView.h | 72 +- .../nativeui/applist/include/ApplistAdapter.h | 3 +- .../nativeui/applist/include/ApplistModel.h | 72 +- .../applist/include/ApplistPresenter.h | 46 +- .../nativeui/applist/include/ApplistView.h | 159 +-- .../nativeui/applist/include/DesktopFactory.h | 124 +- .../applist/include/ListDesktopFragment.h | 142 +-- .../applist/include/UIDesktopFragment.h | 68 +- .../nativeui/applist/src/AppItemView.cpp | 150 --- .../nativeui/applist/src/ApplistAdapter.cpp | 2 + .../nativeui/applist/src/ApplistModel.cpp | 154 +-- .../nativeui/applist/src/ApplistPresenter.cpp | 277 +---- .../nativeui/applist/src/ApplistView.cpp | 1086 +---------------- .../nativeui/applist/src/DesktopFactory.cpp | 66 +- .../applist/src/ListDesktopFragment.cpp | 276 ++--- .../applist/src/UIDesktopFragment.cpp | 100 +- .../nativeui/key/src/KeyInputListener.cpp | 6 +- .../languagecode/src/LanguageSwitchView.cpp | 3 - 19 files changed, 561 insertions(+), 2252 deletions(-) diff --git a/code/sdk/application/wearable/n9/nativeabilityfwk/src/AbilitySlice.cpp b/code/sdk/application/wearable/n9/nativeabilityfwk/src/AbilitySlice.cpp index 68ab45d56..5fdd9e11f 100644 --- a/code/sdk/application/wearable/n9/nativeabilityfwk/src/AbilitySlice.cpp +++ b/code/sdk/application/wearable/n9/nativeabilityfwk/src/AbilitySlice.cpp @@ -22,7 +22,6 @@ const uint32_t PAGE_OFFSET = 16; void AbilitySlice::OnStart(void* data) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_LAUNCHER_FWK, "AbilitySlice::OnStart"); if ((presenter_ == nullptr) || (view_ == nullptr)) { WEARABLE_LOGE(WEARABLE_LOG_MODULE_LAUNCHER_FWK, "Presenter or View was nullptr for slice %s", sliceId_); return; @@ -48,7 +47,6 @@ void AbilitySlice::OnStart(void* data) void AbilitySlice::OnResume() { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_LAUNCHER_FWK, "AbilitySlice::OnResume state_ = %d", state_); if(NativeAbility::GetInstance().GetCurSliceId() == VIEW_MAIN || NativeAbility::GetInstance().GetCurSliceId() == VIEW_APPLIST) { if (!ImageCacheManager::GetInstance().IsInAod()) { @@ -63,7 +61,6 @@ void AbilitySlice::OnResume() return; } - WEARABLE_LOGE(WEARABLE_LOG_MODULE_LAUNCHER_FWK, "AbilitySlice::OnResume:%d",__LINE__); if (view_->GetRootContainer()->GetParent() == nullptr) { RootView::GetInstance()->Add(view_->GetRootContainer()); } @@ -84,13 +81,9 @@ void AbilitySlice::OnResume() view_->GetRootContainer()->SetOnDragListener(backDragListener); } - WEARABLE_LOGE(WEARABLE_LOG_MODULE_LAUNCHER_FWK, "AbilitySlice::OnResume:%d",__LINE__); slicePageMgr_.ResumeSlicePage(); - WEARABLE_LOGE(WEARABLE_LOG_MODULE_LAUNCHER_FWK, "AbilitySlice::OnResume:%d",__LINE__); presenter_->OnResume(); - WEARABLE_LOGE(WEARABLE_LOG_MODULE_LAUNCHER_FWK, "AbilitySlice::OnResume:%d",__LINE__); view_->Draw(); - WEARABLE_LOGE(WEARABLE_LOG_MODULE_LAUNCHER_FWK, "AbilitySlice::OnResume:%d",__LINE__); state_ = SliceState::RESUME; WEARABLE_LOGE(WEARABLE_LOG_MODULE_LAUNCHER_FWK, "AbilitySlice::OnResume state_ = %d", state_); } diff --git a/code/sdk/application/wearable/n9/nativeapp/nativeui/applist/include/AppItemView.h b/code/sdk/application/wearable/n9/nativeapp/nativeui/applist/include/AppItemView.h index eebb4afb1..836127a00 100644 --- a/code/sdk/application/wearable/n9/nativeapp/nativeui/applist/include/AppItemView.h +++ b/code/sdk/application/wearable/n9/nativeapp/nativeui/applist/include/AppItemView.h @@ -8,14 +8,11 @@ #ifndef APP_ITEM_VIEW_H #define APP_ITEM_VIEW_H -#include "components/ui_label.h" +#include "components/ui_label_ext.h" #include "components/ui_view_group.h" #include "components/ui_image_view.h" #include "applist/include/ApplistModel.h" #include "UiConfig.h" -#include "components/ui_transform_group.h" -#include "components/ui_label_ext.h" -#include "ui_resource_string.h" namespace OHOS { class AppItemView : public UIViewGroup { @@ -33,71 +30,8 @@ private: AppItemView &operator = (const AppItemView &); UIImageView icon_; - UILabel label_; - AppItem itemInfo_ = { VIEW_INVALID, nullptr, nullptr, nullptr, nullptr }; -}; - -class HexagonsItemView : public UIImageView { -public: - explicit HexagonsItemView(); - ~HexagonsItemView(); - void SetItemInfo(const AppItem &itemInfo); - AppViewId GetViewId(); - const char *GetAppUid(); -private: - HexagonsItemView(const HexagonsItemView &); - HexagonsItemView &operator = (const HexagonsItemView &); - AppItem itemInfo_ = { VIEW_INVALID, nullptr, nullptr, nullptr, nullptr }; -}; - -class FootballItemView : public UIImageView { -public: - explicit FootballItemView() {} - ~FootballItemView() {} - void SetItemInfo(const AppItem &itemInfo); - AppViewId GetViewId(); - const char *GetAppUid(); -private: - FootballItemView(const FootballItemView &); - FootballItemView &operator = (const FootballItemView &); - AppItem itemInfo_ = { VIEW_INVALID, nullptr, nullptr, nullptr, nullptr }; -}; - - -class WaterfallItemView : public UIImageView { -public: - explicit WaterfallItemView() {} - ~WaterfallItemView() {} - void SetItemInfo(const AppItem &itemInfo); - AppViewId GetViewId(); - const char *GetAppUid(); -private: - WaterfallItemView(const WaterfallItemView &); - WaterfallItemView &operator = (const WaterfallItemView &); - AppItem itemInfo_ = { VIEW_INVALID, nullptr, nullptr, nullptr, nullptr }; -}; - -//弧形列表ItemView -class ArcScaleListItemView : public UITransformGroup -{ -public: - ArcScaleListItemView(); - ~ArcScaleListItemView(); - - void SetItemInfo(const AppItem &itemInfo); - AppViewId GetViewId(); - const char * GetAppUid(); - void SetUpChild(); - UILabelExt *GetLabel(void); - UIImageView *GetImage(void); - - ArcScaleListItemView(const ArcScaleListItemView &) = delete; - ArcScaleListItemView &operator=(const ArcScaleListItemView &) = delete; - -private: - UIImageView * image_{nullptr}; - UILabelExt * label_{nullptr}; - AppItem itemInfo_ = { VIEW_INVALID, nullptr, nullptr, nullptr, nullptr, nullptr, 0 }; + UILabelExt label_; + AppItem itemInfo_; }; } diff --git a/code/sdk/application/wearable/n9/nativeapp/nativeui/applist/include/ApplistAdapter.h b/code/sdk/application/wearable/n9/nativeapp/nativeui/applist/include/ApplistAdapter.h index 6ccb3a313..bd9c37d1e 100644 --- a/code/sdk/application/wearable/n9/nativeapp/nativeui/applist/include/ApplistAdapter.h +++ b/code/sdk/application/wearable/n9/nativeapp/nativeui/applist/include/ApplistAdapter.h @@ -51,7 +51,7 @@ private: std::list listData_; UIView::OnClickListener *itemClickListener_; }; - +#if 0 /* -------------------------------------------------------------------------- */ /* ---------------------------------- 弧形列表 ---------------------------------- */ class ArcScaleListItemAdapter : public AbstractAdapter @@ -84,6 +84,7 @@ public: static void native_app_position_update(UIImageView ** CircleListAPP,int CircleListAPPNum,UIImageView *CircleListSelectImage_,int startangle,bool isDirectRotate); static int angleIncrement; }; +#endif } #endif \ No newline at end of file diff --git a/code/sdk/application/wearable/n9/nativeapp/nativeui/applist/include/ApplistModel.h b/code/sdk/application/wearable/n9/nativeapp/nativeui/applist/include/ApplistModel.h index 95d4510fb..17c89969b 100644 --- a/code/sdk/application/wearable/n9/nativeapp/nativeui/applist/include/ApplistModel.h +++ b/code/sdk/application/wearable/n9/nativeapp/nativeui/applist/include/ApplistModel.h @@ -11,23 +11,39 @@ #include "bundle_info.h" #include "AppViewIDs.h" #include "ohos_types.h" -#include "themestyle/include/ThemeStyleModel.h" #include "ui_resource_string.h" #define APP_MAX_NUM 50 namespace OHOS { -typedef struct { - uint16_t id; - const char *iconLarge; - const char *iconSmall; - const char *iconHexagon; - const char *label; - const char *uid; - uint16_t TextId; -} AppItem; #define AppListStyle ThemeStyle +struct AppItem { + uint16_t id = VIEW_INVALID; + const char *iconLarge = nullptr; + const char *iconSmall = nullptr; + const char *iconHexagon = nullptr; + const char *label = nullptr; + const char *uid = nullptr; + uint16_t labelId = STR_MAX_ID; + + AppItem() = default; + AppItem(uint16_t id, const char *iconLarge,const char *iconHexagon, const char *label, const char *uid) : + id(id), + iconLarge(iconLarge), + iconHexagon(iconHexagon), + label(label), + uid(uid){} + + AppItem(uint16_t id, const char *iconLarge, const char *iconSmall, const char *iconHexagon, const char *label, const char *uid, uint16_t labelId) : + id(id), + iconLarge(iconLarge), + iconSmall(iconSmall), + iconHexagon(iconHexagon), + label(label), + uid(uid), + labelId(labelId) {} +}; class ApplistPresenter; class ApplistModel { @@ -40,28 +56,14 @@ public: void ResolvingJSAppItems(void); void SetStartIndex(uint16_t index); uint16_t GetStartIndex(void); + void SetLastOffset(int16_t x, int16_t y); + void GetLastOffset(int16_t& x, int16_t& y); void SetHeadItemY(int index); int GetHeadItemY(void); void ApplistUpdate(void); void SetPresenter(ApplistPresenter *p); - AppListStyle GetCurrentStyle(void); void SetInitFlag(bool flag); - - /* -------------------------------------------------------------------------- */ - /* ---------------------------------- 弧形列表 ---------------------------------- */ - void SetArcListStartIndex(uint16_t index); - uint16_t GetArcListStartIndex(void); - void GetArcListHeadItemY(int y); - int GetArcListHeadItemY(void); - /* -------------------------------------------------------------------------- */ - /* ----------------------------------- 拨号盘 ---------------------------------- */ - void SetCircleListStartAngle(int angle); - int GetCircleListStartAngle(void); - void SetCurselectImageIndex(int index); - int GetCurselectImageIndex(void); - void SetPreselectImageIndex(int index); - int GetPreselectImageIndex(void); - /* -------------------------------------------------------------------------- */ + void CleanupApplistStrings(uint8_t nativeAppNumTotal); private: ApplistModel(); @@ -70,24 +72,16 @@ private: virtual ~ApplistModel(); ApplistPresenter *presenter{nullptr}; - AppItem applist[APP_MAX_NUM] = { VIEW_INVALID, nullptr, nullptr, nullptr, nullptr, nullptr ,0}; + AppItem applist[APP_MAX_NUM]; BundleInfo *bundleInfos = nullptr; int32 bundleLen = 0; uint8 appLen = 0; - + uint8 nativeAppNumTotal = 0; uint16_t startIndex = 0; int headItemY = 0; + int16_t lastOffsetX = 0; + int16_t lastOffsetY = 0; bool initFlag{false}; - - /* ---------------------------------- 弧形列表 ---------------------------------- */ - uint16_t arcListstartIndex = 0; // 圆弧列表起始位置 - int arcListheadItemY = 0; // 圆弧列表头部位置 - /* -------------------------------------------------------------------------- */ - /* ----------------------------------- 拨号盘 ---------------------------------- */ - int circleListStartAngle{0}; - int curselectImageIndex{0}; - int preselectImageIndex{0}; - /* -------------------------------------------------------------------------- */ }; } diff --git a/code/sdk/application/wearable/n9/nativeapp/nativeui/applist/include/ApplistPresenter.h b/code/sdk/application/wearable/n9/nativeapp/nativeui/applist/include/ApplistPresenter.h index 094580061..77c1ef4d5 100644 --- a/code/sdk/application/wearable/n9/nativeapp/nativeui/applist/include/ApplistPresenter.h +++ b/code/sdk/application/wearable/n9/nativeapp/nativeui/applist/include/ApplistPresenter.h @@ -8,46 +8,22 @@ #ifndef APPLIST_PRESENTER_H #define APPLIST_PRESENTER_H -#include "key/include/KeyInputListener.h" #include "Presenter.h" -#include "ohos_types.h" -#include "AppItemView.h" -#include "ApplistView.h" +#include "applist/include/ApplistView.h" #include "applist/include/ApplistModel.h" -#include "components/root_view.h" namespace OHOS { - class ApplistPresenter : public Presenter, public UIView::OnClickListener, - public ListScrollListener, public UIView::OnRotateListener { - public: - ApplistPresenter(); - ~ApplistPresenter() override; +class ApplistPresenter : public Presenter { +public: + ApplistPresenter(); + ~ApplistPresenter() override; + void OnStart() override; + void OnResume() override; + ApplistView* GetAppListView(); - void OnStart() override; - void OnResume() override; - bool OnRotate(UIView& view, const RotateEvent& event) override; - bool OnClick(UIView &view, const ClickEvent &event) override; - void OnItemSelected(int16 index, UIView *view) override; - void SetStartIndex(uint16_t index); - uint16_t GetStartIndex(void); - void SetHeadItemY(int y); - int GetHeadItemY(void); - uint8_t GetListItemNum(void); - ApplistView* GetAppListView(); - AppListStyle GetCurrentStyle(void); - - /* ---------------------------------- 弧形列表 ---------------------------------- */ - void SetArcListStartIndex(uint16_t index); - uint16_t GetArcListStartIndex(void); - void SetArcListHeadItemY(int y); - int GetArcListHeadItemY(void); - /* -------------------------------------------------------------------------- */ - - private: - AppItemView *itemViewSele{nullptr}; - AppItemView *preItemViewSele{nullptr}; - ApplistModel *model{nullptr}; - }; +private: + ApplistModel *model{nullptr}; +}; } #endif // APPLIST_PRESENTER_H diff --git a/code/sdk/application/wearable/n9/nativeapp/nativeui/applist/include/ApplistView.h b/code/sdk/application/wearable/n9/nativeapp/nativeui/applist/include/ApplistView.h index 8aa3ff058..7e502f0ab 100644 --- a/code/sdk/application/wearable/n9/nativeapp/nativeui/applist/include/ApplistView.h +++ b/code/sdk/application/wearable/n9/nativeapp/nativeui/applist/include/ApplistView.h @@ -9,169 +9,24 @@ #define APPLIST_VIEW_H #include "View.h" -#include "animator/animator_manager.h" -#include "components/root_view.h" -#include "components/ui_view_group.h" -#include "components/ui_scroll_view.h" -#include "components/ui_label.h" -#include "components/ui_list.h" -#include "components/ui_custom_hexagons_list.h" -#include "components/ui_waterfall_list.h" -#include "components/ui_icosahedron_view.h" -#include "gfx_utils/list.h" -#include "ohos_types.h" -#include "ApplistAdapter.h" -#include "ChangeSliceListener.h" -#include "drag_event.h" -#include "UiConfig.h" -#include "components/ui_transform_list.h" -#include "components/ui_picker.h" +#include "UIDesktopFragment.h" namespace OHOS { -class AppListOnDragListener : public UIView::OnDragListener { -public: - AppListOnDragListener() - { - continueDrag = false; - } - ~AppListOnDragListener() override {} - bool OnDragStart(UIView& view, const DragEvent& event) override - { - UNUSED(view); - UNUSED(event); - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Applist Ondragstart!!"); - continueDrag = true; - return false; - } - - bool OnDrag(UIView& view, const DragEvent& event) override - { - UNUSED(view); - if (!continueDrag) { - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AppList : Can not continue drag!!"); - return false; - } - if ((event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT) && - (event.GetDeltaX() > X_DRAG_OFFSET) && (event.GetDeltaX() > (DOUBLES * MATH_ABS(event.GetDeltaY())))) { - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Applist Ondrag!!"); - NativeAbility::GetInstance().ChangeSlice(VIEW_MAIN, TransitionType::TRANSITION_INVALID); - } - - return false; - } - - bool OnDragEnd(UIView& view, const DragEvent& event) override - { - UNUSED(view); - UNUSED(event); - return false; - } -private: - bool continueDrag{false}; -}; - -class FootballAnimatorCallback : public AnimatorCallback { -public: - explicit FootballAnimatorCallback(UIView* view, int16_t startPos, int16_t endPos) - : startPos_(startPos), - endPos_(endPos), - startTime_(0), - animator_(new Animator(this, view, 1000, false)) {} // 1000:duration of animator_, in milliseconds. - - ~FootballAnimatorCallback() override - { - if (animator_ != nullptr) { - delete animator_; - animator_ = nullptr; - } - } - - void Callback(UIView* view) override; - - Animator* GetAnimator() const - { - return animator_; - } - - void SetStartTime(uint32_t time) - { - isStartAnim_ = false; - startTime_ = time; - } -protected: - int16_t startPos_; - int16_t endPos_; - uint32_t startTime_; - bool isStartAnim_ = false; - Animator* animator_; -}; - class ApplistPresenter; class ApplistView : public View { public: - ApplistView(); - ~ApplistView() override; + ApplistView() {}; + ~ApplistView() override {}; void OnStart() override; void OnStop() override; - + void OnResume(); void AddAppItemToList(const AppItem &item); void ClearAppItemToList(); - void RefreshAppList(void); - void StartFootBallAnimator(); - void ResumeWaterFallDraggable(); + void RefreshAppList(); private: - /* for list style */ - void ListStyleOnStart(); - void ListStyleOnStop(); - ApplistAdapter *listAdapter_{nullptr}; - UIList *contentList_{nullptr}; - UIView::OnDragListener *dragListener_{nullptr}; - - /* for hexagons style */ - void HexagonsStyleOnStart(); - void HexagonsStyleOnStop(); - UICustomHexagonsList* hexagonsList_{nullptr}; - List listHexagonsView_; - uint16_t imgSize_ = 0; - uint16_t imgDistance_ = 0; - - /* for football style */ - void FootballStyleOnStart(); - void FootballStyleOnStop(); - UIIcosahedronView* footballList_ = nullptr; - List footballItemList_; - ImageInfo* footballDefaultImg_ = nullptr; - FootballAnimatorCallback* callback_ = nullptr; - Animator* enterAnimator_ = nullptr; - - /* for waterfall style */ - void WaterfallStyleOnStart(); - void WaterfallStyleOnStop(); - UIWaterfallList* waterfallList_{nullptr}; - List waterfallItemList_; - - // arc scale list - void ArcScaleListStyleOnStart(void); - void ArcScaleListStyleOnSetUpView(void); - void ArcScaleListStyleOnStop(void); - UIViewGroup * ArcScaleListGroup_{nullptr}; - UITransformList * ArcScaleList_{nullptr}; - ArcScaleListItemAdapter * ArcScaleListAdapter_{nullptr}; - UIView::OnDragListener * ArcScaleListDragListener_{nullptr}; - - //for circleList style - void CircleListStyleOnStart(void); - void CircleListStyleOnSetUpView(void); - void CircleListStyleOnStop(void); - UIViewGroup * CircleListGroup_{nullptr}; - UIImageView * CircleListAPP[12]{nullptr}; - UIImageView * PointImage{nullptr}; - UIImageView * CircleListSelectImage{nullptr}; - UIPicker * CircleListPicker{nullptr}; - UIScrollView * CircleListScrollView{nullptr}; - int CircleListAPPNum{0}; + UIDesktopFragment *desktopFragment_ = nullptr; }; } -#endif // APPLIST_VIEW_H \ No newline at end of file +#endif // APPLIST_VIEW_H diff --git a/code/sdk/application/wearable/n9/nativeapp/nativeui/applist/include/DesktopFactory.h b/code/sdk/application/wearable/n9/nativeapp/nativeui/applist/include/DesktopFactory.h index d50a69c22..f95f8af7f 100644 --- a/code/sdk/application/wearable/n9/nativeapp/nativeui/applist/include/DesktopFactory.h +++ b/code/sdk/application/wearable/n9/nativeapp/nativeui/applist/include/DesktopFactory.h @@ -1,71 +1,71 @@ -// /* -// * Copyright (c) CompanyNameMagicTag 2025. All rights reserved. -// * Description: DesktopFactory -// * Author: -// * Create: 2025-07 -// */ +/* + * Copyright (c) CompanyNameMagicTag 2025. All rights reserved. + * Description: DesktopFactory + * Author: + * Create: 2025-07 + */ -// #ifndef DESKTOP_FACTORY_H -// #define DESKTOP_FACTORY_H +#ifndef DESKTOP_FACTORY_H +#define DESKTOP_FACTORY_H -// #include -// #include "UIDesktopFragment.h" +#include +#include "UIDesktopFragment.h" -// namespace OHOS { -// class DesktopInterface; -// class DesktopFactory { -// public: -// static DesktopFactory& GetInstance() -// { -// static DesktopFactory instance; -// return instance; -// } -// void RegisterDesktopStyle(const uint16_t style, DesktopInterface* desktop); -// UIDesktopFragment* CreateDesktopStyle(uint16_t style); +namespace OHOS { +class DesktopInterface; +class DesktopFactory { +public: + static DesktopFactory& GetInstance() + { + static DesktopFactory instance; + return instance; + } + void RegisterDesktopStyle(const uint16_t style, DesktopInterface* desktop); + UIDesktopFragment* CreateDesktopStyle(uint16_t style); -// private: -// DesktopFactory() {}; -// ~DesktopFactory() {}; -// DesktopFactory(const DesktopFactory&) = delete; -// DesktopFactory &operator=(const DesktopFactory&) = delete; -// std::unordered_map desktops_; -// }; +private: + DesktopFactory() {}; + ~DesktopFactory() {}; + DesktopFactory(const DesktopFactory&) = delete; + DesktopFactory &operator=(const DesktopFactory&) = delete; + std::unordered_map desktops_; +}; -// class DesktopStyleRegister { -// public: -// DesktopStyleRegister(const uint16_t style, DesktopInterface* uiCardPage) -// { -// DesktopFactory::GetInstance().RegisterDesktopStyle(style, uiCardPage); -// } -// }; +class DesktopStyleRegister { +public: + DesktopStyleRegister(const uint16_t style, DesktopInterface* uiCardPage) + { + DesktopFactory::GetInstance().RegisterDesktopStyle(style, uiCardPage); + } +}; -// class DesktopInterface { -// public: -// virtual UIDesktopFragment* CreateDesktop() = 0; -// DesktopInterface() = default; -// virtual ~DesktopInterface() = default; -// DesktopInterface(const DesktopInterface&) = delete; -// DesktopInterface& operator=(const DesktopInterface&) = delete; -// DesktopInterface(DesktopInterface&&) = delete; -// DesktopInterface& operator=(DesktopInterface&&) = delete; -// }; +class DesktopInterface { +public: + virtual UIDesktopFragment* CreateDesktop() = 0; + DesktopInterface() = default; + virtual ~DesktopInterface() = default; + DesktopInterface(const DesktopInterface&) = delete; + DesktopInterface& operator=(const DesktopInterface&) = delete; + DesktopInterface(DesktopInterface&&) = delete; + DesktopInterface& operator=(DesktopInterface&&) = delete; +}; -// template -// class DesktopProxy : public DesktopInterface { -// public: -// UIDesktopFragment* CreateDesktop() override -// { -// D* d = new D(); -// UIDesktopFragment* fragment = dynamic_cast(d); -// if (fragment == nullptr) { -// delete d; -// } -// return fragment; -// } -// }; -// } // namespace OHOS +template +class DesktopProxy : public DesktopInterface { +public: + UIDesktopFragment* CreateDesktop() override + { + D* d = new D(); + UIDesktopFragment* fragment = dynamic_cast(d); + if (fragment == nullptr) { + delete d; + } + return fragment; + } +}; +} // namespace OHOS -// #define REGIST_DESKTOP_STYLE(style, D) \ -// const static OHOS::DesktopStyleRegister (STATIC_VAR)(static_cast(style), new DesktopProxy()) +#define REGIST_DESKTOP_STYLE(style, D) \ + const static OHOS::DesktopStyleRegister (STATIC_VAR)(static_cast(style), new DesktopProxy()) -// #endif // DESKTOP_FACTORY_H \ No newline at end of file +#endif // DESKTOP_FACTORY_H \ No newline at end of file diff --git a/code/sdk/application/wearable/n9/nativeapp/nativeui/applist/include/ListDesktopFragment.h b/code/sdk/application/wearable/n9/nativeapp/nativeui/applist/include/ListDesktopFragment.h index 4892e8ac2..b6d9acabf 100644 --- a/code/sdk/application/wearable/n9/nativeapp/nativeui/applist/include/ListDesktopFragment.h +++ b/code/sdk/application/wearable/n9/nativeapp/nativeui/applist/include/ListDesktopFragment.h @@ -1,81 +1,81 @@ -// /* -// * Copyright (c) CompanyNameMagicTag 2025-2025. All rights reserved. -// * Description: ListDesktopFragment.h -// * Author: -// * Create: 2025-07-04 -// */ +/* + * Copyright (c) CompanyNameMagicTag 2025-2025. All rights reserved. + * Description: ListDesktopFragment.h + * Author: + * Create: 2025-07-04 + */ -// #ifndef LIST_DESKTOP_FRAGMENT_H -// #define LIST_DESKTOP_FRAGMENT_H +#ifndef LIST_DESKTOP_FRAGMENT_H +#define LIST_DESKTOP_FRAGMENT_H -// #include "UIDesktopFragment.h" -// #include "ApplistAdapter.h" -// #include "ChangeSliceListener.h" -// #include "components/ui_list.h" -// #include "drag_event.h" +#include "UIDesktopFragment.h" +#include "ApplistAdapter.h" +#include "ChangeSliceListener.h" +#include "components/ui_list.h" +#include "drag_event.h" -// namespace OHOS { -// class ListDesktopFragment : public UIDesktopFragment { -// public: -// bool OnClick(UIView &view, const ClickEvent &event) override; -// void OnItemSelected(int16 index, UIView *view) override; -// void AddAppItemToList(const AppItem &item) override; -// void ClearAppItemToList() override; -// void RefreshAppList() override; +namespace OHOS { +class ListDesktopFragment : public UIDesktopFragment { +public: + bool OnClick(UIView &view, const ClickEvent &event) override; + void OnItemSelected(int16 index, UIView *view) override; + void AddAppItemToList(const AppItem &item) override; + void ClearAppItemToList() override; + void RefreshAppList() override; -// protected: -// void OnCreateView(void* data) override; -// void OnDestroyView() override; +protected: + void OnCreateView(void* data) override; + void OnDestroyView() override; -// private: -// ApplistAdapter *listAdapter_{nullptr}; -// UIList *contentList_{nullptr}; -// UIView::OnDragListener *dragListener_{nullptr}; -// AppItemView *itemViewSele{nullptr}; -// AppItemView *preItemViewSele{nullptr}; -// }; +private: + ApplistAdapter *listAdapter_{nullptr}; + UIList *contentList_{nullptr}; + UIView::OnDragListener *dragListener_{nullptr}; + AppItemView *itemViewSele{nullptr}; + AppItemView *preItemViewSele{nullptr}; +}; -// class AppListOnDragListener : public UIView::OnDragListener { -// public: -// AppListOnDragListener() -// { -// continueDrag_ = false; -// } -// ~AppListOnDragListener() override {} -// bool OnDragStart(UIView& view, const DragEvent& event) override -// { -// UNUSED(view); -// UNUSED(event); -// WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Applist Ondragstart!!"); -// continueDrag_ = true; -// return false; -// } +class AppListOnDragListener : public UIView::OnDragListener { +public: + AppListOnDragListener() + { + continueDrag_ = false; + } + ~AppListOnDragListener() override {} + bool OnDragStart(UIView& view, const DragEvent& event) override + { + UNUSED(view); + UNUSED(event); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Applist Ondragstart!!"); + continueDrag_ = true; + return false; + } -// bool OnDrag(UIView& view, const DragEvent& event) override -// { -// UNUSED(view); -// if (!continueDrag_) { -// WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AppList : Can not continue drag!!"); -// return false; -// } -// if ((event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT) && -// (event.GetDeltaX() > X_DRAG_OFFSET) && (event.GetDeltaX() > (DOUBLES * MATH_ABS(event.GetDeltaY())))) { -// WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Applist Ondrag!!"); -// NativeAbility::GetInstance().ChangeSlice(VIEW_MAIN_SAMPLE, TransitionType::TRANSITION_ZOOM); -// } + bool OnDrag(UIView& view, const DragEvent& event) override + { + UNUSED(view); + if (!continueDrag_) { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AppList : Can not continue drag!!"); + return false; + } + if ((event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT) && + (event.GetDeltaX() > X_DRAG_OFFSET) && (event.GetDeltaX() > (DOUBLES * MATH_ABS(event.GetDeltaY())))) { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Applist Ondrag!!"); + NativeAbility::GetInstance().ChangeSlice(VIEW_MAIN, TransitionType::TRANSITION_ZOOM); + } -// return false; -// } + return false; + } -// bool OnDragEnd(UIView& view, const DragEvent& event) override -// { -// UNUSED(view); -// UNUSED(event); -// return false; -// } -// private: -// bool continueDrag_{false}; -// }; -// } + bool OnDragEnd(UIView& view, const DragEvent& event) override + { + UNUSED(view); + UNUSED(event); + return false; + } +private: + bool continueDrag_{false}; +}; +} -// #endif // LIST_DESKTOP_FRAGMENT_H +#endif // LIST_DESKTOP_FRAGMENT_H diff --git a/code/sdk/application/wearable/n9/nativeapp/nativeui/applist/include/UIDesktopFragment.h b/code/sdk/application/wearable/n9/nativeapp/nativeui/applist/include/UIDesktopFragment.h index 34758a8d7..926e2cea2 100644 --- a/code/sdk/application/wearable/n9/nativeapp/nativeui/applist/include/UIDesktopFragment.h +++ b/code/sdk/application/wearable/n9/nativeapp/nativeui/applist/include/UIDesktopFragment.h @@ -1,37 +1,39 @@ -// /* -// * Copyright (c) CompanyNameMagicTag 2025-2025. All rights reserved. -// * Description: UIDesktopFragment.h -// * Author: -// * Create: 2025-07-07 -// */ +/* + * Copyright (c) CompanyNameMagicTag 2025-2025. All rights reserved. + * Description: UIDesktopFragment.h + * Author: + * Create: 2025-07-07 + */ -// #ifndef UI_DESKTOP_FRAGMENT_H -// #define UI_DESKTOP_FRAGMENT_H +#ifndef UI_DESKTOP_FRAGMENT_H +#define UI_DESKTOP_FRAGMENT_H -// #include "applist/include/AppItemView.h" -// #include "components/ui_fragment.h" -// #include "components/ui_list.h" -// #include "components/ui_view_group.h" -// #include "components/ui_scroll_view.h" -// #include "TransitionType.h" -// #include "ohos_types.h" -// #include "wearable_log.h" +#include "applist/include/AppItemView.h" +#include "components/ui_fragment.h" +#include "components/ui_list.h" +#include "components/ui_view_group.h" +#include "components/ui_scroll_view.h" +#include "TransitionType.h" +#include "ohos_types.h" +#include "wearable_log.h" +#include "themestyle/include/ThemeStyleModel.h" -// namespace OHOS { -// class UIDesktopFragment : public UIFragment, public UIView::OnClickListener, -// public ListScrollListener, public UIView::OnRotateListener { -// public: -// virtual void AddAppItemToList(const AppItem &item) = 0; -// virtual void ClearAppItemToList() = 0; -// virtual void RefreshAppList() = 0; -// void SetPosition(int16_t x, int16_t y, int16_t width, int16_t height); -// protected: -// uint16_t imgSize_ = 0; -// uint16_t imgDistance_ = 0; -// void OnCreateView(void* data) override {}; -// void OnDestroyView() override {}; -// bool SwitchView(AppViewId viewId, char *uid, TransitionType type, DesktopStyle style); -// }; -// } -// #endif // UI_DESKTOP_FRAGMENT_H \ No newline at end of file +namespace OHOS { +class UIDesktopFragment : public UIFragment, public UIView::OnClickListener, + public ListScrollListener, public UIView::OnRotateListener { +public: + virtual void AddAppItemToList(const AppItem &item) = 0; + virtual void ClearAppItemToList() = 0; + virtual void RefreshAppList() = 0; + void SetPosition(int16_t x, int16_t y, int16_t width, int16_t height); + +protected: + uint16_t imgSize_ = 0; + uint16_t imgDistance_ = 0; + void OnCreateView(void* data) override {}; + void OnDestroyView() override {}; + bool SwitchView(AppViewId viewId, char *uid, TransitionType type, ThemeStyle style); +}; +} +#endif // UI_DESKTOP_FRAGMENT_H \ No newline at end of file diff --git a/code/sdk/application/wearable/n9/nativeapp/nativeui/applist/src/AppItemView.cpp b/code/sdk/application/wearable/n9/nativeapp/nativeui/applist/src/AppItemView.cpp index 4b6fa81e7..30e7d61de 100644 --- a/code/sdk/application/wearable/n9/nativeapp/nativeui/applist/src/AppItemView.cpp +++ b/code/sdk/application/wearable/n9/nativeapp/nativeui/applist/src/AppItemView.cpp @@ -81,154 +81,4 @@ namespace OHOS { label_.SetTextColor(Color::Gray()); icon_.ResetTransParameter(); } - - HexagonsItemView::HexagonsItemView() - { - } - - HexagonsItemView::~HexagonsItemView() - { - } - - void HexagonsItemView::SetItemInfo(const AppItem &itemInfo) - { - itemInfo_ = itemInfo; - } - - AppViewId HexagonsItemView::GetViewId() - { - return static_cast(itemInfo_.id); - } - - const char *HexagonsItemView::GetAppUid() - { - return itemInfo_.uid; - } - - void FootballItemView::SetItemInfo(const AppItem &itemInfo) - { - itemInfo_ = itemInfo; - } - - AppViewId FootballItemView::GetViewId() - { - return static_cast(itemInfo_.id); - } - - const char *FootballItemView::GetAppUid() - { - return itemInfo_.uid; - } - - void WaterfallItemView::SetItemInfo(const AppItem &itemInfo) - { - itemInfo_ = itemInfo; - } - - AppViewId WaterfallItemView::GetViewId() - { - return static_cast(itemInfo_.id); - } - - const char *WaterfallItemView::GetAppUid() - { - return itemInfo_.uid; - } - /* ---------------------------------- 弧形列表 ---------------------------------- */ - #define ARC_SCALE_LIST_ITEM_WIDTH (440) - #define ARC_SCALE_LIST_ITEM_HEIGHT (120) - - #define ARC_SCALE_LIST_IMAGE_X (20) - #define ARC_SCALE_LIST_IMAGE_WIDTH (ARC_SCALE_LIST_ITEM_HEIGHT - 10) - #define ARC_SCALE_LIST_IMAGE_HEIGHT (ARC_SCALE_LIST_ITEM_HEIGHT - 10) - #define ARC_SCALE_LIST_IMAGE_Y ((ARC_SCALE_LIST_ITEM_HEIGHT - ARC_SCALE_LIST_IMAGE_HEIGHT) / 2) - - #define ARC_SCALE_LIST_TEXT_X (ARC_SCALE_LIST_IMAGE_X + ARC_SCALE_LIST_IMAGE_WIDTH + 20) - #define ARC_SCALE_LIST_TEXT_WIDTH (ARC_SCALE_LIST_ITEM_WIDTH - ARC_SCALE_LIST_TEXT_X) - #define ARC_SCALE_LIST_TEXT_HEIGHT (44) - #define ARC_SCALE_LIST_TEXT_Y ((ARC_SCALE_LIST_ITEM_HEIGHT - ARC_SCALE_LIST_TEXT_HEIGHT) / 2) - - ArcScaleListItemView::ArcScaleListItemView() - { - Resize(ARC_SCALE_LIST_ITEM_WIDTH, ARC_SCALE_LIST_ITEM_HEIGHT); - SetStyle(STYLE_BACKGROUND_OPA, OPA_OPAQUE); - SetStyle(STYLE_BACKGROUND_COLOR, 0xff191919); - SetStyle(STYLE_BORDER_RADIUS, 100); // 胶囊形状 - SetTouchable(true); - SetUpChild(); - } - - ArcScaleListItemView::~ArcScaleListItemView() - { - RemoveAll(); - if (image_ != nullptr) { - delete image_; - image_ = nullptr; - } - if (label_ != nullptr) { - delete label_; - label_ = nullptr; - } - } - - void ArcScaleListItemView::SetItemInfo(const AppItem &itemInfo) - { - itemInfo_ = itemInfo; - image_->SetSrc(itemInfo.iconSmall); - if(VIEW_EXTERN_APP != itemInfo.id) { - label_->SetTextId(itemInfo.TextId); - } else { - // printf("ArcScaleListItemView::SetItemInfo:%s\r\n",itemInfo.label); - label_->SetText(itemInfo.label); - } - } - - void ArcScaleListItemView::SetUpChild() - { - if (image_ == nullptr) { - image_ = new UIImageView(); - if (image_ == nullptr) { - return ; - } - } - image_->SetPosition(ARC_SCALE_LIST_IMAGE_X, ARC_SCALE_LIST_IMAGE_Y, ARC_SCALE_LIST_IMAGE_WIDTH, ARC_SCALE_LIST_IMAGE_HEIGHT); - image_->SetAutoEnable(false); - image_->SetResizeMode(UIImageView::FILL); - Add(image_); - /* -------------------------------------------------------------------------- */ - if (label_ == nullptr) { - label_ = new UILabelExt(); - if (label_ == nullptr) { - delete image_; - image_ = nullptr; - return ; - } - } - label_->SetPosition(ARC_SCALE_LIST_TEXT_X, ARC_SCALE_LIST_TEXT_Y, ARC_SCALE_LIST_TEXT_WIDTH, ARC_SCALE_LIST_TEXT_HEIGHT); - label_->SetStyle(STYLE_LINE_HEIGHT,44); - label_->SetStyle(STYLE_TEXT_FONT,38); - label_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 38); - label_->SetLineBreakMode(UILabel::LINE_BREAK_OSCILLATION); - label_->SetAlign(TEXT_ALIGNMENT_LEFT, TEXT_ALIGNMENT_TOP); - Add(label_); - } - AppViewId ArcScaleListItemView::GetViewId() - { - return (AppViewId)itemInfo_.id; - } - - const char *ArcScaleListItemView::GetAppUid() - { - return itemInfo_.uid; - } - - UILabelExt *ArcScaleListItemView::GetLabel(void) - { - return label_; - } - - UIImageView *ArcScaleListItemView::GetImage(void) - { - return image_; - } } diff --git a/code/sdk/application/wearable/n9/nativeapp/nativeui/applist/src/ApplistAdapter.cpp b/code/sdk/application/wearable/n9/nativeapp/nativeui/applist/src/ApplistAdapter.cpp index 3ce95f304..d90b1ba09 100644 --- a/code/sdk/application/wearable/n9/nativeapp/nativeui/applist/src/ApplistAdapter.cpp +++ b/code/sdk/application/wearable/n9/nativeapp/nativeui/applist/src/ApplistAdapter.cpp @@ -56,6 +56,7 @@ void ApplistAdapter::AddListItem(const AppItem &item) { listData_.push_back(item); } +#if 0 /* -------------------------------------------------------------------------- */ /* ---------------------------------- 弧形列表 ---------------------------------- */ ArcScaleListItemAdapter::ArcScaleListItemAdapter(){} @@ -495,4 +496,5 @@ void CircleListAdapter::native_app_position_update(UIImageView ** CircleListAPP, } /* -------------------------------------------------------------------------- */ /* -------------------------------------------------------------------------- */ +#endif } // namespace OHOS diff --git a/code/sdk/application/wearable/n9/nativeapp/nativeui/applist/src/ApplistModel.cpp b/code/sdk/application/wearable/n9/nativeapp/nativeui/applist/src/ApplistModel.cpp index eb0a8397d..5f851f837 100644 --- a/code/sdk/application/wearable/n9/nativeapp/nativeui/applist/src/ApplistModel.cpp +++ b/code/sdk/application/wearable/n9/nativeapp/nativeui/applist/src/ApplistModel.cpp @@ -12,12 +12,12 @@ #include "utils.h" #include "bundlems_slite_client.h" #include "wearable_log.h" - #include "UiConfig.h" #include "applist/include/ApplistModel.h" #include "applist/include/ApplistPresenter.h" #include "font/font_global_manager.h" #include "NativeRegisterManager.h" + namespace OHOS { #define FOOTBALL_PLANE_MAX_NUM 20 @@ -54,23 +54,22 @@ namespace OHOS { initFlag = flag; } - void ApplistModel::ResolvingJSAppItems(void) + void ApplistModel::CleanupApplistStrings(uint8_t nativeAppNumTotal) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ResolvingJSAppItems start\r"); -#ifdef JS_ENABLE - if (bundleInfos != nullptr) { - for (uint8_t i = 0; i < bundleLen; i++) { - ClearBundleInfo(bundleInfos + i); - } - - if (bundleInfos != nullptr) { - AdapterFree(bundleInfos); - bundleInfos = nullptr; - } + for (uint8_t i = nativeAppNumTotal; i < appLen; i++) { + free((void*)applist[i].iconSmall); + free((void*)applist[i].iconHexagon); + free((void*)applist[i].label); + free((void*)applist[i].uid); + applist[i].iconSmall = nullptr; + applist[i].iconHexagon = nullptr; + applist[i].label = nullptr; + applist[i].uid = nullptr; } -#endif - bundleLen = 0; - appLen = 0; + } + + void ApplistModel::ResolvingJSAppItems(void) + { List& nativeAppLists = NativeRegisterManager::GetInstance().GetNativeAppLists(); uint8_t registerNativeAppNum = nativeAppLists.Size(); if (registerNativeAppNum > APP_MAX_NUM) { @@ -83,34 +82,51 @@ namespace OHOS { applist[index] = appNode->data_; appNode = appNode->next_; } + CleanupApplistStrings(nativeAppNumTotal); + bundleLen = 0; + appLen = 0; appLen = nativeAppNumTotal; #ifdef JS_ENABLE int32_t len = 0; uint8_t ret = BundleMsClient::GetInstance().GetBundleInfos(0, &bundleInfos, &len); - printf("ResolvingJSAppItems GetBundleInfos ret = %d ,len = %d\r\n", ret, len); if ((ret == 0) && (len > 0) && (bundleInfos != nullptr)) { bundleLen = len; if (len > APP_MAX_NUM - nativeAppNumTotal) { len = APP_MAX_NUM - nativeAppNumTotal; } while (len--) { - applist[appLen] = { - VIEW_EXTERN_APP, - bundleInfos[len].smallIconPath, - bundleInfos[len].bigIconPath, - bundleInfos[len].label, - bundleInfos[len].bundleName - }; - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ResolvingJSAppItems bundleName is %s \r", bundleInfos[len].bundleName); - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ResolvingJSAppItems label is %s \r", bundleInfos[len].label); - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ResolvingJSAppItems smallIconPath is %s \r", bundleInfos[len].smallIconPath); - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ResolvingJSAppItems bigIconPath is %s \r", bundleInfos[len].bigIconPath); + char* smallIconPath = strdup(bundleInfos[len].smallIconPath); + char* bigIconPath = strdup(bundleInfos[len].bigIconPath); + char* label = strdup(bundleInfos[len].label); + char* bundleName = strdup(bundleInfos[len].bundleName); + applist[appLen] = AppItem( + VIEW_EXTERN_APP, // id + smallIconPath, // iconSmall + bigIconPath, + bigIconPath, // iconHexagon + label, // label + bundleName, // uid + 0 // labelId + ); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ResolvingJSAppItems bundleName is %s \r", bundleName); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ResolvingJSAppItems label is %s \r", label); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ResolvingJSAppItems smallIconPath is %s \r", smallIconPath); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ResolvingJSAppItems bigIconPath is %s \r", bigIconPath); appLen++; bundleInfos[len].abilityInfo = nullptr; } } else { WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "ResolvingJSAppItems GetBundleInfos ret = %d \r", ret); } + if (bundleInfos != nullptr) { + for (uint8_t i = 0; i < bundleLen; i++) { + ClearBundleInfo(bundleInfos + i); + } + if (bundleInfos != nullptr) { + AdapterFree(bundleInfos); + bundleInfos = nullptr; + } + } #endif } @@ -133,6 +149,18 @@ namespace OHOS { return startIndex; } + void ApplistModel::SetLastOffset(int16_t x, int16_t y) + { + lastOffsetX = x; + lastOffsetY = y; + } + + void ApplistModel::GetLastOffset(int16_t& x, int16_t& y) + { + x = lastOffsetX; + y = lastOffsetY; + } + void ApplistModel::SetHeadItemY(int y) { headItemY = y; @@ -160,74 +188,4 @@ namespace OHOS { { presenter = p; } - - AppListStyle ApplistModel::GetCurrentStyle(void) - { - return ThemeStyleModel::GetInstance().GetAppListDisplayStyle(); //根据显示样式界面设置的返回当前applit样式 - } - - /* -------------------------------------------------------------------------- */ - /* ---------------------------------- 弧形列表 ---------------------------------- */ - //设置弧形列表的起始位置 - void ApplistModel::SetArcListStartIndex(uint16_t index) - { - arcListstartIndex = index; - } - - //获取弧形列表的起始位置 - uint16_t ApplistModel::GetArcListStartIndex(void) - { - return arcListstartIndex; - } - - //设置弧形列表的头部位置 - void ApplistModel::GetArcListHeadItemY(int y) - { - arcListheadItemY = y; - } - //获取弧形列表的头部位置 - int ApplistModel::GetArcListHeadItemY(void) - { - return arcListheadItemY; - } - /* -------------------------------------------------------------------------- */ - /* ----------------------------------- 拨号盘 ---------------------------------- */ - // 设置拨号盘的起始角度 - void ApplistModel::SetCircleListStartAngle(int angle) - { - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,"SetCircleListStartAngle:%d\r\n",angle); - circleListStartAngle = angle; - } - - // 获取拨号盘的起始角度 - int ApplistModel::GetCircleListStartAngle(void) - { - return circleListStartAngle; - } - - // 设置当前选中的图片索引 - void ApplistModel::SetCurselectImageIndex(int index) - { - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,"SetCurselectImageIndex:%d\r\n",index); - curselectImageIndex = index; - } - - // 获取当前选中的图片索引 - int ApplistModel::GetCurselectImageIndex(void) - { - return curselectImageIndex; - } - - // 设置上一次选中的图片索引 - void ApplistModel::SetPreselectImageIndex(int index) - { - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,"SetPreselectImageIndex:%d\r\n",index); - preselectImageIndex = index; - } - - // 获取上一次选中的图片索引 - int ApplistModel::GetPreselectImageIndex(void) - { - return preselectImageIndex; - } } diff --git a/code/sdk/application/wearable/n9/nativeapp/nativeui/applist/src/ApplistPresenter.cpp b/code/sdk/application/wearable/n9/nativeapp/nativeui/applist/src/ApplistPresenter.cpp index d18c039ee..89bfa238d 100644 --- a/code/sdk/application/wearable/n9/nativeapp/nativeui/applist/src/ApplistPresenter.cpp +++ b/code/sdk/application/wearable/n9/nativeapp/nativeui/applist/src/ApplistPresenter.cpp @@ -6,265 +6,44 @@ */ #include "applist/include/ApplistPresenter.h" -#include "ability_manager.h" -#include "securec.h" -#include "components/ui_hexagons_list.h" -#include "components/ui_waterfall_list.h" -#include "TransitionType.h" #include "NativeRegisterManager.h" +#include "wearable_log.h" -#include "health/health_service/health_service.h" -#ifdef SUPPORT_BATTERY_SERVICE -#include "battery_hal.h" -#endif -#include "ConfigModelC.h" -#include "ConfigModel.h" -#include -#include "custom_runtime.h" -#include "graphic_service.h" namespace OHOS { - REGIST_SLICE(VIEW_APPLIST, ApplistView, ApplistPresenter); - ApplistPresenter::ApplistPresenter() - { - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ApplistPresenter::ApplistPresenter()"); - model = &ApplistModel::GetInstance(); - model->Init(); - model->SetPresenter(this); - } - - ApplistPresenter::~ApplistPresenter() - { - model->SetPresenter(nullptr); - } - - void ApplistPresenter::OnStart() - { - if (view_ == nullptr) { - return; - } - const AppItem *itemInfo = model->GetApplistItems(); - for (uint8 i = 0; i < model->GetAppListNum(); i++) { - view_->AddAppItemToList(itemInfo[i]); - } - view_->RefreshAppList(); - } - - void ApplistPresenter::OnResume() - { - if (GetCurrentStyle() == AppListStyle::FOOTBALL_STYLE) { - view_->StartFootBallAnimator(); - } else if (GetCurrentStyle() == AppListStyle::WATERFALL_STYLE) { - view_->ResumeWaterFallDraggable(); - } - RootView::GetInstance()->SetOnKeyActListener(KeyInputListener::GetInstance()); - } - - bool ApplistPresenter::OnRotate(UIView& view, const RotateEvent& event) - { - UICustomHexagonsList* hexagonsView = dynamic_cast(&view); - if (hexagonsView == nullptr) { - return false; - } - int8_t index = hexagonsView->GetFocusedImgIndex(); - uint8_t focusIndex_ = 0; - if (index >= 0) { - focusIndex_ = static_cast(index); - } - HexagonsItemView *itemView = dynamic_cast(hexagonsView->GetViewByIndex(focusIndex_)); - AppViewId viewId = itemView->GetViewId(); - if (FloatMore(hexagonsView->GetGlobalScale(), 2.0f)) { // 2.0 threshold for beginning transition - hexagonsView->StopRotateAnimator(); - NativeAbility::GetInstance().EnterSlice(viewId, TransitionType::TRANSITION_HEXAGONS); - hexagonsView->ClearFocus(); - } - return true; - } - - bool ApplistPresenter::OnClick(UIView &view, const ClickEvent &event) - { - UNUSED(event); - AppViewId viewId = VIEW_INVALID; - char *uid = nullptr; - TransitionType type = TransitionType::TRANSITION_INVALID; - AppListStyle style = GetCurrentStyle(); - if (style == AppListStyle::FOOTBALL_STYLE) { - FootballItemView *itemView = dynamic_cast(&view); - viewId = itemView->GetViewId(); - uid = (char *)itemView->GetAppUid(); - } else if (style == AppListStyle::HEXAGONS_STYLE) { - HexagonsItemView *itemView = dynamic_cast(&view); - UIHexagonsList *hexagonsView = dynamic_cast(itemView->GetParent()); - if (hexagonsView == nullptr || itemView == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "hexagonsView or itemView is nullptr"); - return false; - } - viewId = itemView->GetViewId(); - uid = (char *)itemView->GetAppUid(); - hexagonsView->SetDraggable(false); - hexagonsView->Scale(1.0f, itemView->GetViewIndex()); // switch focus to click view - type = TransitionType::TRANSITION_HEXAGONS; - } else if (style == AppListStyle::WATERFALL_STYLE) { - WaterfallItemView *itemView = dynamic_cast(&view); - UIWaterfallList *waterfallView = dynamic_cast(itemView->GetParent()); - if (waterfallView == nullptr || itemView == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "waterfallView or itemView is nullptr"); - return false; - } - viewId = itemView->GetViewId(); - uid = (char *)itemView->GetAppUid(); - waterfallView->SetDraggable(false); - waterfallView->Scale(1.0f, itemView->GetViewIndex()); - type = TransitionType::TRANSITION_WATERFALL; - } else if (style == AppListStyle::ARC_SCALE_LIST_STYLE) { - ArcScaleListItemView *itemView = dynamic_cast(&view); - if (nullptr == itemView) - { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ArcScaleListItemView or itemView is nullptr"); - return false; - } - viewId = itemView->GetViewId(); - uid = (char *)itemView->GetAppUid(); - } else if(style == AppListStyle::CIRCLE_LIST_STYLE) { - UIImageView *itemView = dynamic_cast(&view); - viewId = (AppViewId)itemView->GetViewIndex(); - if(viewId == VIEW_INVALID) - { - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "VIEW_INVALID -> %d", viewId); - return false; - } - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "viewId = %d", viewId); - type = TransitionType::TRANSITION_INVALID; - } else { - AppItemView *itemView = dynamic_cast(&view); - if (itemView == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "itemView is nullptr", viewId); - return false; - } - viewId = itemView->GetViewId(); - uid = (char *)itemView->GetAppUid(); - } - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ApplistPresenter::OnClick viewid = %d", viewId); - if (viewId < VIEW_MAX_INTER_APP) - { - /*心率Slice需要增加特殊配置*/ - bool isCharging = false; - #ifdef SUPPORT_BATTERY_SERVICE - isCharging = get_charge_stat(); // 获取充电状态 - #endif - if (isCharging && viewId == VIEW_HEART_CHART) - { - HealthState highHealthState; - highHealthState.checkType = CHARGE; - HealthService::GetInstance()->SetHealthCurrent(highHealthState); - viewId = VIEW_CHECK_INVALID; - } - if(uapi_sleep_mode_flag_get()) - { - if(VIEW_DNOTDISTURB == viewId) - return false; - } - NativeAbility::GetInstance().EnterSlice(viewId, type); - return true; - } - else if (viewId == VIEW_EXTERN_APP) - { -#ifdef JS_ENABLE - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ApplistPresenter::OnClick bundleName = %s", uid); - Want *want = new Want(); - memset_s(want, sizeof(Want), 0, sizeof(Want)); - ElementName startElement = {}; - startElement.abilityName = (char *)"default"; - startElement.bundleName = uid; - startElement.deviceId = nullptr; - SetWantElement(want, startElement); - if (viewId == VIEW_SETTING && style == AppListStyle::APPLIST_STYLE) { - StartAbilityWithAnimation(want, static_cast(type), true); - } else { - StartAbilityWithAnimation(want, static_cast(type), false); - } - ClearWant(want); - delete want; - return true; -#endif - } - return false; - } - - void ApplistPresenter::OnItemSelected(int16 index, UIView *view) - { - UNUSED(index); - if (view != nullptr) { - itemViewSele = static_cast(view); - itemViewSele->SelectedChange(); - - if (preItemViewSele != nullptr && preItemViewSele != itemViewSele) { - preItemViewSele->Reset(); - } - preItemViewSele = itemViewSele; - } - } - void ApplistPresenter::SetStartIndex(uint16_t index) - { - model->SetStartIndex(index); - - return; - } - - uint16_t ApplistPresenter::GetStartIndex(void) - { - return model->GetStartIndex(); - } - - void ApplistPresenter::SetHeadItemY(int y) - { - model->SetHeadItemY(y); - } - - int ApplistPresenter::GetHeadItemY(void) - { - return model->GetHeadItemY(); - } - - uint8_t ApplistPresenter::GetListItemNum(void) - { - return model->GetAppListNum(); - } - - AppListStyle ApplistPresenter::GetCurrentStyle(void) - { - return model->GetCurrentStyle(); - } +ApplistPresenter::ApplistPresenter() +{ + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ApplistPresenter::ApplistPresenter()"); + model = &ApplistModel::GetInstance(); + model->Init(); + model->SetPresenter(this); +} - ApplistView* ApplistPresenter::GetAppListView() - { - return view_; - } +ApplistPresenter::~ApplistPresenter() +{ + model->SetPresenter(nullptr); +} - /* ---------------------------------- 弧形列表 ---------------------------------- */ - //设置弧形列表起始索引 - void ApplistPresenter::SetArcListStartIndex(uint16_t index) - { - model->SetArcListStartIndex(index); +void ApplistPresenter::OnStart() +{ + if (view_ == nullptr) { return; } - - //获取弧形列表起始索引 - uint16_t ApplistPresenter::GetArcListStartIndex(void) - { - return model->GetArcListStartIndex(); + const AppItem *itemInfo = model->GetApplistItems(); + for (uint8 i = 0; i < model->GetAppListNum(); i++) { + view_->AddAppItemToList(itemInfo[i]); } + view_->RefreshAppList(); +} - //设置弧形列表头部Item的Y坐标 - void ApplistPresenter::SetArcListHeadItemY(int y) - { - model->GetArcListHeadItemY(y); - } +void ApplistPresenter::OnResume() +{ + view_->OnResume(); +} - //获取弧形列表头部Item的Y坐标 - int ApplistPresenter::GetArcListHeadItemY(void) - { - return model->GetArcListHeadItemY(); - } +ApplistView* ApplistPresenter::GetAppListView() +{ + return view_; +} } diff --git a/code/sdk/application/wearable/n9/nativeapp/nativeui/applist/src/ApplistView.cpp b/code/sdk/application/wearable/n9/nativeapp/nativeui/applist/src/ApplistView.cpp index 26c41b762..5d34ecabf 100644 --- a/code/sdk/application/wearable/n9/nativeapp/nativeui/applist/src/ApplistView.cpp +++ b/code/sdk/application/wearable/n9/nativeapp/nativeui/applist/src/ApplistView.cpp @@ -5,1097 +5,63 @@ * Create: 2021-09-18 */ -#include "components/ui_view_group.h" #include "applist/include/ApplistView.h" #include "applist/include/ApplistPresenter.h" -#include "applist/include/AppItemView.h" -#include "common/image_cache_manager.h" -#include "hal_tick.h" -#include "main/include/ModelListenerSample.h" -#include "common/screen.h" +#include "applist/include/DesktopFactory.h" +#include "themestyle/include/ThemeStyleModel.h" namespace OHOS { -static constexpr int16 NUM_2 = 2; -static constexpr int16 MAX_SCROLL_DIS = 1000; - -class AppCircleListOnDragListener; -static AppCircleListOnDragListener *AppCircleListOnDragListener_ = nullptr; - -ApplistView::ApplistView() -{ - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ApplistView::ApplistView "); -} - -ApplistView::~ApplistView() -{ - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ApplistView::~ApplistView "); - if (listAdapter_ != nullptr) { - delete listAdapter_; - listAdapter_ = nullptr; - } - if (contentList_ != nullptr) { - delete contentList_; - contentList_ = nullptr; - } - if (dragListener_ != nullptr) { - delete dragListener_; - dragListener_ = nullptr; - } - if (hexagonsList_ != nullptr) { - delete hexagonsList_; - hexagonsList_ = nullptr; - } - if (footballList_ != nullptr) { - delete footballList_; - footballList_ = nullptr; - } - if (waterfallList_ != nullptr) { - delete waterfallList_; - waterfallList_ = nullptr; - } - if (callback_ != nullptr) { - delete callback_; - callback_ = nullptr; - } - enterAnimator_ = nullptr; - /* -------------------------------------------------------------------------- */ - /* ---------------------------------- 弧形列表 ---------------------------------- */ - if(nullptr != ArcScaleListAdapter_) - { - delete ArcScaleListAdapter_; - ArcScaleListAdapter_ = nullptr; - } - if(nullptr != ArcScaleList_) - { - delete ArcScaleList_; - ArcScaleList_ = nullptr; - } - if(nullptr != ArcScaleListGroup_) - { - delete ArcScaleListGroup_; - ArcScaleListGroup_ = nullptr; - } - if(nullptr != ArcScaleListDragListener_) - { - delete ArcScaleListDragListener_; - ArcScaleListDragListener_ = nullptr; - } - /* -------------------------------------------------------------------------- */ - /* ----------------------------------- 拨号盘 ---------------------------------- */ - if(CircleListGroup_ != nullptr) - { - CircleListGroup_->RemoveAll(); - delete PointImage; - PointImage = nullptr; - delete CircleListSelectImage; - CircleListSelectImage = nullptr; - delete CircleListPicker; - CircleListPicker = nullptr; - delete CircleListScrollView; - CircleListScrollView = nullptr; - for(int i = 0;i < CircleListAPPNum;i++) - { - if(nullptr != CircleListAPP[i]) - { - delete CircleListAPP[i]; - CircleListAPP[i] = nullptr; - } - } - delete AppCircleListOnDragListener_; - AppCircleListOnDragListener_ = nullptr; - - delete CircleListGroup_; - CircleListGroup_ = nullptr; - } - /* -------------------------------------------------------------------------- */ -} - void ApplistView::OnStart() { - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ApplistView::OnStart start..."); - AppListStyle style = presenter_->GetCurrentStyle(); - if (style == AppListStyle::FOOTBALL_STYLE) { - FootballStyleOnStart(); - } else if (style == AppListStyle::HEXAGONS_STYLE) { - HexagonsStyleOnStart(); - } else if (style == AppListStyle::WATERFALL_STYLE) { - WaterfallStyleOnStart(); - } else if(style == AppListStyle::ARC_SCALE_LIST_STYLE) { - ArcScaleListStyleOnStart(); - } else if(style == AppListStyle::CIRCLE_LIST_STYLE) { - CircleListStyleOnStart(); - } else { - ListStyleOnStart(); - } -} - -void ApplistView::FootballStyleOnStart() -{ - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ApplistView::FootballStyleOnStart "); - if (footballList_ == nullptr) { - footballList_ = new UIIcosahedronView(); - } - footballList_->SetThrowDrag(true); - if (footballDefaultImg_ == nullptr) { - footballDefaultImg_ = ImageCacheManager::GetInstance().LoadSingleRes(PNG_APPLIST_NOTSETUSE_IMG); - if (footballDefaultImg_ == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "load res faild"); - return; - } - } - if (callback_ == nullptr) { - callback_ = new FootballAnimatorCallback(footballList_, 30, 200); // 30: Initial Size 200: Final display size - } - footballList_->SetDefaultImage(footballDefaultImg_); - footballList_->SetPosition(0, 0, GetRootContainer()->GetWidth(), GetRootContainer()->GetHeight()); - enterAnimator_ = callback_->GetAnimator(); - AddViewToRootContainer(footballList_); - if (callback_ != nullptr) { - callback_->SetStartTime(HALTick::GetInstance().GetTime()); - } -} - -void ApplistView::HexagonsStyleOnStart() -{ - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ApplistView::HexagonsStyleOnStart "); - if (hexagonsList_ == nullptr) { - hexagonsList_ = new UICustomHexagonsList(); - } - hexagonsList_->SetPosition(0, 0, GetRootContainer()->GetWidth(), GetRootContainer()->GetHeight()); // 2, two - imgDistance_ = hexagonsList_->GetWidth() * 0.25991; // 0.25991, empirical coefficient - imgSize_ = hexagonsList_->GetWidth() * 0.23348; // 0.23348, empirical coefficient - hexagonsList_->SetImageDistance(imgDistance_); - hexagonsList_->SetImageSizeInCenter(imgSize_); - int16_t blankSize = hexagonsList_->GetRelativeRect().GetWidth() > hexagonsList_->GetRelativeRect().GetHeight() ? - hexagonsList_->GetRelativeRect().GetWidth() / 2 : hexagonsList_->GetRelativeRect().GetHeight() / 2; // 2, half - hexagonsList_->SetScrollBlankSize(blankSize); - hexagonsList_->SetReboundSize(blankSize); - hexagonsList_->SetThrowDrag(true); - hexagonsList_->SetOnRotateListener(presenter_); - hexagonsList_->RequestFocus(); - AddViewToRootContainer(hexagonsList_); -} - -void ApplistView::WaterfallStyleOnStart() -{ - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ApplistView::WaterfallStyleOnStart "); - if (waterfallList_ == nullptr) { - waterfallList_ = new UIWaterfallList(); - } - waterfallList_->SetPosition(0, 0, GetRootContainer()->GetWidth(), GetRootContainer()->GetHeight()); - imgDistance_ = waterfallList_->GetWidth() * 0.25991; // 0.25991, empirical coefficient - imgSize_ = waterfallList_->GetWidth() * 0.23348; // 0.23348, empirical coefficient - waterfallList_->SetImageDistance(imgDistance_); - waterfallList_->SetImageSizeInCenter(imgSize_); - int16_t blankSize = waterfallList_->GetRelativeRect().GetWidth() > waterfallList_->GetRelativeRect().GetHeight() ? - waterfallList_->GetRelativeRect().GetWidth() / 2 : waterfallList_->GetRelativeRect().GetHeight() / 2; // 2, half - waterfallList_->SetThrowDrag(true); - uint16_t layoutHeight = static_cast(imgDistance_ * Sin(60)); - waterfallList_->SetReboundSize(layoutHeight); // 60: degree, row's layout height - waterfallList_->SetScrollBlankSize(layoutHeight, UIAbstractScroll::Direction::TOP); - waterfallList_->SetScrollBlankSize(Screen::GetInstance().GetHeight() / 2 - layoutHeight, // 2: half - UIAbstractScroll::Direction::BOTTOM); - waterfallList_->RequestFocus(); - waterfallList_->SetRotateFactor(10); // 10, empirical coefficient - waterfallList_->SetOnRotateListener(presenter_); - waterfallList_->SetTouchable(false); - waterfallList_->SetDraggable(false); // ensure that it can't be dragged during animation to avoid error display - AddViewToRootContainer(waterfallList_); -} -/* -------------------------------------------------------------------------- */ -/* ---------------------------------- 弧形列表 ---------------------------------- */ -#define ARC_SCALE_LIST_SCALE_FACTOR (440) -#define ARC_SCALE_LIST_X (13) -#define ARC_SCALE_LIST_Y (0) -#define ARC_SCALE_LIST_WIDTH (Screen::GetInstance().GetWidth() - ARC_SCALE_LIST_X) -#define ARC_SCALE_LIST_HEIGHT (Screen::GetInstance().GetHeight()) - -#if 1 -/** - * @brief 根据位置变换列表项的基础函数 - * - * 这个函数根据列表项在垂直列表中的位置来调整其缩放比例。它使用一个缓动函数来计算缩放比例,使得列表项在接近列表中心时逐渐放大,远离列表中心时逐渐缩小。 - * - * @param list 指向 UITransformList 类型的指针,代表要操作的列表。 - * @param item 指向 UIView 类型的指针,代表要变换的列表项。 - * @return 如果变换成功,返回 true;否则返回 false。 - */ -static bool TransformItemBaseOnPosition(UITransformList* list, UIView* item) -{ - // 检查传入的参数是否有效 - if (list == nullptr || item == nullptr) { - return false; - } - // 检查列表项的类型是否为 UI_TRANSFORM_GROUP - if (item->GetViewType() != UI_TRANSFORM_GROUP) { - return false; - } - // 将列表项转换为 UITransformGroup 类型 - UITransformGroup* group = dynamic_cast(item); - // 如果转换失败,返回 false - if (group == nullptr) { - return false; - } - // 获取列表项的宽度和高度 - int16_t w = group->GetWidth(); - int16_t h = group->GetHeight(); - // 如果列表的方向是垂直的 - if (list->GetDirection() == UIList::VERTICAL) { - // 计算列表的垂直中心位置 - int16_t midY = list->GetY() + (list->GetHeight() >> 1); - // 获取列表项的垂直位置 - int16_t y = group->GetY(); - // 计算列表项到列表中心的垂直偏移量 - int offset = (y + (h >> 1) - midY); - // 使用 SineEaseIn 缓动函数计算缩放比例 - int temp = EasingEquation::SineEaseIn(0, ARC_SCALE_LIST_SCALE_FACTOR, abs(offset), ARC_SCALE_LIST_SCALE_FACTOR); - // 计算最终的缩放比例 - float scale = 1.0 - (static_cast(temp) / ARC_SCALE_LIST_SCALE_FACTOR); - // 应用缩放比例到列表项 - group->Scale(Vector2(scale, scale), Vector2(w * 0.75, h >> 1)); - // 如果列表项在列表的中心区域,返回 true - if ((y <= midY) && (y + group->GetHeight() >= midY)) { - return true; - } - } - // 如果列表项不在列表的中心区域,返回 false - return false; -} -#else -static bool TransformItemBaseOnPosition(UITransformList* list, UIView* item) -{ - if (list == nullptr || item == nullptr) return false; - if (item->GetViewType() != UI_TRANSFORM_GROUP) return false; - - UITransformGroup* group = dynamic_cast(item); - if (group == nullptr) return false; - - const int16_t w = group->GetWidth(); - const int16_t h = group->GetHeight(); - if (list->GetDirection() != UIList::VERTICAL) return false; - - const int16_t midY = list->GetY() + (list->GetHeight() >> 1); - const int16_t y = group->GetY(); - const int offset = (y + (h >> 1) - midY); // 距中心偏移(+向下) - - // 1) 缩放(中心最大,远离越小) - // 基于现有 SineEaseIn,收敛更柔和;scale ∈ [minScale, 1.0] - static constexpr float kMinScale = 0.90f; // 两侧最小缩放 - static constexpr int kScaleMax = ARC_SCALE_LIST_SCALE_FACTOR; // 400 - const int eased = EasingEquation::SineEaseIn(0, kScaleMax, MATH_ABS(offset), kScaleMax); - float scale = 1.0f - (static_cast(eased) / kScaleMax); - if (scale < kMinScale) scale = kMinScale; - - // 2) 弧形位移(根据距中心的距离决定向右偏移,模拟圆弧) - // 简化:xShift 与 (1 - scale) 成正比;可根据视觉微调 kMaxXShift - static constexpr int16_t kMaxXShift = 40; // 两端最大右移像素 - const int16_t xShift = static_cast(kMaxXShift * (1.0f - scale)); - - // 3) 应用变换:先重置再设置,避免累计误差;以靠右的枢轴点缩放(让左侧圆图标更稳) - group->Scale(Vector2(scale, scale), Vector2(w * 0.75f, h * 0.5f)); - - // 4) UITransformGroup 支持平移变换(不改布局,仅视觉位移) - group->Translate(Vector2(xShift, 0)); - - // 5) 居中项高亮(胶囊背景 + 文字白色,非中心透明 + 灰字) - const bool isCenter = (y <= midY) && ((y + h) >= midY); - - // 访问子控件,改样式 - ArcScaleListItemView* arcItem = dynamic_cast(group); - if (arcItem != nullptr) { - UILabelExt* label = arcItem->GetLabel(); - if (label) { - label->SetTextColor(isCenter ? Color::White() : Color::Gray()); - } - } - - return isCenter; -} -#endif - -void ApplistView::ArcScaleListStyleOnStart(void) -{ - if(nullptr == ArcScaleListGroup_) { - ArcScaleListGroup_ = new UIViewGroup(); - if(nullptr == ArcScaleListGroup_) - return; - - ArcScaleListGroup_->SetPosition(0, 0, Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight()); - ArcScaleListGroup_->SetStyle(STYLE_BACKGROUND_OPA, OPA_OPAQUE); - ArcScaleListGroup_->SetStyle(STYLE_BACKGROUND_COLOR, Color::Black().full); - AddViewToRootContainer(ArcScaleListGroup_); - } - - if(nullptr == ArcScaleListAdapter_) - { - ArcScaleListAdapter_ = new ArcScaleListItemAdapter(); - if(nullptr == ArcScaleListAdapter_) - return; - - ArcScaleListAdapter_->SetItemClickListener(presenter_); - } - - if (nullptr == ArcScaleList_) - { - ArcScaleList_ = new UITransformList(UIList::VERTICAL); - if (nullptr == ArcScaleList_) - return; - - ArcScaleList_->SetPosition(ARC_SCALE_LIST_X, ARC_SCALE_LIST_Y, ARC_SCALE_LIST_WIDTH, ARC_SCALE_LIST_HEIGHT); - ArcScaleList_->SetItemTransformFunc(&TransformItemBaseOnPosition); - // ArcScaleList_->SetAdapter(ArcScaleListAdapter_); - ArcScaleList_->SetDraggable(true); - ArcScaleList_->SetThrowDrag(true); - ArcScaleList_->SetStyle(STYLE_BACKGROUND_OPA, OPA_TRANSPARENT); - // 让首尾元素也能滑动到屏幕中线处:在顶部/底部各预留半屏的空白区 - ArcScaleList_->SetScrollBlankSize(Screen::GetInstance().GetHeight() / 2, UIAbstractScroll::Direction::TOP); - ArcScaleList_->SetScrollBlankSize(Screen::GetInstance().GetHeight() / 2, UIAbstractScroll::Direction::BOTTOM); - ArcScaleList_->SetMaxScrollDistance(MAX_SCROLL_DIS); - ArcScaleList_->SetYScrollBarVisible(true); - // ArcScaleList_->SetScrollStateListener(presenter_); - ArcScaleList_->SetReboundSize(5); - ArcScaleList_->EnableAutoAlign(true); - ArcScaleList_->SetItemSpace(20); - ArcScaleList_->SetSelectPosition(ARC_SCALE_LIST_HEIGHT / 2); - ArcScaleList_->SetRotateFactor(1.0); - ArcScaleList_->RequestFocus(); - ArcScaleList_->RefreshList(); - - if(nullptr == ArcScaleListDragListener_) - { - ArcScaleListDragListener_ = new AppListOnDragListener(); - if (nullptr == ArcScaleListDragListener_) - return; - } - ArcScaleList_->SetOnDragListener(ArcScaleListDragListener_); - - ArcScaleListGroup_->Add(ArcScaleList_); - } -} -void ApplistView::ArcScaleListStyleOnSetUpView(void) -{ - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ApplistView::ArcScaleListStyleOnSetUpView [%d]", __LINE__); - if (ArcScaleList_ == nullptr || ArcScaleListAdapter_ == nullptr) { - return; - } - - uint16_t startIndex = 0; - int16_t headY = 0; - if (presenter_->GetArcListStartIndex() >= presenter_->GetListItemNum()) { - startIndex = presenter_->GetListItemNum() - 1; - headY = VERTICAL_RESOLUTION / NUM_2; - } else { - uint16_t presliceId = NativeAbility::GetInstance().GetPreSliceId(); - if (presliceId == VIEW_MAIN) //如果是从主页进入的,那么startIndex = 0,headY = 0 - { - startIndex = 0; - headY = 53; - } else { //如果是从其他页面进入的,那么startIndex = presenter_->GetArcListStartIndex(),headY = presenter_->GetArcListHeadItemY() - startIndex = presenter_->GetArcListStartIndex(); - headY = presenter_->GetArcListHeadItemY(); - } - if (headY == 0) { - headY = VERTICAL_RESOLUTION / NUM_2; - // headY = -42; - } - } - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[%d],startIndex = %d,headY = %d", __LINE__,startIndex,headY); - ArcScaleList_->SetStartIndex(startIndex);//设置起始索引。 - ArcScaleList_->SetAdapter(ArcScaleListAdapter_); - ArcScaleList_->ScrollBy(headY);//滚动到指定的 headY 位置。 - return; -} -//弧形列表 -void ApplistView::ArcScaleListStyleOnStop(void) -{ - if(nullptr != ArcScaleListGroup_) - { - ArcScaleListGroup_->RemoveAll(); - } - int16_t arclistHeadY = ArcScaleList_->GetChildrenHead()->GetY(); - int16_t arclistHeadIndex = ArcScaleList_->GetChildrenHead()->GetViewIndex(); - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[%d],listHeadY = %d,listHeadIndex = %d", __LINE__,arclistHeadY,arclistHeadIndex); - presenter_->SetArcListHeadItemY(arclistHeadY); //设置头部Y坐标 - presenter_->SetArcListStartIndex(arclistHeadIndex); //设置头部Index -} -/* -------------------------------------------------------------------------- */ -/* ----------------------------------- 拨号盘 ---------------------------------- */ -#include - -#include "cmath" -#include "vector" - -// 圆形表的圆心坐标和半径 -static const int CIRCLE_CENTER_X = 233; -static const int CIRCLE_CENTER_Y = 233; -static const int CIRCLE_RADIUS = 233; -static Point curpoint; -static Point prepoint; - -// 将触摸点坐标转换为相对于圆心的坐标 -static Point convertToRelativeCoordinates(const Point& point) -{ - Point relativePoint; - relativePoint.x = point.x - CIRCLE_CENTER_X; - relativePoint.y = point.y - CIRCLE_CENTER_Y; - return relativePoint; -} -// 使用 atan2 函数计算点与水平正方向的夹角(弧度制) -static double calculateAngle(const Point& point) -{ - double angle = std::atan2(point.y, point.x); - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "x:%d,y:%d",point.x,point.y); - return angle; -} -//获取是否是正向旋转 -static void isDirectRotate(const DragEvent& event,bool &isDirectRotate) -{ - // 计算当前点与水平正方向的夹角(弧度制) - double angle_cur = calculateAngle(curpoint); - // 计算上一次点与水平正方向的夹角(弧度制) - double angle_pre = calculateAngle(prepoint); - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "angle_cur:%lf,angle_pre:%lf",angle_cur,angle_pre); - - // 判断滑动方向,通过比较角度差值 - bool isDirectRotateTemp = isDirectRotate; - double angleDiff = angle_cur - angle_pre; - if (angleDiff >= 0) - { - isDirectRotate = true; - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "顺时针滑动"); - } - else - { - isDirectRotate = false; - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "逆时针滑动"); - } - if((angle_cur < 0 && angle_pre > 0) || (angle_cur > 0 && angle_pre < 0)) - { - isDirectRotate = isDirectRotateTemp; - if(isDirectRotateTemp) - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "逆时针滑动->顺时针滑动"); - else - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "顺时针滑动->逆时针滑动"); + if (desktopFragment_ != nullptr) { + OnStop(); } + ThemeStyle style = ThemeStyleModel::GetInstance().GetAppListDisplayStyle(); //根据显示样式界面设置的返回当前applit样式 + desktopFragment_ = DesktopFactory::GetInstance().CreateDesktopStyle(style); + desktopFragment_->SetPosition(0, 0, GetRootContainer()->GetWidth(), GetRootContainer()->GetHeight()); + desktopFragment_->CreateView(); + AddViewToRootContainer(desktopFragment_->GetFragmentView()); } -class AppCircleListOnDragListener : public UIView::OnDragListener, - public UIPicker::SelectedListener, - public UIView::OnRotateListener, - public ::OHOS::ModelListenerSample - +void ApplistView::OnStop() { -public: - AppCircleListOnDragListener(UIImageView ** CircleListAPP_,int CircleListAPPNum_,UIImageView *CircleListSelectImage_) - { - CircleListAPP = CircleListAPP_; - CircleListAPPNum = CircleListAPPNum_; - CircleListSelectImage = CircleListSelectImage_; - angle = ApplistModel::GetInstance().GetCircleListStartAngle(); - } - ~AppCircleListOnDragListener(){} - bool OnDragStart(UIView& view, const DragEvent& event) override - { - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AppCircleListOnDragListener::OnDragStart"); - if(!isEncoderEvent) //如果此时编码器未旋转 - { - isDragEvent = true; - prepoint = convertToRelativeCoordinates(event.GetStartPoint()); - preX = event.GetStartPoint().x; - preY = event.GetStartPoint().y; - dragstartTimeStamp = event.GetTimeStamp(); - } - return true; - } - - bool OnDrag(UIView& view, const DragEvent& event) override - { - if(isDragEvent) - { - int curX = event.GetCurrentPos().x; - int curY = event.GetCurrentPos().y; - int deltaX = abs(curX - preX); - int deltaY = abs(curY - preY); - if (deltaX < 8 && deltaY < 8) - { - return false; - } - curpoint = convertToRelativeCoordinates(event.GetCurrentPos()); - /* -------------------------------------------------------------------------- */ - isDirectRotate(event,isDirectRotateFlag); - angle += (isDirectRotateFlag ? CircleListAdapter::angleIncrement : - CircleListAdapter::angleIncrement); - CircleListAdapter::CircleListAdapter::native_app_position_update(CircleListAPP,CircleListAPPNum,CircleListSelectImage,angle,isDirectRotateFlag); - /* -------------------------------------------------------------------------- */ - prepoint = curpoint; - preX = curX; - preY = curY; - /* -------------------------------------------------------------------------- */ - } - return true; - } - - bool OnDragEnd(UIView& view, const DragEvent& event) override - { - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AppCircleListOnDragListener::OnDragEnd"); - if(isDragEvent) - { - dragendTimeStamp = event.GetTimeStamp(); - dragDuration = dragendTimeStamp - dragstartTimeStamp; - // OnDragEndFlag = (dragDuration >= 25 ? 1 : 0);//点击应用的时候容易产生滑动,小于25ms的屏蔽 - OnDragEndFlag = 1; - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "dragDuration:%d,dragstartTimeStamp:%d,dragendTimeStamp:%d",dragDuration,dragstartTimeStamp,dragendTimeStamp); - int deltaX = abs(event.GetLastPoint().x - event.GetStartPoint().x); - int deltaY = abs(event.GetLastPoint().y - event.GetStartPoint().y); - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "拖动时间:%d 毫秒,deltaX:%d,deltaY:%d",dragDuration,deltaX,deltaY); - } - return true; - } - - - void ResetState() - { - OnDragEndFlag = 0; - isInitialized = false; - inertiaDragAngle = 0; - isDragEvent = false; - if (isEncoderEvent) - { - CircleListAdapter::angleIncrement = 10;//还原为drag的角度 - isEncoderEvent = false; - custom_VibratorFunc_int(0); - } - } - - void Notify() override - { - if (!OnDragEndFlag) { - return; // Early return if there's no drag end - } - static int targetAngle = 0;// 目标角度:就是等下惯性要滑多少角度 - static int timeIndex = 0; - - if(!isInitialized) { - isInitialized = true; - - // Define target angles based on drag duration - std::vector targetAngles = {0, 30, 60, 90, 150,180,210,240,270,300}; - // 根据滑动时间确定对应的目标角度索引 - uint32_t minDragDuration = 0; // 假设的最短滑动时间,单位:毫秒,可调整 - uint32_t maxDragDuration = 1400; // 假设的最长滑动时间,单位:毫秒,可调整 - - if (dragDuration < minDragDuration) { - // dragDuration = minDragDuration; // 时间过短,按最短时间处理,避免索引越界等问题 - } else if (dragDuration > maxDragDuration) { - dragDuration = maxDragDuration; // 时间过长,按最长时间处理 - } - uint32_t durationRange = maxDragDuration - minDragDuration; - - - // Calculate the target angle index - timeIndex = (dragDuration) / (durationRange / targetAngles.size()); - timeIndex = std::min(timeIndex, static_cast(targetAngles.size() - 1)); // 防止越界 - targetAngle = targetAngles[timeIndex]; - } - - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "拖动时间:%d 毫秒,当前角度:%d,目标角度:%d,时间索引:%d", dragDuration, angle, targetAngle, timeIndex); - // 根据旋转方向确定角度增量的正负以及计算角度增量大小 - int angleIncrementSign = isDirectRotateFlag ? 1 : -1; - - if(targetAngle != 0) { - if(inertiaDragAngle != targetAngle) { - angle += (angleIncrementSign * CircleListAdapter::angleIncrement); - inertiaDragAngle += abs(angleIncrementSign * CircleListAdapter::angleIncrement); - } else if(inertiaDragAngle == targetAngle && angle % 30 != 0) { - angle += (angleIncrementSign * CircleListAdapter::angleIncrement); //还要再次补充角度 - } else if(inertiaDragAngle == targetAngle && angle % 30 == 0) { - // Reset state when target angle is reached - ResetState(); - return; - } - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "inertiaDragAngle:%d,angle:%d",inertiaDragAngle,angle); - // 调用视图更新函数,实时更新界面显示 - CircleListAdapter::native_app_position_update(CircleListAPP, CircleListAPPNum, CircleListSelectImage, angle, isDirectRotateFlag); - } else { - if(angle % 30 == 0) { - ResetState(); - } else { - angle += (isDirectRotateFlag? CircleListAdapter::angleIncrement : -CircleListAdapter::angleIncrement); - CircleListAdapter::native_app_position_update(CircleListAPP,CircleListAPPNum,CircleListSelectImage,angle,isDirectRotateFlag); - } - } + if (desktopFragment_ == nullptr) { return; } - - bool OnRotateStart(UIView& view, const RotateEvent& event) - { - if(!isDragEvent) //如果此时未拖拽 - { - isEncoderEvent = true; - CircleListAdapter::angleIncrement = 15; - preRotateAngle = angle; - } - return false; - } - - bool OnRotate(UIView& view, const RotateEvent& event) - { - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AppCircleListOnDragListener::OnRotate %d",event.GetRotate()); - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "OnRotate回调次数%d",++RotateReportedCount); - if(isEncoderEvent) - { - ++RotateReportedCount; - if(RotateReportedCount > 4) - { - if(event.GetRotate() > 0) - { - isDirectRotateFlag = true; - angle += CircleListAdapter::angleIncrement; - CircleListAdapter::native_app_position_update(CircleListAPP,CircleListAPPNum,CircleListSelectImage,angle,isDirectRotateFlag); - } - else - { - isDirectRotateFlag = false; - angle -= CircleListAdapter::angleIncrement; - CircleListAdapter::native_app_position_update(CircleListAPP,CircleListAPPNum,CircleListSelectImage,angle,isDirectRotateFlag); - } - } - } - return false; - } - bool OnRotateEnd(UIView& view, const RotateEvent& event) - { - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AppCircleListOnDragListener::OnRotateEnd %d",event.GetRotate()); - if(isEncoderEvent) - { - if(angle % 30 == 0) - { - CircleListAdapter::angleIncrement = 10; //还原为drag的角度 - OnDragEndFlag = 0; //不需要补偿角度 - isEncoderEvent = false; - if(preRotateAngle != angle) - { - custom_VibratorFunc_int(0); - } - } - else - { - OnDragEndFlag = 1; - } - RotateReportedCount = 0; - rotateangle = 0; - dragDuration = 0; - } - return false; - } - - private: - UIImageView **CircleListAPP{nullptr}; //图片组件数组 - UIImageView *CircleListSelectImage{nullptr}; //中间选中图片的图片组件 - int CircleListAPPNum{0}; //图片组件数量 - int angle = 0; //要旋转角度 - int rotateangle{0}; //旋转累计角度 - uint8_t OnDragEndFlag{0}; //是否拖拽结束的标志 - bool isDirectRotateFlag{false}; //是否是正向旋转的标志 - int preX{0}; - int preY{0}; - - bool isEncoderEvent{false}; //是否为编码器事件 - bool isDragEvent{false}; //是否为拖拽事件 - int RotateReportedCount{0}; - - uint32_t dragstartTimeStamp{0}; //开始拖拽时的时间戳 - uint32_t dragendTimeStamp{0}; //拖拽结束时的时间戳 - uint32_t dragDuration{0}; //拖拽时间 - int inertiaDragAngle{0}; //惯性拖拽角度 - bool isInitialized {false}; - int preRotateAngle{0}; -}; - -void ApplistView::CircleListStyleOnStart(void) -{ - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ApplistView::CircleListStyleOnStart start!! [%d]", __LINE__); - if(nullptr == CircleListGroup_) - { - CircleListGroup_ = new UIViewGroup(); - if(nullptr == CircleListGroup_) - { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ApplistView::CircleListGroup_ failed!! [%d]", __LINE__); - return; - } - CircleListGroup_->SetPosition(0, 0); - CircleListGroup_->Resize(HORIZONTAL_RESOLUTION, VERTICAL_RESOLUTION); - CircleListGroup_->SetStyle(STYLE_BACKGROUND_OPA, OPA_OPAQUE); - CircleListGroup_->SetStyle(STYLE_BACKGROUND_COLOR, Color::Black().full); - CircleListGroup_->SetTouchable(true); - CircleListGroup_->SetDraggable(true); - AddViewToRootContainer(CircleListGroup_); - /* -------------------------------------------------------------------------- */ - if (CircleListPicker == nullptr) - { - CircleListPicker = new UIPicker(); - if (CircleListPicker == nullptr) - { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "CircleListPicker new fail!"); - return; - } - CircleListPicker->SetPosition(213, 213, 40, 40); - CircleListPicker->SetStyle(STYLE_BACKGROUND_COLOR, 0xffffffff); - CircleListPicker->SetStyle(STYLE_BACKGROUND_OPA, 0x00); - CircleListPicker->SetStyle(STYLE_BORDER_RADIUS, 150); - CircleListPicker->SetItemHeight(30); - CircleListPicker->SetLoopState(true); - CircleListPicker->SetRotateFactor(1.0); - CircleListPicker->RequestFocus(); - CircleListPicker->SetLoopState(true); - CircleListPicker->SetTextColor(Color::GetColorFromRGBA(0x00, 0x00, 0x00, 0xff), Color::GetColorFromRGBA(0xff, 0x00, 0x00, 0xff)); - CircleListPicker->SetSelected(1); - int start = 1; - int end = 3; - CircleListPicker->SetValues(start,end); - } - /* -------------------------------------------------------------------------- */ - if(CircleListScrollView == nullptr) - { - CircleListScrollView = new UIScrollView(); - if(nullptr == CircleListScrollView) - { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ApplistView::CircleListScrollView failed!! [%d]", __LINE__); - return; - } - CircleListScrollView->SetPosition(213, 213, 40, 40); - CircleListScrollView->SetStyle(STYLE_BACKGROUND_COLOR, 0xffffffff); - CircleListScrollView->SetStyle(STYLE_BACKGROUND_OPA, 0x00); - CircleListScrollView->SetStyle(STYLE_BORDER_RADIUS, 150); - CircleListScrollView->SetRotateFactor(30.0); - CircleListScrollView->RequestFocus(); - CircleListGroup_->Add(CircleListScrollView); - } - /* -------------------------------------------------------------------------- */ - CircleListAPPNum = sizeof(CircleListAPP) / sizeof(CircleListAPP[0]);//图片显示数量 - /* -------------------------------------------------------------------------- */ - for(int i = 0;i < CircleListAPPNum ;i++) - { - if(nullptr == CircleListAPP[i]) - { - CircleListAPP[i] = new UIImageView(); - if(nullptr == CircleListAPP[i]) - { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ApplistView::CircleListStyleOnStart failed!! [%d]", __LINE__); - return; - } - CircleListAPP[i]->SetAutoEnable(false); - CircleListAPP[i]->SetResizeMode(UIImageView::SCALE_DOWN); - CircleListAPP[i]->SetSrc(ApplistModel::GetInstance().GetApplistItems()[i].iconSmall); - CircleListAPP[i]->SetViewIndex(ApplistModel::GetInstance().GetApplistItems()[i].id); - CircleListAPP[i]->SetTouchable(true); - CircleListAPP[i]->SetOnClickListener(presenter_); - } - CircleListGroup_->Add(CircleListAPP[i]); // Add the UIImageView to the UIViewGroup (CircleListGroup_) - } - /* -------------------------------------------------------------------------- */ - uint16_t presliceId = NativeAbility::GetInstance().GetPreSliceId(); - if (presliceId == VIEW_MAIN || presliceId == VIEW_THEME_STYLE) //如果是从主页进入的,那么 startangle = 0 - { - ApplistModel::GetInstance().SetCircleListStartAngle(0); - ApplistModel::GetInstance().SetCurselectImageIndex(6); - ApplistModel::GetInstance().SetPreselectImageIndex(6); - } - CircleListAdapter::native_app_position_init(CircleListAPP,CircleListAPPNum,ApplistModel::GetInstance().GetCircleListStartAngle()); - /* -------------------------------------------------------------------------- */ - if(nullptr == PointImage) - { - PointImage = new UIImageView(); - if(nullptr == PointImage) - { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ApplistView::PointImage failed!! [%d]", __LINE__); - return; - } - PointImage->SetPosition(330, 233, 10, 10); - PointImage->SetStyle(STYLE_BACKGROUND_COLOR, 0xffffffff); - PointImage->SetStyle(STYLE_BACKGROUND_OPA, 0xff); - PointImage->SetStyle(STYLE_BORDER_RADIUS, 200); - CircleListGroup_->Add(PointImage); - } - /* -------------------------------------------------------------------------- */ - if(CircleListSelectImage == nullptr) - { - CircleListSelectImage = new UIImageView(); - if(nullptr == CircleListSelectImage) - { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ApplistView::CircleListSelectImage failed!! [%d]", __LINE__); - return; - } - CircleListSelectImage->SetPosition(153, 153,160,160); - CircleListSelectImage->SetAutoEnable(false); - CircleListSelectImage->SetResizeMode(UIImageView::SCALE_DOWN); - CircleListSelectImage->SetSrc(ApplistModel::GetInstance().GetApplistItems()[ApplistModel::GetInstance().GetCurselectImageIndex()].iconLarge); - CircleListSelectImage->SetViewIndex(ApplistModel::GetInstance().GetApplistItems()[ApplistModel::GetInstance().GetCurselectImageIndex()].id); - CircleListSelectImage->SetTouchable(true); - CircleListSelectImage->SetOnClickListener(presenter_); - CircleListGroup_->Add(CircleListSelectImage); - } - /* -------------------------------------------------------------------------- */ - if(nullptr == AppCircleListOnDragListener_) - { - AppCircleListOnDragListener_ = new AppCircleListOnDragListener(CircleListAPP,CircleListAPPNum,CircleListSelectImage); - if (nullptr == AppCircleListOnDragListener_) - { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ApplistView::AppCircleListOnDragListener_ failed!! [%d]", __LINE__); - return; - } - } - CircleListGroup_->SetOnDragListener(static_cast(AppCircleListOnDragListener_)); - CircleListScrollView->SetOnRotateListener(static_cast(AppCircleListOnDragListener_)); - /* -------------------------------------------------------------------------- */ - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ApplistView::CircleListStyleOnStart success!! [%d]", __LINE__); - } - return; -} -void ApplistView::CircleListStyleOnSetUpView(void) -{ - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ApplistView::CircleListStyleOnSetUpView [%d]", __LINE__); - return; -} -void ApplistView::CircleListStyleOnStop(void) -{ - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ApplistView::CircleListStyleOnStop [%d]", __LINE__); - return; + desktopFragment_->DestroyView(); + delete desktopFragment_; + desktopFragment_ = nullptr; } -/* -------------------------------------------------------------------------- */ -void ApplistView::ListStyleOnStart() +void ApplistView::OnResume() { - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ApplistView::ListStyleOnStart"); - listAdapter_ = new ApplistAdapter(); - if (listAdapter_ == nullptr) { - return; - } - listAdapter_->SetItemClickListener(presenter_); - - contentList_ = new UIList(UIList::VERTICAL); - if (contentList_ == nullptr) { - return; - } - contentList_->SetPosition(0, 0); - contentList_->Resize(HORIZONTAL_RESOLUTION, VERTICAL_RESOLUTION); - contentList_->SetScrollBlankSize(VERTICAL_RESOLUTION / NUM_2); - contentList_->SetSelectPosition(VERTICAL_RESOLUTION / NUM_2); // middle position - contentList_->SetDraggable(true); - contentList_->SetThrowDrag(true); - contentList_->EnableAutoAlign(true); - contentList_->SetScrollStateListener(presenter_); - contentList_->SetMaxScrollDistance(MAX_SCROLL_DIS); - contentList_->SetYScrollBarVisible(true); - contentList_->RequestFocus(); // 确保列表获得焦点 - - dragListener_ = new AppListOnDragListener(); - if (dragListener_ == nullptr) { + if (desktopFragment_ == nullptr) { return; } - contentList_->SetOnDragListener(dragListener_); - AddViewToRootContainer(contentList_); -} - -void ApplistView::ResumeWaterFallDraggable() -{ - if (waterfallList_ != nullptr) { - waterfallList_->SetTouchable(true); - waterfallList_->SetDraggable(true); // resume touchable after transition animation - } -} - -void ApplistView::StartFootBallAnimator() -{ - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ApplistView::StartFootBallAnimator"); - if (enterAnimator_ != nullptr) { - enterAnimator_->Start(); - } -} - -void ApplistView::OnStop() -{ - AppListStyle style = presenter_->GetCurrentStyle(); - if (style == AppListStyle::FOOTBALL_STYLE) { - FootballStyleOnStop(); - } else if (style == AppListStyle::HEXAGONS_STYLE) { - HexagonsStyleOnStop(); - } else if (style == AppListStyle::WATERFALL_STYLE) { - WaterfallStyleOnStop(); - } else if (style == AppListStyle::ARC_SCALE_LIST_STYLE) { - ArcScaleListStyleOnStop(); - } else if (style == AppListStyle::CIRCLE_LIST_STYLE) { - CircleListStyleOnStop(); - } else { - ListStyleOnStop(); - } - return; -} - -void ApplistView::FootballStyleOnStop() -{ - if (enterAnimator_ != nullptr) { - enterAnimator_->Stop(); - } - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ApplistView::FootballStyleOnStop"); - if (footballDefaultImg_ != nullptr) { - ImageCacheManager::GetInstance().UnloadSingleRes(PNG_APPLIST_NOTSETUSE_IMG); - footballDefaultImg_ = nullptr; - } - if (footballList_ != nullptr) { - footballList_->RemoveAll(); - } - ListNode* viewNode = footballItemList_.Head(); - while (viewNode != footballItemList_.End()) { - delete(viewNode->data_); - viewNode = viewNode->next_; - } - footballItemList_.Clear(); -} - -void ApplistView::HexagonsStyleOnStop() -{ - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ApplistView::HexagonsStyleOnStop"); - if (hexagonsList_ != nullptr) { - hexagonsList_->RemoveAll(); - } - ListNode* viewNode = listHexagonsView_.Head(); - while (viewNode != listHexagonsView_.End()) { - delete(viewNode->data_); - viewNode = viewNode->next_; - } - listHexagonsView_.Clear(); -} - -void ApplistView::WaterfallStyleOnStop() -{ - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ApplistView::WaterfallStyleOnStop"); - if (waterfallList_ != nullptr) { - waterfallList_->RemoveAll(); - } - ListNode* viewNode = waterfallItemList_.Head(); - while (viewNode != waterfallItemList_.End()) { - delete(viewNode->data_); - viewNode = viewNode->next_; - } - waterfallItemList_.Clear(); -} - -void ApplistView::ListStyleOnStop() -{ - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ApplistView::ListStyleOnStop"); - int16_t listHeadY = contentList_->GetChildrenHead()->GetY(); - int16_t listHeadIndex = contentList_->GetChildrenHead()->GetViewIndex(); - presenter_->SetHeadItemY(listHeadY); - presenter_->SetStartIndex(listHeadIndex); + desktopFragment_->ResumeView(); } void ApplistView::AddAppItemToList(const AppItem &item) { - AppListStyle style = presenter_->GetCurrentStyle(); - if (style == AppListStyle::FOOTBALL_STYLE) { - FootballItemView *itemView = new FootballItemView(); - itemView->SetItemInfo(item); - itemView->SetSrc(item.iconHexagon); - itemView->SetTouchable(true); - itemView->SetOnClickListener(presenter_); - footballList_->Add(itemView); - footballItemList_.PushBack(itemView); - } else if (style == AppListStyle::HEXAGONS_STYLE) { - HexagonsItemView *itemView = new HexagonsItemView(); - itemView->SetItemInfo(item); - itemView->SetSrc(item.iconSmall); - itemView->SetTouchable(true); - itemView->SetOnClickListener(presenter_); - hexagonsList_->Add(itemView); - listHexagonsView_.PushBack(itemView); - } else if (style == AppListStyle::WATERFALL_STYLE) { - WaterfallItemView *itemView = new WaterfallItemView(); - itemView->SetItemInfo(item); - itemView->SetSrc(item.iconSmall); - itemView->SetTouchable(true); - itemView->SetOnClickListener(presenter_); - waterfallList_->Add(itemView); - waterfallItemList_.PushBack(itemView); - } else if(style == AppListStyle::ARC_SCALE_LIST_STYLE) { - ArcScaleListAdapter_->AddListItem(item); - } else if(style == AppListStyle::CIRCLE_LIST_STYLE) { - //拨号盘 - } else { - listAdapter_->AddListItem(item); + if (desktopFragment_ == nullptr) { + return; } + desktopFragment_->AddAppItemToList(item); } void ApplistView::ClearAppItemToList() { - AppListStyle style = presenter_->GetCurrentStyle(); - if (style == FOOTBALL_STYLE) { - FootballStyleOnStop(); - } else if (style == AppListStyle::HEXAGONS_STYLE) { - HexagonsStyleOnStop(); - } else if (style == AppListStyle::WATERFALL_STYLE) { - WaterfallStyleOnStop(); - } else if(style == AppListStyle::ARC_SCALE_LIST_STYLE) { - ArcScaleListStyleOnStop(); - } else if(style == AppListStyle::CIRCLE_LIST_STYLE) { - CircleListStyleOnStop(); - } else { - listAdapter_->ClearItem(); - } -} - -void ApplistView::RefreshAppList(void) -{ - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ApplistView::RefreshAppList"); - AppListStyle style = presenter_->GetCurrentStyle(); - if (style == AppListStyle::FOOTBALL_STYLE) { - footballList_->RefreshIcosahedron(); - } else if (style == AppListStyle::HEXAGONS_STYLE) { - hexagonsList_->LayoutChildren(true); - } else if (style == AppListStyle::WATERFALL_STYLE) { - waterfallList_->LayoutChildren(true); - } else if (style == AppListStyle::ARC_SCALE_LIST_STYLE) { - ArcScaleListStyleOnSetUpView(); - } else if (style == AppListStyle::CIRCLE_LIST_STYLE) { - // 拨号盘 - } else { - uint16_t startIndex = 0; - int16_t headY = 0; - if (presenter_->GetStartIndex() >= presenter_->GetListItemNum()) { - startIndex = presenter_->GetListItemNum() - 1; - headY = VERTICAL_RESOLUTION / NUM_2; - } else { - startIndex = presenter_->GetStartIndex(); - headY = presenter_->GetHeadItemY(); - if (headY == 0) { - headY = VERTICAL_RESOLUTION / NUM_2; - } - } - contentList_->SetAdapter(listAdapter_); - contentList_->ScrollTo(startIndex); - contentList_->ScrollBy(headY); - contentList_->RefreshList(); + if (desktopFragment_ == nullptr) { + return; } + desktopFragment_->ClearAppItemToList(); } -void FootballAnimatorCallback::Callback(UIView *view) +void ApplistView::RefreshAppList() { - if (HALTick::GetInstance().GetElapseTime(startTime_) < 300) { // 300, empirical coefficient + if (desktopFragment_ == nullptr) { return; } - if (!isStartAnim_) { - animator_->Stop(); - animator_->Start(); - isStartAnim_ = true; - } - UIIcosahedronView* footView = dynamic_cast(view); - int16_t el = EasingEquation::LinearEaseNone(startPos_, endPos_, animator_->GetRunTime(), animator_->GetTime()); - footView->SetSideLength(el); - footView->RefreshIcosahedron(); - const Vector3 rotateStart(Screen::GetInstance().GetWidth() / 2.0, // 2.0: divisor - Screen::GetInstance().GetHeight() / 2.0, 0); // 2.0: divisor - const Vector3 rotateEnd(0, 0, 0); - // 270 : stop angle - int16_t angle = EasingEquation::LinearEaseNone(0, 270, animator_->GetRunTime(), animator_->GetTime()); - footView->RotatePlanes(angle, rotateStart, rotateEnd); + desktopFragment_->RefreshAppList(); } } diff --git a/code/sdk/application/wearable/n9/nativeapp/nativeui/applist/src/DesktopFactory.cpp b/code/sdk/application/wearable/n9/nativeapp/nativeui/applist/src/DesktopFactory.cpp index fa943b280..c85405020 100644 --- a/code/sdk/application/wearable/n9/nativeapp/nativeui/applist/src/DesktopFactory.cpp +++ b/code/sdk/application/wearable/n9/nativeapp/nativeui/applist/src/DesktopFactory.cpp @@ -1,37 +1,37 @@ -// /* -// * Copyright (c) CompanyNameMagicTag 2025. All rights reserved. -// * Description: DesktopFactory -// * Author: -// * Create: 2025-07 -// */ +/* + * Copyright (c) CompanyNameMagicTag 2025. All rights reserved. + * Description: DesktopFactory + * Author: + * Create: 2025-07 + */ -// #include "applist/include/DesktopFactory.h" -// #include "wearable_log.h" +#include "applist/include/DesktopFactory.h" +#include "wearable_log.h" -// namespace OHOS { +namespace OHOS { -// void DesktopFactory::RegisterDesktopStyle(const uint16_t style, DesktopInterface* desktop) -// { -// if (desktop == nullptr) { -// WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Can't register desktop using null proxy"); -// return; -// } -// if (desktops_.find(style) != desktops_.end()) { -// WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "desktop style %d has already been registered", style); -// return; -// } else { -// desktops_.insert({style, desktop}); -// } -// } +void DesktopFactory::RegisterDesktopStyle(const uint16_t style, DesktopInterface* desktop) +{ + if (desktop == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Can't register desktop using null proxy"); + return; + } + if (desktops_.find(style) != desktops_.end()) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "desktop style %d has already been registered", style); + return; + } else { + desktops_.insert({style, desktop}); + } +} -// UIDesktopFragment* DesktopFactory::CreateDesktopStyle(uint16_t style) -// { -// auto it = desktops_.find(style); -// if (it != desktops_.end()) { -// return it->second->CreateDesktop(); -// } else { -// WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Desktop style:%d was not registered", style); -// return nullptr; -// } -// } -// } // namespace OHOS +UIDesktopFragment* DesktopFactory::CreateDesktopStyle(uint16_t style) +{ + auto it = desktops_.find(style); + if (it != desktops_.end()) { + return it->second->CreateDesktop(); + } else { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Desktop style:%d was not registered", style); + return nullptr; + } +} +} // namespace OHOS diff --git a/code/sdk/application/wearable/n9/nativeapp/nativeui/applist/src/ListDesktopFragment.cpp b/code/sdk/application/wearable/n9/nativeapp/nativeui/applist/src/ListDesktopFragment.cpp index a7e5420d2..18457b016 100644 --- a/code/sdk/application/wearable/n9/nativeapp/nativeui/applist/src/ListDesktopFragment.cpp +++ b/code/sdk/application/wearable/n9/nativeapp/nativeui/applist/src/ListDesktopFragment.cpp @@ -1,138 +1,138 @@ -// /* -// * Copyright (c) CompanyNameMagicTag 2025-2025. All rights reserved. -// * Description: ListDesktopFragment.cpp -// * Author: -// * Create: 2025-07-04 -// */ - -// #include "applist/include/ListDesktopFragment.h" -// #include "applist/include/DesktopFactory.h" -// #include "applist/include/ApplistModel.h" - -// namespace OHOS { -// REGIST_DESKTOP_STYLE(APPLIST_STYLE, ListDesktopFragment); - -// static constexpr int16 NUM_2 = 2; -// static constexpr int16 MAX_SCROLL_DIS = 1000; - -// void ListDesktopFragment::OnCreateView(void* data) -// { -// WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ListDesktopFragment::OnCreateView"); -// listAdapter_ = new ApplistAdapter(); -// if (listAdapter_ == nullptr) { -// return; -// } -// listAdapter_->SetItemClickListener(this); - -// contentList_ = new UIList(UIList::VERTICAL); -// if (contentList_ == nullptr) { -// return; -// } -// contentList_->SetPosition(0, 0); -// contentList_->Resize(HORIZONTAL_RESOLUTION, VERTICAL_RESOLUTION); -// contentList_->SetScrollBlankSize(VERTICAL_RESOLUTION / NUM_2); -// contentList_->SetSelectPosition(VERTICAL_RESOLUTION / NUM_2); // middle position -// contentList_->SetDraggable(true); -// contentList_->SetThrowDrag(true); -// contentList_->EnableAutoAlign(true); -// contentList_->SetScrollStateListener(this); -// contentList_->SetMaxScrollDistance(MAX_SCROLL_DIS); -// contentList_->SetYScrollBarVisible(true); - -// dragListener_ = new AppListOnDragListener(); -// if (dragListener_ == nullptr) { -// return; -// } -// contentList_->SetOnDragListener(dragListener_); -// fragmentView_.Add(contentList_); -// } - - -// void ListDesktopFragment::OnDestroyView() -// { -// WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ListDesktopFragment::OnDestroyView"); -// int16_t listHeadY = contentList_->GetChildrenHead()->GetY(); -// int16_t listHeadIndex = contentList_->GetChildrenHead()->GetViewIndex(); -// ApplistModel *model = &ApplistModel::GetInstance(); -// model->SetHeadItemY(listHeadY); -// model->SetStartIndex(listHeadIndex); - -// ClearAppItemToList(); - -// if (listAdapter_ != nullptr) { -// delete listAdapter_; -// listAdapter_ = nullptr; -// } -// if (contentList_ != nullptr) { -// delete contentList_; -// contentList_ = nullptr; -// } -// if (dragListener_ != nullptr) { -// delete dragListener_; -// dragListener_ = nullptr; -// } -// } - -// bool ListDesktopFragment::OnClick(UIView &view, const ClickEvent &event) -// { -// UNUSED(event); -// AppItemView *itemView = dynamic_cast(&view); -// if (itemView == nullptr) { -// WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "itemView is nullptr"); -// return false; -// } -// AppViewId viewId = itemView->GetViewId(); -// char *uid = (char *)itemView->GetAppUid(); - -// WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ListDesktopFragment::OnClick viewid = %d", viewId); -// return SwitchView(viewId, uid, TransitionType::TRANSITION_INVALID, APPLIST_STYLE); -// } - -// void ListDesktopFragment::OnItemSelected(int16 index, UIView *view) -// { -// UNUSED(index); -// if (view != nullptr) { -// itemViewSele = static_cast(view); -// itemViewSele->SelectedChange(); - -// if (preItemViewSele != nullptr && preItemViewSele != itemViewSele) { -// preItemViewSele->Reset(); -// } -// preItemViewSele = itemViewSele; -// } -// } - -// void ListDesktopFragment::AddAppItemToList(const AppItem &item) -// { -// WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ListDesktopFragment::AddAppItemToList"); -// listAdapter_->AddListItem(item); -// } - -// void ListDesktopFragment::ClearAppItemToList() -// { -// WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ListDesktopFragment::ClearAppItemToList"); -// listAdapter_->ClearItem(); -// } - -// void ListDesktopFragment::RefreshAppList(void) -// { -// WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ListDesktopFragment::RefreshAppList"); -// uint16_t startIndex = 0; -// int16_t headY = 0; -// ApplistModel *model = &ApplistModel::GetInstance(); -// if (model->GetStartIndex() >= model->GetAppListNum()) { -// startIndex = model->GetAppListNum() - 1; -// headY = VERTICAL_RESOLUTION / NUM_2; -// } else { -// startIndex = model->GetStartIndex(); -// headY = model->GetHeadItemY(); -// if (headY == 0) { -// headY = VERTICAL_RESOLUTION / NUM_2; -// } -// } -// contentList_->SetAdapter(listAdapter_); -// contentList_->ScrollTo(startIndex); -// contentList_->ScrollBy(headY); -// contentList_->RefreshList(); -// } -// } +/* + * Copyright (c) CompanyNameMagicTag 2025-2025. All rights reserved. + * Description: ListDesktopFragment.cpp + * Author: + * Create: 2025-07-04 + */ + +#include "applist/include/ListDesktopFragment.h" +#include "applist/include/DesktopFactory.h" +#include "applist/include/ApplistModel.h" + +namespace OHOS { +REGIST_DESKTOP_STYLE(APPLIST_STYLE, ListDesktopFragment); + +static constexpr int16 NUM_2 = 2; +static constexpr int16 MAX_SCROLL_DIS = 1000; + +void ListDesktopFragment::OnCreateView(void* data) +{ + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ListDesktopFragment::OnCreateView"); + listAdapter_ = new ApplistAdapter(); + if (listAdapter_ == nullptr) { + return; + } + listAdapter_->SetItemClickListener(this); + + contentList_ = new UIList(UIList::VERTICAL); + if (contentList_ == nullptr) { + return; + } + contentList_->SetPosition(0, 0); + contentList_->Resize(HORIZONTAL_RESOLUTION, VERTICAL_RESOLUTION); + contentList_->SetScrollBlankSize(VERTICAL_RESOLUTION / NUM_2); + contentList_->SetSelectPosition(VERTICAL_RESOLUTION / NUM_2); // middle position + contentList_->SetDraggable(true); + contentList_->SetThrowDrag(true); + contentList_->EnableAutoAlign(true); + contentList_->SetScrollStateListener(this); + contentList_->SetMaxScrollDistance(MAX_SCROLL_DIS); + contentList_->SetYScrollBarVisible(true); + + dragListener_ = new AppListOnDragListener(); + if (dragListener_ == nullptr) { + return; + } + contentList_->SetOnDragListener(dragListener_); + fragmentView_.Add(contentList_); +} + + +void ListDesktopFragment::OnDestroyView() +{ + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ListDesktopFragment::OnDestroyView"); + int16_t listHeadY = contentList_->GetChildrenHead()->GetY(); + int16_t listHeadIndex = contentList_->GetChildrenHead()->GetViewIndex(); + ApplistModel *model = &ApplistModel::GetInstance(); + model->SetHeadItemY(listHeadY); + model->SetStartIndex(listHeadIndex); + + ClearAppItemToList(); + + if (listAdapter_ != nullptr) { + delete listAdapter_; + listAdapter_ = nullptr; + } + if (contentList_ != nullptr) { + delete contentList_; + contentList_ = nullptr; + } + if (dragListener_ != nullptr) { + delete dragListener_; + dragListener_ = nullptr; + } +} + +bool ListDesktopFragment::OnClick(UIView &view, const ClickEvent &event) +{ + UNUSED(event); + AppItemView *itemView = dynamic_cast(&view); + if (itemView == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "itemView is nullptr"); + return false; + } + AppViewId viewId = itemView->GetViewId(); + char *uid = (char *)itemView->GetAppUid(); + + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ListDesktopFragment::OnClick viewid = %d", viewId); + return SwitchView(viewId, uid, TransitionType::TRANSITION_INVALID, APPLIST_STYLE); +} + +void ListDesktopFragment::OnItemSelected(int16 index, UIView *view) +{ + UNUSED(index); + if (view != nullptr) { + itemViewSele = static_cast(view); + itemViewSele->SelectedChange(); + + if (preItemViewSele != nullptr && preItemViewSele != itemViewSele) { + preItemViewSele->Reset(); + } + preItemViewSele = itemViewSele; + } +} + +void ListDesktopFragment::AddAppItemToList(const AppItem &item) +{ + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ListDesktopFragment::AddAppItemToList"); + listAdapter_->AddListItem(item); +} + +void ListDesktopFragment::ClearAppItemToList() +{ + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ListDesktopFragment::ClearAppItemToList"); + listAdapter_->ClearItem(); +} + +void ListDesktopFragment::RefreshAppList(void) +{ + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ListDesktopFragment::RefreshAppList"); + uint16_t startIndex = 0; + int16_t headY = 0; + ApplistModel *model = &ApplistModel::GetInstance(); + if (model->GetStartIndex() >= model->GetAppListNum()) { + startIndex = model->GetAppListNum() - 1; + headY = VERTICAL_RESOLUTION / NUM_2; + } else { + startIndex = model->GetStartIndex(); + headY = model->GetHeadItemY(); + if (headY == 0) { + headY = VERTICAL_RESOLUTION / NUM_2; + } + } + contentList_->SetAdapter(listAdapter_); + contentList_->ScrollTo(startIndex); + contentList_->ScrollBy(headY); + contentList_->RefreshList(); +} +} diff --git a/code/sdk/application/wearable/n9/nativeapp/nativeui/applist/src/UIDesktopFragment.cpp b/code/sdk/application/wearable/n9/nativeapp/nativeui/applist/src/UIDesktopFragment.cpp index 40a538356..ec7f7af4c 100644 --- a/code/sdk/application/wearable/n9/nativeapp/nativeui/applist/src/UIDesktopFragment.cpp +++ b/code/sdk/application/wearable/n9/nativeapp/nativeui/applist/src/UIDesktopFragment.cpp @@ -1,50 +1,56 @@ -// /* -// * Copyright (c) CompanyNameMagicTag 2025-2025. All rights reserved. -// * Description: UIDesktopFragment.cpp -// * Author: -// * Create: 2025-07-07 -// */ +/* + * Copyright (c) CompanyNameMagicTag 2025-2025. All rights reserved. + * Description: UIDesktopFragment.cpp + * Author: + * Create: 2025-07-07 + */ -// #include "applist/include/UIDesktopFragment.h" -// #include "common/image_cache_manager.h" -// #include "ability_manager.h" -// #include "NativeAbility.h" +#include "applist/include/UIDesktopFragment.h" +#include "common/image_cache_manager.h" +#include "ability_manager.h" +#include "NativeAbility.h" -// namespace OHOS { -// void UIDesktopFragment::SetPosition(int16_t x, int16_t y, int16_t width, int16_t height) -// { -// fragmentView_.SetPosition(x, y, width, height); -// } +namespace OHOS { +void UIDesktopFragment::SetPosition(int16_t x, int16_t y, int16_t width, int16_t height) +{ + fragmentView_.SetPosition(x, y, width, height); +} -// bool UIDesktopFragment::SwitchView(AppViewId viewId, char *uid, TransitionType type, DesktopStyle style) -// { -// if (viewId < VIEW_MAX_INTER_APP) { -// if (viewId == VIEW_SETTING && style == DesktopStyle::APPLIST_STYLE) { -// NativeAbility::GetInstance().ChangeSlice(viewId, type, gSliceDefaultPriority, true); -// } else { -// NativeAbility::GetInstance().ChangeSlice(viewId, type); -// } -// return true; -// } else if (viewId == VIEW_EXTERN_APP) { -// #ifdef JS_ENABLE -// WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "UIDesktopFragment::OnClick bundleName = %s", uid); -// Want *want = new Want(); -// memset_s(want, sizeof(Want), 0, sizeof(Want)); -// ElementName startElement = {}; -// startElement.abilityName = (char *)"default"; -// startElement.bundleName = uid; -// startElement.deviceId = nullptr; -// SetWantElement(want, startElement); -// if (viewId == VIEW_SETTING && style == DesktopStyle::APPLIST_STYLE) { -// StartAbilityWithAnimation(want, static_cast(type), true); -// } else { -// StartAbilityWithAnimation(want, static_cast(type), false); -// } -// ClearWant(want); -// delete want; -// return true; -// #endif -// } -// return false; -// } -// } +bool UIDesktopFragment::SwitchView(AppViewId viewId, char *uid, TransitionType type, ThemeStyle style) +{ + if (viewId < VIEW_MAX_INTER_APP) { + #if 0 + if (viewId == VIEW_SETTING && style == DesktopStyle::APPLIST_STYLE) { + NativeAbility::GetInstance().ChangeSlice(viewId, type, gSliceDefaultPriority, true); + } else { + NativeAbility::GetInstance().ChangeSlice(viewId, type); + } + #endif + NativeAbility::GetInstance().EnterSlice(viewId, type); + return true; + } else if (viewId == VIEW_EXTERN_APP) { +#ifdef JS_ENABLE + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "UIDesktopFragment::OnClick bundleName = %s", uid); + Want *want = new Want(); + memset_s(want, sizeof(Want), 0, sizeof(Want)); + ElementName startElement = {}; + startElement.abilityName = (char *)"default"; + startElement.bundleName = uid; + startElement.deviceId = nullptr; + SetWantElement(want, startElement); + #if 0 + if (viewId == VIEW_SETTING && style == DesktopStyle::APPLIST_STYLE) { + StartAbilityWithAnimation(want, static_cast(type), true); + } else { + StartAbilityWithAnimation(want, static_cast(type), false); + } + #endif + StartAbilityWithAnimation(want, static_cast(type), false); + ClearWant(want); + delete want; + return true; +#endif + } + return false; +} +} diff --git a/code/sdk/application/wearable/n9/nativeapp/nativeui/key/src/KeyInputListener.cpp b/code/sdk/application/wearable/n9/nativeapp/nativeui/key/src/KeyInputListener.cpp index c7e6ec747..c2e21c65a 100644 --- a/code/sdk/application/wearable/n9/nativeapp/nativeui/key/src/KeyInputListener.cpp +++ b/code/sdk/application/wearable/n9/nativeapp/nativeui/key/src/KeyInputListener.cpp @@ -108,11 +108,7 @@ void KeyInputListener::HandlePowerKeyPress(uint16_t currentViewId) } else { - if (ApplistModel::GetInstance().GetCurrentStyle() == AppListStyle::WATERFALL_STYLE) { - NativeAbility::GetInstance().ChangeSlice(VIEW_APPLIST, TransitionType::TRANSITION_INVALID); - } else { - NativeAbility::GetInstance().ChangeSlice(VIEW_APPLIST, TransitionType::TRANSITION_INVALID); - } + NativeAbility::GetInstance().ChangeSlice(VIEW_APPLIST, TransitionType::TRANSITION_INVALID); } } } diff --git a/code/sdk/application/wearable/n9/nativeapp/nativeui/languagecode/src/LanguageSwitchView.cpp b/code/sdk/application/wearable/n9/nativeapp/nativeui/languagecode/src/LanguageSwitchView.cpp index 519c62691..1a4c171a9 100644 --- a/code/sdk/application/wearable/n9/nativeapp/nativeui/languagecode/src/LanguageSwitchView.cpp +++ b/code/sdk/application/wearable/n9/nativeapp/nativeui/languagecode/src/LanguageSwitchView.cpp @@ -112,7 +112,6 @@ namespace OHOS { WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "LanguageSwitchView::LanguageSwitchScrollViewInit"); LanguageSwitchScrollView = new UIScrollView(); - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "LanguageSwitchView::LanguageSwitchScrollViewInit1"); if (LanguageSwitchScrollView == nullptr) { WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "LanguageSwitchView::LanguageSwitchScrollView new fail!"); @@ -322,9 +321,7 @@ namespace OHOS { WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "LanguageSwitchView::OnStart"); LanguageSwitchViewInit(); - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "LanguageSwitchView::OnStart1"); // InithintView(); - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "LanguageSwitchView::OnStart end"); return; } } \ No newline at end of file -- 2.17.1