From 6fc4d8a5bbdeb2a98a8458aac7b2a2b720250ca4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ensar=20Saraj=C4=8Di=C4=87?= Date: Mon, 11 Sep 2023 14:33:34 +0200 Subject: [PATCH] Add picker for unit types for conversion --- app/src/main/AndroidManifest.xml | 4 ++ .../calculator/activities/MainActivity.kt | 2 +- .../activities/UnitConverterActivity.kt | 53 +++++++------------ .../activities/UnitConverterPickerActivity.kt | 53 +++++++++++++++++++ .../calculator/adapters/UnitTypesAdapter.kt | 42 +++++++++++++++ .../helpers/converters/AreaConverter.kt | 1 + .../calculator/helpers/converters/Base.kt | 1 + .../helpers/converters/LengthConverter.kt | 2 +- .../helpers/converters/VolumeConverter.kt | 1 + app/src/main/res/drawable/ic_box_vector.xml | 5 ++ app/src/main/res/drawable/ic_drop_vector.xml | 5 ++ .../main/res/drawable/ic_height_vector.xml | 5 ++ .../res/drawable/ic_thermostat_vector.xml | 5 ++ .../res/drawable/unit_type_background.xml | 23 ++++++++ .../layout/activity_unit_converter_picker.xml | 29 ++++++++++ app/src/main/res/layout/item_unit_type.xml | 30 +++++++++++ .../main/res/layout/view_unit_converter.xml | 6 --- app/src/main/res/values/dimens.xml | 2 + 18 files changed, 227 insertions(+), 42 deletions(-) create mode 100644 app/src/main/kotlin/com/simplemobiletools/calculator/activities/UnitConverterPickerActivity.kt create mode 100644 app/src/main/kotlin/com/simplemobiletools/calculator/adapters/UnitTypesAdapter.kt create mode 100644 app/src/main/res/drawable/ic_box_vector.xml create mode 100644 app/src/main/res/drawable/ic_drop_vector.xml create mode 100644 app/src/main/res/drawable/ic_height_vector.xml create mode 100644 app/src/main/res/drawable/ic_thermostat_vector.xml create mode 100644 app/src/main/res/drawable/unit_type_background.xml create mode 100644 app/src/main/res/layout/activity_unit_converter_picker.xml create mode 100644 app/src/main/res/layout/item_unit_type.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 16879efa..7496edb7 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -38,6 +38,10 @@ android:name=".activities.UnitConverterActivity" android:exported="false" /> + + - binding.viewUnitConverter.unitsTabLayout.newTab() - .setId(index) - .setText(converter.nameResId) - .apply { binding.viewUnitConverter.unitsTabLayout.addTab(this) } - } - binding.viewUnitConverter.viewConverter.root.setConverter(Converter.ALL.first()) + binding.viewUnitConverter.viewConverter.root.setConverter(converter) } override fun onResume() { super.onResume() setupToolbar(binding.unitConverterToolbar, NavigationIcon.Cross) - binding.viewUnitConverter.unitsTabLayout.setBackgroundColor(getProperBackgroundColor()) binding.viewUnitConverter.viewConverter.root.updateColors() - if (storedTextColor != config.textColor) { - binding.viewUnitConverter.converterHolder.let { updateViewColors(it, getProperTextColor()) } - } + binding.viewUnitConverter.converterHolder.let { updateViewColors(it, getProperTextColor()) } if (config.preventPhoneFromSleeping) { window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) } - if (storedUseCommaAsDecimalMark != config.useCommaAsDecimalMark) { - setupDecimalSeparator() - } + setupDecimalSeparator() vibrateOnButtonPress = config.vibrateOnButtonPress @@ -90,19 +84,11 @@ class UnitConverterActivity : SimpleActivity() { override fun onPause() { super.onPause() - storeStateVariables() if (config.preventPhoneFromSleeping) { window.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) } } - private fun storeStateVariables() { - config.apply { - storedTextColor = textColor - storedUseCommaAsDecimalMark = useCommaAsDecimalMark - } - } - private fun checkHaptic(view: View) { if (vibrateOnButtonPress) { view.performHapticFeedback() @@ -121,10 +107,9 @@ class UnitConverterActivity : SimpleActivity() { } private fun setupDecimalSeparator() { - var decimalSeparator = DOT - var groupingSeparator = COMMA - storedUseCommaAsDecimalMark = config.useCommaAsDecimalMark - if (storedUseCommaAsDecimalMark) { + val decimalSeparator: String + val groupingSeparator: String + if (config.useCommaAsDecimalMark) { decimalSeparator = COMMA groupingSeparator = DOT } else { diff --git a/app/src/main/kotlin/com/simplemobiletools/calculator/activities/UnitConverterPickerActivity.kt b/app/src/main/kotlin/com/simplemobiletools/calculator/activities/UnitConverterPickerActivity.kt new file mode 100644 index 00000000..09306eff --- /dev/null +++ b/app/src/main/kotlin/com/simplemobiletools/calculator/activities/UnitConverterPickerActivity.kt @@ -0,0 +1,53 @@ +package com.simplemobiletools.calculator.activities + +import android.content.Intent +import android.os.Bundle +import android.view.WindowManager +import com.simplemobiletools.calculator.BuildConfig +import com.simplemobiletools.calculator.R +import com.simplemobiletools.calculator.adapters.UnitTypesAdapter +import com.simplemobiletools.calculator.databinding.ActivityUnitConverterPickerBinding +import com.simplemobiletools.calculator.extensions.config +import com.simplemobiletools.calculator.helpers.converters.Converter +import com.simplemobiletools.commons.extensions.appLaunched +import com.simplemobiletools.commons.extensions.viewBinding +import com.simplemobiletools.commons.helpers.NavigationIcon +import com.simplemobiletools.commons.views.AutoGridLayoutManager + +class UnitConverterPickerActivity : SimpleActivity() { + private val binding by viewBinding(ActivityUnitConverterPickerBinding::inflate) + + override fun onCreate(savedInstanceState: Bundle?) { + isMaterialActivity = true + super.onCreate(savedInstanceState) + setContentView(binding.root) + appLaunched(BuildConfig.APPLICATION_ID) + updateMaterialActivityViews(binding.unitConverterPickerCoordinator, null, useTransparentNavigation = false, useTopSearchMenu = false) + setupMaterialScrollListener(binding.unitTypesGrid, binding.unitConverterPickerToolbar) + + binding.unitTypesGrid.layoutManager = AutoGridLayoutManager(this, resources.getDimensionPixelSize(R.dimen.unit_type_size)) + binding.unitTypesGrid.adapter = UnitTypesAdapter(this, Converter.ALL) { + Intent(this, UnitConverterActivity::class.java).apply { + putExtra(UnitConverterActivity.EXTRA_CONVERTER_ID, it) + startActivity(this) + } + } + } + + override fun onResume() { + super.onResume() + + setupToolbar(binding.unitConverterPickerToolbar, NavigationIcon.Cross) + + if (config.preventPhoneFromSleeping) { + window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) + } + } + + override fun onPause() { + super.onPause() + if (config.preventPhoneFromSleeping) { + window.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) + } + } +} diff --git a/app/src/main/kotlin/com/simplemobiletools/calculator/adapters/UnitTypesAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/calculator/adapters/UnitTypesAdapter.kt new file mode 100644 index 00000000..bc71b1f6 --- /dev/null +++ b/app/src/main/kotlin/com/simplemobiletools/calculator/adapters/UnitTypesAdapter.kt @@ -0,0 +1,42 @@ +package com.simplemobiletools.calculator.adapters + +import android.view.View +import android.view.ViewGroup +import androidx.recyclerview.widget.RecyclerView +import com.simplemobiletools.calculator.activities.SimpleActivity +import com.simplemobiletools.calculator.databinding.ItemUnitTypeBinding +import com.simplemobiletools.calculator.helpers.converters.Converter +import com.simplemobiletools.commons.extensions.applyColorFilter +import com.simplemobiletools.commons.extensions.getProperPrimaryColor +import com.simplemobiletools.commons.extensions.getProperTextColor + +class UnitTypesAdapter (val activity: SimpleActivity, val items: List, val itemClick: (id: Int) -> Unit) : RecyclerView.Adapter() { + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder = + ViewHolder(ItemUnitTypeBinding.inflate(activity.layoutInflater, parent, false)) + + + override fun onBindViewHolder(holder: ViewHolder, position: Int) { + val item = items[position] + holder.bindView(item, position) + } + + override fun getItemCount() = items.size + + inner class ViewHolder(private val binding: ItemUnitTypeBinding) : RecyclerView.ViewHolder(binding.root) { + fun bindView(item: Converter, id: Int): View { + itemView.apply { + binding.unitImage.setImageResource(item.imageResId) + binding.unitLabel.setText(item.nameResId) + + binding.unitLabel.setTextColor(activity.getProperTextColor()) + binding.unitImage.applyColorFilter(activity.getProperPrimaryColor()) + + setOnClickListener { + itemClick(id) + } + } + + return itemView + } + } +} diff --git a/app/src/main/kotlin/com/simplemobiletools/calculator/helpers/converters/AreaConverter.kt b/app/src/main/kotlin/com/simplemobiletools/calculator/helpers/converters/AreaConverter.kt index 4876c78c..f66b809f 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calculator/helpers/converters/AreaConverter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calculator/helpers/converters/AreaConverter.kt @@ -4,6 +4,7 @@ import com.simplemobiletools.calculator.R object AreaConverter : Converter { override val nameResId: Int = R.string.unit_area + override val imageResId: Int = R.drawable.ic_box_vector sealed class Unit(nameResId: Int, factor: Double) : Converter.Unit(nameResId, factor) { data object SquareKilometer : Unit( diff --git a/app/src/main/kotlin/com/simplemobiletools/calculator/helpers/converters/Base.kt b/app/src/main/kotlin/com/simplemobiletools/calculator/helpers/converters/Base.kt index 8623bb48..d234c9c8 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calculator/helpers/converters/Base.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calculator/helpers/converters/Base.kt @@ -10,6 +10,7 @@ interface Converter { } val nameResId: Int + val imageResId: Int val units: List val defaultTopUnit: Unit val defaultBottomUnit: Unit diff --git a/app/src/main/kotlin/com/simplemobiletools/calculator/helpers/converters/LengthConverter.kt b/app/src/main/kotlin/com/simplemobiletools/calculator/helpers/converters/LengthConverter.kt index ef59ba5b..a8e30c6b 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calculator/helpers/converters/LengthConverter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calculator/helpers/converters/LengthConverter.kt @@ -3,8 +3,8 @@ package com.simplemobiletools.calculator.helpers.converters import com.simplemobiletools.calculator.R object LengthConverter : Converter { - override val nameResId: Int = R.string.unit_length + override val imageResId: Int = R.drawable.ic_height_vector sealed class Unit(nameResId: Int, factor: Double) : Converter.Unit(nameResId, factor) { data object Kilometer : Unit( diff --git a/app/src/main/kotlin/com/simplemobiletools/calculator/helpers/converters/VolumeConverter.kt b/app/src/main/kotlin/com/simplemobiletools/calculator/helpers/converters/VolumeConverter.kt index b7473df4..fec7ebf0 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calculator/helpers/converters/VolumeConverter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calculator/helpers/converters/VolumeConverter.kt @@ -4,6 +4,7 @@ import com.simplemobiletools.calculator.R object VolumeConverter : Converter { override val nameResId: Int = R.string.unit_volume + override val imageResId: Int = R.drawable.ic_drop_vector sealed class Unit(nameResId: Int, factor: Double) : Converter.Unit(nameResId, factor) { data object SquareKilometer : Unit( diff --git a/app/src/main/res/drawable/ic_box_vector.xml b/app/src/main/res/drawable/ic_box_vector.xml new file mode 100644 index 00000000..b1bf0ac5 --- /dev/null +++ b/app/src/main/res/drawable/ic_box_vector.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/drawable/ic_drop_vector.xml b/app/src/main/res/drawable/ic_drop_vector.xml new file mode 100644 index 00000000..f141fb3a --- /dev/null +++ b/app/src/main/res/drawable/ic_drop_vector.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/drawable/ic_height_vector.xml b/app/src/main/res/drawable/ic_height_vector.xml new file mode 100644 index 00000000..0392a75e --- /dev/null +++ b/app/src/main/res/drawable/ic_height_vector.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/drawable/ic_thermostat_vector.xml b/app/src/main/res/drawable/ic_thermostat_vector.xml new file mode 100644 index 00000000..13c773a6 --- /dev/null +++ b/app/src/main/res/drawable/ic_thermostat_vector.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/drawable/unit_type_background.xml b/app/src/main/res/drawable/unit_type_background.xml new file mode 100644 index 00000000..7d03375e --- /dev/null +++ b/app/src/main/res/drawable/unit_type_background.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/activity_unit_converter_picker.xml b/app/src/main/res/layout/activity_unit_converter_picker.xml new file mode 100644 index 00000000..eb4fd3fb --- /dev/null +++ b/app/src/main/res/layout/activity_unit_converter_picker.xml @@ -0,0 +1,29 @@ + + + + + + + + diff --git a/app/src/main/res/layout/item_unit_type.xml b/app/src/main/res/layout/item_unit_type.xml new file mode 100644 index 00000000..cfc9bd7d --- /dev/null +++ b/app/src/main/res/layout/item_unit_type.xml @@ -0,0 +1,30 @@ + + + + + + + + diff --git a/app/src/main/res/layout/view_unit_converter.xml b/app/src/main/res/layout/view_unit_converter.xml index d353f968..b3a40b9a 100644 --- a/app/src/main/res/layout/view_unit_converter.xml +++ b/app/src/main/res/layout/view_unit_converter.xml @@ -1,7 +1,6 @@ - - 34sp 20sp 40sp + + 128dp