• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 #include "media_library_enum_ani.h"
17 
18 #include "ani_class_name.h"
19 #include "medialibrary_ani_utils.h"
20 
21 namespace OHOS {
22 namespace Media {
23 static const std::map<MediaType, int32_t> ANI_MEDIATYPE_INDEX_MAP = {
24     {MediaType::MEDIA_TYPE_IMAGE, 0},
25     {MediaType::MEDIA_TYPE_VIDEO, 1},
26 };
27 
28 static const std::map<PhotoSubType, int32_t> ANI_PHOTOSUBTYPE_INDEX_MAP = {
29     {PhotoSubType::DEFAULT, 0},
30     {PhotoSubType::SCREENSHOT, 1},
31     {PhotoSubType::MOVING_PHOTO, 2},
32     {PhotoSubType::BURST, 3},
33 };
34 
35 static const std::map<DynamicRangeType, int32_t> ANI_DYNAMICRANGETYPE_INDEX_MAP = {
36     {DynamicRangeType::SDR, 0},
37     {DynamicRangeType::HDR, 1},
38 };
39 
40 static const std::map<PhotoPositionType, int32_t> ANI_PHOTOPOSITIONTYPE_INDEX_MAP = {
41     {PhotoPositionType::LOCAL, 0},
42     {PhotoPositionType::CLOUD, 1},
43 };
44 
45 static const std::map<PhotoAlbumType, int32_t> ANI_PHOTOALBUMTYPE_INDEX_MAP = {
46     {PhotoAlbumType::USER, 0},
47     {PhotoAlbumType::SYSTEM, 1},
48     {PhotoAlbumType::SMART, 2},
49 };
50 
51 static const std::map<PhotoAlbumSubType, int32_t> ANI_PHOTOALBUMSUBTYPE_INDEX_MAP = {
52     {PhotoAlbumSubType::USER_GENERIC, 0},
53     {PhotoAlbumSubType::FAVORITE, 1},
54     {PhotoAlbumSubType::VIDEO, 2},
55     {PhotoAlbumSubType::HIDDEN, 3},
56     {PhotoAlbumSubType::TRASH, 4},
57     {PhotoAlbumSubType::SCREENSHOT, 5},
58     {PhotoAlbumSubType::CAMERA, 6},
59     {PhotoAlbumSubType::IMAGE, 7},
60     {PhotoAlbumSubType::CLOUD_ENHANCEMENT, 8},
61     {PhotoAlbumSubType::SOURCE_GENERIC, 9},
62     {PhotoAlbumSubType::CLASSIFY, 10},
63     {PhotoAlbumSubType::GEOGRAPHY_LOCATION, 11},
64     {PhotoAlbumSubType::GEOGRAPHY_CITY, 12},
65     {PhotoAlbumSubType::SHOOTING_MODE, 13},
66     {PhotoAlbumSubType::PORTRAIT, 14},
67     {PhotoAlbumSubType::GROUP_PHOTO, 15},
68     {PhotoAlbumSubType::HIGHLIGHT, 16},
69     {PhotoAlbumSubType::HIGHLIGHT_SUGGESTIONS, 17},
70     {PhotoAlbumSubType::ANY, 18},
71 };
72 
73 static const std::map<NotifyType, int32_t> ANI_NOTIFYTYPE_INDEX_MAP = {
74     {NotifyType::NOTIFY_ADD, 0},
75     {NotifyType::NOTIFY_UPDATE, 1},
76     {NotifyType::NOTIFY_REMOVE, 2},
77     {NotifyType::NOTIFY_ALBUM_ADD_ASSET, 3},
78     {NotifyType::NOTIFY_ALBUM_REMOVE_ASSET, 4},
79 };
80 
81 static const std::map<MovingPhotoEffectMode, int32_t> ANI_MOVINGPHOTOEFFECTMODE_INDEX_MAP = {
82     {MovingPhotoEffectMode::DEFAULT, 0},
83     {MovingPhotoEffectMode::BOUNCE_PLAY, 1},
84     {MovingPhotoEffectMode::LOOP_PLAY, 2},
85     {MovingPhotoEffectMode::LONG_EXPOSURE, 3},
86     {MovingPhotoEffectMode::MULTI_EXPOSURE, 4},
87     {MovingPhotoEffectMode::CINEMA_GRAPH, 5},
88     {MovingPhotoEffectMode::IMAGE_ONLY, 6},
89 };
90 
91 static const std::map<CloudEnhancementTaskStage, int32_t> ANI_CLOUDENHANCEMENTTASKSTAGE_INDEX_MAP = {
92     {CloudEnhancementTaskStage::TASK_STAGE_EXCEPTION, 0},
93     {CloudEnhancementTaskStage::TASK_STAGE_PREPARING, 1},
94     {CloudEnhancementTaskStage::TASK_STAGE_UPLOADING, 2},
95     {CloudEnhancementTaskStage::TASK_STAGE_EXECUTING, 3},
96     {CloudEnhancementTaskStage::TASK_STAGE_DOWNLOADING, 4},
97     {CloudEnhancementTaskStage::TASK_STAGE_FAILED, 5},
98     {CloudEnhancementTaskStage::TASK_STAGE_COMPLETED, 6},
99 };
100 
EnumGetValueInt32(ani_env * env,ani_enum_item enumItem,int32_t & value)101 ani_status MediaLibraryEnumAni::EnumGetValueInt32(ani_env *env, ani_enum_item enumItem, int32_t &value)
102 {
103     CHECK_COND_RET(env != nullptr, ANI_INVALID_ARGS, "Invalid env");
104 
105     ani_int aniInt {};
106     CHECK_STATUS_RET(env->EnumItem_GetValue_Int(enumItem, &aniInt), "EnumItem_GetValue_Int failed");
107     CHECK_STATUS_RET(MediaLibraryAniUtils::GetInt32(env, aniInt, value), "GetInt32 failed");
108     return ANI_OK;
109 }
110 
EnumGetValueString(ani_env * env,ani_enum_item enumItem,std::string & value)111 ani_status MediaLibraryEnumAni::EnumGetValueString(ani_env *env, ani_enum_item enumItem, std::string &value)
112 {
113     CHECK_COND_RET(env != nullptr, ANI_INVALID_ARGS, "Invalid env");
114 
115     ani_string aniString {};
116     CHECK_STATUS_RET(env->EnumItem_GetValue_String(enumItem, &aniString), "EnumItem_GetValue_String failed");
117     CHECK_STATUS_RET(MediaLibraryAniUtils::GetString(env, aniString, value), "GetString failed");
118     return ANI_OK;
119 }
120 
ToAniEnum(ani_env * env,MediaType value,ani_enum_item & aniEnumItem)121 ani_status MediaLibraryEnumAni::ToAniEnum(ani_env *env, MediaType value, ani_enum_item &aniEnumItem)
122 {
123     CHECK_COND_RET(env != nullptr, ANI_INVALID_ARGS, "Invalid env");
124 
125     auto it = ANI_MEDIATYPE_INDEX_MAP.find(value);
126     CHECK_COND_RET(it != ANI_MEDIATYPE_INDEX_MAP.end(), ANI_INVALID_ARGS, "Unsupport enum: %{public}d", value);
127     ani_int enumIndex = static_cast<ani_int>(it->second);
128 
129     ani_enum aniEnum {};
130     CHECK_STATUS_RET(env->FindEnum(ANI_CLASS_ENUM_PHOTO_TYPE.c_str(), &aniEnum), "Find Enum Fail");
131     CHECK_STATUS_RET(env->Enum_GetEnumItemByIndex(aniEnum, enumIndex, &aniEnumItem), "Find Enum item Fail");
132     return ANI_OK;
133 }
134 
ToAniEnum(ani_env * env,PhotoSubType value,ani_enum_item & aniEnumItem)135 ani_status MediaLibraryEnumAni::ToAniEnum(ani_env *env, PhotoSubType value, ani_enum_item &aniEnumItem)
136 {
137     CHECK_COND_RET(env != nullptr, ANI_INVALID_ARGS, "Invalid env");
138 
139     auto it = ANI_PHOTOSUBTYPE_INDEX_MAP.find(value);
140     CHECK_COND_RET(it != ANI_PHOTOSUBTYPE_INDEX_MAP.end(), ANI_INVALID_ARGS, "Unsupport enum: %{public}d", value);
141     ani_int enumIndex = static_cast<ani_int>(it->second);
142 
143     ani_enum aniEnum {};
144     CHECK_STATUS_RET(env->FindEnum(ANI_CLASS_ENUM_PHOTO_SUBTYPE.c_str(), &aniEnum), "Find Enum Fail");
145     CHECK_STATUS_RET(env->Enum_GetEnumItemByIndex(aniEnum, enumIndex, &aniEnumItem), "Find Enum item Fail");
146     return ANI_OK;
147 }
148 
ToAniEnum(ani_env * env,DynamicRangeType value,ani_enum_item & aniEnumItem)149 ani_status MediaLibraryEnumAni::ToAniEnum(ani_env *env, DynamicRangeType value, ani_enum_item &aniEnumItem)
150 {
151     CHECK_COND_RET(env != nullptr, ANI_INVALID_ARGS, "Invalid env");
152 
153     auto it = ANI_DYNAMICRANGETYPE_INDEX_MAP.find(value);
154     CHECK_COND_RET(it != ANI_DYNAMICRANGETYPE_INDEX_MAP.end(), ANI_INVALID_ARGS, "Unsupport enum: %{public}d", value);
155     ani_int enumIndex = static_cast<ani_int>(it->second);
156 
157     ani_enum aniEnum {};
158     CHECK_STATUS_RET(env->FindEnum(ANI_CLASS_ENUM_DYNAMIC_RANGE_TYPE.c_str(), &aniEnum), "Find Enum Fail");
159     CHECK_STATUS_RET(env->Enum_GetEnumItemByIndex(aniEnum, enumIndex, &aniEnumItem), "Find Enum item Fail");
160     return ANI_OK;
161 }
162 
ToAniEnum(ani_env * env,PhotoPositionType value,ani_enum_item & aniEnumItem)163 ani_status MediaLibraryEnumAni::ToAniEnum(ani_env *env, PhotoPositionType value, ani_enum_item &aniEnumItem)
164 {
165     CHECK_COND_RET(env != nullptr, ANI_INVALID_ARGS, "Invalid env");
166 
167     auto it = ANI_PHOTOPOSITIONTYPE_INDEX_MAP.find(value);
168     CHECK_COND_RET(it != ANI_PHOTOPOSITIONTYPE_INDEX_MAP.end(), ANI_INVALID_ARGS, "Unsupport enum: %{public}d", value);
169     ani_int enumIndex = static_cast<ani_int>(it->second);
170 
171     ani_enum aniEnum {};
172     CHECK_STATUS_RET(env->FindEnum(ANI_CLASS_ENUM_POSITION_TYPE.c_str(), &aniEnum), "Find Enum Fail");
173     CHECK_STATUS_RET(env->Enum_GetEnumItemByIndex(aniEnum, enumIndex, &aniEnumItem), "Find Enum item Fail");
174     return ANI_OK;
175 }
176 
ToAniEnum(ani_env * env,PhotoAlbumType value,ani_enum_item & aniEnumItem)177 ani_status MediaLibraryEnumAni::ToAniEnum(ani_env *env, PhotoAlbumType value, ani_enum_item &aniEnumItem)
178 {
179     CHECK_COND_RET(env != nullptr, ANI_INVALID_ARGS, "Invalid env");
180 
181     auto it = ANI_PHOTOALBUMTYPE_INDEX_MAP.find(value);
182     CHECK_COND_RET(it != ANI_PHOTOALBUMTYPE_INDEX_MAP.end(), ANI_INVALID_ARGS, "Unsupport enum: %{public}d", value);
183     ani_int enumIndex = static_cast<ani_int>(it->second);
184 
185     ani_enum aniEnum {};
186     CHECK_STATUS_RET(env->FindEnum(ANI_CLASS_ENUM_ALBUM_TYPE.c_str(), &aniEnum), "Find Enum Fail");
187     CHECK_STATUS_RET(env->Enum_GetEnumItemByIndex(aniEnum, enumIndex, &aniEnumItem), "Find Enum item Fail");
188     return ANI_OK;
189 }
190 
ToAniEnum(ani_env * env,PhotoAlbumSubType value,ani_enum_item & aniEnumItem)191 ani_status MediaLibraryEnumAni::ToAniEnum(ani_env *env, PhotoAlbumSubType value, ani_enum_item &aniEnumItem)
192 {
193     CHECK_COND_RET(env != nullptr, ANI_INVALID_ARGS, "Invalid env");
194 
195     auto it = ANI_PHOTOALBUMSUBTYPE_INDEX_MAP.find(value);
196     CHECK_COND_RET(it != ANI_PHOTOALBUMSUBTYPE_INDEX_MAP.end(), ANI_INVALID_ARGS, "Unsupport enum: %{public}d", value);
197     ani_int enumIndex = static_cast<ani_int>(it->second);
198 
199     ani_enum aniEnum {};
200     CHECK_STATUS_RET(env->FindEnum(ANI_CLASS_ENUM_ALBUM_SUBTYPE.c_str(), &aniEnum), "Find Enum Fail");
201     CHECK_STATUS_RET(env->Enum_GetEnumItemByIndex(aniEnum, enumIndex, &aniEnumItem), "Find Enum item Fail");
202     return ANI_OK;
203 }
204 
ToAniEnum(ani_env * env,NotifyType value,ani_enum_item & aniEnumItem)205 ani_status MediaLibraryEnumAni::ToAniEnum(ani_env *env, NotifyType value, ani_enum_item &aniEnumItem)
206 {
207     CHECK_COND_RET(env != nullptr, ANI_INVALID_ARGS, "Invalid env");
208 
209     auto it = ANI_NOTIFYTYPE_INDEX_MAP.find(value);
210     CHECK_COND_RET(it != ANI_NOTIFYTYPE_INDEX_MAP.end(), ANI_INVALID_ARGS, "Unsupport enum: %{public}d", value);
211     ani_int enumIndex = static_cast<ani_int>(it->second);
212 
213     ani_enum aniEnum {};
214     CHECK_STATUS_RET(env->FindEnum(ANI_CLASS_ENUM_NOTIFY_TYPE.c_str(), &aniEnum), "Find Enum Fail");
215     CHECK_STATUS_RET(env->Enum_GetEnumItemByIndex(aniEnum, enumIndex, &aniEnumItem), "Find Enum item Fail");
216     return ANI_OK;
217 }
218 
ToAniEnum(ani_env * env,MovingPhotoEffectMode value,ani_enum_item & aniEnumItem)219 ani_status MediaLibraryEnumAni::ToAniEnum(ani_env *env, MovingPhotoEffectMode value, ani_enum_item &aniEnumItem)
220 {
221     CHECK_COND_RET(env != nullptr, ANI_INVALID_ARGS, "Invalid env");
222 
223     auto it = ANI_MOVINGPHOTOEFFECTMODE_INDEX_MAP.find(value);
224     CHECK_COND_RET(it != ANI_MOVINGPHOTOEFFECTMODE_INDEX_MAP.end(), ANI_INVALID_ARGS,
225         "Unsupport enum: %{public}d", value);
226     ani_int enumIndex = static_cast<ani_int>(it->second);
227 
228     ani_enum aniEnum {};
229     CHECK_STATUS_RET(env->FindEnum(ANI_CLASS_ENUM_MOVING_PHOTO_EFFECT_MODE.c_str(), &aniEnum), "Find Enum Fail");
230     CHECK_STATUS_RET(env->Enum_GetEnumItemByIndex(aniEnum, enumIndex, &aniEnumItem), "Find Enum item Fail");
231     return ANI_OK;
232 }
233 
ToAniEnum(ani_env * env,CloudEnhancementTaskStage value,ani_enum_item & aniEnumItem)234 ani_status MediaLibraryEnumAni::ToAniEnum(ani_env *env, CloudEnhancementTaskStage value, ani_enum_item &aniEnumItem)
235 {
236     CHECK_COND_RET(env != nullptr, ANI_INVALID_ARGS, "Invalid env");
237 
238     auto it = ANI_CLOUDENHANCEMENTTASKSTAGE_INDEX_MAP.find(value);
239     CHECK_COND_RET(it != ANI_CLOUDENHANCEMENTTASKSTAGE_INDEX_MAP.end(), ANI_INVALID_ARGS,
240         "Unsupport enum: %{public}d", value);
241     ani_int enumIndex = static_cast<ani_int>(it->second);
242 
243     ani_enum aniEnum {};
244     CHECK_STATUS_RET(env->FindEnum(ANI_CLASS_ENUM_MOVING_PHOTO_EFFECT_MODE.c_str(), &aniEnum), "Find Enum Fail");
245     CHECK_STATUS_RET(env->Enum_GetEnumItemByIndex(aniEnum, enumIndex, &aniEnumItem), "Find Enum item Fail");
246     return ANI_OK;
247 }
248 
249 } // namespace Media
250 } // namespace OHOS