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