From 07b05a5679ca197428a32badfdc1d05c89690935 Mon Sep 17 00:00:00 2001 From: razeeman Date: Sat, 24 Apr 2021 11:39:49 +0300 Subject: [PATCH] fix icon scroll, icon category colors in change record type --- .../core/adapter/BaseRecyclerAdapter.kt | 3 ++ .../core/extension/ViewExtensions.kt | 9 +++++ .../core/mapper/IconImageMapper.kt | 32 ++++++++-------- .../drawable/icon_category_image_action.xml | 9 +++++ .../drawable/icon_category_image_alert.xml | 9 +++++ .../res/drawable/icon_category_image_av.xml | 9 +++++ .../icon_category_image_communication.xml | 9 +++++ .../drawable/icon_category_image_content.xml | 9 +++++ .../drawable/icon_category_image_device.xml | 13 +++++++ .../drawable/icon_category_image_editor.xml | 13 +++++++ .../res/drawable/icon_category_image_file.xml | 9 +++++ .../drawable/icon_category_image_hardware.xml | 9 +++++ .../drawable/icon_category_image_image.xml | 12 ++++++ .../res/drawable/icon_category_image_maps.xml | 9 +++++ .../icon_category_image_navigation.xml | 9 +++++ .../icon_category_image_notification.xml | 9 +++++ .../drawable/icon_category_image_places.xml | 9 +++++ .../drawable/icon_category_image_social.xml | 9 +++++ .../drawable/icon_category_image_toggle.xml | 9 +++++ ...geRecordTypeIconCategoryAdapterDelegate.kt | 4 +- .../view/ChangeRecordTypeFragment.kt | 38 ++++++++++++++++--- .../ChangeRecordTypeIconCategoryViewData.kt | 2 +- ..._record_type_item_icon_category_layout.xml | 4 +- 23 files changed, 220 insertions(+), 27 deletions(-) create mode 100644 core/src/main/res/drawable/icon_category_image_action.xml create mode 100644 core/src/main/res/drawable/icon_category_image_alert.xml create mode 100644 core/src/main/res/drawable/icon_category_image_av.xml create mode 100644 core/src/main/res/drawable/icon_category_image_communication.xml create mode 100644 core/src/main/res/drawable/icon_category_image_content.xml create mode 100644 core/src/main/res/drawable/icon_category_image_device.xml create mode 100644 core/src/main/res/drawable/icon_category_image_editor.xml create mode 100644 core/src/main/res/drawable/icon_category_image_file.xml create mode 100644 core/src/main/res/drawable/icon_category_image_hardware.xml create mode 100644 core/src/main/res/drawable/icon_category_image_image.xml create mode 100644 core/src/main/res/drawable/icon_category_image_maps.xml create mode 100644 core/src/main/res/drawable/icon_category_image_navigation.xml create mode 100644 core/src/main/res/drawable/icon_category_image_notification.xml create mode 100644 core/src/main/res/drawable/icon_category_image_places.xml create mode 100644 core/src/main/res/drawable/icon_category_image_social.xml create mode 100644 core/src/main/res/drawable/icon_category_image_toggle.xml diff --git a/core/src/main/java/com/example/util/simpletimetracker/core/adapter/BaseRecyclerAdapter.kt b/core/src/main/java/com/example/util/simpletimetracker/core/adapter/BaseRecyclerAdapter.kt index 45b98d4b..59e4e2ae 100644 --- a/core/src/main/java/com/example/util/simpletimetracker/core/adapter/BaseRecyclerAdapter.kt +++ b/core/src/main/java/com/example/util/simpletimetracker/core/adapter/BaseRecyclerAdapter.kt @@ -33,6 +33,9 @@ class BaseRecyclerAdapter( override fun getItemViewType(position: Int): Int = delegates.indexOfFirst { it.isForValidType(items[position]) } + fun getItem(position: Int): ViewHolderType? = + items.getOrNull(position) + fun onMove(fromPosition: Int, toPosition: Int) { if (fromPosition < toPosition) { for (i in fromPosition until toPosition) { diff --git a/core/src/main/java/com/example/util/simpletimetracker/core/extension/ViewExtensions.kt b/core/src/main/java/com/example/util/simpletimetracker/core/extension/ViewExtensions.kt index cd35319a..75537bdf 100644 --- a/core/src/main/java/com/example/util/simpletimetracker/core/extension/ViewExtensions.kt +++ b/core/src/main/java/com/example/util/simpletimetracker/core/extension/ViewExtensions.kt @@ -9,6 +9,7 @@ import android.view.animation.LinearInterpolator import android.widget.AdapterView import android.widget.SeekBar import androidx.appcompat.widget.AppCompatSpinner +import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.ItemTouchHelper import androidx.recyclerview.widget.ItemTouchHelper.ACTION_STATE_DRAG import androidx.recyclerview.widget.RecyclerView @@ -184,4 +185,12 @@ fun View.getBitmapFromView(): Bitmap { ).also { draw(Canvas(it)) } +} + +fun GridLayoutManager.setSpanSizeLookup(getSpanSize: (position: Int) -> Int) { + spanSizeLookup = object : GridLayoutManager.SpanSizeLookup() { + override fun getSpanSize(position: Int): Int { + return getSpanSize(position) + } + } } \ No newline at end of file diff --git a/core/src/main/java/com/example/util/simpletimetracker/core/mapper/IconImageMapper.kt b/core/src/main/java/com/example/util/simpletimetracker/core/mapper/IconImageMapper.kt index 5df79706..150a07b2 100644 --- a/core/src/main/java/com/example/util/simpletimetracker/core/mapper/IconImageMapper.kt +++ b/core/src/main/java/com/example/util/simpletimetracker/core/mapper/IconImageMapper.kt @@ -38,82 +38,82 @@ class IconImageMapper @Inject constructor( IconImageCategory( type = IconImageType.MAPS, name = resourceRepo.getString(R.string.imageGroupMaps), - categoryIcon = R.drawable.unknown + categoryIcon = R.drawable.icon_category_image_maps ), IconImageCategory( type = IconImageType.PLACES, name = resourceRepo.getString(R.string.imageGroupPlaces), - categoryIcon = R.drawable.unknown + categoryIcon = R.drawable.icon_category_image_places ), IconImageCategory( type = IconImageType.SOCIAL, name = resourceRepo.getString(R.string.imageGroupSocial), - categoryIcon = R.drawable.unknown + categoryIcon = R.drawable.icon_category_image_social ), IconImageCategory( type = IconImageType.ACTION, name = resourceRepo.getString(R.string.imageGroupAction), - categoryIcon = R.drawable.unknown + categoryIcon = R.drawable.icon_category_image_action ), IconImageCategory( type = IconImageType.HARDWARE, name = resourceRepo.getString(R.string.imageGroupHardware), - categoryIcon = R.drawable.unknown + categoryIcon = R.drawable.icon_category_image_hardware ), IconImageCategory( type = IconImageType.ALERT, name = resourceRepo.getString(R.string.imageGroupAlert), - categoryIcon = R.drawable.unknown + categoryIcon = R.drawable.icon_category_image_alert ), IconImageCategory( type = IconImageType.AV, name = resourceRepo.getString(R.string.imageGroupAv), - categoryIcon = R.drawable.unknown + categoryIcon = R.drawable.icon_category_image_av ), IconImageCategory( type = IconImageType.COMMUNICATION, name = resourceRepo.getString(R.string.imageGroupCommunication), - categoryIcon = R.drawable.unknown + categoryIcon = R.drawable.icon_category_image_communication ), IconImageCategory( type = IconImageType.CONTENT, name = resourceRepo.getString(R.string.imageGroupContent), - categoryIcon = R.drawable.unknown + categoryIcon = R.drawable.icon_category_image_content ), IconImageCategory( type = IconImageType.DEVICE, name = resourceRepo.getString(R.string.imageGroupDevice), - categoryIcon = R.drawable.unknown + categoryIcon = R.drawable.icon_category_image_device ), IconImageCategory( type = IconImageType.EDITOR, name = resourceRepo.getString(R.string.imageGroupEditor), - categoryIcon = R.drawable.unknown + categoryIcon = R.drawable.icon_category_image_editor ), IconImageCategory( type = IconImageType.FILE, name = resourceRepo.getString(R.string.imageGroupFile), - categoryIcon = R.drawable.unknown + categoryIcon = R.drawable.icon_category_image_file ), IconImageCategory( type = IconImageType.IMAGE, name = resourceRepo.getString(R.string.imageGroupImage), - categoryIcon = R.drawable.unknown + categoryIcon = R.drawable.icon_category_image_image ), IconImageCategory( type = IconImageType.NAVIGATION, name = resourceRepo.getString(R.string.imageGroupNavigation), - categoryIcon = R.drawable.unknown + categoryIcon = R.drawable.icon_category_image_navigation ), IconImageCategory( type = IconImageType.NOTIFICATION, name = resourceRepo.getString(R.string.imageGroupNotification), - categoryIcon = R.drawable.unknown + categoryIcon = R.drawable.icon_category_image_notification ), IconImageCategory( type = IconImageType.TOGGLE, name = resourceRepo.getString(R.string.imageGroupToggle), - categoryIcon = R.drawable.unknown + categoryIcon = R.drawable.icon_category_image_toggle ) ) diff --git a/core/src/main/res/drawable/icon_category_image_action.xml b/core/src/main/res/drawable/icon_category_image_action.xml new file mode 100644 index 00000000..fd4c83d0 --- /dev/null +++ b/core/src/main/res/drawable/icon_category_image_action.xml @@ -0,0 +1,9 @@ + + + diff --git a/core/src/main/res/drawable/icon_category_image_alert.xml b/core/src/main/res/drawable/icon_category_image_alert.xml new file mode 100644 index 00000000..97776598 --- /dev/null +++ b/core/src/main/res/drawable/icon_category_image_alert.xml @@ -0,0 +1,9 @@ + + + diff --git a/core/src/main/res/drawable/icon_category_image_av.xml b/core/src/main/res/drawable/icon_category_image_av.xml new file mode 100644 index 00000000..3fa6c979 --- /dev/null +++ b/core/src/main/res/drawable/icon_category_image_av.xml @@ -0,0 +1,9 @@ + + + diff --git a/core/src/main/res/drawable/icon_category_image_communication.xml b/core/src/main/res/drawable/icon_category_image_communication.xml new file mode 100644 index 00000000..dac23c96 --- /dev/null +++ b/core/src/main/res/drawable/icon_category_image_communication.xml @@ -0,0 +1,9 @@ + + + diff --git a/core/src/main/res/drawable/icon_category_image_content.xml b/core/src/main/res/drawable/icon_category_image_content.xml new file mode 100644 index 00000000..a2d2a87c --- /dev/null +++ b/core/src/main/res/drawable/icon_category_image_content.xml @@ -0,0 +1,9 @@ + + + diff --git a/core/src/main/res/drawable/icon_category_image_device.xml b/core/src/main/res/drawable/icon_category_image_device.xml new file mode 100644 index 00000000..bfac7fda --- /dev/null +++ b/core/src/main/res/drawable/icon_category_image_device.xml @@ -0,0 +1,13 @@ + + + + diff --git a/core/src/main/res/drawable/icon_category_image_editor.xml b/core/src/main/res/drawable/icon_category_image_editor.xml new file mode 100644 index 00000000..dc832bbd --- /dev/null +++ b/core/src/main/res/drawable/icon_category_image_editor.xml @@ -0,0 +1,13 @@ + + + + diff --git a/core/src/main/res/drawable/icon_category_image_file.xml b/core/src/main/res/drawable/icon_category_image_file.xml new file mode 100644 index 00000000..26922093 --- /dev/null +++ b/core/src/main/res/drawable/icon_category_image_file.xml @@ -0,0 +1,9 @@ + + + diff --git a/core/src/main/res/drawable/icon_category_image_hardware.xml b/core/src/main/res/drawable/icon_category_image_hardware.xml new file mode 100644 index 00000000..a165612c --- /dev/null +++ b/core/src/main/res/drawable/icon_category_image_hardware.xml @@ -0,0 +1,9 @@ + + + diff --git a/core/src/main/res/drawable/icon_category_image_image.xml b/core/src/main/res/drawable/icon_category_image_image.xml new file mode 100644 index 00000000..0f74eaf4 --- /dev/null +++ b/core/src/main/res/drawable/icon_category_image_image.xml @@ -0,0 +1,12 @@ + + + + diff --git a/core/src/main/res/drawable/icon_category_image_maps.xml b/core/src/main/res/drawable/icon_category_image_maps.xml new file mode 100644 index 00000000..d63df08e --- /dev/null +++ b/core/src/main/res/drawable/icon_category_image_maps.xml @@ -0,0 +1,9 @@ + + + diff --git a/core/src/main/res/drawable/icon_category_image_navigation.xml b/core/src/main/res/drawable/icon_category_image_navigation.xml new file mode 100644 index 00000000..fbb50ac4 --- /dev/null +++ b/core/src/main/res/drawable/icon_category_image_navigation.xml @@ -0,0 +1,9 @@ + + + diff --git a/core/src/main/res/drawable/icon_category_image_notification.xml b/core/src/main/res/drawable/icon_category_image_notification.xml new file mode 100644 index 00000000..e39d1a79 --- /dev/null +++ b/core/src/main/res/drawable/icon_category_image_notification.xml @@ -0,0 +1,9 @@ + + + diff --git a/core/src/main/res/drawable/icon_category_image_places.xml b/core/src/main/res/drawable/icon_category_image_places.xml new file mode 100644 index 00000000..46fa8f3d --- /dev/null +++ b/core/src/main/res/drawable/icon_category_image_places.xml @@ -0,0 +1,9 @@ + + + diff --git a/core/src/main/res/drawable/icon_category_image_social.xml b/core/src/main/res/drawable/icon_category_image_social.xml new file mode 100644 index 00000000..38a7e0ad --- /dev/null +++ b/core/src/main/res/drawable/icon_category_image_social.xml @@ -0,0 +1,9 @@ + + + diff --git a/core/src/main/res/drawable/icon_category_image_toggle.xml b/core/src/main/res/drawable/icon_category_image_toggle.xml new file mode 100644 index 00000000..41c6f14f --- /dev/null +++ b/core/src/main/res/drawable/icon_category_image_toggle.xml @@ -0,0 +1,9 @@ + + + diff --git a/feature_change_record_type/src/main/java/com/example/util/simpletimetracker/feature_change_record_type/adapter/ChangeRecordTypeIconCategoryAdapterDelegate.kt b/feature_change_record_type/src/main/java/com/example/util/simpletimetracker/feature_change_record_type/adapter/ChangeRecordTypeIconCategoryAdapterDelegate.kt index cfa226f4..f8308bd7 100644 --- a/feature_change_record_type/src/main/java/com/example/util/simpletimetracker/feature_change_record_type/adapter/ChangeRecordTypeIconCategoryAdapterDelegate.kt +++ b/feature_change_record_type/src/main/java/com/example/util/simpletimetracker/feature_change_record_type/adapter/ChangeRecordTypeIconCategoryAdapterDelegate.kt @@ -4,7 +4,7 @@ import com.example.util.simpletimetracker.core.adapter.createRecyclerAdapterDele import com.example.util.simpletimetracker.core.extension.setOnClickWith import com.example.util.simpletimetracker.feature_change_record_type.R import com.example.util.simpletimetracker.feature_change_record_type.viewData.ChangeRecordTypeIconCategoryViewData -import kotlinx.android.synthetic.main.change_record_type_item_icon_category_layout.view.tvChangeRecordTypeIconCategoryItem +import kotlinx.android.synthetic.main.change_record_type_item_icon_category_layout.view.ivChangeRecordTypeIconCategoryItem fun createChangeRecordTypeIconCategoryAdapterDelegate( onItemClick: ((ChangeRecordTypeIconCategoryViewData) -> Unit) @@ -14,7 +14,7 @@ fun createChangeRecordTypeIconCategoryAdapterDelegate( with(itemView) { item as ChangeRecordTypeIconCategoryViewData - tvChangeRecordTypeIconCategoryItem.setImageResource(item.categoryIcon) + ivChangeRecordTypeIconCategoryItem.setImageResource(item.categoryIcon) setOnClickWith(item, onItemClick) } } \ No newline at end of file diff --git a/feature_change_record_type/src/main/java/com/example/util/simpletimetracker/feature_change_record_type/view/ChangeRecordTypeFragment.kt b/feature_change_record_type/src/main/java/com/example/util/simpletimetracker/feature_change_record_type/view/ChangeRecordTypeFragment.kt index 63d41bd1..202e9baa 100644 --- a/feature_change_record_type/src/main/java/com/example/util/simpletimetracker/feature_change_record_type/view/ChangeRecordTypeFragment.kt +++ b/feature_change_record_type/src/main/java/com/example/util/simpletimetracker/feature_change_record_type/view/ChangeRecordTypeFragment.kt @@ -5,6 +5,7 @@ import androidx.core.view.ViewCompat import androidx.core.widget.doAfterTextChanged import androidx.fragment.app.viewModels import androidx.lifecycle.observe +import androidx.recyclerview.widget.GridLayoutManager import androidx.transition.TransitionInflater import com.example.util.simpletimetracker.core.adapter.BaseRecyclerAdapter import com.example.util.simpletimetracker.core.adapter.color.createColorAdapterDelegate @@ -23,9 +24,11 @@ import com.example.util.simpletimetracker.core.extension.pxToDp import com.example.util.simpletimetracker.core.extension.rotateDown import com.example.util.simpletimetracker.core.extension.rotateUp import com.example.util.simpletimetracker.core.extension.setOnClick +import com.example.util.simpletimetracker.core.extension.setSpanSizeLookup import com.example.util.simpletimetracker.core.extension.showKeyboard import com.example.util.simpletimetracker.core.extension.toViewData import com.example.util.simpletimetracker.core.extension.visible +import com.example.util.simpletimetracker.core.repo.DeviceRepo import com.example.util.simpletimetracker.core.utils.BuildVersions import com.example.util.simpletimetracker.core.view.TransitionNames import com.example.util.simpletimetracker.core.viewData.RecordTypeViewData @@ -35,6 +38,7 @@ import com.example.util.simpletimetracker.feature_change_record_type.adapter.cre import com.example.util.simpletimetracker.feature_change_record_type.adapter.createChangeRecordTypeIconCategoryAdapterDelegate import com.example.util.simpletimetracker.feature_change_record_type.adapter.createChangeRecordTypeIconCategoryInfoAdapterDelegate import com.example.util.simpletimetracker.feature_change_record_type.di.ChangeRecordTypeComponentProvider +import com.example.util.simpletimetracker.feature_change_record_type.viewData.ChangeRecordTypeIconCategoryInfoViewData import com.example.util.simpletimetracker.feature_change_record_type.viewData.ChangeRecordTypeScrollViewData import com.example.util.simpletimetracker.feature_change_record_type.viewModel.ChangeRecordTypeViewModel import com.example.util.simpletimetracker.navigation.params.ChangeRecordTypeParams @@ -61,6 +65,7 @@ import kotlinx.android.synthetic.main.change_record_type_fragment.rvChangeRecord import kotlinx.android.synthetic.main.change_record_type_fragment.rvChangeRecordTypeIconCategory import kotlinx.android.synthetic.main.change_record_type_fragment.tvChangeRecordTypeGoalTimeTime import javax.inject.Inject +import kotlin.math.max class ChangeRecordTypeFragment : BaseFragment(R.layout.change_record_type_fragment), DurationDialogListener, @@ -69,6 +74,9 @@ class ChangeRecordTypeFragment : BaseFragment(R.layout.change_record_type_fragme @Inject lateinit var viewModelFactory: BaseViewModelFactory + @Inject + lateinit var deviceRepo: DeviceRepo + private val viewModel: ChangeRecordTypeViewModel by viewModels( factoryProducer = { viewModelFactory } ) @@ -97,6 +105,9 @@ class ChangeRecordTypeFragment : BaseFragment(R.layout.change_record_type_fragme createEmptyAdapterDelegate() ) } + private val iconsLayoutManager: GridLayoutManager by lazy { + GridLayoutManager(requireContext(), getIconsColumnCount()) + } private val params: ChangeRecordTypeParams by lazy { arguments?.getParcelable(ARGS_PARAMS) ?: ChangeRecordTypeParams.New(ChangeRecordTypeParams.SizePreview()) @@ -131,12 +142,9 @@ class ChangeRecordTypeFragment : BaseFragment(R.layout.change_record_type_fragme } rvChangeRecordTypeIcon.apply { - layoutManager = FlexboxLayoutManager(requireContext()).apply { - flexDirection = FlexDirection.ROW - justifyContent = JustifyContent.CENTER - flexWrap = FlexWrap.WRAP - } + layoutManager = iconsLayoutManager adapter = iconsAdapter + setIconsSpanSize() } rvChangeRecordTypeIconCategory.apply { @@ -205,7 +213,7 @@ class ChangeRecordTypeFragment : BaseFragment(R.layout.change_record_type_fragme } iconsScrollPosition.observe(viewLifecycleOwner) { if (it is ChangeRecordTypeScrollViewData.ScrollTo) { - rvChangeRecordTypeIcon.scrollToPosition(it.position) + iconsLayoutManager.scrollToPositionWithOffset(it.position, 0) onScrolled() } } @@ -254,6 +262,24 @@ class ChangeRecordTypeFragment : BaseFragment(R.layout.change_record_type_fragme } } + private fun getIconsColumnCount(): Int { + val elementWidth = resources.getDimensionPixelOffset(R.dimen.color_icon_item_width) + + 2 * resources.getDimensionPixelOffset(R.dimen.color_icon_item_margin) + val recyclerWidth = deviceRepo.getScreenWidthInDp().dpToPx() - 16.dpToPx() + + return max(recyclerWidth / elementWidth, 1) + } + + private fun setIconsSpanSize() { + iconsLayoutManager.setSpanSizeLookup { position -> + if (iconsAdapter.getItem(position) is ChangeRecordTypeIconCategoryInfoViewData) { + iconsLayoutManager.spanCount + } else { + 1 + } + } + } + companion object { private const val ARGS_PARAMS = "args_params" private const val DELETE_BUTTON_SIZE = 72 // TODO get from dimens or viewModel diff --git a/feature_change_record_type/src/main/java/com/example/util/simpletimetracker/feature_change_record_type/viewData/ChangeRecordTypeIconCategoryViewData.kt b/feature_change_record_type/src/main/java/com/example/util/simpletimetracker/feature_change_record_type/viewData/ChangeRecordTypeIconCategoryViewData.kt index d6d5b6d3..3833cb90 100644 --- a/feature_change_record_type/src/main/java/com/example/util/simpletimetracker/feature_change_record_type/viewData/ChangeRecordTypeIconCategoryViewData.kt +++ b/feature_change_record_type/src/main/java/com/example/util/simpletimetracker/feature_change_record_type/viewData/ChangeRecordTypeIconCategoryViewData.kt @@ -5,7 +5,7 @@ import com.example.util.simpletimetracker.core.adapter.ViewHolderType data class ChangeRecordTypeIconCategoryViewData( val type: ChangeRecordTypeIconTypeViewData, val categoryIcon: Int -): ViewHolderType { +) : ViewHolderType { override fun getUniqueId(): Long = type.id diff --git a/feature_change_record_type/src/main/res/layout/change_record_type_item_icon_category_layout.xml b/feature_change_record_type/src/main/res/layout/change_record_type_item_icon_category_layout.xml index 49a09f75..6282bb79 100644 --- a/feature_change_record_type/src/main/res/layout/change_record_type_item_icon_category_layout.xml +++ b/feature_change_record_type/src/main/res/layout/change_record_type_item_icon_category_layout.xml @@ -1,11 +1,11 @@ \ No newline at end of file -- 2.51.2