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