A fork of Simple Time Tracker with WearOS support. (Now integrated upstream)
0

Configure Feed

Select the types of activity you want to include in your feed.

add emoji icon search

razeeman (Feb 10, 2024, 8:45 PM +0300) c24b88fe 3a59fcc1

+2275 -133
+7 -4
app/src/androidTest/java/com/example/util/simpletimetracker/IconTest.kt
··· 313 313 ) 314 314 315 315 // Check categories 316 - iconEmojiMapper.getAvailableEmojis().forEach { (category, emojis) -> 316 + iconEmojiMapper.getAvailableEmojis(loadSearchHints = false).forEach { (category, emojis) -> 317 317 checkViewIsDisplayed(withTag(category.categoryIcon)) 318 318 clickOnView(withTag(category.categoryIcon)) 319 - val firstEmoji = iconEmojiMapper.toEmojiString(emojis.first()) 319 + val firstEmoji = iconEmojiMapper.toEmojiString(emojis.first().emojiCode) 320 320 321 321 // Check category hint 322 322 checkViewIsDisplayed(withText(category.name)) ··· 328 328 @Test 329 329 fun skinToneSelectionDialog() { 330 330 val name = "name" 331 - val category = iconEmojiMapper.getAvailableEmojiCategories().first { it.type == IconEmojiType.PEOPLE } 332 - val emoji = iconEmojiMapper.getAvailableEmojis()[category]?.first() ?: throw RuntimeException() 331 + val category = iconEmojiMapper.getAvailableEmojiCategories() 332 + .first { it.type == IconEmojiType.PEOPLE } 333 + val emoji = iconEmojiMapper.getAvailableEmojis(loadSearchHints = false)[category] 334 + ?.first()?.emojiCode 335 + ?: throw RuntimeException() 333 336 val emojiDefault = emoji.let(iconEmojiMapper::toEmojiString) 334 337 val emojiSkinTones = emoji.let(iconEmojiMapper::toSkinToneVariations) 335 338 val emojiSkinTone = emojiSkinTones.last()
+4 -4
app/src/androidTest/java/com/example/util/simpletimetracker/utils/BaseUiTest.kt
··· 74 74 .let { (_, imagesMap) -> imagesMap.last().iconResId } 75 75 val firstEmoji: String 76 76 get() = iconEmojiMapper 77 - .getAvailableEmojis()[iconEmojiMapper.getAvailableEmojiCategories().first()] 78 - ?.first().orEmpty() 77 + .getAvailableEmojis(loadSearchHints = false)[iconEmojiMapper.getAvailableEmojiCategories().first()] 78 + ?.first()?.emojiCode.orEmpty() 79 79 val lastEmoji: String 80 80 get() = iconEmojiMapper 81 - .getAvailableEmojis()[iconEmojiMapper.getAvailableEmojiCategories().last()] 82 - ?.last().orEmpty() 81 + .getAvailableEmojis(loadSearchHints = false)[iconEmojiMapper.getAvailableEmojiCategories().last()] 82 + ?.last()?.emojiCode.orEmpty() 83 83 84 84 val hourString: String by lazy { getString(R.string.time_hour) } 85 85 val minuteString: String by lazy { getString(R.string.time_minute) }
+81 -39
core/src/main/java/com/example/util/simpletimetracker/core/mapper/IconEmojiMapper.kt
··· 1 1 package com.example.util.simpletimetracker.core.mapper 2 2 3 3 import com.example.util.simpletimetracker.core.R 4 - import com.example.util.simpletimetracker.core.repo.IconEmojiRepo 5 4 import com.example.util.simpletimetracker.core.repo.ResourceRepo 5 + import com.example.util.simpletimetracker.domain.model.IconEmoji 6 6 import com.example.util.simpletimetracker.domain.model.IconEmojiCategory 7 7 import com.example.util.simpletimetracker.domain.model.IconEmojiType 8 8 import javax.inject.Inject ··· 10 10 11 11 @Singleton 12 12 class IconEmojiMapper @Inject constructor( 13 - private val repo: IconEmojiRepo, 14 - private val resourceRepo: ResourceRepo 13 + private val resourceRepo: ResourceRepo, 15 14 ) { 16 15 17 16 fun getAvailableEmojiCategories(): List<IconEmojiCategory> = listOf( 18 17 IconEmojiCategory( 19 18 type = IconEmojiType.SMILEYS, 20 19 name = resourceRepo.getString(R.string.emojiGroupSmileys), 21 - categoryIcon = R.drawable.icon_category_emoji_emotions 20 + categoryIcon = R.drawable.icon_category_emoji_emotions, 22 21 ), 23 22 IconEmojiCategory( 24 23 type = IconEmojiType.PEOPLE, 25 24 name = resourceRepo.getString(R.string.emojiGroupPeople), 26 - categoryIcon = R.drawable.icon_category_emoji_people 25 + categoryIcon = R.drawable.icon_category_emoji_people, 27 26 ), 28 27 IconEmojiCategory( 29 28 type = IconEmojiType.ANIMALS, 30 29 name = resourceRepo.getString(R.string.emojiGroupAnimals), 31 - categoryIcon = R.drawable.icon_category_emoji_nature 30 + categoryIcon = R.drawable.icon_category_emoji_nature, 32 31 ), 33 32 IconEmojiCategory( 34 33 type = IconEmojiType.FOOD, 35 34 name = resourceRepo.getString(R.string.emojiGroupFood), 36 - categoryIcon = R.drawable.icon_category_emoji_food_beverage 35 + categoryIcon = R.drawable.icon_category_emoji_food_beverage, 37 36 ), 38 37 IconEmojiCategory( 39 38 type = IconEmojiType.TRAVEL, 40 39 name = resourceRepo.getString(R.string.emojiGroupTravel), 41 - categoryIcon = R.drawable.icon_category_emoji_transportation 40 + categoryIcon = R.drawable.icon_category_emoji_transportation, 42 41 ), 43 42 IconEmojiCategory( 44 43 type = IconEmojiType.ACTIVITIES, 45 44 name = resourceRepo.getString(R.string.emojiGroupActivities), 46 - categoryIcon = R.drawable.icon_category_emoji_events 45 + categoryIcon = R.drawable.icon_category_emoji_events, 47 46 ), 48 47 IconEmojiCategory( 49 48 type = IconEmojiType.OBJECTS, 50 49 name = resourceRepo.getString(R.string.emojiGroupObjects), 51 - categoryIcon = R.drawable.icon_category_emoji_objects 50 + categoryIcon = R.drawable.icon_category_emoji_objects, 52 51 ), 53 52 IconEmojiCategory( 54 53 type = IconEmojiType.SYMBOLS, 55 54 name = resourceRepo.getString(R.string.emojiGroupSymbols), 56 - categoryIcon = R.drawable.icon_category_emoji_symbols 55 + categoryIcon = R.drawable.icon_category_emoji_symbols, 57 56 ), 58 57 IconEmojiCategory( 59 58 type = IconEmojiType.FLAGS, 60 59 name = resourceRepo.getString(R.string.emojiGroupFlags), 61 - categoryIcon = R.drawable.icon_category_emoji_flags 62 - ) 60 + categoryIcon = R.drawable.icon_category_emoji_flags, 61 + ), 63 62 ) 64 63 65 - fun getAvailableEmojis(): Map<IconEmojiCategory, List<String>> = 66 - getAvailableEmojiCategories().associateWith { mapTypeToCodes(it.type) } 64 + fun getAvailableEmojis( 65 + loadSearchHints: Boolean, 66 + ): Map<IconEmojiCategory, List<IconEmoji>> { 67 + return getAvailableEmojiCategories().associateWith { 68 + val codes = mapTypeToCodesArray(it.type).let(resourceRepo::getStringArray) 69 + val searchHints = if (loadSearchHints) { 70 + mapTypeToSearchArray(it.type).let(resourceRepo::getStringArray) 71 + } else { 72 + emptyList() 73 + } 67 74 68 - fun hasSkinToneVariations(codes: String): Boolean = 69 - codes.contains(IconEmojiRepo.SKIN_TONE) 75 + codes.mapIndexed { index, emojiCode -> 76 + IconEmoji( 77 + emojiCode = emojiCode, 78 + emojiSearch = searchHints.getOrNull(index).orEmpty(), 79 + ) 80 + } 81 + } 82 + } 70 83 71 - fun toEmojiString(codes: String): String = 72 - if (hasSkinToneVariations(codes)) { 73 - replaceSameSkinTone(codes).replace(IconEmojiRepo.SKIN_TONE, "") 84 + fun hasSkinToneVariations(codes: String): Boolean { 85 + return codes.contains(SKIN_TONE) 86 + } 87 + 88 + fun toEmojiString(codes: String): String { 89 + return if (hasSkinToneVariations(codes)) { 90 + replaceSameSkinTone(codes).replace(SKIN_TONE, "") 74 91 } else { 75 92 codes 76 93 } 94 + } 77 95 78 96 fun toSkinToneVariations(codes: String): List<String> { 79 97 if (!hasSkinToneVariations(codes)) return listOf(codes) 80 98 81 99 // Split to skin tone variants. 82 - return IconEmojiRepo.skinTones.map { skinToneCode -> 83 - val newCodes = codes.replaceFirst(IconEmojiRepo.SKIN_TONE, skinToneCode) 100 + return skinTones.map { skinToneCode -> 101 + val newCodes = codes.replaceFirst(SKIN_TONE, skinToneCode) 84 102 85 103 // If has seconds skin tone - split again. 86 104 if (hasSkinToneVariations(newCodes)) { 87 - IconEmojiRepo.skinTones.map { secondSkinToneCode -> 105 + skinTones.map { secondSkinToneCode -> 88 106 // If has replacement and has same first skin and second skin tone - replace whole thing. 89 - if (newCodes.contains(IconEmojiRepo.SAME_TONE_REPLACEMENT)) { 107 + if (newCodes.contains(SAME_TONE_REPLACEMENT)) { 90 108 if (skinToneCode == secondSkinToneCode) { 91 109 replaceSameSkinTone(newCodes) 92 110 } else { ··· 94 112 } 95 113 } else { 96 114 newCodes 97 - }.replaceFirst(IconEmojiRepo.SKIN_TONE, secondSkinToneCode) 115 + }.replaceFirst(SKIN_TONE, secondSkinToneCode) 98 116 } 99 117 } else { 100 118 listOf(newCodes) ··· 105 123 private fun replaceSameSkinTone(codes: String): String { 106 124 // if there is a replacement - return string after marker, 107 125 // if no replacement - return original string 108 - return codes.replaceBefore(IconEmojiRepo.SAME_TONE_REPLACEMENT, "") 109 - .replace(IconEmojiRepo.SAME_TONE_REPLACEMENT, "") 126 + return codes.replaceBefore(SAME_TONE_REPLACEMENT, "") 127 + .replace(SAME_TONE_REPLACEMENT, "") 110 128 } 111 129 112 130 private fun removeSameSkinToneReplacement(codes: String): String { 113 - return codes.replaceAfter(IconEmojiRepo.SAME_TONE_REPLACEMENT, "") 114 - .replace(IconEmojiRepo.SAME_TONE_REPLACEMENT, "") 131 + return codes.replaceAfter(SAME_TONE_REPLACEMENT, "") 132 + .replace(SAME_TONE_REPLACEMENT, "") 115 133 } 116 134 117 - private fun mapTypeToCodes(type: IconEmojiType): List<String> = when (type) { 118 - IconEmojiType.SMILEYS -> repo.getGroupSmileys() 119 - IconEmojiType.PEOPLE -> repo.getGroupPeople() 120 - IconEmojiType.ANIMALS -> repo.getGroupAnimals() 121 - IconEmojiType.FOOD -> repo.getGroupFood() 122 - IconEmojiType.TRAVEL -> repo.getGroupTravel() 123 - IconEmojiType.ACTIVITIES -> repo.getGroupActivities() 124 - IconEmojiType.OBJECTS -> repo.getGroupObjects() 125 - IconEmojiType.SYMBOLS -> repo.getGroupSymbols() 126 - IconEmojiType.FLAGS -> repo.getGroupFlags() 135 + private fun mapTypeToCodesArray(type: IconEmojiType): Int = when (type) { 136 + IconEmojiType.SMILEYS -> R.array.emoji_smileys 137 + IconEmojiType.PEOPLE -> R.array.emoji_people 138 + IconEmojiType.ANIMALS -> R.array.emoji_animals 139 + IconEmojiType.FOOD -> R.array.emoji_food 140 + IconEmojiType.TRAVEL -> R.array.emoji_travel 141 + IconEmojiType.ACTIVITIES -> R.array.emoji_activities 142 + IconEmojiType.OBJECTS -> R.array.emoji_objects 143 + IconEmojiType.SYMBOLS -> R.array.emoji_symbols 144 + IconEmojiType.FLAGS -> R.array.emoji_flags 145 + } 146 + 147 + private fun mapTypeToSearchArray(type: IconEmojiType): Int = when (type) { 148 + IconEmojiType.SMILEYS -> R.array.emoji_hint_smileys 149 + IconEmojiType.PEOPLE -> R.array.emoji_hint_people 150 + IconEmojiType.ANIMALS -> R.array.emoji_hint_animals 151 + IconEmojiType.FOOD -> R.array.emoji_hint_food 152 + IconEmojiType.TRAVEL -> R.array.emoji_hint_travel 153 + IconEmojiType.ACTIVITIES -> R.array.emoji_hint_activities 154 + IconEmojiType.OBJECTS -> R.array.emoji_hint_objects 155 + IconEmojiType.SYMBOLS -> R.array.emoji_hint_symbols 156 + IconEmojiType.FLAGS -> R.array.emoji_hint_flags 157 + } 158 + 159 + companion object { 160 + const val SKIN_TONE: String = "SKIN_TONE" 161 + const val SAME_TONE_REPLACEMENT = "SAME_TONE" 162 + val skinTones: List<String> = listOf( 163 + "🏻", // light skin tone 164 + "🏼", // medium-light skin tone 165 + "🏽", // medium skin tone 166 + "🏾", // medium-dark skin tone 167 + "🏿", // dark skin tone 168 + ) 127 169 } 128 170 }
+3 -1
core/src/main/java/com/example/util/simpletimetracker/core/mapper/IconImageMapper.kt
··· 1 1 package com.example.util.simpletimetracker.core.mapper 2 2 3 + import android.annotation.SuppressLint 3 4 import android.content.Context 4 5 import com.example.util.simpletimetracker.core.R 5 6 import com.example.util.simpletimetracker.core.repo.IconImageRepo ··· 107 108 return getAvailableCategories().associateWith { 108 109 val images = mapTypeToIconArray(it.type).let(repo::getImages) 109 110 val searchHints = if (loadSearchHints) { 110 - mapTypeToSearchArray(it.type).let(repo::getHints) 111 + mapTypeToSearchArray(it.type).let(resourceRepo::getStringArray) 111 112 } else { 112 113 emptyList() 113 114 } ··· 122 123 } 123 124 } 124 125 126 + @SuppressLint("DiscouragedApi") 125 127 fun mapToDrawableResId(iconName: String): Int { 126 128 return context.resources 127 129 .getIdentifier(iconName, "drawable", context.packageName)
-50
core/src/main/java/com/example/util/simpletimetracker/core/repo/IconEmojiRepo.kt
··· 1 - package com.example.util.simpletimetracker.core.repo 2 - 3 - import android.content.Context 4 - import com.example.util.simpletimetracker.core.R 5 - import dagger.hilt.android.qualifiers.ApplicationContext 6 - import javax.inject.Inject 7 - 8 - class IconEmojiRepo @Inject constructor( 9 - @ApplicationContext private val context: Context 10 - ) { 11 - 12 - fun getGroupSmileys(): List<String> = 13 - context.resources.getStringArray(R.array.emoji_smileys).toList() 14 - 15 - fun getGroupPeople(): List<String> = 16 - context.resources.getStringArray(R.array.emoji_people).toList() 17 - 18 - fun getGroupAnimals(): List<String> = 19 - context.resources.getStringArray(R.array.emoji_animals).toList() 20 - 21 - fun getGroupFood(): List<String> = 22 - context.resources.getStringArray(R.array.emoji_food).toList() 23 - 24 - fun getGroupTravel(): List<String> = 25 - context.resources.getStringArray(R.array.emoji_travel).toList() 26 - 27 - fun getGroupActivities(): List<String> = 28 - context.resources.getStringArray(R.array.emoji_activities).toList() 29 - 30 - fun getGroupObjects(): List<String> = 31 - context.resources.getStringArray(R.array.emoji_objects).toList() 32 - 33 - fun getGroupSymbols(): List<String> = 34 - context.resources.getStringArray(R.array.emoji_symbols).toList() 35 - 36 - fun getGroupFlags(): List<String> = 37 - context.resources.getStringArray(R.array.emoji_flags).toList() 38 - 39 - companion object { 40 - const val SKIN_TONE: String = "SKIN_TONE" 41 - const val SAME_TONE_REPLACEMENT = "SAME_TONE" 42 - val skinTones: List<String> = listOf( 43 - "🏻", // light skin tone 44 - "🏼", // medium-light skin tone 45 - "🏽", // medium skin tone 46 - "🏾", // medium-dark skin tone 47 - "🏿" // dark skin tone 48 - ) 49 - } 50 - }
+1 -13
core/src/main/java/com/example/util/simpletimetracker/core/repo/IconImageRepo.kt
··· 6 6 import javax.inject.Inject 7 7 8 8 class IconImageRepo @Inject constructor( 9 - @ApplicationContext private val context: Context 9 + @ApplicationContext private val context: Context, 10 10 ) { 11 11 12 12 fun getImages(arrayResId: Int): Map<String, Int> { ··· 17 17 ta.getResourceId(it, R.drawable.unknown).let { resId -> 18 18 res[context.resources.getResourceEntryName(resId)] = resId 19 19 } 20 - } 21 - ta.recycle() 22 - 23 - return res 24 - } 25 - 26 - fun getHints(arrayResId: Int): List<String> { 27 - val res = mutableListOf<String>() 28 - 29 - val ta = context.resources.obtainTypedArray(arrayResId) 30 - (0 until ta.length()).forEach { 31 - ta.getString(it).orEmpty().let(res::add) 32 20 } 33 21 ta.recycle() 34 22
+5
core/src/main/java/com/example/util/simpletimetracker/core/repo/ResourceRepo.kt
··· 2 2 3 3 import android.content.Context 4 4 import android.util.TypedValue 5 + import androidx.annotation.ArrayRes 5 6 import androidx.annotation.ColorRes 6 7 import androidx.annotation.DimenRes 7 8 import androidx.annotation.PluralsRes ··· 44 45 .theme 45 46 .resolveAttribute(attrId, this, true) 46 47 }.data 48 + } 49 + 50 + fun getStringArray(@ArrayRes arrayResId: Int): List<String> { 51 + return context.resources.getStringArray(arrayResId).toList() 47 52 } 48 53 }
+2121
core/src/main/res/values/emoji_search_arrays.xml
··· 1 + <?xml version="1.0" encoding="utf-8"?> 2 + <!-- 3 + ~ UNICODE, INC. LICENSE AGREEMENT - DATA FILES AND SOFTWARE 4 + ~ See Terms of Use for definitions of Unicode Inc.'s 5 + ~ Data Files and Software. 6 + ~ 7 + ~ NOTICE TO USER: Carefully read the following legal agreement. 8 + ~ BY DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING UNICODE INC.'S 9 + ~ DATA FILES ("DATA FILES"), AND/OR SOFTWARE ("SOFTWARE"), 10 + ~ YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE 11 + ~ TERMS AND CONDITIONS OF THIS AGREEMENT. 12 + ~ IF YOU DO NOT AGREE, DO NOT DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE 13 + ~ THE DATA FILES OR SOFTWARE. 14 + ~ 15 + ~ COPYRIGHT AND PERMISSION NOTICE 16 + ~ 17 + ~ Copyright © 1991-2021 Unicode, Inc. All rights reserved. 18 + ~ Distributed under the Terms of Use in https://www.unicode.org/copyright.html. 19 + ~ 20 + ~ Permission is hereby granted, free of charge, to any person obtaining 21 + ~ a copy of the Unicode data files and any associated documentation 22 + ~ (the "Data Files") or Unicode software and any associated documentation 23 + ~ (the "Software") to deal in the Data Files or Software 24 + ~ without restriction, including without limitation the rights to use, 25 + ~ copy, modify, merge, publish, distribute, and/or sell copies of 26 + ~ the Data Files or Software, and to permit persons to whom the Data Files 27 + ~ or Software are furnished to do so, provided that either 28 + ~ (a) this copyright and permission notice appear with all copies 29 + ~ of the Data Files or Software, or 30 + ~ (b) this copyright and permission notice appear in associated 31 + ~ Documentation. 32 + ~ 33 + ~ THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF 34 + ~ ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE 35 + ~ WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 36 + ~ NONINFRINGEMENT OF THIRD PARTY RIGHTS. 37 + ~ IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS 38 + ~ NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL 39 + ~ DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, 40 + ~ DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER 41 + ~ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 42 + ~ PERFORMANCE OF THE DATA FILES OR SOFTWARE. 43 + ~ 44 + ~ Except as contained in this notice, the name of a copyright holder 45 + ~ shall not be used in advertising or otherwise to promote the sale, 46 + ~ use or other dealings in these Data Files or Software without prior 47 + ~ written authorization of the copyright holder. 48 + --> 49 + <resources> 50 + # group: Smileys Emotion 51 + <string-array name="emoji_hint_smileys"> 52 + # subgroup: face-smiling 53 + <item>grinning face</item> 54 + <item>grinning face with big eyes</item> 55 + <item>grinning face with smiling eyes</item> 56 + <item>beaming face with smiling eyes</item> 57 + <item>grinning squinting face</item> 58 + <item>grinning face with sweat</item> 59 + <item>rolling on the floor laughing</item> 60 + <item>face with tears of joy</item> 61 + <item>slightly smiling face</item> 62 + <item>upside-down face</item> 63 + <item>melting face</item> 64 + <item>winking face</item> 65 + <item>smiling face with smiling eyes</item> 66 + <item>smiling face with halo</item> 67 + 68 + # subgroup: face-affection 69 + <item>smiling face with hearts</item> 70 + <item>smiling face with heart-eyes</item> 71 + <item>star-struck</item> 72 + <item>face blowing a kiss</item> 73 + <item>kissing face</item> 74 + <item>smiling face</item> 75 + <item>kissing face with closed eyes</item> 76 + <item>kissing face with smiling eyes</item> 77 + <item>smiling face with tear</item> 78 + 79 + # subgroup: face-tongue 80 + <item>face savoring food</item> 81 + <item>face with tongue</item> 82 + <item>winking face with tongue</item> 83 + <item>zany face</item> 84 + <item>squinting face with tongue</item> 85 + <item>money-mouth face</item> 86 + 87 + # subgroup: face-hand 88 + <item>hugging face</item> 89 + <item>face with hand over mouth</item> 90 + <item>face with open eyes and hand over mouth</item> 91 + <item>face with peeking eye</item> 92 + <item>shushing face</item> 93 + <item>thinking face</item> 94 + <item>saluting face</item> 95 + 96 + # subgroup: face-neutral-skeptical 97 + <item>zipper-mouth face</item> 98 + <item>face with raised eyebrow</item> 99 + <item>neutral face</item> 100 + <item>expressionless face</item> 101 + <item>face without mouth</item> 102 + <item>dotted line face</item> 103 + <item>face in clouds</item> 104 + <item>smirking face</item> 105 + <item>unamused face</item> 106 + <item>face with rolling eyes</item> 107 + <item>grimacing face</item> 108 + <item>face exhaling</item> 109 + <item>lying face</item> 110 + 111 + # subgroup: face-sleepy 112 + <item>relieved face</item> 113 + <item>pensive face</item> 114 + <item>sleepy face</item> 115 + <item>drooling face</item> 116 + <item>sleeping face</item> 117 + 118 + # subgroup: face-unwell 119 + <item>face with medical mask</item> 120 + <item>face with thermometer</item> 121 + <item>face with head-bandage</item> 122 + <item>nauseated face</item> 123 + <item>face vomiting</item> 124 + <item>sneezing face</item> 125 + <item>hot face</item> 126 + <item>cold face</item> 127 + <item>woozy face</item> 128 + <item>knocked-out face</item> 129 + <item>face with spiral eyes</item> 130 + <item>exploding head</item> 131 + 132 + # subgroup: face-hat 133 + <item>cowboy hat face</item> 134 + <item>partying face</item> 135 + <item>disguised face</item> 136 + 137 + # subgroup: face-glasses 138 + <item>smiling face with sunglasses</item> 139 + <item>nerd face</item> 140 + <item>face with monocle</item> 141 + 142 + # subgroup: face-concerned 143 + <item>confused face</item> 144 + <item>face with diagonal mouth</item> 145 + <item>worried face</item> 146 + <item>slightly frowning face</item> 147 + <item>frowning face</item> 148 + <item>face with open mouth</item> 149 + <item>hushed face</item> 150 + <item>astonished face</item> 151 + <item>flushed face</item> 152 + <item>pleading face</item> 153 + <item>face holding back tears</item> 154 + <item>frowning face with open mouth</item> 155 + <item>anguished face</item> 156 + <item>fearful face</item> 157 + <item>anxious face with sweat</item> 158 + <item>sad but relieved face</item> 159 + <item>crying face</item> 160 + <item>loudly crying face</item> 161 + <item>face screaming in fear</item> 162 + <item>confounded face</item> 163 + <item>persevering face</item> 164 + <item>disappointed face</item> 165 + <item>downcast face with sweat</item> 166 + <item>weary face</item> 167 + <item>tired face</item> 168 + <item>yawning face</item> 169 + 170 + # subgroup: face-negative 171 + <item>face with steam from nose</item> 172 + <item>pouting face</item> 173 + <item>angry face</item> 174 + <item>face with symbols on mouth</item> 175 + <item>smiling face with horns</item> 176 + <item>angry face with horns</item> 177 + <item>skull</item> 178 + <item>skull and crossbones</item> 179 + 180 + # subgroup: face-costume 181 + <item>pile of poo</item> 182 + <item>clown face</item> 183 + <item>ogre</item> 184 + <item>goblin</item> 185 + <item>ghost</item> 186 + <item>alien</item> 187 + <item>alien monster</item> 188 + <item>robot</item> 189 + 190 + # subgroup: cat-face 191 + <item>grinning cat</item> 192 + <item>grinning cat with smiling eyes</item> 193 + <item>cat with tears of joy</item> 194 + <item>smiling cat with heart-eyes</item> 195 + <item>cat with wry smile</item> 196 + <item>kissing cat</item> 197 + <item>weary cat</item> 198 + <item>crying cat</item> 199 + <item>pouting cat</item> 200 + 201 + # subgroup: monkey-face 202 + <item>see-no-evil monkey</item> 203 + <item>hear-no-evil monkey</item> 204 + <item>speak-no-evil monkey</item> 205 + 206 + # subgroup: emotion 207 + <item>kiss mark</item> 208 + <item>love letter</item> 209 + <item>heart with arrow</item> 210 + <item>heart with ribbon</item> 211 + <item>sparkling heart</item> 212 + <item>growing heart</item> 213 + <item>beating heart</item> 214 + <item>revolving hearts</item> 215 + <item>two hearts</item> 216 + <item>heart decoration</item> 217 + <item>heart exclamation</item> 218 + <item>broken heart</item> 219 + <item>heart on fire</item> 220 + <item>mending heart</item> 221 + <item>red heart</item> 222 + <item>orange heart</item> 223 + <item>yellow heart</item> 224 + <item>green heart</item> 225 + <item>blue heart</item> 226 + <item>purple heart</item> 227 + <item>brown heart</item> 228 + <item>black heart</item> 229 + <item>white heart</item> 230 + <item>hundred points</item> 231 + <item>anger symbol</item> 232 + <item>collision</item> 233 + <item>dizzy</item> 234 + <item>sweat droplets</item> 235 + <item>dashing away</item> 236 + <item>hole</item> 237 + <item>bomb</item> 238 + <item>speech balloon</item> 239 + <item>eye in speech bubble</item> 240 + <item>left speech bubble</item> 241 + <item>right anger bubble</item> 242 + <item>thought balloon</item> 243 + <item>zzz</item> 244 + </string-array> 245 + 246 + # group: People Body 247 + <string-array name="emoji_hint_people"> 248 + # subgroup: hand-fingers-open 249 + <item>waving hand</item> 250 + <item>raised back of hand</item> 251 + <item>hand with fingers splayed</item> 252 + <item>raised hand</item> 253 + <item>vulcan salute</item> 254 + <item>rightwards hand</item> 255 + <item>leftwards hand</item> 256 + <item>palm down hand</item> 257 + <item>palm up hand</item> 258 + 259 + # subgroup: hand-fingers-partial 260 + <item>OK hand</item> 261 + <item>pinched fingers</item> 262 + <item>pinching hand</item> 263 + <item>victory hand</item> 264 + <item>crossed fingers</item> 265 + <item>hand with index finger and thumb crossed</item> 266 + <item>love-you gesture</item> 267 + <item>sign of the horns</item> 268 + <item>call me hand</item> 269 + 270 + # subgroup: hand-single-finger 271 + <item>backhand index pointing left</item> 272 + <item>backhand index pointing right</item> 273 + <item>backhand index pointing up</item> 274 + <item>middle finger</item> 275 + <item>backhand index pointing down</item> 276 + <item>index pointing up</item> 277 + <item>index pointing at the viewer</item> 278 + 279 + # subgroup: hand-fingers-closed 280 + <item>thumbs up</item> 281 + <item>thumbs down</item> 282 + <item>raised fist</item> 283 + <item>oncoming fist</item> 284 + <item>left-facing fist</item> 285 + <item>right-facing fist</item> 286 + 287 + # subgroup: hands 288 + <item>clapping hands</item> 289 + <item>raising hands</item> 290 + <item>heart hands</item> 291 + <item>open hands</item> 292 + <item>palms up together</item> 293 + <item>handshake</item> 294 + <item>folded hands</item> 295 + 296 + # subgroup: hand-prop 297 + <item>writing hand</item> 298 + <item>nail polish</item> 299 + <item>selfie</item> 300 + 301 + # subgroup: body-parts 302 + <item>flexed biceps</item> 303 + <item>mechanical arm</item> 304 + <item>mechanical leg</item> 305 + <item>leg</item> 306 + <item>foot</item> 307 + <item>ear</item> 308 + <item>ear with hearing aid</item> 309 + <item>nose</item> 310 + <item>brain</item> 311 + <item>anatomical heart</item> 312 + <item>lungs</item> 313 + <item>tooth</item> 314 + <item>bone</item> 315 + <item>eyes</item> 316 + <item>eye</item> 317 + <item>tongue</item> 318 + <item>mouth</item> 319 + <item>biting lip</item> 320 + 321 + # subgroup: person 322 + <item>baby</item> 323 + <item>child</item> 324 + <item>boy</item> 325 + <item>girl</item> 326 + <item>person</item> 327 + <item>person, blond hair</item> 328 + <item>man</item> 329 + <item>person, beard</item> 330 + <item>man, beard</item> 331 + <item>woman, beard</item> 332 + <item>man, red hair</item> 333 + <item>man, curly hair</item> 334 + <item>man, white hair</item> 335 + <item>man, bald</item> 336 + <item>woman</item> 337 + <item>woman, red hair</item> 338 + <item>person, red hair</item> 339 + <item>woman, curly hair</item> 340 + <item>person, curly hair</item> 341 + <item>woman, white hair</item> 342 + <item>person, white hair</item> 343 + <item>woman, bald</item> 344 + <item>person, bald</item> 345 + <item>woman, blond hair</item> 346 + <item>man, blond hair</item> 347 + <item>older person</item> 348 + <item>old man</item> 349 + <item>old woman</item> 350 + 351 + # subgroup: person-gesture 352 + <item>person frowning</item> 353 + <item>man frowning</item> 354 + <item>woman frowning</item> 355 + <item>person pouting</item> 356 + <item>man pouting</item> 357 + <item>woman pouting</item> 358 + <item>person gesturing NO</item> 359 + <item>man gesturing NO</item> 360 + <item>woman gesturing NO</item> 361 + <item>person gesturing OK</item> 362 + <item>man gesturing OK</item> 363 + <item>woman gesturing OK</item> 364 + <item>person tipping hand</item> 365 + <item>man tipping hand</item> 366 + <item>woman tipping hand</item> 367 + <item>person raising hand</item> 368 + <item>man raising hand</item> 369 + <item>woman raising hand</item> 370 + <item>deaf person</item> 371 + <item>deaf man</item> 372 + <item>deaf woman</item> 373 + <item>person bowing</item> 374 + <item>man bowing</item> 375 + <item>woman bowing</item> 376 + <item>person facepalming</item> 377 + <item>man facepalming</item> 378 + <item>woman facepalming</item> 379 + <item>person shrugging</item> 380 + <item>man shrugging</item> 381 + <item>woman shrugging</item> 382 + 383 + # subgroup: person-role 384 + <item>health worker</item> 385 + <item>man health worker</item> 386 + <item>woman health worker</item> 387 + <item>student</item> 388 + <item>man student</item> 389 + <item>woman student</item> 390 + <item>teacher</item> 391 + <item>man teacher</item> 392 + <item>woman teacher</item> 393 + <item>judge</item> 394 + <item>man judge</item> 395 + <item>woman judge</item> 396 + <item>farmer</item> 397 + <item>man farmer</item> 398 + <item>woman farmer</item> 399 + <item>cook</item> 400 + <item>man cook</item> 401 + <item>woman cook</item> 402 + <item>mechanic</item> 403 + <item>man mechanic</item> 404 + <item>woman mechanic</item> 405 + <item>factory worker</item> 406 + <item>man factory worker</item> 407 + <item>woman factory worker</item> 408 + <item>office worker</item> 409 + <item>man office worker</item> 410 + <item>woman office worker</item> 411 + <item>scientist</item> 412 + <item>man scientist</item> 413 + <item>woman scientist</item> 414 + <item>technologist</item> 415 + <item>man technologist</item> 416 + <item>woman technologist</item> 417 + <item>singer</item> 418 + <item>man singer</item> 419 + <item>woman singer</item> 420 + <item>artist</item> 421 + <item>man artist</item> 422 + <item>woman artist</item> 423 + <item>pilot</item> 424 + <item>man pilot</item> 425 + <item>woman pilot</item> 426 + <item>astronaut</item> 427 + <item>man astronaut</item> 428 + <item>woman astronaut</item> 429 + <item>firefighter</item> 430 + <item>man firefighter</item> 431 + <item>woman firefighter</item> 432 + <item>police officer</item> 433 + <item>man police officer</item> 434 + <item>woman police officer</item> 435 + <item>detective</item> 436 + <item>man detective</item> 437 + <item>woman detective</item> 438 + <item>guard</item> 439 + <item>man guard</item> 440 + <item>woman guard</item> 441 + <item>ninja</item> 442 + <item>construction worker</item> 443 + <item>man construction worker</item> 444 + <item>woman construction worker</item> 445 + <item>person with crown</item> 446 + <item>prince</item> 447 + <item>princess</item> 448 + <item>person wearing turban</item> 449 + <item>man wearing turban</item> 450 + <item>woman wearing turban</item> 451 + <item>person with skullcap</item> 452 + <item>woman with headscarf</item> 453 + <item>person in tuxedo</item> 454 + <item>man in tuxedo</item> 455 + <item>woman in tuxedo</item> 456 + <item>person with veil</item> 457 + <item>man with veil</item> 458 + <item>woman with veil</item> 459 + <item>pregnant woman</item> 460 + <item>pregnant man</item> 461 + <item>pregnant person</item> 462 + <item>breast-feeding</item> 463 + <item>woman feeding baby</item> 464 + <item>man feeding baby</item> 465 + <item>person feeding baby</item> 466 + 467 + # subgroup: person-fantasy 468 + <item>baby angel</item> 469 + <item>Santa Claus</item> 470 + <item>Mrs. Claus</item> 471 + <item>mx claus</item> 472 + <item>superhero</item> 473 + <item>man superhero</item> 474 + <item>woman superhero</item> 475 + <item>supervillain</item> 476 + <item>man supervillain</item> 477 + <item>woman supervillain</item> 478 + <item>mage</item> 479 + <item>man mage</item> 480 + <item>woman mage</item> 481 + <item>fairy</item> 482 + <item>man fairy</item> 483 + <item>woman fairy</item> 484 + <item>vampire</item> 485 + <item>man vampire</item> 486 + <item>woman vampire</item> 487 + <item>merperson</item> 488 + <item>merman</item> 489 + <item>mermaid</item> 490 + <item>elf</item> 491 + <item>man elf</item> 492 + <item>woman elf</item> 493 + <item>genie</item> 494 + <item>man genie</item> 495 + <item>woman genie</item> 496 + <item>zombie</item> 497 + <item>man zombie</item> 498 + <item>woman zombie</item> 499 + <item>troll</item> 500 + 501 + # subgroup: person-activity 502 + <item>person getting massage</item> 503 + <item>man getting massage</item> 504 + <item>woman getting massage</item> 505 + <item>person getting haircut</item> 506 + <item>man getting haircut</item> 507 + <item>woman getting haircut</item> 508 + <item>person walking</item> 509 + <item>man walking</item> 510 + <item>woman walking</item> 511 + <item>person standing</item> 512 + <item>man standing</item> 513 + <item>woman standing</item> 514 + <item>person kneeling</item> 515 + <item>man kneeling</item> 516 + <item>woman kneeling</item> 517 + <item>person with white cane</item> 518 + <item>man with white cane</item> 519 + <item>woman with white cane</item> 520 + <item>person in motorized wheelchair</item> 521 + <item>man in motorized wheelchair</item> 522 + <item>woman in motorized wheelchair</item> 523 + <item>person in manual wheelchair</item> 524 + <item>man in manual wheelchair</item> 525 + <item>woman in manual wheelchair</item> 526 + <item>person running</item> 527 + <item>man running</item> 528 + <item>woman running</item> 529 + <item>woman dancing</item> 530 + <item>man dancing</item> 531 + <item>person in suit levitating</item> 532 + <item>people with bunny ears</item> 533 + <item>men with bunny ears</item> 534 + <item>women with bunny ears</item> 535 + <item>person in steamy room</item> 536 + <item>man in steamy room</item> 537 + <item>woman in steamy room</item> 538 + <item>person climbing</item> 539 + <item>man climbing</item> 540 + <item>woman climbing</item> 541 + 542 + # subgroup: person-sport 543 + <item>person fencing</item> 544 + <item>horse racing</item> 545 + <item>skier</item> 546 + <item>snowboarder</item> 547 + <item>person golfing</item> 548 + <item>man golfing</item> 549 + <item>woman golfing</item> 550 + <item>person surfing</item> 551 + <item>man surfing</item> 552 + <item>woman surfing</item> 553 + <item>person rowing boat</item> 554 + <item>man rowing boat</item> 555 + <item>woman rowing boat</item> 556 + <item>person swimming</item> 557 + <item>man swimming</item> 558 + <item>woman swimming</item> 559 + <item>person bouncing ball</item> 560 + <item>man bouncing ball</item> 561 + <item>woman bouncing ball</item> 562 + <item>person lifting weights</item> 563 + <item>man lifting weights</item> 564 + <item>woman lifting weights</item> 565 + <item>person biking</item> 566 + <item>man biking</item> 567 + <item>woman biking</item> 568 + <item>person mountain biking</item> 569 + <item>man mountain biking</item> 570 + <item>woman mountain biking</item> 571 + <item>person cartwheeling</item> 572 + <item>man cartwheeling</item> 573 + <item>woman cartwheeling</item> 574 + <item>people wrestling</item> 575 + <item>men wrestling</item> 576 + <item>women wrestling</item> 577 + <item>person playing water polo</item> 578 + <item>man playing water polo</item> 579 + <item>woman playing water polo</item> 580 + <item>person playing handball</item> 581 + <item>man playing handball</item> 582 + <item>woman playing handball</item> 583 + <item>person juggling</item> 584 + <item>man juggling</item> 585 + <item>woman juggling</item> 586 + 587 + # subgroup: person-resting 588 + <item>person in lotus position</item> 589 + <item>man in lotus position</item> 590 + <item>woman in lotus position</item> 591 + <item>person taking bath</item> 592 + <item>person in bed</item> 593 + 594 + # subgroup: family 595 + <item>people holding hands</item> 596 + <item>women holding hands</item> 597 + <item>woman and man holding hands</item> 598 + <item>men holding hands</item> 599 + <item>kiss: person, person</item> 600 + <item>kiss: woman, man</item> 601 + <item>kiss: man, man</item> 602 + <item>kiss: woman, woman</item> 603 + <item>couple with heart: person, person</item> 604 + <item>couple with heart: woman, man</item> 605 + <item>couple with heart: man, man</item> 606 + <item>couple with heart: woman, woman</item> 607 + <item>family</item> 608 + <item>family: man, woman, boy</item> 609 + <item>family: man, woman, girl</item> 610 + <item>family: man, woman, girl, boy</item> 611 + <item>family: man, woman, boy, boy</item> 612 + <item>family: man, woman, girl, girl</item> 613 + <item>family: man, man, boy</item> 614 + <item>family: man, man, girl</item> 615 + <item>family: man, man, girl, boy</item> 616 + <item>family: man, man, boy, boy</item> 617 + <item>family: man, man, girl, girl</item> 618 + <item>family: woman, woman, boy</item> 619 + <item>family: woman, woman, girl</item> 620 + <item>family: woman, woman, girl, boy</item> 621 + <item>family: woman, woman, boy, boy</item> 622 + <item>family: woman, woman, girl, girl</item> 623 + <item>family: man, boy</item> 624 + <item>family: man, boy, boy</item> 625 + <item>family: man, girl</item> 626 + <item>family: man, girl, boy</item> 627 + <item>family: man, girl, girl</item> 628 + <item>family: woman, boy</item> 629 + <item>family: woman, boy, boy</item> 630 + <item>family: woman, girl</item> 631 + <item>family: woman, girl, boy</item> 632 + <item>family: woman, girl, girl</item> 633 + 634 + # subgroup: person-symbol 635 + <item>speaking head</item> 636 + <item>bust in silhouette</item> 637 + <item>busts in silhouette</item> 638 + <item>people hugging</item> 639 + <item>footprints</item> 640 + </string-array> 641 + 642 + # group: Animals Nature 643 + <string-array name="emoji_hint_animals"> 644 + # subgroup: animal-mammal 645 + <item>monkey face</item> 646 + <item>monkey</item> 647 + <item>gorilla</item> 648 + <item>orangutan</item> 649 + <item>dog face</item> 650 + <item>dog</item> 651 + <item>guide dog</item> 652 + <item>service dog</item> 653 + <item>poodle</item> 654 + <item>wolf</item> 655 + <item>fox</item> 656 + <item>raccoon</item> 657 + <item>cat face</item> 658 + <item>cat</item> 659 + <item>black cat</item> 660 + <item>lion</item> 661 + <item>tiger face</item> 662 + <item>tiger</item> 663 + <item>leopard</item> 664 + <item>horse face</item> 665 + <item>horse</item> 666 + <item>unicorn</item> 667 + <item>zebra</item> 668 + <item>deer</item> 669 + <item>bison</item> 670 + <item>cow face</item> 671 + <item>ox</item> 672 + <item>water buffalo</item> 673 + <item>cow</item> 674 + <item>pig face</item> 675 + <item>pig</item> 676 + <item>boar</item> 677 + <item>pig nose</item> 678 + <item>ram</item> 679 + <item>ewe</item> 680 + <item>goat</item> 681 + <item>camel</item> 682 + <item>two-hump camel</item> 683 + <item>llama</item> 684 + <item>giraffe</item> 685 + <item>elephant</item> 686 + <item>mammoth</item> 687 + <item>rhinoceros</item> 688 + <item>hippopotamus</item> 689 + <item>mouse face</item> 690 + <item>mouse</item> 691 + <item>rat</item> 692 + <item>hamster</item> 693 + <item>rabbit face</item> 694 + <item>rabbit</item> 695 + <item>chipmunk</item> 696 + <item>beaver</item> 697 + <item>hedgehog</item> 698 + <item>bat</item> 699 + <item>bear</item> 700 + <item>polar bear</item> 701 + <item>koala</item> 702 + <item>panda</item> 703 + <item>sloth</item> 704 + <item>otter</item> 705 + <item>skunk</item> 706 + <item>kangaroo</item> 707 + <item>badger</item> 708 + <item>paw prints</item> 709 + 710 + # subgroup: animal-bird 711 + <item>turkey</item> 712 + <item>chicken</item> 713 + <item>rooster</item> 714 + <item>hatching chick</item> 715 + <item>baby chick</item> 716 + <item>front-facing baby chick</item> 717 + <item>bird</item> 718 + <item>penguin</item> 719 + <item>dove</item> 720 + <item>eagle</item> 721 + <item>duck</item> 722 + <item>swan</item> 723 + <item>owl</item> 724 + <item>dodo</item> 725 + <item>feather</item> 726 + <item>flamingo</item> 727 + <item>peacock</item> 728 + <item>parrot</item> 729 + 730 + # subgroup: animal-amphibian 731 + <item>frog</item> 732 + 733 + # subgroup: animal-reptile 734 + <item>crocodile</item> 735 + <item>turtle</item> 736 + <item>lizard</item> 737 + <item>snake</item> 738 + <item>dragon face</item> 739 + <item>dragon</item> 740 + <item>sauropod</item> 741 + <item>T-Rex</item> 742 + 743 + # subgroup: animal-marine 744 + <item>spouting whale</item> 745 + <item>whale</item> 746 + <item>dolphin</item> 747 + <item>seal</item> 748 + <item>fish</item> 749 + <item>tropical fish</item> 750 + <item>blowfish</item> 751 + <item>shark</item> 752 + <item>octopus</item> 753 + <item>spiral shell</item> 754 + <item>coral</item> 755 + 756 + # subgroup: animal-bug 757 + <item>snail</item> 758 + <item>butterfly</item> 759 + <item>bug</item> 760 + <item>ant</item> 761 + <item>honeybee</item> 762 + <item>beetle</item> 763 + <item>lady beetle</item> 764 + <item>cricket</item> 765 + <item>cockroach</item> 766 + <item>spider</item> 767 + <item>spider web</item> 768 + <item>scorpion</item> 769 + <item>mosquito</item> 770 + <item>fly</item> 771 + <item>worm</item> 772 + <item>microbe</item> 773 + 774 + # subgroup: plant-flower 775 + <item>bouquet</item> 776 + <item>cherry blossom</item> 777 + <item>white flower</item> 778 + <item>lotus</item> 779 + <item>rosette</item> 780 + <item>rose</item> 781 + <item>wilted flower</item> 782 + <item>hibiscus</item> 783 + <item>sunflower</item> 784 + <item>blossom</item> 785 + <item>tulip</item> 786 + 787 + # subgroup: plant-other 788 + <item>seedling</item> 789 + <item>potted plant</item> 790 + <item>evergreen tree</item> 791 + <item>deciduous tree</item> 792 + <item>palm tree</item> 793 + <item>cactus</item> 794 + <item>sheaf of rice</item> 795 + <item>herb</item> 796 + <item>shamrock</item> 797 + <item>four leaf clover</item> 798 + <item>maple leaf</item> 799 + <item>fallen leaf</item> 800 + <item>leaf fluttering in wind</item> 801 + <item>empty nest</item> 802 + <item>nest with eggs</item> 803 + </string-array> 804 + 805 + # group: Food Drink 806 + <string-array name="emoji_hint_food"> 807 + # subgroup: food-fruit 808 + <item>grapes</item> 809 + <item>melon</item> 810 + <item>watermelon</item> 811 + <item>tangerine</item> 812 + <item>lemon</item> 813 + <item>banana</item> 814 + <item>pineapple</item> 815 + <item>mango</item> 816 + <item>red apple</item> 817 + <item>green apple</item> 818 + <item>pear</item> 819 + <item>peach</item> 820 + <item>cherries</item> 821 + <item>strawberry</item> 822 + <item>blueberries</item> 823 + <item>kiwi fruit</item> 824 + <item>tomato</item> 825 + <item>olive</item> 826 + <item>coconut</item> 827 + 828 + # subgroup: food-vegetable 829 + <item>avocado</item> 830 + <item>eggplant</item> 831 + <item>potato</item> 832 + <item>carrot</item> 833 + <item>ear of corn</item> 834 + <item>hot pepper</item> 835 + <item>bell pepper</item> 836 + <item>cucumber</item> 837 + <item>leafy green</item> 838 + <item>broccoli</item> 839 + <item>garlic</item> 840 + <item>onion</item> 841 + <item>mushroom</item> 842 + <item>peanuts</item> 843 + <item>beans</item> 844 + <item>chestnut</item> 845 + 846 + # subgroup: food-prepared 847 + <item>bread</item> 848 + <item>croissant</item> 849 + <item>baguette bread</item> 850 + <item>flatbread</item> 851 + <item>pretzel</item> 852 + <item>bagel</item> 853 + <item>pancakes</item> 854 + <item>waffle</item> 855 + <item>cheese wedge</item> 856 + <item>meat on bone</item> 857 + <item>poultry leg</item> 858 + <item>cut of meat</item> 859 + <item>bacon</item> 860 + <item>hamburger</item> 861 + <item>french fries</item> 862 + <item>pizza</item> 863 + <item>hot dog</item> 864 + <item>sandwich</item> 865 + <item>taco</item> 866 + <item>burrito</item> 867 + <item>tamale</item> 868 + <item>stuffed flatbread</item> 869 + <item>falafel</item> 870 + <item>egg</item> 871 + <item>cooking</item> 872 + <item>shallow pan of food</item> 873 + <item>pot of food</item> 874 + <item>fondue</item> 875 + <item>bowl with spoon</item> 876 + <item>green salad</item> 877 + <item>popcorn</item> 878 + <item>butter</item> 879 + <item>salt</item> 880 + <item>canned food</item> 881 + 882 + # subgroup: food-asian 883 + <item>bento box</item> 884 + <item>rice cracker</item> 885 + <item>rice ball</item> 886 + <item>cooked rice</item> 887 + <item>curry rice</item> 888 + <item>steaming bowl</item> 889 + <item>spaghetti</item> 890 + <item>roasted sweet potato</item> 891 + <item>oden</item> 892 + <item>sushi</item> 893 + <item>fried shrimp</item> 894 + <item>fish cake with swirl</item> 895 + <item>moon cake</item> 896 + <item>dango</item> 897 + <item>dumpling</item> 898 + <item>fortune cookie</item> 899 + <item>takeout box</item> 900 + 901 + # subgroup: food-marine 902 + <item>crab</item> 903 + <item>lobster</item> 904 + <item>shrimp</item> 905 + <item>squid</item> 906 + <item>oyster</item> 907 + 908 + # subgroup: food-sweet 909 + <item>soft ice cream</item> 910 + <item>shaved ice</item> 911 + <item>ice cream</item> 912 + <item>doughnut</item> 913 + <item>cookie</item> 914 + <item>birthday cake</item> 915 + <item>shortcake</item> 916 + <item>cupcake</item> 917 + <item>pie</item> 918 + <item>chocolate bar</item> 919 + <item>candy</item> 920 + <item>lollipop</item> 921 + <item>custard</item> 922 + <item>honey pot</item> 923 + 924 + # subgroup: drink 925 + <item>baby bottle</item> 926 + <item>glass of milk</item> 927 + <item>hot beverage</item> 928 + <item>teapot</item> 929 + <item>teacup without handle</item> 930 + <item>sake</item> 931 + <item>bottle with popping cork</item> 932 + <item>wine glass</item> 933 + <item>cocktail glass</item> 934 + <item>tropical drink</item> 935 + <item>beer mug</item> 936 + <item>clinking beer mugs</item> 937 + <item>clinking glasses</item> 938 + <item>tumbler glass</item> 939 + <item>pouring liquid</item> 940 + <item>cup with straw</item> 941 + <item>bubble tea</item> 942 + <item>beverage box</item> 943 + <item>mate</item> 944 + <item>ice</item> 945 + 946 + # subgroup: dishware 947 + <item>chopsticks</item> 948 + <item>fork and knife with plate</item> 949 + <item>fork and knife</item> 950 + <item>spoon</item> 951 + <item>kitchen knife</item> 952 + <item>jar</item> 953 + <item>amphora</item> 954 + </string-array> 955 + 956 + # group: Travel Places 957 + <string-array name="emoji_hint_travel"> 958 + # subgroup: place-map 959 + <item>globe showing Europe-Africa</item> 960 + <item>globe showing Americas</item> 961 + <item>globe showing Asia-Australia</item> 962 + <item>globe with meridians</item> 963 + <item>world map</item> 964 + <item>map of Japan</item> 965 + <item>compass</item> 966 + 967 + # subgroup: place-geographic 968 + <item>snow-capped mountain</item> 969 + <item>mountain</item> 970 + <item>volcano</item> 971 + <item>mount fuji</item> 972 + <item>camping</item> 973 + <item>beach with umbrella</item> 974 + <item>desert</item> 975 + <item>desert island</item> 976 + <item>national park</item> 977 + 978 + # subgroup: place-building 979 + <item>stadium</item> 980 + <item>classical building</item> 981 + <item>building construction</item> 982 + <item>brick</item> 983 + <item>rock</item> 984 + <item>wood</item> 985 + <item>hut</item> 986 + <item>houses</item> 987 + <item>derelict house</item> 988 + <item>house</item> 989 + <item>house with garden</item> 990 + <item>office building</item> 991 + <item>Japanese post office</item> 992 + <item>post office</item> 993 + <item>hospital</item> 994 + <item>bank</item> 995 + <item>hotel</item> 996 + <item>love hotel</item> 997 + <item>convenience store</item> 998 + <item>school</item> 999 + <item>department store</item> 1000 + <item>factory</item> 1001 + <item>Japanese castle</item> 1002 + <item>castle</item> 1003 + <item>wedding</item> 1004 + <item>Tokyo tower</item> 1005 + <item>Statue of Liberty</item> 1006 + 1007 + # subgroup: place-religious 1008 + <item>church</item> 1009 + <item>mosque</item> 1010 + <item>hindu temple</item> 1011 + <item>synagogue</item> 1012 + <item>shinto shrine</item> 1013 + <item>kaaba</item> 1014 + 1015 + # subgroup: place-other 1016 + <item>fountain</item> 1017 + <item>tent</item> 1018 + <item>foggy</item> 1019 + <item>night with stars</item> 1020 + <item>cityscape</item> 1021 + <item>sunrise over mountains</item> 1022 + <item>sunrise</item> 1023 + <item>cityscape at dusk</item> 1024 + <item>sunset</item> 1025 + <item>bridge at night</item> 1026 + <item>hot springs</item> 1027 + <item>carousel horse</item> 1028 + <item>playground slide</item> 1029 + <item>ferris wheel</item> 1030 + <item>roller coaster</item> 1031 + <item>barber pole</item> 1032 + <item>circus tent</item> 1033 + 1034 + # subgroup: transport-ground 1035 + <item>locomotive</item> 1036 + <item>railway car</item> 1037 + <item>high-speed train</item> 1038 + <item>bullet train</item> 1039 + <item>train</item> 1040 + <item>metro</item> 1041 + <item>light rail</item> 1042 + <item>station</item> 1043 + <item>tram</item> 1044 + <item>monorail</item> 1045 + <item>mountain railway</item> 1046 + <item>tram car</item> 1047 + <item>bus</item> 1048 + <item>oncoming bus</item> 1049 + <item>trolleybus</item> 1050 + <item>minibus</item> 1051 + <item>ambulance</item> 1052 + <item>fire engine</item> 1053 + <item>police car</item> 1054 + <item>oncoming police car</item> 1055 + <item>taxi</item> 1056 + <item>oncoming taxi</item> 1057 + <item>automobile</item> 1058 + <item>oncoming automobile</item> 1059 + <item>sport utility vehicle</item> 1060 + <item>pickup truck</item> 1061 + <item>delivery truck</item> 1062 + <item>articulated lorry</item> 1063 + <item>tractor</item> 1064 + <item>racing car</item> 1065 + <item>motorcycle</item> 1066 + <item>motor scooter</item> 1067 + <item>manual wheelchair</item> 1068 + <item>motorized wheelchair</item> 1069 + <item>auto rickshaw</item> 1070 + <item>bicycle</item> 1071 + <item>kick scooter</item> 1072 + <item>skateboard</item> 1073 + <item>roller skate</item> 1074 + <item>bus stop</item> 1075 + <item>motorway</item> 1076 + <item>railway track</item> 1077 + <item>oil drum</item> 1078 + <item>fuel pump</item> 1079 + <item>wheel</item> 1080 + <item>police car light</item> 1081 + <item>horizontal traffic light</item> 1082 + <item>vertical traffic light</item> 1083 + <item>stop sign</item> 1084 + <item>construction</item> 1085 + 1086 + # subgroup: transport-water 1087 + <item>anchor</item> 1088 + <item>ring buoy</item> 1089 + <item>sailboat</item> 1090 + <item>canoe</item> 1091 + <item>speedboat</item> 1092 + <item>passenger ship</item> 1093 + <item>ferry</item> 1094 + <item>motor boat</item> 1095 + <item>ship</item> 1096 + 1097 + # subgroup: transport-air 1098 + <item>airplane</item> 1099 + <item>small airplane</item> 1100 + <item>airplane departure</item> 1101 + <item>airplane arrival</item> 1102 + <item>parachute</item> 1103 + <item>seat</item> 1104 + <item>helicopter</item> 1105 + <item>suspension railway</item> 1106 + <item>mountain cableway</item> 1107 + <item>aerial tramway</item> 1108 + <item>satellite</item> 1109 + <item>rocket</item> 1110 + <item>flying saucer</item> 1111 + 1112 + # subgroup: hotel 1113 + <item>bellhop bell</item> 1114 + <item>luggage</item> 1115 + 1116 + # subgroup: time 1117 + <item>hourglass done</item> 1118 + <item>hourglass not done</item> 1119 + <item>watch</item> 1120 + <item>alarm clock</item> 1121 + <item>stopwatch</item> 1122 + <item>timer clock</item> 1123 + <item>mantelpiece clock</item> 1124 + <item>twelve o’clock</item> 1125 + <item>twelve-thirty</item> 1126 + <item>one o’clock</item> 1127 + <item>one-thirty</item> 1128 + <item>two o’clock</item> 1129 + <item>two-thirty</item> 1130 + <item>three o’clock</item> 1131 + <item>three-thirty</item> 1132 + <item>four o’clock</item> 1133 + <item>four-thirty</item> 1134 + <item>five o’clock</item> 1135 + <item>five-thirty</item> 1136 + <item>six o’clock</item> 1137 + <item>six-thirty</item> 1138 + <item>seven o’clock</item> 1139 + <item>seven-thirty</item> 1140 + <item>eight o’clock</item> 1141 + <item>eight-thirty</item> 1142 + <item>nine o’clock</item> 1143 + <item>nine-thirty</item> 1144 + <item>ten o’clock</item> 1145 + <item>ten-thirty</item> 1146 + <item>eleven o’clock</item> 1147 + <item>eleven-thirty</item> 1148 + 1149 + # subgroup: sky weather 1150 + <item>new moon</item> 1151 + <item>waxing crescent moon</item> 1152 + <item>first quarter moon</item> 1153 + <item>waxing gibbous moon</item> 1154 + <item>full moon</item> 1155 + <item>waning gibbous moon</item> 1156 + <item>last quarter moon</item> 1157 + <item>waning crescent moon</item> 1158 + <item>crescent moon</item> 1159 + <item>new moon face</item> 1160 + <item>first quarter moon face</item> 1161 + <item>last quarter moon face</item> 1162 + <item>thermometer</item> 1163 + <item>sun</item> 1164 + <item>full moon face</item> 1165 + <item>sun with face</item> 1166 + <item>ringed planet</item> 1167 + <item>star</item> 1168 + <item>glowing star</item> 1169 + <item>shooting star</item> 1170 + <item>milky way</item> 1171 + <item>cloud</item> 1172 + <item>sun behind cloud</item> 1173 + <item>cloud with lightning and rain</item> 1174 + <item>sun behind small cloud</item> 1175 + <item>sun behind large cloud</item> 1176 + <item>sun behind rain cloud</item> 1177 + <item>cloud with rain</item> 1178 + <item>cloud with snow</item> 1179 + <item>cloud with lightning</item> 1180 + <item>tornado</item> 1181 + <item>fog</item> 1182 + <item>wind face</item> 1183 + <item>cyclone</item> 1184 + <item>rainbow</item> 1185 + <item>closed umbrella</item> 1186 + <item>umbrella</item> 1187 + <item>umbrella with rain drops</item> 1188 + <item>umbrella on ground</item> 1189 + <item>high voltage</item> 1190 + <item>snowflake</item> 1191 + <item>snowman</item> 1192 + <item>snowman without snow</item> 1193 + <item>comet</item> 1194 + <item>fire</item> 1195 + <item>droplet</item> 1196 + <item>water wave</item> 1197 + </string-array> 1198 + 1199 + # group: Activities 1200 + <string-array name="emoji_hint_activities"> 1201 + # subgroup: event 1202 + <item>jack-o-lantern</item> 1203 + <item>Christmas tree</item> 1204 + <item>fireworks</item> 1205 + <item>sparkler</item> 1206 + <item>firecracker</item> 1207 + <item>sparkles</item> 1208 + <item>balloon</item> 1209 + <item>party popper</item> 1210 + <item>confetti ball</item> 1211 + <item>tanabata tree</item> 1212 + <item>pine decoration</item> 1213 + <item>Japanese dolls</item> 1214 + <item>carp streamer</item> 1215 + <item>wind chime</item> 1216 + <item>moon viewing ceremony</item> 1217 + <item>red envelope</item> 1218 + <item>ribbon</item> 1219 + <item>wrapped gift</item> 1220 + <item>reminder ribbon</item> 1221 + <item>admission tickets</item> 1222 + <item>ticket</item> 1223 + 1224 + # subgroup: award-medal 1225 + <item>military medal</item> 1226 + <item>trophy</item> 1227 + <item>sports medal</item> 1228 + <item>1st place medal</item> 1229 + <item>2nd place medal</item> 1230 + <item>3rd place medal</item> 1231 + 1232 + # subgroup: sport 1233 + <item>soccer ball</item> 1234 + <item>baseball</item> 1235 + <item>softball</item> 1236 + <item>basketball</item> 1237 + <item>volleyball</item> 1238 + <item>american football</item> 1239 + <item>rugby football</item> 1240 + <item>tennis</item> 1241 + <item>flying disc</item> 1242 + <item>bowling</item> 1243 + <item>cricket game</item> 1244 + <item>field hockey</item> 1245 + <item>ice hockey</item> 1246 + <item>lacrosse</item> 1247 + <item>ping pong</item> 1248 + <item>badminton</item> 1249 + <item>boxing glove</item> 1250 + <item>martial arts uniform</item> 1251 + <item>goal net</item> 1252 + <item>flag in hole</item> 1253 + <item>ice skate</item> 1254 + <item>fishing pole</item> 1255 + <item>diving mask</item> 1256 + <item>running shirt</item> 1257 + <item>skis</item> 1258 + <item>sled</item> 1259 + <item>curling stone</item> 1260 + 1261 + # subgroup: game 1262 + <item>bullseye</item> 1263 + <item>yo-yo</item> 1264 + <item>kite</item> 1265 + <item>pool 8 ball</item> 1266 + <item>crystal ball</item> 1267 + <item>magic wand</item> 1268 + <item>nazar amulet</item> 1269 + <item>hamsa</item> 1270 + <item>video game</item> 1271 + <item>joystick</item> 1272 + <item>slot machine</item> 1273 + <item>game die</item> 1274 + <item>puzzle piece</item> 1275 + <item>teddy bear</item> 1276 + <item>piñata</item> 1277 + <item>mirror ball</item> 1278 + <item>nesting dolls</item> 1279 + <item>spade suit</item> 1280 + <item>heart suit</item> 1281 + <item>diamond suit</item> 1282 + <item>club suit</item> 1283 + <item>chess pawn</item> 1284 + <item>joker</item> 1285 + <item>mahjong red dragon</item> 1286 + <item>flower playing cards</item> 1287 + 1288 + # subgroup: arts crafts 1289 + <item>performing arts</item> 1290 + <item>framed picture</item> 1291 + <item>artist palette</item> 1292 + <item>thread</item> 1293 + <item>sewing needle</item> 1294 + <item>yarn</item> 1295 + <item>knot</item> 1296 + </string-array> 1297 + 1298 + # group: Objects 1299 + <string-array name="emoji_hint_objects"> 1300 + # subgroup: clothing 1301 + <item>glasses</item> 1302 + <item>sunglasses</item> 1303 + <item>goggles</item> 1304 + <item>lab coat</item> 1305 + <item>safety vest</item> 1306 + <item>necktie</item> 1307 + <item>t-shirt</item> 1308 + <item>jeans</item> 1309 + <item>scarf</item> 1310 + <item>gloves</item> 1311 + <item>coat</item> 1312 + <item>socks</item> 1313 + <item>dress</item> 1314 + <item>kimono</item> 1315 + <item>sari</item> 1316 + <item>one-piece swimsuit</item> 1317 + <item>briefs</item> 1318 + <item>shorts</item> 1319 + <item>bikini</item> 1320 + <item>woman’s clothes</item> 1321 + <item>purse</item> 1322 + <item>handbag</item> 1323 + <item>clutch bag</item> 1324 + <item>shopping bags</item> 1325 + <item>backpack</item> 1326 + <item>thong sandal</item> 1327 + <item>man’s shoe</item> 1328 + <item>running shoe</item> 1329 + <item>hiking boot</item> 1330 + <item>flat shoe</item> 1331 + <item>high-heeled shoe</item> 1332 + <item>woman’s sandal</item> 1333 + <item>ballet shoes</item> 1334 + <item>woman’s boot</item> 1335 + <item>crown</item> 1336 + <item>woman’s hat</item> 1337 + <item>top hat</item> 1338 + <item>graduation cap</item> 1339 + <item>billed cap</item> 1340 + <item>military helmet</item> 1341 + <item>rescue worker’s helmet</item> 1342 + <item>prayer beads</item> 1343 + <item>lipstick</item> 1344 + <item>ring</item> 1345 + <item>gem stone</item> 1346 + 1347 + # subgroup: sound 1348 + <item>muted speaker</item> 1349 + <item>speaker low volume</item> 1350 + <item>speaker medium volume</item> 1351 + <item>speaker high volume</item> 1352 + <item>loudspeaker</item> 1353 + <item>megaphone</item> 1354 + <item>postal horn</item> 1355 + <item>bell</item> 1356 + <item>bell with slash</item> 1357 + 1358 + # subgroup: music 1359 + <item>musical score</item> 1360 + <item>musical note</item> 1361 + <item>musical notes</item> 1362 + <item>studio microphone</item> 1363 + <item>level slider</item> 1364 + <item>control knobs</item> 1365 + <item>microphone</item> 1366 + <item>headphone</item> 1367 + <item>radio</item> 1368 + 1369 + # subgroup: musical-instrument 1370 + <item>saxophone</item> 1371 + <item>accordion</item> 1372 + <item>guitar</item> 1373 + <item>musical keyboard</item> 1374 + <item>trumpet</item> 1375 + <item>violin</item> 1376 + <item>banjo</item> 1377 + <item>drum</item> 1378 + <item>long drum</item> 1379 + 1380 + # subgroup: phone 1381 + <item>mobile phone</item> 1382 + <item>mobile phone with arrow</item> 1383 + <item>telephone</item> 1384 + <item>telephone receiver</item> 1385 + <item>pager</item> 1386 + <item>fax machine</item> 1387 + 1388 + # subgroup: computer 1389 + <item>battery</item> 1390 + <item>low battery</item> 1391 + <item>electric plug</item> 1392 + <item>laptop</item> 1393 + <item>desktop computer</item> 1394 + <item>printer</item> 1395 + <item>keyboard</item> 1396 + <item>computer mouse</item> 1397 + <item>trackball</item> 1398 + <item>computer disk</item> 1399 + <item>floppy disk</item> 1400 + <item>optical disk</item> 1401 + <item>dvd</item> 1402 + <item>abacus</item> 1403 + 1404 + # subgroup: light video 1405 + <item>movie camera</item> 1406 + <item>film frames</item> 1407 + <item>film projector</item> 1408 + <item>clapper board</item> 1409 + <item>television</item> 1410 + <item>camera</item> 1411 + <item>camera with flash</item> 1412 + <item>video camera</item> 1413 + <item>videocassette</item> 1414 + <item>magnifying glass tilted left</item> 1415 + <item>magnifying glass tilted right</item> 1416 + <item>candle</item> 1417 + <item>light bulb</item> 1418 + <item>flashlight</item> 1419 + <item>red paper lantern</item> 1420 + <item>diya lamp</item> 1421 + 1422 + # subgroup: book-paper 1423 + <item>notebook with decorative cover</item> 1424 + <item>closed book</item> 1425 + <item>open book</item> 1426 + <item>green book</item> 1427 + <item>blue book</item> 1428 + <item>orange book</item> 1429 + <item>books</item> 1430 + <item>notebook</item> 1431 + <item>ledger</item> 1432 + <item>page with curl</item> 1433 + <item>scroll</item> 1434 + <item>page facing up</item> 1435 + <item>newspaper</item> 1436 + <item>rolled-up newspaper</item> 1437 + <item>bookmark tabs</item> 1438 + <item>bookmark</item> 1439 + <item>label</item> 1440 + 1441 + # subgroup: money 1442 + <item>money bag</item> 1443 + <item>coin</item> 1444 + <item>yen banknote</item> 1445 + <item>dollar banknote</item> 1446 + <item>euro banknote</item> 1447 + <item>pound banknote</item> 1448 + <item>money with wings</item> 1449 + <item>credit card</item> 1450 + <item>receipt</item> 1451 + <item>chart increasing with yen</item> 1452 + 1453 + # subgroup: mail 1454 + <item>envelope</item> 1455 + <item>e-mail</item> 1456 + <item>incoming envelope</item> 1457 + <item>envelope with arrow</item> 1458 + <item>outbox tray</item> 1459 + <item>inbox tray</item> 1460 + <item>package</item> 1461 + <item>closed mailbox with raised flag</item> 1462 + <item>closed mailbox with lowered flag</item> 1463 + <item>open mailbox with raised flag</item> 1464 + <item>open mailbox with lowered flag</item> 1465 + <item>postbox</item> 1466 + <item>ballot box with ballot</item> 1467 + 1468 + # subgroup: writing 1469 + <item>pencil</item> 1470 + <item>black nib</item> 1471 + <item>fountain pen</item> 1472 + <item>pen</item> 1473 + <item>paintbrush</item> 1474 + <item>crayon</item> 1475 + <item>memo</item> 1476 + 1477 + # subgroup: office 1478 + <item>briefcase</item> 1479 + <item>file folder</item> 1480 + <item>open file folder</item> 1481 + <item>card index dividers</item> 1482 + <item>calendar</item> 1483 + <item>tear-off calendar</item> 1484 + <item>spiral notepad</item> 1485 + <item>spiral calendar</item> 1486 + <item>card index</item> 1487 + <item>chart increasing</item> 1488 + <item>chart decreasing</item> 1489 + <item>bar chart</item> 1490 + <item>clipboard</item> 1491 + <item>pushpin</item> 1492 + <item>round pushpin</item> 1493 + <item>paperclip</item> 1494 + <item>linked paperclips</item> 1495 + <item>straight ruler</item> 1496 + <item>triangular ruler</item> 1497 + <item>scissors</item> 1498 + <item>card file box</item> 1499 + <item>file cabinet</item> 1500 + <item>wastebasket</item> 1501 + 1502 + # subgroup: lock 1503 + <item>locked</item> 1504 + <item>unlocked</item> 1505 + <item>locked with pen</item> 1506 + <item>locked with key</item> 1507 + <item>key</item> 1508 + <item>old key</item> 1509 + 1510 + # subgroup: tool 1511 + <item>hammer</item> 1512 + <item>axe</item> 1513 + <item>pick</item> 1514 + <item>hammer and pick</item> 1515 + <item>hammer and wrench</item> 1516 + <item>dagger</item> 1517 + <item>crossed swords</item> 1518 + <item>water pistol</item> 1519 + <item>boomerang</item> 1520 + <item>bow and arrow</item> 1521 + <item>shield</item> 1522 + <item>carpentry saw</item> 1523 + <item>wrench</item> 1524 + <item>screwdriver</item> 1525 + <item>nut and bolt</item> 1526 + <item>gear</item> 1527 + <item>clamp</item> 1528 + <item>balance scale</item> 1529 + <item>white cane</item> 1530 + <item>link</item> 1531 + <item>chains</item> 1532 + <item>hook</item> 1533 + <item>toolbox</item> 1534 + <item>magnet</item> 1535 + <item>ladder</item> 1536 + 1537 + # subgroup: science 1538 + <item>alembic</item> 1539 + <item>test tube</item> 1540 + <item>petri dish</item> 1541 + <item>dna</item> 1542 + <item>microscope</item> 1543 + <item>telescope</item> 1544 + <item>satellite antenna</item> 1545 + 1546 + # subgroup: medical 1547 + <item>syringe</item> 1548 + <item>drop of blood</item> 1549 + <item>pill</item> 1550 + <item>adhesive bandage</item> 1551 + <item>crutch</item> 1552 + <item>stethoscope</item> 1553 + <item>x-ray</item> 1554 + 1555 + # subgroup: household 1556 + <item>door</item> 1557 + <item>elevator</item> 1558 + <item>mirror</item> 1559 + <item>window</item> 1560 + <item>bed</item> 1561 + <item>couch and lamp</item> 1562 + <item>chair</item> 1563 + <item>toilet</item> 1564 + <item>plunger</item> 1565 + <item>shower</item> 1566 + <item>bathtub</item> 1567 + <item>mouse trap</item> 1568 + <item>razor</item> 1569 + <item>lotion bottle</item> 1570 + <item>safety pin</item> 1571 + <item>broom</item> 1572 + <item>basket</item> 1573 + <item>roll of paper</item> 1574 + <item>bucket</item> 1575 + <item>soap</item> 1576 + <item>bubbles</item> 1577 + <item>toothbrush</item> 1578 + <item>sponge</item> 1579 + <item>fire extinguisher</item> 1580 + <item>shopping cart</item> 1581 + 1582 + # subgroup: other-object 1583 + <item>cigarette</item> 1584 + <item>coffin</item> 1585 + <item>headstone</item> 1586 + <item>funeral urn</item> 1587 + <item>moai</item> 1588 + <item>placard</item> 1589 + <item>identification card</item> 1590 + </string-array> 1591 + 1592 + # group: Symbols 1593 + <string-array name="emoji_hint_symbols"> 1594 + # subgroup: transport-sign 1595 + <item>ATM sign</item> 1596 + <item>litter in bin sign</item> 1597 + <item>potable water</item> 1598 + <item>wheelchair symbol</item> 1599 + <item>men’s room</item> 1600 + <item>women’s room</item> 1601 + <item>restroom</item> 1602 + <item>baby symbol</item> 1603 + <item>water closet</item> 1604 + <item>passport control</item> 1605 + <item>customs</item> 1606 + <item>baggage claim</item> 1607 + <item>left luggage</item> 1608 + 1609 + # subgroup: warning 1610 + <item>warning</item> 1611 + <item>children crossing</item> 1612 + <item>no entry</item> 1613 + <item>prohibited</item> 1614 + <item>no bicycles</item> 1615 + <item>no smoking</item> 1616 + <item>no littering</item> 1617 + <item>non-potable water</item> 1618 + <item>no pedestrians</item> 1619 + <item>no mobile phones</item> 1620 + <item>no one under eighteen</item> 1621 + <item>radioactive</item> 1622 + <item>biohazard</item> 1623 + 1624 + # subgroup: arrow 1625 + <item>up arrow</item> 1626 + <item>up-right arrow</item> 1627 + <item>right arrow</item> 1628 + <item>down-right arrow</item> 1629 + <item>down arrow</item> 1630 + <item>down-left arrow</item> 1631 + <item>left arrow</item> 1632 + <item>up-left arrow</item> 1633 + <item>up-down arrow</item> 1634 + <item>left-right arrow</item> 1635 + <item>right arrow curving left</item> 1636 + <item>left arrow curving right</item> 1637 + <item>right arrow curving up</item> 1638 + <item>right arrow curving down</item> 1639 + <item>clockwise vertical arrows</item> 1640 + <item>counterclockwise arrows button</item> 1641 + <item>BACK arrow</item> 1642 + <item>END arrow</item> 1643 + <item>ON! arrow</item> 1644 + <item>SOON arrow</item> 1645 + <item>TOP arrow</item> 1646 + 1647 + # subgroup: religion 1648 + <item>place of worship</item> 1649 + <item>atom symbol</item> 1650 + <item>om</item> 1651 + <item>star of David</item> 1652 + <item>wheel of dharma</item> 1653 + <item>yin yang</item> 1654 + <item>latin cross</item> 1655 + <item>orthodox cross</item> 1656 + <item>star and crescent</item> 1657 + <item>peace symbol</item> 1658 + <item>menorah</item> 1659 + <item>dotted six-pointed star</item> 1660 + 1661 + # subgroup: zodiac 1662 + <item>Aries</item> 1663 + <item>Taurus</item> 1664 + <item>Gemini</item> 1665 + <item>Cancer</item> 1666 + <item>Leo</item> 1667 + <item>Virgo</item> 1668 + <item>Libra</item> 1669 + <item>Scorpio</item> 1670 + <item>Sagittarius</item> 1671 + <item>Capricorn</item> 1672 + <item>Aquarius</item> 1673 + <item>Pisces</item> 1674 + <item>Ophiuchus</item> 1675 + 1676 + # subgroup: av-symbol 1677 + <item>shuffle tracks button</item> 1678 + <item>repeat button</item> 1679 + <item>repeat single button</item> 1680 + <item>play button</item> 1681 + <item>fast-forward button</item> 1682 + <item>next track button</item> 1683 + <item>play or pause button</item> 1684 + <item>reverse button</item> 1685 + <item>fast reverse button</item> 1686 + <item>last track button</item> 1687 + <item>upwards button</item> 1688 + <item>fast up button</item> 1689 + <item>downwards button</item> 1690 + <item>fast down button</item> 1691 + <item>pause button</item> 1692 + <item>stop button</item> 1693 + <item>record button</item> 1694 + <item>eject button</item> 1695 + <item>cinema</item> 1696 + <item>dim button</item> 1697 + <item>bright button</item> 1698 + <item>antenna bars</item> 1699 + <item>vibration mode</item> 1700 + <item>mobile phone off</item> 1701 + 1702 + # subgroup: gender 1703 + <item>female sign</item> 1704 + <item>male sign</item> 1705 + <item>transgender symbol</item> 1706 + 1707 + # subgroup: math 1708 + <item>multiply</item> 1709 + <item>plus</item> 1710 + <item>minus</item> 1711 + <item>divide</item> 1712 + <item>heavy equals sign</item> 1713 + <item>infinity</item> 1714 + 1715 + # subgroup: punctuation 1716 + <item>double exclamation mark</item> 1717 + <item>exclamation question mark</item> 1718 + <item>red question mark</item> 1719 + <item>white question mark</item> 1720 + <item>white exclamation mark</item> 1721 + <item>red exclamation mark</item> 1722 + <item>wavy dash</item> 1723 + 1724 + # subgroup: currency 1725 + <item>currency exchange</item> 1726 + <item>heavy dollar sign</item> 1727 + 1728 + # subgroup: other-symbol 1729 + <item>medical symbol</item> 1730 + <item>recycling symbol</item> 1731 + <item>fleur-de-lis</item> 1732 + <item>trident emblem</item> 1733 + <item>name badge</item> 1734 + <item>Japanese symbol for beginner</item> 1735 + <item>hollow red circle</item> 1736 + <item>check mark button</item> 1737 + <item>check box with check</item> 1738 + <item>check mark</item> 1739 + <item>cross mark</item> 1740 + <item>cross mark button</item> 1741 + <item>curly loop</item> 1742 + <item>double curly loop</item> 1743 + <item>part alternation mark</item> 1744 + <item>eight-spoked asterisk</item> 1745 + <item>eight-pointed star</item> 1746 + <item>sparkle</item> 1747 + <item>copyright</item> 1748 + <item>registered</item> 1749 + <item>trade mark</item> 1750 + 1751 + # subgroup: keycap 1752 + <item>keycap: #</item> 1753 + <item>keycap: *</item> 1754 + <item>keycap: 0</item> 1755 + <item>keycap: 1</item> 1756 + <item>keycap: 2</item> 1757 + <item>keycap: 3</item> 1758 + <item>keycap: 4</item> 1759 + <item>keycap: 5</item> 1760 + <item>keycap: 6</item> 1761 + <item>keycap: 7</item> 1762 + <item>keycap: 8</item> 1763 + <item>keycap: 9</item> 1764 + <item>keycap: 10</item> 1765 + 1766 + # subgroup: alphanum 1767 + <item>input latin uppercase</item> 1768 + <item>input latin lowercase</item> 1769 + <item>input numbers</item> 1770 + <item>input symbols</item> 1771 + <item>input latin letters</item> 1772 + <item>A button (blood type)</item> 1773 + <item>AB button (blood type)</item> 1774 + <item>B button (blood type)</item> 1775 + <item>CL button</item> 1776 + <item>COOL button</item> 1777 + <item>FREE button</item> 1778 + <item>information</item> 1779 + <item>ID button</item> 1780 + <item>circled M</item> 1781 + <item>NEW button</item> 1782 + <item>NG button</item> 1783 + <item>O button (blood type)</item> 1784 + <item>OK button</item> 1785 + <item>P button</item> 1786 + <item>SOS button</item> 1787 + <item>UP! button</item> 1788 + <item>VS button</item> 1789 + <item>Japanese “here” button</item> 1790 + <item>Japanese “service charge” button</item> 1791 + <item>Japanese “monthly amount” button</item> 1792 + <item>Japanese “not free of charge” button</item> 1793 + <item>Japanese “reserved” button</item> 1794 + <item>Japanese “bargain” button</item> 1795 + <item>Japanese “discount” button</item> 1796 + <item>Japanese “free of charge” button</item> 1797 + <item>Japanese “prohibited” button</item> 1798 + <item>Japanese “acceptable” button</item> 1799 + <item>Japanese “application” button</item> 1800 + <item>Japanese “passing grade” button</item> 1801 + <item>Japanese “vacancy” button</item> 1802 + <item>Japanese “congratulations” button</item> 1803 + <item>Japanese “secret” button</item> 1804 + <item>Japanese “open for business” button</item> 1805 + <item>Japanese “no vacancy” button</item> 1806 + 1807 + # subgroup: geometric 1808 + <item>red circle</item> 1809 + <item>orange circle</item> 1810 + <item>yellow circle</item> 1811 + <item>green circle</item> 1812 + <item>blue circle</item> 1813 + <item>purple circle</item> 1814 + <item>brown circle</item> 1815 + <item>black circle</item> 1816 + <item>white circle</item> 1817 + <item>red square</item> 1818 + <item>orange square</item> 1819 + <item>yellow square</item> 1820 + <item>green square</item> 1821 + <item>blue square</item> 1822 + <item>purple square</item> 1823 + <item>brown square</item> 1824 + <item>black large square</item> 1825 + <item>white large square</item> 1826 + <item>black medium square</item> 1827 + <item>white medium square</item> 1828 + <item>black medium-small square</item> 1829 + <item>white medium-small square</item> 1830 + <item>black small square</item> 1831 + <item>white small square</item> 1832 + <item>large orange diamond</item> 1833 + <item>large blue diamond</item> 1834 + <item>small orange diamond</item> 1835 + <item>small blue diamond</item> 1836 + <item>red triangle pointed up</item> 1837 + <item>red triangle pointed down</item> 1838 + <item>diamond with a dot</item> 1839 + <item>radio button</item> 1840 + <item>white square button</item> 1841 + <item>black square button</item> 1842 + </string-array> 1843 + 1844 + # group: Flags 1845 + <string-array name="emoji_hint_flags"> 1846 + # subgroup: flag 1847 + <item>chequered flag</item> 1848 + <item>triangular flag</item> 1849 + <item>crossed flags</item> 1850 + <item>black flag</item> 1851 + <item>white flag</item> 1852 + <item>rainbow flag</item> 1853 + <item>transgender flag</item> 1854 + <item>pirate flag</item> 1855 + 1856 + # subgroup: country-flag 1857 + <item>flag: Ascension Island</item> 1858 + <item>flag: Andorra</item> 1859 + <item>flag: United Arab Emirates</item> 1860 + <item>flag: Afghanistan</item> 1861 + <item>flag: Antigua Barbuda</item> 1862 + <item>flag: Anguilla</item> 1863 + <item>flag: Albania</item> 1864 + <item>flag: Armenia</item> 1865 + <item>flag: Angola</item> 1866 + <item>flag: Antarctica</item> 1867 + <item>flag: Argentina</item> 1868 + <item>flag: American Samoa</item> 1869 + <item>flag: Austria</item> 1870 + <item>flag: Australia</item> 1871 + <item>flag: Aruba</item> 1872 + <item>flag: Åland Islands</item> 1873 + <item>flag: Azerbaijan</item> 1874 + <item>flag: Bosnia Herzegovina</item> 1875 + <item>flag: Barbados</item> 1876 + <item>flag: Bangladesh</item> 1877 + <item>flag: Belgium</item> 1878 + <item>flag: Burkina Faso</item> 1879 + <item>flag: Bulgaria</item> 1880 + <item>flag: Bahrain</item> 1881 + <item>flag: Burundi</item> 1882 + <item>flag: Benin</item> 1883 + <item>flag: St. Barthélemy</item> 1884 + <item>flag: Bermuda</item> 1885 + <item>flag: Brunei</item> 1886 + <item>flag: Bolivia</item> 1887 + <item>flag: Caribbean Netherlands</item> 1888 + <item>flag: Brazil</item> 1889 + <item>flag: Bahamas</item> 1890 + <item>flag: Bhutan</item> 1891 + <item>flag: Bouvet Island</item> 1892 + <item>flag: Botswana</item> 1893 + <item>flag: Belarus</item> 1894 + <item>flag: Belize</item> 1895 + <item>flag: Canada</item> 1896 + <item>flag: Cocos (Keeling) Islands</item> 1897 + <item>flag: Congo - Kinshasa</item> 1898 + <item>flag: Central African Republic</item> 1899 + <item>flag: Congo - Brazzaville</item> 1900 + <item>flag: Switzerland</item> 1901 + <item>flag: Côte d’Ivoire</item> 1902 + <item>flag: Cook Islands</item> 1903 + <item>flag: Chile</item> 1904 + <item>flag: Cameroon</item> 1905 + <item>flag: China</item> 1906 + <item>flag: Colombia</item> 1907 + <item>flag: Clipperton Island</item> 1908 + <item>flag: Costa Rica</item> 1909 + <item>flag: Cuba</item> 1910 + <item>flag: Cape Verde</item> 1911 + <item>flag: Curaçao</item> 1912 + <item>flag: Christmas Island</item> 1913 + <item>flag: Cyprus</item> 1914 + <item>flag: Czechia</item> 1915 + <item>flag: Germany</item> 1916 + <item>flag: Diego Garcia</item> 1917 + <item>flag: Djibouti</item> 1918 + <item>flag: Denmark</item> 1919 + <item>flag: Dominica</item> 1920 + <item>flag: Dominican Republic</item> 1921 + <item>flag: Algeria</item> 1922 + <item>flag: Ceuta Melilla</item> 1923 + <item>flag: Ecuador</item> 1924 + <item>flag: Estonia</item> 1925 + <item>flag: Egypt</item> 1926 + <item>flag: Western Sahara</item> 1927 + <item>flag: Eritrea</item> 1928 + <item>flag: Spain</item> 1929 + <item>flag: Ethiopia</item> 1930 + <item>flag: European Union</item> 1931 + <item>flag: Finland</item> 1932 + <item>flag: Fiji</item> 1933 + <item>flag: Falkland Islands</item> 1934 + <item>flag: Micronesia</item> 1935 + <item>flag: Faroe Islands</item> 1936 + <item>flag: France</item> 1937 + <item>flag: Gabon</item> 1938 + <item>flag: United Kingdom</item> 1939 + <item>flag: Grenada</item> 1940 + <item>flag: Georgia</item> 1941 + <item>flag: French Guiana</item> 1942 + <item>flag: Guernsey</item> 1943 + <item>flag: Ghana</item> 1944 + <item>flag: Gibraltar</item> 1945 + <item>flag: Greenland</item> 1946 + <item>flag: Gambia</item> 1947 + <item>flag: Guinea</item> 1948 + <item>flag: Guadeloupe</item> 1949 + <item>flag: Equatorial Guinea</item> 1950 + <item>flag: Greece</item> 1951 + <item>flag: South Georgia South Sandwich Islands</item> 1952 + <item>flag: Guatemala</item> 1953 + <item>flag: Guam</item> 1954 + <item>flag: Guinea-Bissau</item> 1955 + <item>flag: Guyana</item> 1956 + <item>flag: Hong Kong SAR China</item> 1957 + <item>flag: Heard McDonald Islands</item> 1958 + <item>flag: Honduras</item> 1959 + <item>flag: Croatia</item> 1960 + <item>flag: Haiti</item> 1961 + <item>flag: Hungary</item> 1962 + <item>flag: Canary Islands</item> 1963 + <item>flag: Indonesia</item> 1964 + <item>flag: Ireland</item> 1965 + <item>flag: Israel</item> 1966 + <item>flag: Isle of Man</item> 1967 + <item>flag: India</item> 1968 + <item>flag: British Indian Ocean Territory</item> 1969 + <item>flag: Iraq</item> 1970 + <item>flag: Iran</item> 1971 + <item>flag: Iceland</item> 1972 + <item>flag: Italy</item> 1973 + <item>flag: Jersey</item> 1974 + <item>flag: Jamaica</item> 1975 + <item>flag: Jordan</item> 1976 + <item>flag: Japan</item> 1977 + <item>flag: Kenya</item> 1978 + <item>flag: Kyrgyzstan</item> 1979 + <item>flag: Cambodia</item> 1980 + <item>flag: Kiribati</item> 1981 + <item>flag: Comoros</item> 1982 + <item>flag: St. Kitts Nevis</item> 1983 + <item>flag: North Korea</item> 1984 + <item>flag: South Korea</item> 1985 + <item>flag: Kuwait</item> 1986 + <item>flag: Cayman Islands</item> 1987 + <item>flag: Kazakhstan</item> 1988 + <item>flag: Laos</item> 1989 + <item>flag: Lebanon</item> 1990 + <item>flag: St. Lucia</item> 1991 + <item>flag: Liechtenstein</item> 1992 + <item>flag: Sri Lanka</item> 1993 + <item>flag: Liberia</item> 1994 + <item>flag: Lesotho</item> 1995 + <item>flag: Lithuania</item> 1996 + <item>flag: Luxembourg</item> 1997 + <item>flag: Latvia</item> 1998 + <item>flag: Libya</item> 1999 + <item>flag: Morocco</item> 2000 + <item>flag: Monaco</item> 2001 + <item>flag: Moldova</item> 2002 + <item>flag: Montenegro</item> 2003 + <item>flag: St. Martin</item> 2004 + <item>flag: Madagascar</item> 2005 + <item>flag: Marshall Islands</item> 2006 + <item>flag: North Macedonia</item> 2007 + <item>flag: Mali</item> 2008 + <item>flag: Myanmar (Burma)</item> 2009 + <item>flag: Mongolia</item> 2010 + <item>flag: Macao SAR China</item> 2011 + <item>flag: Northern Mariana Islands</item> 2012 + <item>flag: Martinique</item> 2013 + <item>flag: Mauritania</item> 2014 + <item>flag: Montserrat</item> 2015 + <item>flag: Malta</item> 2016 + <item>flag: Mauritius</item> 2017 + <item>flag: Maldives</item> 2018 + <item>flag: Malawi</item> 2019 + <item>flag: Mexico</item> 2020 + <item>flag: Malaysia</item> 2021 + <item>flag: Mozambique</item> 2022 + <item>flag: Namibia</item> 2023 + <item>flag: New Caledonia</item> 2024 + <item>flag: Niger</item> 2025 + <item>flag: Norfolk Island</item> 2026 + <item>flag: Nigeria</item> 2027 + <item>flag: Nicaragua</item> 2028 + <item>flag: Netherlands</item> 2029 + <item>flag: Norway</item> 2030 + <item>flag: Nepal</item> 2031 + <item>flag: Nauru</item> 2032 + <item>flag: Niue</item> 2033 + <item>flag: New Zealand</item> 2034 + <item>flag: Oman</item> 2035 + <item>flag: Panama</item> 2036 + <item>flag: Peru</item> 2037 + <item>flag: French Polynesia</item> 2038 + <item>flag: Papua New Guinea</item> 2039 + <item>flag: Philippines</item> 2040 + <item>flag: Pakistan</item> 2041 + <item>flag: Poland</item> 2042 + <item>flag: St. Pierre Miquelon</item> 2043 + <item>flag: Pitcairn Islands</item> 2044 + <item>flag: Puerto Rico</item> 2045 + <item>flag: Palestinian Territories</item> 2046 + <item>flag: Portugal</item> 2047 + <item>flag: Palau</item> 2048 + <item>flag: Paraguay</item> 2049 + <item>flag: Qatar</item> 2050 + <item>flag: Réunion</item> 2051 + <item>flag: Romania</item> 2052 + <item>flag: Serbia</item> 2053 + <item>flag: Russia</item> 2054 + <item>flag: Rwanda</item> 2055 + <item>flag: Saudi Arabia</item> 2056 + <item>flag: Solomon Islands</item> 2057 + <item>flag: Seychelles</item> 2058 + <item>flag: Sudan</item> 2059 + <item>flag: Sweden</item> 2060 + <item>flag: Singapore</item> 2061 + <item>flag: St. Helena</item> 2062 + <item>flag: Slovenia</item> 2063 + <item>flag: Svalbard Jan Mayen</item> 2064 + <item>flag: Slovakia</item> 2065 + <item>flag: Sierra Leone</item> 2066 + <item>flag: San Marino</item> 2067 + <item>flag: Senegal</item> 2068 + <item>flag: Somalia</item> 2069 + <item>flag: Suriname</item> 2070 + <item>flag: South Sudan</item> 2071 + <item>flag: São Tomé Príncipe</item> 2072 + <item>flag: El Salvador</item> 2073 + <item>flag: Sint Maarten</item> 2074 + <item>flag: Syria</item> 2075 + <item>flag: Eswatini</item> 2076 + <item>flag: Tristan da Cunha</item> 2077 + <item>flag: Turks Caicos Islands</item> 2078 + <item>flag: Chad</item> 2079 + <item>flag: French Southern Territories</item> 2080 + <item>flag: Togo</item> 2081 + <item>flag: Thailand</item> 2082 + <item>flag: Tajikistan</item> 2083 + <item>flag: Tokelau</item> 2084 + <item>flag: Timor-Leste</item> 2085 + <item>flag: Turkmenistan</item> 2086 + <item>flag: Tunisia</item> 2087 + <item>flag: Tonga</item> 2088 + <item>flag: Turkey</item> 2089 + <item>flag: Trinidad Tobago</item> 2090 + <item>flag: Tuvalu</item> 2091 + <item>flag: Taiwan</item> 2092 + <item>flag: Tanzania</item> 2093 + <item>flag: Ukraine</item> 2094 + <item>flag: Uganda</item> 2095 + <item>flag: U.S. Outlying Islands</item> 2096 + <item>flag: United Nations</item> 2097 + <item>flag: United States</item> 2098 + <item>flag: Uruguay</item> 2099 + <item>flag: Uzbekistan</item> 2100 + <item>flag: Vatican City</item> 2101 + <item>flag: St. Vincent Grenadines</item> 2102 + <item>flag: Venezuela</item> 2103 + <item>flag: British Virgin Islands</item> 2104 + <item>flag: U.S. Virgin Islands</item> 2105 + <item>flag: Vietnam</item> 2106 + <item>flag: Vanuatu</item> 2107 + <item>flag: Wallis Futuna</item> 2108 + <item>flag: Samoa</item> 2109 + <item>flag: Kosovo</item> 2110 + <item>flag: Yemen</item> 2111 + <item>flag: Mayotte</item> 2112 + <item>flag: South Africa</item> 2113 + <item>flag: Zambia</item> 2114 + <item>flag: Zimbabwe</item> 2115 + 2116 + # subgroup: subdivision-flag 2117 + <item>flag: England</item> 2118 + <item>flag: Scotland</item> 2119 + <item>flag: Wales</item> 2120 + </string-array> 2121 + </resources>
+6
domain/src/main/java/com/example/util/simpletimetracker/domain/model/IconEmoji.kt
··· 1 + package com.example.util.simpletimetracker.domain.model 2 + 3 + data class IconEmoji( 4 + val emojiCode: String, 5 + val emojiSearch: String, 6 + )
+15 -9
features/feature_change_record_type/src/main/java/com/example/util/simpletimetracker/feature_change_record_type/interactor/ChangeRecordTypeViewDataInteractor.kt
··· 42 42 DividerViewData(1).let(viewData::add) 43 43 44 44 categoryViewDataMapper.mapSelectedCategoriesHint( 45 - isEmpty = selected.isEmpty() 45 + isEmpty = selected.isEmpty(), 46 46 ).let(viewData::add) 47 47 48 48 selected.map { 49 49 categoryViewDataMapper.mapCategory( 50 50 category = it, 51 - isDarkTheme = isDarkTheme 51 + isDarkTheme = isDarkTheme, 52 52 ) 53 53 }.let(viewData::addAll) 54 54 ··· 57 57 available.map { 58 58 categoryViewDataMapper.mapCategory( 59 59 category = it, 60 - isDarkTheme = isDarkTheme 60 + isDarkTheme = isDarkTheme, 61 61 ) 62 62 }.let(viewData::addAll) 63 63 ··· 67 67 } 68 68 ?: listOf( 69 69 categoryViewDataMapper.mapToCategoriesFirstHint(), 70 - categoryViewDataMapper.mapToTypeTagAddItem(isDarkTheme) 70 + categoryViewDataMapper.mapToTypeTagAddItem(isDarkTheme), 71 71 ) 72 72 } 73 73 ··· 82 82 iconSearch: String, 83 83 ): ChangeRecordTypeIconStateViewData = withContext(Dispatchers.IO) { 84 84 val isDarkTheme = prefsInteractor.getDarkMode() 85 + val search = if (iconImageState == IconImageState.Search) iconSearch else "" 85 86 86 87 when (iconType) { 87 88 IconType.IMAGE -> { 88 - val search = if (iconImageState == IconImageState.Search) iconSearch else "" 89 - ChangeRecordTypeIconStateViewData.Icons( 90 - mapper.mapIconImageData(newColor, search, isDarkTheme) 89 + val items = mapper.mapIconImageData( 90 + newColor = newColor, 91 + search = search, 92 + isDarkTheme = isDarkTheme, 91 93 ) 94 + ChangeRecordTypeIconStateViewData.Icons(items) 92 95 } 93 96 IconType.TEXT -> { 94 97 ChangeRecordTypeIconStateViewData.Text 95 98 } 96 99 IconType.EMOJI -> { 97 - ChangeRecordTypeIconStateViewData.Icons( 98 - mapper.mapIconEmojiData(newColor, isDarkTheme) 100 + val items = mapper.mapIconEmojiData( 101 + newColor = newColor, 102 + search = search, 103 + isDarkTheme = isDarkTheme, 99 104 ) 105 + ChangeRecordTypeIconStateViewData.Icons(items) 100 106 } 101 107 } 102 108 }
+31 -12
features/feature_change_record_type/src/main/java/com/example/util/simpletimetracker/feature_change_record_type/mapper/ChangeRecordTypeMapper.kt
··· 33 33 ): List<ViewHolderType> { 34 34 val isSearching = search.isNotBlank() 35 35 val iconCategories = iconImageMapper.getAvailableImages( 36 - loadSearchHints = isSearching 36 + loadSearchHints = isSearching, 37 37 ) 38 38 return iconCategories.toList().mapIndexed { index, (category, images) -> 39 39 val categoryViewData = ChangeRecordTypeIconCategoryInfoViewData( ··· 68 68 69 69 fun mapIconEmojiData( 70 70 newColor: AppColor, 71 + search: String, 71 72 isDarkTheme: Boolean, 72 73 ): List<ViewHolderType> { 73 - val iconCategories = iconEmojiMapper.getAvailableEmojis() 74 + val isSearching = search.isNotBlank() 75 + val iconCategories = iconEmojiMapper.getAvailableEmojis( 76 + loadSearchHints = isSearching, 77 + ) 74 78 return iconCategories.toList().mapIndexed { index, (category, codes) -> 75 - listOf( 76 - ChangeRecordTypeIconCategoryInfoViewData( 77 - type = ChangeRecordTypeIconTypeViewData.Emoji(category.type, index.toLong()), 78 - text = category.name, 79 - isLast = index == iconCategories.size - 1, 80 - ), 81 - ) + codes.map { code -> 82 - mapEmojiViewData(code, newColor, isDarkTheme) 79 + val categoryViewData = ChangeRecordTypeIconCategoryInfoViewData( 80 + type = ChangeRecordTypeIconTypeViewData.Emoji(category.type, index.toLong()), 81 + text = category.name, 82 + isLast = index == iconCategories.size - 1, 83 + ) 84 + .let(::listOf) 85 + .takeIf { !isSearching } // Don't show category on search. 86 + .orEmpty() 87 + 88 + val codesViewData = codes.mapNotNull { 89 + if (isSearching) { 90 + if (!it.emojiSearch.contains(search)) { 91 + return@mapNotNull null 92 + } 93 + } 94 + 95 + mapEmojiViewData( 96 + codes = it.emojiCode, 97 + newColor = newColor, 98 + isDarkTheme = isDarkTheme, 99 + ) 83 100 } 101 + 102 + categoryViewData + codesViewData 84 103 }.flatten() 85 104 } 86 105 ··· 132 151 } else { 133 152 val theme = if (isDarkTheme) R.style.AppThemeDark else R.style.AppTheme 134 153 ChangeRecordTypeIconSelectorStateViewData.Available( 135 - state = if (iconType != IconType.IMAGE) IconImageState.Chooser else iconImageState, 136 - searchButtonIsVisible = iconType == IconType.IMAGE, 154 + state = iconImageState, 155 + searchButtonIsVisible = true, 137 156 searchButtonColor = when (iconImageState) { 138 157 is IconImageState.Chooser -> R.attr.appInactiveColor 139 158 is IconImageState.Search -> R.attr.colorSecondary
+1 -1
features/feature_change_record_type/src/main/java/com/example/util/simpletimetracker/feature_change_record_type/viewModel/ChangeRecordTypeViewModel.kt
··· 294 294 } 295 295 296 296 fun onIconImageSearch(search: String) { 297 - if (iconType != IconType.IMAGE) return 297 + if (iconType == IconType.TEXT) return 298 298 299 299 if (search != iconSearch) { 300 300 iconSearchJob?.cancel()