/* * Copyright (c) 2021-2023 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef OHOS_ROSEN_WINDOW_IMPL_H #define OHOS_ROSEN_WINDOW_IMPL_H #include #include #include #include #include #include #include #include #include #include "prepare_terminate_callback_stub.h" #include "input_transfer_station.h" #include "vsync_station.h" #include "window.h" #include "window_property.h" #include "window_transition_info.h" #include "wm_common_inner.h" #include "wm_common.h" using OHOS::AppExecFwk::DisplayOrientation; namespace OHOS { namespace Rosen { namespace { template using EnableIfSame = typename std::enable_if, Ret>::type; } union ColorParam { #if BIG_ENDIANNESS struct { uint8_t alpha; uint8_t red; uint8_t green; uint8_t blue; } argb; #else struct { uint8_t blue; uint8_t green; uint8_t red; uint8_t alpha; } argb; #endif uint32_t value; }; const std::map ABILITY_TO_WMS_ORIENTATION_MAP { {OHOS::AppExecFwk::DisplayOrientation::UNSPECIFIED, Orientation::UNSPECIFIED}, {OHOS::AppExecFwk::DisplayOrientation::LANDSCAPE, Orientation::HORIZONTAL}, {OHOS::AppExecFwk::DisplayOrientation::PORTRAIT, Orientation::VERTICAL}, {OHOS::AppExecFwk::DisplayOrientation::FOLLOWRECENT, Orientation::LOCKED}, {OHOS::AppExecFwk::DisplayOrientation::LANDSCAPE_INVERTED, Orientation::REVERSE_HORIZONTAL}, {OHOS::AppExecFwk::DisplayOrientation::PORTRAIT_INVERTED, Orientation::REVERSE_VERTICAL}, {OHOS::AppExecFwk::DisplayOrientation::AUTO_ROTATION, Orientation::SENSOR}, {OHOS::AppExecFwk::DisplayOrientation::AUTO_ROTATION_LANDSCAPE, Orientation::SENSOR_HORIZONTAL}, {OHOS::AppExecFwk::DisplayOrientation::AUTO_ROTATION_PORTRAIT, Orientation::SENSOR_VERTICAL}, {OHOS::AppExecFwk::DisplayOrientation::AUTO_ROTATION_RESTRICTED, Orientation::AUTO_ROTATION_RESTRICTED}, {OHOS::AppExecFwk::DisplayOrientation::AUTO_ROTATION_LANDSCAPE_RESTRICTED, Orientation::AUTO_ROTATION_LANDSCAPE_RESTRICTED}, {OHOS::AppExecFwk::DisplayOrientation::AUTO_ROTATION_PORTRAIT_RESTRICTED, Orientation::AUTO_ROTATION_PORTRAIT_RESTRICTED}, {OHOS::AppExecFwk::DisplayOrientation::LOCKED, Orientation::LOCKED}, }; class WindowImpl : public Window, AAFwk::PrepareTerminateCallbackStub { #define CALL_LIFECYCLE_LISTENER(windowLifecycleCb, listeners) \ do { \ for (auto& listener : (listeners)) { \ if (listener != nullptr) { \ listener->windowLifecycleCb(); \ } \ } \ } while (0) #define CALL_LIFECYCLE_LISTENER_WITH_PARAM(windowLifecycleCb, listeners, param) \ do { \ for (auto& listener : (listeners)) { \ if (listener != nullptr) { \ listener->windowLifecycleCb(param); \ } \ } \ } while (0) #define CALL_UI_CONTENT(uiContentCb) \ do { \ std::lock_guard lock(mutex_); \ if (uiContent_ != nullptr) { \ uiContent_->uiContentCb(); \ } \ } while (0) public: explicit WindowImpl(const sptr& option); ~WindowImpl(); static sptr Find(const std::string& id); static sptr GetTopWindowWithContext(const std::shared_ptr& context = nullptr); static sptr GetTopWindowWithId(uint32_t mainWinId); static sptr GetWindowWithId(uint32_t winId); static std::vector> GetSubWindow(uint32_t parantId); static void UpdateConfigurationForAll(const std::shared_ptr& configuration); virtual std::shared_ptr GetSurfaceNode() const override; virtual Rect GetRect() const override; virtual Rect GetRequestRect() const override; virtual WindowType GetType() const override; virtual WindowMode GetMode() const override; virtual float GetAlpha() const override; virtual WindowState GetWindowState() const override; virtual WMError SetFocusable(bool isFocusable) override; virtual bool GetFocusable() const override; virtual WMError SetTouchable(bool isTouchable) override; virtual bool GetTouchable() const override; virtual const std::string& GetWindowName() const override; virtual uint32_t GetWindowId() const override; uint64_t GetDisplayId() const override; virtual uint32_t GetWindowFlags() const override; uint32_t GetRequestWindowModeSupportType() const override; bool IsMainHandlerAvailable() const override; inline NotifyNativeWinDestroyFunc GetNativeDestroyCallback() { return notifyNativefunc_; } virtual SystemBarProperty GetSystemBarPropertyByType(WindowType type) const override; virtual bool IsFullScreen() const override; virtual bool IsLayoutFullScreen() const override; virtual WMError SetWindowType(WindowType type) override; virtual WMError SetWindowMode(WindowMode mode) override; virtual WMError SetAlpha(float alpha) override; virtual WMError SetTransform(const Transform& trans) override; virtual WMError AddWindowFlag(WindowFlag flag) override; virtual WMError RemoveWindowFlag(WindowFlag flag) override; virtual WMError SetWindowFlags(uint32_t flags) override; virtual WMError SetSystemBarProperty(WindowType type, const SystemBarProperty& property) override; virtual WMError UpdateSystemBarProperty(bool status); virtual WMError SetLayoutFullScreen(bool status) override; virtual WMError SetFullScreen(bool status) override; virtual const Transform& GetTransform() const override; virtual const Transform& GetZoomTransform() const; virtual WMError UpdateSurfaceNodeAfterCustomAnimation(bool isAdd) override; inline void SetWindowState(WindowState state) { state_ = state; } virtual WMError GetAvoidAreaByType(AvoidAreaType type, AvoidArea& avoidArea) override; WMError Create(uint32_t parentId, const std::shared_ptr& context = nullptr); virtual WMError Destroy() override; virtual WMError Show(uint32_t reason = 0, bool withAnimation = false, bool withFocus = true) override; virtual WMError Hide(uint32_t reason = 0, bool withAnimation = false, bool isFromInnerkits = true) override; virtual WMError MoveTo(int32_t x, int32_t y, bool isMoveToGlobal = false) override; virtual WMError Resize(uint32_t width, uint32_t height) override; float GetVirtualPixelRatio() override; virtual WMError SetWindowGravity(WindowGravity gravity, uint32_t percent) override; virtual WMError SetKeepScreenOn(bool keepScreenOn) override; virtual bool IsKeepScreenOn() const override; virtual WMError SetTurnScreenOn(bool turnScreenOn) override; virtual bool IsTurnScreenOn() const override; virtual WMError SetBackgroundColor(const std::string& color) override; virtual WMError SetTransparent(bool isTransparent) override; virtual bool IsTransparent() const override; virtual WMError SetBrightness(float brightness) override; virtual float GetBrightness() const override; virtual WMError SetCallingWindow(uint32_t windowId) override; virtual WMError SetPrivacyMode(bool isPrivacyMode) override; virtual bool IsPrivacyMode() const override; virtual void SetSystemPrivacyMode(bool isSystemPrivacyMode) override; virtual WMError DisableAppWindowDecor() override; virtual WMError BindDialogTarget(sptr targetToken) override; WMError RaiseToAppTop() override; virtual WMError SetAspectRatio(float ratio) override; virtual WMError ResetAspectRatio() override; virtual WMError SetSnapshotSkip(bool isSkip) override; // window effect virtual WMError SetCornerRadius(float cornerRadius) override; virtual WMError SetShadowRadius(float radius) override; virtual WMError SetShadowColor(std::string color) override; virtual WMError SetShadowOffsetX(float offsetX) override; virtual WMError SetShadowOffsetY(float offsetY) override; virtual WMError SetBlur(float radius) override; virtual WMError SetBackdropBlur(float radius) override; virtual WMError SetBackdropBlurStyle(WindowBlurStyle blurStyle) override; virtual bool IsDecorEnable() const override; virtual WMError Maximize() override; virtual WMError MaximizeFloating() override; virtual WMError Minimize() override; virtual WMError Recover() override; virtual WMError Close() override; virtual void StartMove() override; virtual WMError SetGlobalMaximizeMode(MaximizeMode mode) override; virtual MaximizeMode GetGlobalMaximizeMode() const override; virtual WMError SetImmersiveModeEnabledState(bool enable) override; virtual bool GetImmersiveModeEnabledState() const override; virtual WMError RequestFocus() const override; virtual void SetInputEventConsumer(const std::shared_ptr& inputEventConsumer) override; virtual WMError RegisterLifeCycleListener(const sptr& listener) override; virtual WMError RegisterWindowChangeListener(const sptr& listener) override; virtual WMError UnregisterLifeCycleListener(const sptr& listener) override; virtual WMError UnregisterWindowChangeListener(const sptr& listener) override; virtual WMError RegisterAvoidAreaChangeListener(sptr& listener) override; virtual WMError UnregisterAvoidAreaChangeListener(sptr& listener) override; virtual WMError RegisterDragListener(const sptr& listener) override; virtual WMError UnregisterDragListener(const sptr& listener) override; virtual WMError RegisterDisplayMoveListener(sptr& listener) override; virtual WMError UnregisterDisplayMoveListener(sptr& listener) override; virtual void RegisterWindowDestroyedListener(const NotifyNativeWinDestroyFunc& func) override; virtual void UnregisterWindowDestroyedListener() override { notifyNativefunc_ = nullptr; } virtual WMError RegisterOccupiedAreaChangeListener(const sptr& listener) override; virtual WMError UnregisterOccupiedAreaChangeListener(const sptr& listener) override; virtual WMError RegisterTouchOutsideListener(const sptr& listener) override; virtual WMError UnregisterTouchOutsideListener(const sptr& listener) override; virtual WMError RegisterAnimationTransitionController( const sptr& listener) override; virtual WMError RegisterScreenshotListener(const sptr& listener) override; virtual WMError UnregisterScreenshotListener(const sptr& listener) override; virtual WMError RegisterDialogTargetTouchListener(const sptr& listener) override; virtual WMError UnregisterDialogTargetTouchListener(const sptr& listener) override; virtual void RegisterDialogDeathRecipientListener(const sptr& listener) override; virtual void UnregisterDialogDeathRecipientListener(const sptr& listener) override; virtual void SetAceAbilityHandler(const sptr& handler) override; virtual void SetRequestWindowModeSupportType(uint32_t windowModeSupportType) override; void UpdateRect(const struct Rect& rect, bool decoStatus, WindowSizeChangeReason reason, const std::shared_ptr& rsTransaction = nullptr); void ScheduleUpdateRectTask(const Rect& rectToAce, const Rect& lastOriRect, WindowSizeChangeReason reason, const std::shared_ptr& rsTransaction, const sptr& display); void UpdateMode(WindowMode mode); void UpdateWindowModeSupportType(uint32_t windowModeSupportType); virtual void ConsumeKeyEvent(std::shared_ptr& inputEvent) override; virtual void ConsumePointerEvent(const std::shared_ptr& inputEvent) override; virtual void RequestVsync(const std::shared_ptr& vsyncCallback) override; virtual int64_t GetVSyncPeriod() override; void UpdateFocusStatus(bool focused); virtual bool IsFocused() const override; virtual void UpdateConfiguration(const std::shared_ptr& configuration) override; void UpdateAvoidArea(const sptr& avoidArea, AvoidAreaType type); void UpdateWindowState(WindowState state); WmErrorCode UpdateSubWindowStateAndNotify(uint32_t parentId); WmErrorCode UpdateWindowStateWhenShow(); WmErrorCode UpdateWindowStateWhenHide(); sptr GetWindowProperty(); void UpdateDragEvent(const PointInfo& point, DragEvent event); void UpdateDisplayId(DisplayId from, DisplayId to); void UpdateOccupiedAreaChangeInfo(const sptr& info, const std::shared_ptr& rsTransaction = nullptr); void UpdateActiveStatus(bool isActive); void NotifyTouchOutside(); void NotifyScreenshot(); void NotifyTouchDialogTarget(int32_t posX = 0, int32_t posY = 0) override; void NotifyDestroy(); void NotifyForeground(); void NotifyBackground(); void UpdateZoomTransform(const Transform& trans, bool isDisplayZoomOn); void PerformBack() override; void NotifyForegroundInteractiveStatus(bool interactive); virtual bool PreNotifyKeyEvent(const std::shared_ptr& keyEvent) override; virtual WMError NapiSetUIContent(const std::string& contentInfo, napi_env env, napi_value storage, BackupAndRestoreType type, sptr token, AppExecFwk::Ability* ability) override; virtual WMError SetUIContentByName(const std::string& contentInfo, napi_env env, napi_value storage, AppExecFwk::Ability* ability) override; virtual WMError SetUIContentByAbc(const std::string& abcPath, napi_env env, napi_value storage, AppExecFwk::Ability* ability) override; virtual std::string GetContentInfo(BackupAndRestoreType type = BackupAndRestoreType::CONTINUATION) override; WMError SetRestoredRouterStack(const std::string& routerStack) override; virtual const std::shared_ptr GetContext() const override; virtual Ace::UIContent* GetUIContent() const override; virtual Ace::UIContent* GetUIContentWithId(uint32_t winId) const override; virtual void OnNewWant(const AAFwk::Want& want) override; virtual void SetRequestedOrientation(Orientation) override; virtual Orientation GetRequestedOrientation() override; virtual void SetNeedRemoveWindowInputChannel(bool needRemoveWindowInputChannel) override; virtual WMError SetTouchHotAreas(const std::vector& rects) override; virtual void GetRequestedTouchHotAreas(std::vector& rects) const override; virtual WMError SetAPPWindowLabel(const std::string& label) override; virtual WMError SetAPPWindowIcon(const std::shared_ptr& icon) override; // colorspace, gamut virtual bool IsSupportWideGamut() override; virtual void SetColorSpace(ColorSpace colorSpace) override; virtual ColorSpace GetColorSpace() override; virtual void DumpInfo(const std::vector& params, std::vector& info) override; virtual std::shared_ptr Snapshot() override; virtual WMError NotifyMemoryLevel(int32_t level) override; virtual bool IsAllowHaveSystemSubWindow() override; virtual KeyboardAnimationConfig GetKeyboardAnimationConfig() override; void RestoreSplitWindowMode(uint32_t mode); virtual void SetNeedDefaultAnimation(bool needDefaultAnimation) override; virtual void DoPrepareTerminate() override; void PendingClose(); WMError SetTextFieldAvoidInfo(double textFieldPositionY, double textFieldHeight) override; virtual WMError SetSystemBarProperties(const std::map& properties, const std::map& propertyFlags) override; virtual WMError GetSystemBarProperties(std::map& properties) override; virtual WMError SetSpecificBarProperty(WindowType type, const SystemBarProperty& property) override; /* * Gesture Back */ WMError SetGestureBackEnabled(bool enable) override { return WMError::WM_ERROR_DEVICE_NOT_SUPPORT; } WMError GetGestureBackEnabled(bool& enable) override { return WMError::WM_ERROR_DEVICE_NOT_SUPPORT; } /* * Window Property */ static void UpdateConfigurationSyncForAll(const std::shared_ptr& configuration); void UpdateConfigurationSync(const std::shared_ptr& configuration) override; private: template WMError RegisterListener(std::vector>& holder, const sptr& listener); template WMError UnregisterListener(std::vector>& holder, const sptr& listener); template void ClearUselessListeners(std::map& listeners, uint32_t winId) { listeners.erase(winId); } template EnableIfSame>> GetListeners(); template EnableIfSame>> GetListeners(); template EnableIfSame>> GetListeners(); template EnableIfSame>> GetListeners(); template EnableIfSame>> GetListeners(); template EnableIfSame>> GetListeners(); template EnableIfSame>> GetListeners(); template EnableIfSame>> GetListeners(); template EnableIfSame>> GetListeners(); template EnableIfSame> GetListener(); void NotifyAfterForeground(bool needNotifyListeners = true, bool needNotifyUiContent = true); void NotifyAfterBackground(bool needNotifyListeners = true, bool needNotifyUiContent = true); void NotifyAfterFocused(); void NotifyAfterUnfocused(bool needNotifyUiContent = true); void NotifyAfterResumed(); void NotifyAfterPaused(); void NotifyBeforeDestroy(std::string windowName); void NotifyBeforeSubWindowDestroy(sptr window); void NotifyAfterActive(); void NotifyAfterInactive(); void NotifyForegroundFailed(WMError ret); void NotifyBackgroundFailed(WMError ret); bool IsStretchableReason(WindowSizeChangeReason reason); void InitWindowProperty(const sptr& option); void ClearListenersById(uint32_t winId); void NotifySizeChange(Rect rect, WindowSizeChangeReason reason, const std::shared_ptr& rsTransaction = nullptr); void NotifyAvoidAreaChange(const sptr& avoidArea, AvoidAreaType type); void NotifyDisplayMoveChange(DisplayId from, DisplayId to); void NotifyOccupiedAreaChange(const sptr& info, const std::shared_ptr& rsTransaction = nullptr); void NotifyModeChange(WindowMode mode, bool hasDeco = true); void NotifyDragEvent(const PointInfo& point, DragEvent event); void DestroyDialogWindow(); void DestroyFloatingWindow(); void DestroySubWindow(); void ClearVsyncStation(); void SetDefaultOption(); // for api7 bool IsWindowValid() const; static sptr FindWindowById(uint32_t WinId); void TransferPointerEvent(const std::shared_ptr& pointerEvent); void ConsumeMoveOrDragEvent(const std::shared_ptr& pointerEvent); void ReadyToMoveOrDragWindow(const std::shared_ptr& pointerEvent, const MMI::PointerEvent::PointerItem& pointerItem); void EndMoveOrDragWindow(int32_t posX, int32_t posY, int32_t pointId, int32_t sourceType); void ResetMoveOrDragState(); bool IsPointerEventConsumed(); bool IsPointInDragHotZone(int32_t startPointPosX, int32_t startPointPosY, int32_t sourceType); void AdjustWindowAnimationFlag(bool withAnimation = false); void MapFloatingWindowToAppIfNeeded(); void MapDialogWindowToAppIfNeeded(); WMError UpdateProperty(PropertyChangeAction action); WMError Destroy(bool needNotifyServer, bool needClearListener = true); WMError SetBackgroundColor(uint32_t color); uint32_t GetBackgroundColor() const; void InitAbilityInfo(); std::shared_ptr GetOriginalAbilityInfo() const; void RecordLifeCycleExceptionEvent(LifeCycleEvent event, WMError errCode) const; std::string TransferLifeCycleEventToString(LifeCycleEvent type) const; Rect GetSystemAlarmWindowDefaultSize(Rect defaultRect); void HandleModeChangeHotZones(int32_t posX, int32_t posY); WMError NotifyWindowTransition(TransitionReason reason); void UpdatePointerEventForStretchableWindow(const std::shared_ptr& pointerEvent); void UpdateDragType(int32_t startPointPosX, int32_t startPointPosY); void HandleBackKeyPressedEvent(const std::shared_ptr& keyEvent); bool CheckCameraFloatingWindowMultiCreated(WindowType type); void GetConfigurationFromAbilityInfo(); void UpdateTitleButtonVisibility(); void SetWindowModeSupportType(uint32_t windowModeSupportType); uint32_t GetWindowModeSupportType() const; WMError PreProcessShow(uint32_t reason, bool withAnimation); bool NeedToStopShowing(); void CalculateStartRectExceptHotZone(float virtualPixelRatio); void SetSystemConfig(); void TransformSurfaceNode(const Transform& trans); bool IsAppMainOrSunOrFloatingWindow(); bool IsAppMainOrSubOrFloatingWindow(); WMError WindowCreateCheck(uint32_t parentId); uint32_t CalculatePointerDirection(int32_t pointerX, int32_t pointerY); void HandlePointerStyle(const std::shared_ptr& pointerEvent); RSSurfaceNode::SharedPtr CreateSurfaceNode(std::string name, WindowType type); void UpdateWindowStateUnfrozen(); void UpdateViewportConfig(const Rect& rect, const sptr& display, WindowSizeChangeReason reason, const std::shared_ptr& rsTransaction = nullptr, const std::map& avoidAreas = {}); void UpdateDecorEnable(bool needNotify = false); WMError SetFloatingMaximize(bool isEnter); WMError SetUIContentInner(const std::string& contentInfo, napi_env env, napi_value storage, WindowSetUIContentType setUIContentType, BackupAndRestoreType restoreType, AppExecFwk::Ability* ability); std::shared_ptr> GetAbcContent(const std::string& abcPath); std::string GetRestoredRouterStack(); // colorspace, gamut using ColorSpaceConvertMap = struct { ColorSpace colorSpace; GraphicColorGamut surfaceColorGamut; }; static const ColorSpaceConvertMap colorSpaceConvertMap[]; static ColorSpace GetColorSpaceFromSurfaceGamut(GraphicColorGamut colorGamut); static GraphicColorGamut GetSurfaceGamutFromColorSpace(ColorSpace colorSpace); void ChangePropertyByApiVersion(); void PerfLauncherHotAreaIfNeed(const std::shared_ptr& pointerEvent); void SetDefaultDisplayIdIfNeed(); static std::map>> windowMap_; static std::map>> subWindowMap_; static std::map>> appFloatingWindowMap_; static std::map>> appDialogWindowMap_; sptr property_; WindowState state_ { WindowState::STATE_INITIAL }; WindowState subWindowState_ {WindowState::STATE_INITIAL}; WindowTag windowTag_; sptr aceAbilityHandler_; static std::map>> screenshotListeners_; static std::map>> touchOutsideListeners_; static std::map>> dialogTargetTouchListeners_; static std::map>> lifecycleListeners_; static std::map>> windowChangeListeners_; static std::map>> avoidAreaChangeListeners_; std::vector> windowDragListeners_; std::vector> displayMoveListeners_; static std::map>> occupiedAreaChangeListeners_; static std::map> dialogDeathRecipientListener_; std::shared_ptr inputEventConsumer_; sptr animationTransitionController_; NotifyNativeWinDestroyFunc notifyNativefunc_; std::shared_ptr surfaceNode_; std::string name_; std::unique_ptr uiContent_; std::shared_ptr context_; std::recursive_mutex mutex_; std::recursive_mutex windowStateMutex_; static std::recursive_mutex globalMutex_; const float SYSTEM_ALARM_WINDOW_WIDTH_RATIO = 0.8; const float SYSTEM_ALARM_WINDOW_HEIGHT_RATIO = 0.3; WindowSizeChangeReason lastSizeChangeReason_ = WindowSizeChangeReason::END; sptr moveDragProperty_; SystemConfig windowSystemConfig_; bool isOriginRectSet_ = false; bool needRemoveWindowInputChannel_ = false; bool isMainHandlerAvailable_ = true; bool isAppFloatingWindow_ = false; bool isFocused_ = false; uint32_t mouseStyleID_ = 0; bool isIgnoreSafeAreaNeedNotify_ = false; bool isIgnoreSafeArea_ = false; bool needDefaultAnimation_ = true; bool postTaskDone_ = false; const std::map STYLEID_MAP = { {DragType::DRAG_UNDEFINED, MMI::MOUSE_ICON::DEFAULT}, {DragType::DRAG_BOTTOM_OR_TOP, MMI::MOUSE_ICON::NORTH_SOUTH}, {DragType::DRAG_LEFT_OR_RIGHT, MMI::MOUSE_ICON::WEST_EAST}, {DragType::DRAG_LEFT_TOP_CORNER, MMI::MOUSE_ICON::NORTH_WEST_SOUTH_EAST}, {DragType::DRAG_RIGHT_TOP_CORNER, MMI::MOUSE_ICON::NORTH_EAST_SOUTH_WEST} }; static float ConvertRadiusToSigma(float radius) { constexpr float BlurSigmaScale = 0.57735f; return radius > 0.0f ? BlurSigmaScale * radius + SK_ScalarHalf : 0.0f; } std::shared_ptr handler_ = nullptr; std::string restoredRouterStack_; // It was set and get in same thread, which is js thread. bool needNotifyFocusLater_ = false; bool escKeyEventTriggered_ = false; bool enableImmersiveMode_ = false; std::shared_ptr vsyncStation_ = nullptr; }; } // namespace Rosen } // namespace OHOS #endif // OHOS_ROSEN_WINDOW_IMPL_H