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 flex box, cards, material colors

razeeman (May 5, 2020, 11:18 AM +0300) 0623c246 a577262a

+347 -55
+16
core/src/main/java/com/example/util/simpletimetracker/core/repo/ResourceRepoImpl.kt
··· 1 + package com.example.util.simpletimetracker.core.repo 2 + 3 + import android.content.Context 4 + import androidx.annotation.ColorRes 5 + import androidx.core.content.ContextCompat 6 + import com.example.util.simpletimetracker.domain.di.AppContext 7 + import javax.inject.Inject 8 + 9 + class ResourceRepo @Inject constructor( 10 + @AppContext private val context: Context 11 + ) { 12 + 13 + fun getColor(@ColorRes colorResId: Int): Int { 14 + return ContextCompat.getColor(context, colorResId) 15 + } 16 + }
+9
core/src/main/res/drawable/ic_music.xml
··· 1 + <vector xmlns:android="http://schemas.android.com/apk/res/android" 2 + android:width="24dp" 3 + android:height="24dp" 4 + android:viewportWidth="24.0" 5 + android:viewportHeight="24.0"> 6 + <path 7 + android:fillColor="#FF000000" 8 + android:pathData="M12,3v9.28c-0.47,-0.17 -0.97,-0.28 -1.5,-0.28C8.01,12 6,14.01 6,16.5S8.01,21 10.5,21c2.31,0 4.2,-1.75 4.45,-4H15V6h4V3h-7z"/> 9 + </vector>
+1 -1
core/src/main/res/drawable/round_corners_background.xml
··· 1 1 <?xml version="1.0" encoding="UTF-8"?> 2 2 <shape xmlns:android="http://schemas.android.com/apk/res/android"> 3 - <solid android:color="@color/light_grey" /> 3 + <solid android:color="@color/black" /> 4 4 <corners android:radius="12dp" /> 5 5 </shape>
+2
core/src/main/res/values/colors.xml
··· 1 1 <?xml version="1.0" encoding="utf-8"?> 2 2 <resources> 3 + 3 4 <color name="black">#000000</color> 4 5 <color name="white">#ffffff</color> 5 6 <color name="transparent">#00000000</color> 6 7 7 8 <color name="light_grey">#f5f5f5</color> 9 + 8 10 </resources>
+213
core/src/main/res/values/colorsMaterial.xml
··· 1 + <?xml version="1.0" encoding="utf-8"?> 2 + <resources> 3 + 4 + <color name="red_50">#FFEBEE</color> 5 + <color name="red_100">#FFCDD2</color> 6 + <color name="red_200">#EF9A9A</color> 7 + <color name="red_300">#E57373</color> 8 + <color name="red_400">#EF5350</color> 9 + <color name="red_500">#F44336</color> 10 + <color name="red_600">#E53935</color> 11 + <color name="red_700">#D32F2F</color> 12 + <color name="red_800">#C62828</color> 13 + <color name="red_900">#B71C1C</color> 14 + 15 + <color name="pink_50">#FCE4EC</color> 16 + <color name="pink_100">#F8BBD0</color> 17 + <color name="pink_200">#F48FB1</color> 18 + <color name="pink_300">#F06292</color> 19 + <color name="pink_400">#EC407A</color> 20 + <color name="pink_500">#E91E63</color> 21 + <color name="pink_600">#D81B60</color> 22 + <color name="pink_700">#C2185B</color> 23 + <color name="pink_800">#AD1457</color> 24 + <color name="pink_900">#880E4F</color> 25 + 26 + <color name="purple_50">#F3E5F5</color> 27 + <color name="purple_100">#E1BEE7</color> 28 + <color name="purple_200">#CE93D8</color> 29 + <color name="purple_300">#BA68C8</color> 30 + <color name="purple_400">#AB47BC</color> 31 + <color name="purple_500">#9C27B0</color> 32 + <color name="purple_600">#8E24AA</color> 33 + <color name="purple_700">#7B1FA2</color> 34 + <color name="purple_800">#6A1B9A</color> 35 + <color name="purple_900">#4A148C</color> 36 + 37 + <color name="deep_purple_50">#EDE7F6</color> 38 + <color name="deep_purple_100">#D1C4E9</color> 39 + <color name="deep_purple_200">#B39DDB</color> 40 + <color name="deep_purple_300">#9575CD</color> 41 + <color name="deep_purple_400">#7E57C2</color> 42 + <color name="deep_purple_500">#673AB7</color> 43 + <color name="deep_purple_600">#5E35B1</color> 44 + <color name="deep_purple_700">#512DA8</color> 45 + <color name="deep_purple_800">#4527A0</color> 46 + <color name="deep_purple_900">#311B92</color> 47 + 48 + <color name="indigo_50">#E8EAF6</color> 49 + <color name="indigo_100">#C5CAE9</color> 50 + <color name="indigo_200">#9FA8DA</color> 51 + <color name="indigo_300">#7986CB</color> 52 + <color name="indigo_400">#5C6BC0</color> 53 + <color name="indigo_500">#3F51B5</color> 54 + <color name="indigo_600">#3949AB</color> 55 + <color name="indigo_700">#303F9F</color> 56 + <color name="indigo_800">#283593</color> 57 + <color name="indigo_900">#1A237E</color> 58 + 59 + <color name="blue_50">#E3F2FD</color> 60 + <color name="blue_100">#BBDEFB</color> 61 + <color name="blue_200">#90CAF9</color> 62 + <color name="blue_300">#64B5F6</color> 63 + <color name="blue_400">#42A5F5</color> 64 + <color name="blue_500">#2196F3</color> 65 + <color name="blue_600">#1E88E5</color> 66 + <color name="blue_700">#1976D2</color> 67 + <color name="blue_800">#1565C0</color> 68 + <color name="blue_900">#0D47A1</color> 69 + 70 + <color name="light_blue_50">#E1F5FE</color> 71 + <color name="light_blue_100">#B3E5FC</color> 72 + <color name="light_blue_200">#81D4FA</color> 73 + <color name="light_blue_300">#4FC3F7</color> 74 + <color name="light_blue_400">#29B6F6</color> 75 + <color name="light_blue_500">#03A9F4</color> 76 + <color name="light_blue_600">#039BE5</color> 77 + <color name="light_blue_700">#0288D1</color> 78 + <color name="light_blue_800">#0277BD</color> 79 + <color name="light_blue_900">#01579B</color> 80 + 81 + <color name="cyan_50">#E0F7FA</color> 82 + <color name="cyan_100">#B2EBF2</color> 83 + <color name="cyan_200">#80DEEA</color> 84 + <color name="cyan_300">#4DD0E1</color> 85 + <color name="cyan_400">#26C6DA</color> 86 + <color name="cyan_500">#00BCD4</color> 87 + <color name="cyan_600">#00ACC1</color> 88 + <color name="cyan_700">#0097A7</color> 89 + <color name="cyan_800">#00838F</color> 90 + <color name="cyan_900">#006064</color> 91 + 92 + <color name="teal_50">#E0F2F1</color> 93 + <color name="teal_100">#B2DFDB</color> 94 + <color name="teal_200">#80CBC4</color> 95 + <color name="teal_300">#4DB6AC</color> 96 + <color name="teal_400">#26A69A</color> 97 + <color name="teal_500">#009688</color> 98 + <color name="teal_600">#00897B</color> 99 + <color name="teal_700">#00796B</color> 100 + <color name="teal_800">#00695C</color> 101 + <color name="teal_900">#004D40</color> 102 + 103 + <color name="green_50">#E8F5E9</color> 104 + <color name="green_100">#C8E6C9</color> 105 + <color name="green_200">#A5D6A7</color> 106 + <color name="green_300">#81C784</color> 107 + <color name="green_400">#66BB6A</color> 108 + <color name="green_500">#4CAF50</color> 109 + <color name="green_600">#43A047</color> 110 + <color name="green_700">#388E3C</color> 111 + <color name="green_800">#2E7D32</color> 112 + <color name="green_900">#1B5E20</color> 113 + 114 + <color name="light_green_50">#F1F8E9</color> 115 + <color name="light_green_100">#DCEDC8</color> 116 + <color name="light_green_200">#C5E1A5</color> 117 + <color name="light_green_300">#AED581</color> 118 + <color name="light_green_400">#9CCC65</color> 119 + <color name="light_green_500">#8BC34A</color> 120 + <color name="light_green_600">#7CB342</color> 121 + <color name="light_green_700">#689F38</color> 122 + <color name="light_green_800">#558B2F</color> 123 + <color name="light_green_900">#33691E</color> 124 + 125 + <color name="lime_50">#F9FBE7</color> 126 + <color name="lime_100">#F0F4C3</color> 127 + <color name="lime_200">#E6EE9C</color> 128 + <color name="lime_300">#DCE775</color> 129 + <color name="lime_400">#D4E157</color> 130 + <color name="lime_500">#CDDC39</color> 131 + <color name="lime_600">#C0CA33</color> 132 + <color name="lime_700">#AFB42B</color> 133 + <color name="lime_800">#9E9D24</color> 134 + <color name="lime_900">#827717</color> 135 + 136 + <color name="yellow_50">#FFFDE7</color> 137 + <color name="yellow_100">#FFF9C4</color> 138 + <color name="yellow_200">#FFF59D</color> 139 + <color name="yellow_300">#FFF176</color> 140 + <color name="yellow_400">#FFEE58</color> 141 + <color name="yellow_500">#FFEB3B</color> 142 + <color name="yellow_600">#FDD835</color> 143 + <color name="yellow_700">#FBC02D</color> 144 + <color name="yellow_800">#F9A825</color> 145 + <color name="yellow_900">#F57F17</color> 146 + 147 + <color name="amber_50">#FFF8E1</color> 148 + <color name="amber_100">#FFECB3</color> 149 + <color name="amber_200">#FFE082</color> 150 + <color name="amber_300">#FFD54F</color> 151 + <color name="amber_400">#FFCA28</color> 152 + <color name="amber_500">#FFC107</color> 153 + <color name="amber_600">#FFB300</color> 154 + <color name="amber_700">#FFA000</color> 155 + <color name="amber_800">#FF8F00</color> 156 + <color name="amber_900">#FF6F00</color> 157 + 158 + <color name="orange_50">#FFF3E0</color> 159 + <color name="orange_100">#FFE0B2</color> 160 + <color name="orange_200">#FFCC80</color> 161 + <color name="orange_300">#FFB74D</color> 162 + <color name="orange_400">#FFA726</color> 163 + <color name="orange_500">#FF9800</color> 164 + <color name="orange_600">#FB8C00</color> 165 + <color name="orange_700">#F57C00</color> 166 + <color name="orange_800">#EF6C00</color> 167 + <color name="orange_900">#E65100</color> 168 + 169 + <color name="deep_orange_50">#FBE9E7</color> 170 + <color name="deep_orange_100">#FFCCBC</color> 171 + <color name="deep_orange_200">#FFAB91</color> 172 + <color name="deep_orange_300">#FF8A65</color> 173 + <color name="deep_orange_400">#FF7043</color> 174 + <color name="deep_orange_500">#FF5722</color> 175 + <color name="deep_orange_600">#F4511E</color> 176 + <color name="deep_orange_700">#E64A19</color> 177 + <color name="deep_orange_800">#D84315</color> 178 + <color name="deep_orange_900">#BF360C</color> 179 + 180 + <color name="brown_50">#EFEBE9</color> 181 + <color name="brown_100">#D7CCC8</color> 182 + <color name="brown_200">#BCAAA4</color> 183 + <color name="brown_300">#A1887F</color> 184 + <color name="brown_400">#8D6E63</color> 185 + <color name="brown_500">#795548</color> 186 + <color name="brown_600">#6D4C41</color> 187 + <color name="brown_700">#5D4037</color> 188 + <color name="brown_800">#4E342E</color> 189 + <color name="brown_900">#3E2723</color> 190 + 191 + <color name="grey_50">#FAFAFA</color> 192 + <color name="grey_100">#F5F5F5</color> 193 + <color name="grey_200">#EEEEEE</color> 194 + <color name="grey_300">#E0E0E0</color> 195 + <color name="grey_400">#BDBDBD</color> 196 + <color name="grey_500">#9E9E9E</color> 197 + <color name="grey_600">#757575</color> 198 + <color name="grey_700">#616161</color> 199 + <color name="grey_800">#424242</color> 200 + <color name="grey_900">#212121</color> 201 + 202 + <color name="blue_grey_50">#ECEFF1</color> 203 + <color name="blue_grey_100">#CFD8DC</color> 204 + <color name="blue_grey_200">#B0BEC5</color> 205 + <color name="blue_grey_300">#90A4AE</color> 206 + <color name="blue_grey_400">#78909C</color> 207 + <color name="blue_grey_500">#607D8B</color> 208 + <color name="blue_grey_600">#546E7A</color> 209 + <color name="blue_grey_700">#455A64</color> 210 + <color name="blue_grey_800">#37474F</color> 211 + <color name="blue_grey_900">#263238</color> 212 + 213 + </resources>
+6 -2
deps.gradle
··· 18 18 'room' : '2.2.5', 19 19 'dagger' : '2.24', 20 20 'viewpager2' : '1.0.0', 21 + 'flexBox' : '1.0.0', 22 + 'cardView' : '1.0.0', 21 23 22 24 'fragment_ktx' : '1.2.0', 23 25 'core_ktx' : '1.2.0', ··· 42 44 'recyclerview' : "androidx.recyclerview:recyclerview:${versions.recyclerview}", 43 45 'lifecycle_extensions': "androidx.lifecycle:lifecycle-extensions:${versions.lifecycle_extensions}", 44 46 'room' : "androidx.room:room-runtime:${versions.room}", 45 - 'viewpager2' : "androidx.viewpager2:viewpager2:${versions.viewpager2}" 47 + 'viewpager2' : "androidx.viewpager2:viewpager2:${versions.viewpager2}", 48 + 'cardView' : "androidx.cardview:cardview:${versions.cardView}" 46 49 ], 47 50 48 51 'google' : [ 49 - 'dagger': "com.google.dagger:dagger:${versions.dagger}" 52 + 'dagger' : "com.google.dagger:dagger:${versions.dagger}", 53 + 'flexBox': "com.google.android:flexbox:${versions.flexBox}" 50 54 ], 51 55 52 56 'ktx' : [
+2
feature_running_records/build.gradle
··· 27 27 implementation deps.androidx.appcompat 28 28 implementation deps.androidx.constraintlayout 29 29 implementation deps.androidx.recyclerview 30 + implementation deps.androidx.cardView 30 31 implementation deps.google.dagger 32 + implementation deps.google.flexBox 31 33 implementation deps.ktx.fragment 32 34 implementation deps.ktx.livedata 33 35 implementation deps.ktx.viewmodel
+1 -2
feature_running_records/src/main/java/com/example/util/simpletimetracker/feature_running_records/adapter/recordType/RecordTypeAdapterDelegate.kt
··· 1 1 package com.example.util.simpletimetracker.feature_running_records.adapter.recordType 2 2 3 3 import android.annotation.SuppressLint 4 - import android.content.res.ColorStateList 5 4 import android.view.ViewGroup 6 5 import com.example.util.simpletimetracker.core.adapter.BaseRecyclerAdapterDelegate 7 6 import com.example.util.simpletimetracker.core.adapter.BaseRecyclerViewHolder ··· 23 22 override fun bind(item: ViewHolderType) = with(itemView) { 24 23 item as RecordTypeViewData 25 24 26 - ivRecordTypeItemBorder.supportBackgroundTintList = ColorStateList.valueOf(item.color) 25 + layoutRecordTypeItem.setCardBackgroundColor(item.color) 27 26 ivRecordTypeItemIcon.setBackgroundResource(item.iconId) 28 27 tvRecordTypeItemName.text = item.name 29 28
+36
feature_running_records/src/main/java/com/example/util/simpletimetracker/feature_running_records/mapper/RandomMaterialColorMapper.kt
··· 1 + package com.example.util.simpletimetracker.feature_running_records.mapper 2 + 3 + import com.example.util.simpletimetracker.feature_running_records.R 4 + import javax.inject.Inject 5 + 6 + class RandomMaterialColorMapper @Inject constructor() { 7 + 8 + fun mapToColorResId(random: Int): Int { 9 + return when (random) { 10 + 0 -> R.color.red_600 11 + 1 -> R.color.pink_600 12 + 2 -> R.color.purple_600 13 + 3 -> R.color.deep_purple_600 14 + 4 -> R.color.indigo_600 15 + 5 -> R.color.blue_600 16 + 6 -> R.color.light_blue_600 17 + 7 -> R.color.cyan_600 18 + 8 -> R.color.teal_600 19 + 9 -> R.color.green_600 20 + 10 -> R.color.light_green_600 21 + 11 -> R.color.lime_600 22 + 12 -> R.color.yellow_600 23 + 13 -> R.color.amber_600 24 + 14 -> R.color.orange_600 25 + 15 -> R.color.deep_orange_600 26 + 16 -> R.color.brown_600 27 + 17 -> R.color.blue_grey_600 28 + 18 -> R.color.grey_900 29 + else -> R.color.black 30 + } 31 + } 32 + 33 + companion object { 34 + const val NUMBER_OF_COLORS = 19 35 + } 36 + }
+9 -1
feature_running_records/src/main/java/com/example/util/simpletimetracker/feature_running_records/view/RunningRecordsFragment.kt
··· 13 13 import com.example.util.simpletimetracker.feature_running_records.adapter.runningRecord.RunningRecordAdapter 14 14 import com.example.util.simpletimetracker.feature_running_records.di.RunningRecordsComponentProvider 15 15 import com.example.util.simpletimetracker.feature_running_records.viewModel.RunningRecordsViewModel 16 + import com.google.android.flexbox.FlexDirection 17 + import com.google.android.flexbox.FlexWrap 18 + import com.google.android.flexbox.FlexboxLayoutManager 19 + import com.google.android.flexbox.JustifyContent 16 20 import kotlinx.android.synthetic.main.running_records_fragment.* 17 21 18 22 class RunningRecordsFragment : Fragment() { ··· 45 49 adapter = runningRecordsAdapter 46 50 } 47 51 rvRecordTypesList.apply { 48 - layoutManager = LinearLayoutManager(context) 52 + layoutManager = FlexboxLayoutManager(requireContext()).apply { 53 + flexDirection = FlexDirection.ROW 54 + justifyContent = JustifyContent.CENTER 55 + flexWrap = FlexWrap.WRAP 56 + } 49 57 adapter = recordTypesAdapter 50 58 } 51 59
+11 -5
feature_running_records/src/main/java/com/example/util/simpletimetracker/feature_running_records/viewModel/RunningRecordsViewModel.kt
··· 4 4 import androidx.lifecycle.MutableLiveData 5 5 import androidx.lifecycle.ViewModel 6 6 import androidx.lifecycle.viewModelScope 7 + import com.example.util.simpletimetracker.core.repo.ResourceRepo 7 8 import com.example.util.simpletimetracker.domain.interactor.RecordTypeInteractor 8 9 import com.example.util.simpletimetracker.domain.interactor.RunningRecordInteractor 9 10 import com.example.util.simpletimetracker.domain.model.RecordType 10 11 import com.example.util.simpletimetracker.domain.model.RunningRecord 11 12 import com.example.util.simpletimetracker.feature_running_records.adapter.recordType.RecordTypeViewData 12 13 import com.example.util.simpletimetracker.feature_running_records.adapter.runningRecord.RunningRecordViewData 14 + import com.example.util.simpletimetracker.feature_running_records.mapper.RandomMaterialColorMapper 13 15 import com.example.util.simpletimetracker.feature_running_records.mapper.RecordTypeViewDataMapper 14 16 import com.example.util.simpletimetracker.feature_running_records.mapper.RunningRecordViewDataMapper 15 17 import kotlinx.coroutines.delay 16 18 import kotlinx.coroutines.launch 17 19 import javax.inject.Inject 18 - import kotlin.random.Random 19 20 20 21 class RunningRecordsViewModel : ViewModel() { 21 22 22 23 @Inject 24 + lateinit var resourceRepo: ResourceRepo 25 + @Inject 23 26 lateinit var recordTypeInteractor: RecordTypeInteractor 24 27 @Inject 25 28 lateinit var runningRecordInteractor: RunningRecordInteractor ··· 27 30 lateinit var recordTypeViewDataMapper: RecordTypeViewDataMapper 28 31 @Inject 29 32 lateinit var runningRecordViewDataMapper: RunningRecordViewDataMapper 30 - 31 - private val random = Random(1) 33 + @Inject 34 + lateinit var randomMaterialColorMapper: RandomMaterialColorMapper 32 35 33 36 private val runningRecordsLiveData: MutableLiveData<List<RunningRecordViewData>> by lazy { 34 37 return@lazy MutableLiveData<List<RunningRecordViewData>>().let { initial -> ··· 51 54 52 55 fun addRecordType() { 53 56 val recordType = RecordType( 54 - name = "name" + (0..10).random(), 57 + name = "name" + (0..1000).random(), 55 58 icon = 0, 56 - color = random.nextInt() 59 + color = (0 until RandomMaterialColorMapper.NUMBER_OF_COLORS) 60 + .random() 61 + .let(randomMaterialColorMapper::mapToColorResId) 62 + .let(resourceRepo::getColor) 57 63 ) 58 64 59 65 viewModelScope.launch {
+41 -44
feature_running_records/src/main/res/layout/record_type_item_layout.xml
··· 1 1 <?xml version="1.0" encoding="utf-8"?> 2 - <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 + <androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" 3 3 xmlns:app="http://schemas.android.com/apk/res-auto" 4 4 xmlns:tools="http://schemas.android.com/tools" 5 5 android:id="@+id/layoutRecordTypeItem" ··· 9 9 android:layout_marginTop="4dp" 10 10 android:layout_marginEnd="8dp" 11 11 android:layout_marginBottom="4dp" 12 - android:background="@drawable/round_corners_background" 13 - android:paddingBottom="8dp"> 12 + app:cardBackgroundColor="@color/black" 13 + app:cardCornerRadius="8dp" 14 + app:cardElevation="4dp"> 14 15 15 - <androidx.appcompat.widget.AppCompatImageView 16 - android:id="@+id/ivRecordTypeItemBorder" 17 - android:layout_width="0dp" 18 - android:layout_height="0dp" 19 - android:layout_marginStart="12dp" 20 - android:layout_marginTop="8dp" 21 - android:layout_marginEnd="12dp" 22 - android:background="@drawable/circle_drawable" 23 - app:layout_constraintDimensionRatio="w,1:1" 24 - app:layout_constraintEnd_toEndOf="parent" 25 - app:layout_constraintStart_toStartOf="parent" 26 - app:layout_constraintTop_toTopOf="parent" 27 - tools:backgroundTint="@color/black" /> 16 + <androidx.constraintlayout.widget.ConstraintLayout 17 + android:layout_width="match_parent" 18 + android:layout_height="match_parent" 19 + android:background="?selectableItemBackground" 20 + android:paddingTop="12dp" 21 + android:paddingBottom="12dp"> 22 + 23 + <androidx.appcompat.widget.AppCompatImageView 24 + android:id="@+id/ivRecordTypeItemIcon" 25 + android:layout_width="0dp" 26 + android:layout_height="0dp" 27 + android:layout_marginStart="16dp" 28 + android:layout_marginEnd="16dp" 29 + android:background="@drawable/ic_unknown" 30 + app:backgroundTint="@color/white" 31 + app:layout_constraintDimensionRatio="1:1" 32 + app:layout_constraintEnd_toEndOf="parent" 33 + app:layout_constraintStart_toStartOf="parent" 34 + app:layout_constraintTop_toTopOf="parent" /> 28 35 29 - <androidx.appcompat.widget.AppCompatImageView 30 - android:id="@+id/ivRecordTypeItemIcon" 31 - android:layout_width="0dp" 32 - android:layout_height="0dp" 33 - android:layout_margin="12dp" 34 - android:background="@drawable/ic_unknown" 35 - app:backgroundTint="@color/white" 36 - app:layout_constraintBottom_toBottomOf="@id/ivRecordTypeItemBorder" 37 - app:layout_constraintEnd_toEndOf="@id/ivRecordTypeItemBorder" 38 - app:layout_constraintStart_toStartOf="@id/ivRecordTypeItemBorder" 39 - app:layout_constraintTop_toTopOf="@id/ivRecordTypeItemBorder" /> 36 + <androidx.appcompat.widget.AppCompatTextView 37 + android:id="@+id/tvRecordTypeItemName" 38 + android:layout_width="0dp" 39 + android:layout_height="wrap_content" 40 + android:layout_marginStart="4dp" 41 + android:layout_marginTop="4dp" 42 + android:layout_marginEnd="4dp" 43 + android:ellipsize="marquee" 44 + android:gravity="center_horizontal" 45 + android:singleLine="true" 46 + android:textColor="@color/white" 47 + android:textStyle="bold" 48 + app:layout_constraintEnd_toEndOf="parent" 49 + app:layout_constraintStart_toStartOf="parent" 50 + app:layout_constraintTop_toBottomOf="@id/ivRecordTypeItemIcon" 51 + tools:text="Item long name" /> 40 52 41 - <androidx.appcompat.widget.AppCompatTextView 42 - android:id="@+id/tvRecordTypeItemName" 43 - android:layout_width="0dp" 44 - android:layout_height="wrap_content" 45 - android:layout_marginStart="4dp" 46 - android:layout_marginTop="4dp" 47 - android:layout_marginEnd="4dp" 48 - android:ellipsize="marquee" 49 - android:gravity="center_horizontal" 50 - android:singleLine="true" 51 - android:textColor="@color/black" 52 - android:textStyle="bold" 53 - app:layout_constraintEnd_toEndOf="parent" 54 - app:layout_constraintStart_toStartOf="parent" 55 - app:layout_constraintTop_toBottomOf="@id/ivRecordTypeItemBorder" 56 - tools:text="Item long name" /> 53 + </androidx.constraintlayout.widget.ConstraintLayout> 57 54 58 - </androidx.constraintlayout.widget.ConstraintLayout> 55 + </androidx.cardview.widget.CardView>