diff --git a/feature/converter/src/main/java/com/sadellie/unitto/feature/converter/MainScreen.kt b/feature/converter/src/main/java/com/sadellie/unitto/feature/converter/MainScreen.kt
index b8ce7d61..fefc8509 100644
--- a/feature/converter/src/main/java/com/sadellie/unitto/feature/converter/MainScreen.kt
+++ b/feature/converter/src/main/java/com/sadellie/unitto/feature/converter/MainScreen.kt
@@ -40,11 +40,12 @@ import androidx.lifecycle.viewmodel.compose.viewModel
import com.sadellie.unitto.core.ui.common.AnimatedTopBarText
import com.sadellie.unitto.feature.R
import com.sadellie.unitto.feature.converter.components.Keyboard
+import com.sadellie.unitto.feature.converter.components.PortraitLandscape
import com.sadellie.unitto.feature.converter.components.TopScreenPart
import kotlinx.coroutines.delay
@Composable
-fun MainScreen(
+internal fun MainScreen(
navigateToLeftScreen: (String) -> Unit,
navigateToRightScreen: (unitFrom: String, unitTo: String, input: String) -> Unit,
navigateToSettings: () -> Unit,
diff --git a/feature/converter/src/main/java/com/sadellie/unitto/feature/converter/components/Keyboard.kt b/feature/converter/src/main/java/com/sadellie/unitto/feature/converter/components/Keyboard.kt
index cf907400..e38c6d6d 100644
--- a/feature/converter/src/main/java/com/sadellie/unitto/feature/converter/components/Keyboard.kt
+++ b/feature/converter/src/main/java/com/sadellie/unitto/feature/converter/components/Keyboard.kt
@@ -68,7 +68,7 @@ import com.sadellie.unitto.feature.converter.ConverterMode
* @param converterMode
*/
@Composable
-fun Keyboard(
+internal fun Keyboard(
modifier: Modifier = Modifier,
addDigit: (String) -> Unit = {},
deleteDigit: () -> Unit = {},
diff --git a/feature/converter/src/main/java/com/sadellie/unitto/feature/converter/components/KeyboardButton.kt b/feature/converter/src/main/java/com/sadellie/unitto/feature/converter/components/KeyboardButton.kt
index 6228b487..0bfbb828 100644
--- a/feature/converter/src/main/java/com/sadellie/unitto/feature/converter/components/KeyboardButton.kt
+++ b/feature/converter/src/main/java/com/sadellie/unitto/feature/converter/components/KeyboardButton.kt
@@ -47,7 +47,7 @@ import com.sadellie.unitto.core.ui.theme.NumbersTextStyleTitleLarge
* @param onClick Action to perform when clicking this button.
*/
@Composable
-fun KeyboardButton(
+internal fun KeyboardButton(
modifier: Modifier = Modifier,
digit: String,
isPrimary: Boolean = true,
diff --git a/feature/converter/src/main/java/com/sadellie/unitto/feature/converter/components/MyTextField.kt b/feature/converter/src/main/java/com/sadellie/unitto/feature/converter/components/MyTextField.kt
index 23454d61..23bb6518 100644
--- a/feature/converter/src/main/java/com/sadellie/unitto/feature/converter/components/MyTextField.kt
+++ b/feature/converter/src/main/java/com/sadellie/unitto/feature/converter/components/MyTextField.kt
@@ -64,7 +64,7 @@ import com.sadellie.unitto.feature.R
* @param textToCopy Text that will be copied to clipboard when long-clicking.
*/
@Composable
-fun MyTextField(
+internal fun MyTextField(
modifier: Modifier,
primaryText: @Composable () -> String,
secondaryText: String?,
diff --git a/feature/converter/src/main/java/com/sadellie/unitto/feature/converter/PortraitLandscape.kt b/feature/converter/src/main/java/com/sadellie/unitto/feature/converter/components/PortraitLandscape.kt
similarity index 94%
rename from feature/converter/src/main/java/com/sadellie/unitto/feature/converter/PortraitLandscape.kt
rename to feature/converter/src/main/java/com/sadellie/unitto/feature/converter/components/PortraitLandscape.kt
index aa76a7d8..331b5bc8 100644
--- a/feature/converter/src/main/java/com/sadellie/unitto/feature/converter/PortraitLandscape.kt
+++ b/feature/converter/src/main/java/com/sadellie/unitto/feature/converter/components/PortraitLandscape.kt
@@ -1,6 +1,6 @@
/*
* Unitto is a unit converter for Android
- * Copyright (c) 2022 Elshan Agaev
+ * Copyright (c) 2022-2023 Elshan Agaev
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -16,7 +16,7 @@
* along with this program. If not, see .
*/
-package com.sadellie.unitto.feature.converter
+package com.sadellie.unitto.feature.converter.components
import android.content.res.Configuration
import androidx.compose.foundation.layout.Arrangement
@@ -36,7 +36,7 @@ import androidx.compose.ui.unit.dp
* When Landscape mode will place [content1] and [content2] in a [Row].
*/
@Composable
-fun PortraitLandscape(
+internal fun PortraitLandscape(
modifier: Modifier,
content1: @Composable (Modifier) -> Unit,
content2: @Composable (Modifier) -> Unit,
diff --git a/feature/converter/src/main/java/com/sadellie/unitto/feature/converter/components/TopScreen.kt b/feature/converter/src/main/java/com/sadellie/unitto/feature/converter/components/TopScreen.kt
index 07c0d53b..0867f5cd 100644
--- a/feature/converter/src/main/java/com/sadellie/unitto/feature/converter/components/TopScreen.kt
+++ b/feature/converter/src/main/java/com/sadellie/unitto/feature/converter/components/TopScreen.kt
@@ -64,7 +64,7 @@ import com.sadellie.unitto.feature.converter.ConverterMode
* @param converterMode [ConverterMode.BASE] doesn't use formatting for input/output.
*/
@Composable
-fun TopScreenPart(
+internal fun TopScreenPart(
modifier: Modifier,
inputValue: String,
calculatedValue: String?,
diff --git a/feature/converter/src/main/java/com/sadellie/unitto/feature/converter/components/UnitSelectionButton.kt b/feature/converter/src/main/java/com/sadellie/unitto/feature/converter/components/UnitSelectionButton.kt
index 650d09d3..d8b4fa02 100644
--- a/feature/converter/src/main/java/com/sadellie/unitto/feature/converter/components/UnitSelectionButton.kt
+++ b/feature/converter/src/main/java/com/sadellie/unitto/feature/converter/components/UnitSelectionButton.kt
@@ -45,7 +45,7 @@ import com.sadellie.unitto.feature.R
* @param label Text on button
*/
@Composable
-fun UnitSelectionButton(
+internal fun UnitSelectionButton(
modifier: Modifier = Modifier,
onClick: () -> Unit = {},
label: Int?,
diff --git a/feature/settings/src/main/java/com/sadellie/unitto/feature/settings/AboutScreen.kt b/feature/settings/src/main/java/com/sadellie/unitto/feature/settings/AboutScreen.kt
index 16a44f36..e2951078 100644
--- a/feature/settings/src/main/java/com/sadellie/unitto/feature/settings/AboutScreen.kt
+++ b/feature/settings/src/main/java/com/sadellie/unitto/feature/settings/AboutScreen.kt
@@ -46,7 +46,7 @@ import com.sadellie.unitto.feature.R
import com.sadellie.unitto.feature.settings.components.AlertDialogWithList
@Composable
-fun AboutScreen(
+internal fun AboutScreen(
navigateUpAction: () -> Unit,
navigateToThirdParty: () -> Unit
) {
diff --git a/feature/settings/src/main/java/com/sadellie/unitto/feature/settings/SettingsScreen.kt b/feature/settings/src/main/java/com/sadellie/unitto/feature/settings/SettingsScreen.kt
index fcb3dfd5..00eee5dc 100644
--- a/feature/settings/src/main/java/com/sadellie/unitto/feature/settings/SettingsScreen.kt
+++ b/feature/settings/src/main/java/com/sadellie/unitto/feature/settings/SettingsScreen.kt
@@ -56,7 +56,7 @@ import com.sadellie.unitto.feature.settings.navigation.themesRoute
import com.sadellie.unitto.feature.settings.navigation.unitsGroupRoute
@Composable
-fun SettingsScreen(
+internal fun SettingsScreen(
viewModel: SettingsViewModel,
navigateUpAction: () -> Unit,
navControllerAction: (String) -> Unit
diff --git a/feature/settings/src/main/java/com/sadellie/unitto/feature/settings/ThemesScreen.kt b/feature/settings/src/main/java/com/sadellie/unitto/feature/settings/ThemesScreen.kt
index 4e821e40..f48c8922 100644
--- a/feature/settings/src/main/java/com/sadellie/unitto/feature/settings/ThemesScreen.kt
+++ b/feature/settings/src/main/java/com/sadellie/unitto/feature/settings/ThemesScreen.kt
@@ -31,14 +31,14 @@ import androidx.compose.material.icons.filled.Palette
import androidx.compose.material3.Icon
import androidx.compose.runtime.Composable
import androidx.compose.ui.res.stringResource
-import com.sadellie.unitto.feature.R
import com.sadellie.unitto.core.ui.common.UnittoLargeTopAppBar
import com.sadellie.unitto.core.ui.common.UnittoListItem
+import com.sadellie.unitto.feature.R
import io.github.sadellie.themmo.ThemingMode
import io.github.sadellie.themmo.ThemmoController
@Composable
-fun ThemesScreen(
+internal fun ThemesScreen(
navigateUpAction: () -> Unit = {},
themmoController: ThemmoController,
viewModel: SettingsViewModel
diff --git a/feature/settings/src/main/java/com/sadellie/unitto/feature/settings/ThirdPartyLicensesScreen.kt b/feature/settings/src/main/java/com/sadellie/unitto/feature/settings/ThirdPartyLicensesScreen.kt
index c438f2da..7cdef788 100644
--- a/feature/settings/src/main/java/com/sadellie/unitto/feature/settings/ThirdPartyLicensesScreen.kt
+++ b/feature/settings/src/main/java/com/sadellie/unitto/feature/settings/ThirdPartyLicensesScreen.kt
@@ -48,7 +48,7 @@ import com.sadellie.unitto.feature.R
*/
@Stable
@Composable
-fun ThirdPartyLicensesScreen(
+internal fun ThirdPartyLicensesScreen(
navigateUpAction: () -> Unit = {}
) {
val mContext = LocalContext.current
diff --git a/feature/settings/src/main/java/com/sadellie/unitto/feature/settings/UnitGroupsScreen.kt b/feature/settings/src/main/java/com/sadellie/unitto/feature/settings/UnitGroupsScreen.kt
index dd25bba7..b3cb4061 100644
--- a/feature/settings/src/main/java/com/sadellie/unitto/feature/settings/UnitGroupsScreen.kt
+++ b/feature/settings/src/main/java/com/sadellie/unitto/feature/settings/UnitGroupsScreen.kt
@@ -47,9 +47,9 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
-import com.sadellie.unitto.feature.R
import com.sadellie.unitto.core.ui.common.Header
import com.sadellie.unitto.core.ui.common.UnittoLargeTopAppBar
+import com.sadellie.unitto.feature.R
import org.burnoutcrew.reorderable.ReorderableItem
import org.burnoutcrew.reorderable.detectReorder
import org.burnoutcrew.reorderable.detectReorderAfterLongPress
@@ -57,7 +57,7 @@ import org.burnoutcrew.reorderable.rememberReorderableLazyListState
import org.burnoutcrew.reorderable.reorderable
@Composable
-fun UnitGroupsScreen(
+internal fun UnitGroupsScreen(
viewModel: SettingsViewModel,
navigateUpAction: () -> Unit
) {
diff --git a/feature/settings/src/main/java/com/sadellie/unitto/feature/settings/components/AlertDialogWithList.kt b/feature/settings/src/main/java/com/sadellie/unitto/feature/settings/components/AlertDialogWithList.kt
index 2c0051b6..031b78d3 100644
--- a/feature/settings/src/main/java/com/sadellie/unitto/feature/settings/components/AlertDialogWithList.kt
+++ b/feature/settings/src/main/java/com/sadellie/unitto/feature/settings/components/AlertDialogWithList.kt
@@ -51,7 +51,7 @@ import com.sadellie.unitto.feature.settings.R
* @param supportText Text above list of options
*/
@Composable
-fun AlertDialogWithList(
+internal fun AlertDialogWithList(
title: String,
listItems: Map = emptyMap(),
selectedItemIndex: Int = 0,
diff --git a/feature/settings/src/main/java/com/sadellie/unitto/feature/settings/navigation/SettingsNavigation.kt b/feature/settings/src/main/java/com/sadellie/unitto/feature/settings/navigation/SettingsNavigation.kt
index 3f9fd831..08d99546 100644
--- a/feature/settings/src/main/java/com/sadellie/unitto/feature/settings/navigation/SettingsNavigation.kt
+++ b/feature/settings/src/main/java/com/sadellie/unitto/feature/settings/navigation/SettingsNavigation.kt
@@ -32,11 +32,11 @@ import com.sadellie.unitto.feature.settings.UnitGroupsScreen
import io.github.sadellie.themmo.ThemmoController
const val settingsGraph = "settings_graph"
-const val settingsRoute = "settings_route"
-const val themesRoute = "themes_route"
-const val unitsGroupRoute = "units_group_route"
-const val thirdPartyRoute = "third_party_route"
-const val aboutRoute = "about_route"
+private const val settingsRoute = "settings_route"
+internal const val themesRoute = "themes_route"
+internal const val unitsGroupRoute = "units_group_route"
+internal const val thirdPartyRoute = "third_party_route"
+internal const val aboutRoute = "about_route"
fun NavController.navigateToSettings() {
navigate(settingsRoute)
diff --git a/feature/unitslist/proguard-rules.pro b/feature/unitslist/proguard-rules.pro
deleted file mode 100644
index 481bb434..00000000
--- a/feature/unitslist/proguard-rules.pro
+++ /dev/null
@@ -1,21 +0,0 @@
-# Add project specific ProGuard rules here.
-# You can control the set of applied configuration files using the
-# proguardFiles setting in build.gradle.
-#
-# For more details, see
-# http://developer.android.com/guide/developing/tools/proguard.html
-
-# If your project uses WebView with JS, uncomment the following
-# and specify the fully qualified class name to the JavaScript interface
-# class:
-#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
-# public *;
-#}
-
-# Uncomment this to preserve the line number information for
-# debugging stack traces.
-#-keepattributes SourceFile,LineNumberTable
-
-# If you keep the line number information, uncomment this to
-# hide the original source file name.
-#-renamesourcefileattribute SourceFile
\ No newline at end of file
diff --git a/feature/unitslist/src/main/java/com/sadellie/unitto/feature/unitslist/SecondScreen.kt b/feature/unitslist/src/main/java/com/sadellie/unitto/feature/unitslist/LeftSideScreen.kt
similarity index 59%
rename from feature/unitslist/src/main/java/com/sadellie/unitto/feature/unitslist/SecondScreen.kt
rename to feature/unitslist/src/main/java/com/sadellie/unitto/feature/unitslist/LeftSideScreen.kt
index 185c1914..d6cf820e 100644
--- a/feature/unitslist/src/main/java/com/sadellie/unitto/feature/unitslist/SecondScreen.kt
+++ b/feature/unitslist/src/main/java/com/sadellie/unitto/feature/unitslist/LeftSideScreen.kt
@@ -1,6 +1,6 @@
/*
* Unitto is a unit converter for Android
- * Copyright (c) 2022-2023 Elshan Agaev
+ * Copyright (c) 2023 Elshan Agaev
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -45,16 +45,12 @@ import androidx.compose.ui.platform.LocalFocusManager
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import androidx.lifecycle.compose.collectAsStateWithLifecycle
-import com.sadellie.unitto.core.ui.Formatter
import com.sadellie.unitto.data.units.AbstractUnit
-import com.sadellie.unitto.data.units.NumberBaseUnit
-import com.sadellie.unitto.data.units.UnitGroup
import com.sadellie.unitto.feature.unitslist.components.ChipsRow
import com.sadellie.unitto.feature.unitslist.components.SearchBar
import com.sadellie.unitto.feature.unitslist.components.SearchPlaceholder
import com.sadellie.unitto.feature.unitslist.components.UnitGroupHeader
import com.sadellie.unitto.feature.unitslist.components.UnitListItem
-import java.math.BigDecimal
/**
* Left side screen. Unit to convert from.
@@ -66,7 +62,7 @@ import java.math.BigDecimal
* @param selectAction Action to perform when user clicks on [UnitListItem].
*/
@Composable
-fun LeftSideScreen(
+internal fun LeftSideScreen(
viewModel: SecondViewModel,
currentUnitId: String,
navigateUp: () -> Unit,
@@ -154,110 +150,3 @@ fun LeftSideScreen(
}
}
}
-
-/**
- * Right side screen. Unit to convert to.
- *
- * @param viewModel [SecondViewModel].
- * @param currentUnit Currently selected [AbstractUnit].
- * @param navigateUp Action to navigate up. Called when user click back button.
- * @param navigateToSettingsAction Action to perform when clicking settings chip at the end.
- * @param selectAction Action to perform when user clicks on [UnitListItem].
- * @param inputValue Current input value (upper text field on MainScreen)
- * @param unitFrom Unit we are converting from. Need it for conversion.
- */
-@Composable
-fun RightSideScreen(
- viewModel: SecondViewModel,
- currentUnit: String,
- navigateUp: () -> Unit,
- navigateToSettingsAction: () -> Unit,
- selectAction: (AbstractUnit) -> Unit,
- inputValue: String,
- unitFrom: AbstractUnit
-) {
- val uiState = viewModel.mainFlow.collectAsStateWithLifecycle()
- val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(rememberTopAppBarState())
- val focusManager = LocalFocusManager.current
- val inputAsBigDecimal: BigDecimal? = try {
- inputValue.toBigDecimal()
- } catch (e: NumberFormatException) {
- null
- }
-
- val convertMethod: (AbstractUnit) -> String = when {
- unitFrom.group == UnitGroup.NUMBER_BASE -> {{
- convertForSecondaryNumberBase(inputValue, unitFrom as NumberBaseUnit, it as NumberBaseUnit)
- }}
- inputAsBigDecimal != null -> {{
- convertForSecondary(inputAsBigDecimal, unitFrom, it)
- }}
- else -> {{""}}
- }
-
- Scaffold(
- modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection),
- topBar = {
- SearchBar(
- title = stringResource(R.string.units_screen_to),
- value = uiState.value.searchQuery,
- onValueChange = {
- viewModel.onSearchQueryChange(it, false)
- },
- favoritesOnly = uiState.value.favoritesOnly,
- favoriteAction = {
- viewModel.toggleFavoritesOnly(false)
- },
- navigateUpAction = navigateUp,
- focusManager = focusManager,
- scrollBehavior = scrollBehavior
- )
- }
- ) { paddingValues ->
- Crossfade(
- targetState = uiState.value.unitsToShow.isEmpty(),
- modifier = Modifier.padding(paddingValues)
- ) { noUnits ->
- if (noUnits) {
- SearchPlaceholder(navigateToSettingsAction = navigateToSettingsAction)
- } else {
- LazyColumn(Modifier.fillMaxSize()) {
- uiState.value.unitsToShow.forEach { (unitGroup, listOfUnits) ->
- item(unitGroup.name) {
- UnitGroupHeader(Modifier.animateItemPlacement(), unitGroup)
- }
- items(listOfUnits, { it.unitId }) { unit ->
- UnitListItem(
- modifier = Modifier.animateItemPlacement(),
- unit = unit,
- isSelected = currentUnit == unit.unitId,
- selectAction = {
- selectAction(it)
- viewModel.onSearchQueryChange("")
- focusManager.clearFocus(true)
- navigateUp()
- },
- favoriteAction = { viewModel.favoriteUnit(it) },
- convertValue = convertMethod
- )
- }
- }
- }
- }
- }
- }
-}
-
-internal fun convertForSecondary(inputValue: BigDecimal, unitFrom: AbstractUnit, unitTo: AbstractUnit): String {
- return Formatter.format(
- unitFrom.convert(unitTo, inputValue, 3).toPlainString()
- ) + " "
-}
-
-internal fun convertForSecondaryNumberBase(inputValue: String, unitFrom: NumberBaseUnit, unitTo: NumberBaseUnit): String {
- return try {
- unitFrom.convertToBase(inputValue, unitTo.base) + " "
- } catch (e: NumberFormatException) {
- ""
- }
-}
diff --git a/feature/unitslist/src/main/java/com/sadellie/unitto/feature/unitslist/RightSideScreen.kt b/feature/unitslist/src/main/java/com/sadellie/unitto/feature/unitslist/RightSideScreen.kt
new file mode 100644
index 00000000..0879cf81
--- /dev/null
+++ b/feature/unitslist/src/main/java/com/sadellie/unitto/feature/unitslist/RightSideScreen.kt
@@ -0,0 +1,150 @@
+/*
+ * Unitto is a unit converter for Android
+ * Copyright (c) 2022-2023 Elshan Agaev
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+package com.sadellie.unitto.feature.unitslist
+
+import androidx.compose.animation.Crossfade
+import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.lazy.LazyColumn
+import androidx.compose.foundation.lazy.items
+import androidx.compose.material3.Scaffold
+import androidx.compose.material3.TopAppBarDefaults
+import androidx.compose.material3.rememberTopAppBarState
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.input.nestedscroll.nestedScroll
+import androidx.compose.ui.platform.LocalFocusManager
+import androidx.compose.ui.res.stringResource
+import androidx.lifecycle.compose.collectAsStateWithLifecycle
+import com.sadellie.unitto.core.ui.Formatter
+import com.sadellie.unitto.data.units.AbstractUnit
+import com.sadellie.unitto.data.units.NumberBaseUnit
+import com.sadellie.unitto.data.units.UnitGroup
+import com.sadellie.unitto.feature.unitslist.components.SearchBar
+import com.sadellie.unitto.feature.unitslist.components.SearchPlaceholder
+import com.sadellie.unitto.feature.unitslist.components.UnitGroupHeader
+import com.sadellie.unitto.feature.unitslist.components.UnitListItem
+import java.math.BigDecimal
+
+/**
+ * Right side screen. Unit to convert to.
+ *
+ * @param viewModel [SecondViewModel].
+ * @param currentUnit Currently selected [AbstractUnit].
+ * @param navigateUp Action to navigate up. Called when user click back button.
+ * @param navigateToSettingsAction Action to perform when clicking settings chip at the end.
+ * @param selectAction Action to perform when user clicks on [UnitListItem].
+ * @param inputValue Current input value (upper text field on MainScreen)
+ * @param unitFrom Unit we are converting from. Need it for conversion.
+ */
+@Composable
+internal fun RightSideScreen(
+ viewModel: SecondViewModel,
+ currentUnit: String,
+ navigateUp: () -> Unit,
+ navigateToSettingsAction: () -> Unit,
+ selectAction: (AbstractUnit) -> Unit,
+ inputValue: String,
+ unitFrom: AbstractUnit
+) {
+ val uiState = viewModel.mainFlow.collectAsStateWithLifecycle()
+ val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(rememberTopAppBarState())
+ val focusManager = LocalFocusManager.current
+ val inputAsBigDecimal: BigDecimal? = try {
+ inputValue.toBigDecimal()
+ } catch (e: NumberFormatException) {
+ null
+ }
+
+ val convertMethod: (AbstractUnit) -> String = when {
+ unitFrom.group == UnitGroup.NUMBER_BASE -> {{
+ convertForSecondaryNumberBase(inputValue, unitFrom as NumberBaseUnit, it as NumberBaseUnit)
+ }}
+ inputAsBigDecimal != null -> {{
+ convertForSecondary(inputAsBigDecimal, unitFrom, it)
+ }}
+ else -> {{""}}
+ }
+
+ Scaffold(
+ modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection),
+ topBar = {
+ SearchBar(
+ title = stringResource(R.string.units_screen_to),
+ value = uiState.value.searchQuery,
+ onValueChange = {
+ viewModel.onSearchQueryChange(it, false)
+ },
+ favoritesOnly = uiState.value.favoritesOnly,
+ favoriteAction = {
+ viewModel.toggleFavoritesOnly(false)
+ },
+ navigateUpAction = navigateUp,
+ focusManager = focusManager,
+ scrollBehavior = scrollBehavior
+ )
+ }
+ ) { paddingValues ->
+ Crossfade(
+ targetState = uiState.value.unitsToShow.isEmpty(),
+ modifier = Modifier.padding(paddingValues)
+ ) { noUnits ->
+ if (noUnits) {
+ SearchPlaceholder(navigateToSettingsAction = navigateToSettingsAction)
+ } else {
+ LazyColumn(Modifier.fillMaxSize()) {
+ uiState.value.unitsToShow.forEach { (unitGroup, listOfUnits) ->
+ item(unitGroup.name) {
+ UnitGroupHeader(Modifier.animateItemPlacement(), unitGroup)
+ }
+ items(listOfUnits, { it.unitId }) { unit ->
+ UnitListItem(
+ modifier = Modifier.animateItemPlacement(),
+ unit = unit,
+ isSelected = currentUnit == unit.unitId,
+ selectAction = {
+ selectAction(it)
+ viewModel.onSearchQueryChange("")
+ focusManager.clearFocus(true)
+ navigateUp()
+ },
+ favoriteAction = { viewModel.favoriteUnit(it) },
+ convertValue = convertMethod
+ )
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+private fun convertForSecondary(inputValue: BigDecimal, unitFrom: AbstractUnit, unitTo: AbstractUnit): String {
+ return Formatter.format(
+ unitFrom.convert(unitTo, inputValue, 3).toPlainString()
+ ) + " "
+}
+
+private fun convertForSecondaryNumberBase(inputValue: String, unitFrom: NumberBaseUnit, unitTo: NumberBaseUnit): String {
+ return try {
+ unitFrom.convertToBase(inputValue, unitTo.base) + " "
+ } catch (e: NumberFormatException) {
+ ""
+ }
+}
diff --git a/feature/unitslist/src/main/java/com/sadellie/unitto/feature/unitslist/components/ChipsRow.kt b/feature/unitslist/src/main/java/com/sadellie/unitto/feature/unitslist/components/ChipsRow.kt
index bdea9837..23113845 100644
--- a/feature/unitslist/src/main/java/com/sadellie/unitto/feature/unitslist/components/ChipsRow.kt
+++ b/feature/unitslist/src/main/java/com/sadellie/unitto/feature/unitslist/components/ChipsRow.kt
@@ -60,7 +60,7 @@ import com.sadellie.unitto.feature.unitslist.R
* @param lazyListState Used for animated scroll when entering unit selection screen
*/
@Composable
-fun ChipsRow(
+internal fun ChipsRow(
items: List = ALL_UNIT_GROUPS,
chosenUnitGroup: UnitGroup?,
selectAction: (UnitGroup) -> Unit,
diff --git a/feature/unitslist/src/main/java/com/sadellie/unitto/feature/unitslist/components/SearchBar.kt b/feature/unitslist/src/main/java/com/sadellie/unitto/feature/unitslist/components/SearchBar.kt
index 58aa8af9..887f0543 100644
--- a/feature/unitslist/src/main/java/com/sadellie/unitto/feature/unitslist/components/SearchBar.kt
+++ b/feature/unitslist/src/main/java/com/sadellie/unitto/feature/unitslist/components/SearchBar.kt
@@ -77,7 +77,7 @@ import com.sadellie.unitto.feature.unitslist.R
* @param scrollBehavior [TopAppBarScrollBehavior] that is used for collapsing and container color
*/
@Composable
-fun SearchBar(
+internal fun SearchBar(
title: String,
value: String,
onValueChange: (String) -> Unit,
diff --git a/feature/unitslist/src/main/java/com/sadellie/unitto/feature/unitslist/components/SearchPlaceholder.kt b/feature/unitslist/src/main/java/com/sadellie/unitto/feature/unitslist/components/SearchPlaceholder.kt
index 9587afe8..0f8abbba 100644
--- a/feature/unitslist/src/main/java/com/sadellie/unitto/feature/unitslist/components/SearchPlaceholder.kt
+++ b/feature/unitslist/src/main/java/com/sadellie/unitto/feature/unitslist/components/SearchPlaceholder.kt
@@ -43,7 +43,7 @@ import com.sadellie.unitto.feature.unitslist.R
* @param navigateToSettingsAction Action to perform when clicking open settings button.
*/
@Composable
-fun SearchPlaceholder(navigateToSettingsAction: () -> Unit) {
+internal fun SearchPlaceholder(navigateToSettingsAction: () -> Unit) {
Column(
modifier = Modifier
.fillMaxWidth()
diff --git a/feature/unitslist/src/main/java/com/sadellie/unitto/feature/unitslist/components/UnitGroupHeader.kt b/feature/unitslist/src/main/java/com/sadellie/unitto/feature/unitslist/components/UnitGroupHeader.kt
index f142f193..09c28f4e 100644
--- a/feature/unitslist/src/main/java/com/sadellie/unitto/feature/unitslist/components/UnitGroupHeader.kt
+++ b/feature/unitslist/src/main/java/com/sadellie/unitto/feature/unitslist/components/UnitGroupHeader.kt
@@ -27,7 +27,7 @@ import com.sadellie.unitto.core.ui.common.Header
import com.sadellie.unitto.data.units.UnitGroup
@Composable
-fun UnitGroupHeader(modifier: Modifier, unitGroup: UnitGroup) {
+internal fun UnitGroupHeader(modifier: Modifier, unitGroup: UnitGroup) {
Header(
text = stringResource(unitGroup.res),
modifier = modifier,
diff --git a/feature/unitslist/src/main/java/com/sadellie/unitto/feature/unitslist/components/UnitListItem.kt b/feature/unitslist/src/main/java/com/sadellie/unitto/feature/unitslist/components/UnitListItem.kt
index e8cb7ad5..32326745 100644
--- a/feature/unitslist/src/main/java/com/sadellie/unitto/feature/unitslist/components/UnitListItem.kt
+++ b/feature/unitslist/src/main/java/com/sadellie/unitto/feature/unitslist/components/UnitListItem.kt
@@ -145,7 +145,7 @@ private fun BasicUnitListItem(
* @param favoriteAction Function to mark unit as favorite. It's a toggle.
*/
@Composable
-fun UnitListItem(
+internal fun UnitListItem(
modifier: Modifier,
unit: AbstractUnit,
isSelected: Boolean,
@@ -170,7 +170,7 @@ fun UnitListItem(
* @param convertValue Function to call that will convert this unit.
*/
@Composable
-fun UnitListItem(
+internal fun UnitListItem(
modifier: Modifier,
unit: AbstractUnit,
isSelected: Boolean,