1 /* 2 * Copyright (C) 2022 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 FRAMEWORKS_SERVICES_THUMBNAIL_SERVICE_INCLUDE_ITHUMBNAIL_HELPER_H_ 17 #define FRAMEWORKS_SERVICES_THUMBNAIL_SERVICE_INCLUDE_ITHUMBNAIL_HELPER_H_ 18 19 #include "ability_connect_callback_stub.h" 20 #include "ability_context.h" 21 #include "datashare_proxy.h" 22 #include "medialibrary_async_worker.h" 23 #include "pixel_map.h" 24 #include "result_set_bridge.h" 25 #include "rdb_helper.h" 26 #include "single_kvstore.h" 27 #include "thumbnail_utils.h" 28 #include <map> 29 #include <shared_mutex> 30 31 namespace OHOS { 32 namespace Media { 33 class GenerateAsyncTaskData : public AsyncTaskData { 34 public: 35 GenerateAsyncTaskData() = default; 36 virtual ~GenerateAsyncTaskData() override = default; 37 ThumbRdbOpt opts; 38 ThumbnailData thumbnailData; 39 std::string thumbnailKey; 40 }; 41 42 enum WaitStatus { 43 INSERT, 44 WAIT_SUCCESS, 45 TIMEOUT, 46 }; 47 48 using ThumbnailMap = std::map<std::string, std::shared_ptr<SyncStatus>>; 49 class ThumbnailWait { 50 public: 51 ThumbnailWait(bool release); 52 ~ThumbnailWait(); 53 54 WaitStatus InsertAndWait(const std::string &id, bool isLcd); 55 void CheckAndWait(const std::string &id, bool isLcd); 56 57 private: 58 void Notify(); 59 std::string id_; 60 bool needRelease_{false}; 61 static ThumbnailMap thumbnailMap_; 62 static std::shared_mutex mutex_; 63 }; 64 65 class IThumbnailHelper { 66 public: 67 IThumbnailHelper() = default; 68 virtual ~IThumbnailHelper() = default; 69 virtual int32_t CreateThumbnail(ThumbRdbOpt &opts, bool isSync = false); 70 virtual int32_t GetThumbnailPixelMap(ThumbRdbOpt &opts, 71 std::shared_ptr<DataShare::ResultSetBridge> &outResultSet); 72 static void DeleteThumbnailKv(ThumbRdbOpt &opts); 73 static void CreateLcd(AsyncTaskData *data); 74 static void CreateThumbnail(AsyncTaskData *data); 75 static void AddAsyncTask(MediaLibraryExecute executor, ThumbRdbOpt &opts, ThumbnailData &data, bool isFront); 76 protected: 77 static std::shared_ptr<NativeRdb::AbsSharedResultSet> QueryThumbnailInfo( 78 ThumbRdbOpt &opts, ThumbnailData &outData, int &err); 79 static std::unique_ptr<PixelMap> GetPixelMap(const std::vector<uint8_t> &image, Size &size); 80 static bool DoCreateLcd(ThumbRdbOpt &opts, ThumbnailData &data, bool force = false); 81 static bool DoCreateThumbnail(ThumbRdbOpt &opts, ThumbnailData &data, bool force = false); 82 static bool DoThumbnailSync(ThumbRdbOpt &opts, ThumbnailData &outData); 83 }; 84 85 class ThumbnailConnection : public AAFwk::AbilityConnectionStub { 86 public: 87 ThumbnailConnection() = default; 88 virtual ~ThumbnailConnection() = default; 89 void OnAbilityConnectDone( 90 const AppExecFwk::ElementName &element, const sptr<IRemoteObject> &remoteObject, int resultCode) override; 91 void OnAbilityDisconnectDone(const AppExecFwk::ElementName &element, int resultCode) override; 92 int32_t GetRemoteDataShareHelper(ThumbRdbOpt &opts, sptr<AAFwk::IAbilityConnection> &callback); 93 94 private: 95 sptr<DataShare::IDataShare> dataShareProxy_; 96 SyncStatus status_; 97 }; 98 } // namespace Media 99 } // namespace OHOS 100 101 #endif // FRAMEWORKS_SERVICES_THUMBNAIL_SERVICE_INCLUDE_ITHUMBNAIL_HELPER_H_ 102