1 /* 2 * Copyright (c) 2025 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #ifndef PULL_THROW_LISTENER_H 17 #define PULL_THROW_LISTENER_H 18 19 #ifndef OHOS_BUILD_ENABLE_ARKUI_X 20 #include "data_ability_observer_stub.h" 21 #include "datashare_helper.h" 22 #include "display_manager.h" 23 #endif // OHOS_BUILD_ENABLE_ARKUI_X 24 25 namespace OHOS { 26 namespace Msdp { 27 namespace DeviceStatus { 28 29 class DragManager; 30 #ifndef OHOS_BUILD_ENABLE_ARKUI_X 31 class PullThrowListener { 32 public: 33 explicit PullThrowListener(DragManager* manager); 34 ~PullThrowListener(); 35 36 class VKObserver : public AAFwk::DataAbilityObserverStub { 37 public: 38 VKObserver() = default; 39 ~VKObserver() = default; 40 void OnChange() override; 41 42 using UpdateFunc = std::function<void()>; 43 void SetUpdateFunc(const UpdateFunc &func); 44 private: 45 UpdateFunc update_ = nullptr; 46 }; 47 48 class FoldStatusListener : public Rosen::DisplayManager::IFoldStatusListener { 49 public: FoldStatusListener(PullThrowListener * listener)50 explicit FoldStatusListener(PullThrowListener* listener) : listener_(listener) {} 51 ~FoldStatusListener() override = default; 52 DISALLOW_COPY_AND_MOVE(FoldStatusListener); 53 // std::shared_ptr<MMI::PointerEvent> pointerEvent; 54 /** 55 * @param FoldStatus uint32_t; UNKNOWN = 0, EXPAND = 1, FOLDED = 2, HALF_FOLD = 3; 56 */ 57 void OnFoldStatusChanged(Rosen::FoldStatus foldStatus) override; 58 private: 59 PullThrowListener* listener_; 60 }; 61 62 class ScreenMagneticStateListener : public Rosen::DisplayManager::IScreenMagneticStateListener { 63 public: ScreenMagneticStateListener(PullThrowListener * listener)64 explicit ScreenMagneticStateListener(PullThrowListener* listener) : listener_(listener) {} 65 virtual ~ScreenMagneticStateListener() override = default; 66 67 /** 68 * @brief Notify listeners when screen magnetic state changed. 69 * 70 * @param screenMagneticState ScreenMagneticState. 71 */ 72 void OnScreenMagneticStateChanged(bool isMagneticState) override; 73 74 private: 75 PullThrowListener* listener_; 76 }; 77 78 sptr<IRemoteObject> remoteObj_ { nullptr }; 79 std::shared_ptr<DataShare::DataShareHelper> CreateDataShareHelper(); 80 81 int32_t GetStringValue(const std::string &key, std::string &value); 82 int32_t GetIntValue(const std::string &key, int32_t &value); 83 int32_t GetLongValue(const std::string &key, int64_t &value); 84 85 bool ReleaseDataShareHelper(std::shared_ptr<DataShare::DataShareHelper> &helper); 86 bool ValidateThrowConditions(); 87 bool RegisterFoldStatusListener(); 88 bool RegisterScreenMagneticStateListener(); 89 bool RegisterVKObserver(const sptr<VKObserver> &observer); 90 bool RegisterPullThrowListener(); 91 bool RegisterVKListener(); 92 93 Rosen::FoldStatus oldFoldStatus_ {Rosen::FoldStatus::UNKNOWN}; 94 bool currentMagneticState_ { false }; 95 int32_t obstatusVk_ = -1; 96 sptr<VKObserver> CreateVKObserver(const VKObserver::UpdateFunc &func); 97 98 private: 99 DragManager* manager_; 100 sptr<Rosen::DisplayManager::IFoldStatusListener> foldStatusListener_; 101 sptr<Rosen::DisplayManager::IScreenMagneticStateListener> screenMagneticStateListener_; 102 }; 103 #endif // OHOS_BUILD_ENABLE_ARKUI_X 104 } // namespace DeviceStatus 105 } // namespace Msdp 106 } // namespace OHOS 107 108 #endif // PULL_THROW_LISTENER_H 109