1 /*
<lambda>null2  * Copyright (C) 2023 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.avatarpicker.data
18 
19 import android.content.res.Resources
20 import androidx.annotation.ArrayRes
21 import androidx.core.content.res.getResourceIdOrThrow
22 import com.android.avatarpicker.R
23 import com.android.avatarpicker.data.entity.ResourceEntity
24 import com.google.common.annotations.VisibleForTesting
25 
26 class IllustrationsRepository(private val resources: Resources) {
27     @VisibleForTesting
28     @ArrayRes
29     var imagesResId: Int = R.array.avatar_images
30 
31     @VisibleForTesting
32     @ArrayRes
33     var imagesDescriptionsResId: Int = R.array.avatar_image_descriptions
34 
35     @Throws(IllegalArgumentException::class)
36     suspend fun getItems(): List<ResourceEntity> {
37         val items = mutableListOf<ResourceEntity>()
38         val avatarImages = resources.safeObtainTypedArray(imagesResId)?.also { images ->
39             val avatarImageDescriptions =
40                 resources.safeObtainTypedArray(imagesDescriptionsResId)
41             for (i in 0 until images.length())
42                 items.add(
43                     ResourceEntity(
44                         images.getResourceIdOrThrow(i),
45                         avatarImageDescriptions?.safeObtainStringRes(
46                             i, R.string.default_user_icon_description
47                         ) ?: R.string.default_user_icon_description
48                     )
49                 )
50             avatarImageDescriptions?.recycle()
51         }
52         avatarImages?.recycle()
53 
54         return items
55     }
56 }
57 
58