diff --git a/build-logic/convention/src/main/kotlin/CMPFeatureConventionPlugin.kt b/build-logic/convention/src/main/kotlin/CMPFeatureConventionPlugin.kt index f5f1eb5c95..ee0a9123ec 100644 --- a/build-logic/convention/src/main/kotlin/CMPFeatureConventionPlugin.kt +++ b/build-logic/convention/src/main/kotlin/CMPFeatureConventionPlugin.kt @@ -17,8 +17,8 @@ class CMPFeatureConventionPlugin : Plugin { dependencies { add("commonMainImplementation", project(":core:ui")) add("commonMainImplementation", project(":core:designsystem")) - add("commonMainImplementation", project(":core:testing")) - add("commonMainImplementation", project(":core:data")) + //add("commonMainImplementation", project(":core:testing")) + //add("commonMainImplementation", project(":core:data")) add("commonMainImplementation", libs.findLibrary("koin.compose").get()) add("commonMainImplementation", libs.findLibrary("koin.compose.viewmodel").get()) diff --git a/feature/settings/build.gradle.kts b/feature/settings/build.gradle.kts index c974b8839a..c09bfe185c 100644 --- a/feature/settings/build.gradle.kts +++ b/feature/settings/build.gradle.kts @@ -8,30 +8,28 @@ * See https://github.com/openMF/android-client/blob/master/LICENSE.md */ plugins { - alias(libs.plugins.mifos.android.feature) - alias(libs.plugins.mifos.android.library.compose) - alias(libs.plugins.mifos.android.library.jacoco) + alias(libs.plugins.mifos.cmp.feature) } android { namespace = "com.mifos.feature.settings" } -dependencies { - implementation(projects.core.datastore) - implementation(projects.core.designsystem) - implementation(projects.core.domain) - implementation(projects.core.common) - implementation(projects.core.ui) - implementation(libs.appcompat) +kotlin { + sourceSets { + commonMain.dependencies { + implementation(compose.material3) + implementation(compose.components.resources) + implementation(compose.ui) + api(projects.core.common) + api(projects.core.model) + api(projects.core.network) + api(projects.core.datastore) + api(projects.core.designsystem) + // api(projects.core.domain) - androidTestImplementation(libs.androidx.compose.ui.test) - debugApi(libs.androidx.compose.ui.test.manifest) - - testImplementation(libs.hilt.android.testing) - testImplementation(projects.core.testing) - - androidTestImplementation(projects.core.testing) + } + } +} -} \ No newline at end of file diff --git a/feature/settings/src/main/AndroidManifest.xml b/feature/settings/src/androidMain/AndroidManifest.xml similarity index 100% rename from feature/settings/src/main/AndroidManifest.xml rename to feature/settings/src/androidMain/AndroidManifest.xml diff --git a/feature/settings/src/main/res/values/feature_settings_.xml b/feature/settings/src/commonMain/composeResources/values/feature_settings_.xml similarity index 100% rename from feature/settings/src/main/res/values/feature_settings_.xml rename to feature/settings/src/commonMain/composeResources/values/feature_settings_.xml diff --git a/feature/settings/src/main/res/values/strings.xml b/feature/settings/src/commonMain/composeResources/values/strings.xml similarity index 97% rename from feature/settings/src/main/res/values/strings.xml rename to feature/settings/src/commonMain/composeResources/values/strings.xml index 6662f017c9..1c752f8d64 100644 --- a/feature/settings/src/main/res/values/strings.xml +++ b/feature/settings/src/commonMain/composeResources/values/strings.xml @@ -12,7 +12,7 @@ CloseBottomSheetIcon Update Config The application will restart after a successful update. - + Update Server Configuration Settings Sync Survey Click to Sync Survey diff --git a/feature/settings/src/main/java/com/mifos/feature/settings/di/SettingsModule.kt b/feature/settings/src/commonMain/kotlin/com/mifos/feature/settings/di/SettingsModule.kt similarity index 100% rename from feature/settings/src/main/java/com/mifos/feature/settings/di/SettingsModule.kt rename to feature/settings/src/commonMain/kotlin/com/mifos/feature/settings/di/SettingsModule.kt diff --git a/feature/settings/src/main/java/com/mifos/feature/settings/navigation/SettingsNavigation.kt b/feature/settings/src/commonMain/kotlin/com/mifos/feature/settings/navigation/SettingsNavigation.kt similarity index 100% rename from feature/settings/src/main/java/com/mifos/feature/settings/navigation/SettingsNavigation.kt rename to feature/settings/src/commonMain/kotlin/com/mifos/feature/settings/navigation/SettingsNavigation.kt diff --git a/feature/settings/src/main/java/com/mifos/feature/settings/navigation/SettingsScreens.kt b/feature/settings/src/commonMain/kotlin/com/mifos/feature/settings/navigation/SettingsScreens.kt similarity index 100% rename from feature/settings/src/main/java/com/mifos/feature/settings/navigation/SettingsScreens.kt rename to feature/settings/src/commonMain/kotlin/com/mifos/feature/settings/navigation/SettingsScreens.kt diff --git a/feature/settings/src/main/java/com/mifos/feature/settings/settings/SettingsScreen.kt b/feature/settings/src/commonMain/kotlin/com/mifos/feature/settings/settings/SettingsScreen.kt similarity index 71% rename from feature/settings/src/main/java/com/mifos/feature/settings/settings/SettingsScreen.kt rename to feature/settings/src/commonMain/kotlin/com/mifos/feature/settings/settings/SettingsScreen.kt index e410ddb472..fdaca52a18 100644 --- a/feature/settings/src/main/java/com/mifos/feature/settings/settings/SettingsScreen.kt +++ b/feature/settings/src/commonMain/kotlin/com/mifos/feature/settings/settings/SettingsScreen.kt @@ -9,13 +9,6 @@ */ package com.mifos.feature.settings.settings -import android.content.ComponentName -import android.content.Context -import android.content.Intent -import android.content.pm.PackageManager -import android.os.CountDownTimer -import android.util.Log -import android.widget.Toast import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer @@ -41,10 +34,6 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.vector.ImageVector -import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.res.stringArrayResource -import androidx.compose.ui.res.stringResource -import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.mifos.core.common.enums.MifosAppLanguage @@ -52,10 +41,11 @@ import com.mifos.core.datastore.model.AppTheme import com.mifos.core.designsystem.component.MifosRadioButtonDialog import com.mifos.core.designsystem.component.MifosScaffold import com.mifos.core.designsystem.component.UpdateEndpointDialogScreen -import com.mifos.feature.settings.R import com.mifos.feature.settings.syncSurvey.SyncSurveysDialog import com.mifos.feature.settings.updateServer.UpdateServerConfigScreenRoute -import org.koin.androidx.compose.koinViewModel +import core.designsystem.generated.resources.Res +import org.jetbrains.compose.resources.stringResource +import org.koin.compose.viewmodel.koinViewModel @Composable internal fun SettingsScreen( @@ -66,7 +56,6 @@ internal fun SettingsScreen( viewModel: SettingsViewModel = koinViewModel(), ) { val uiState by viewModel.uiState.collectAsStateWithLifecycle() - val context = LocalContext.current SettingsScreen( onBackPressed = onBackPressed, @@ -85,11 +74,6 @@ internal fun SettingsScreen( }, updateLanguage = { val isSystemLanguage = viewModel.updateLanguage(it.code) - updateLanguageLocale( - context = context, - language = it.code, - isSystemLanguage = isSystemLanguage, - ) languageChanged() }, ) @@ -115,11 +99,10 @@ internal fun SettingsScreen( var showServerConfig by rememberSaveable { mutableStateOf(false) } val sheetState = rememberModalBottomSheetState() - val context = LocalContext.current MifosScaffold( onBackPressed = onBackPressed, - title = stringResource(R.string.feature_settings), + title = stringResource(Res.string.feature_settings), ) { paddingValues -> Column( Modifier.padding(paddingValues), @@ -161,7 +144,6 @@ internal fun SettingsScreen( onCloseClick = { showServerConfig = false }, onSuccessful = { showServerConfig = false - showRestartCountdownToast(context, 2) }, ) } @@ -169,8 +151,8 @@ internal fun SettingsScreen( if (showLanguageUpdateDialog) { MifosRadioButtonDialog( - title = stringResource(R.string.feature_settings_choose_language), - items = stringArrayResource(R.array.feature_settings_languages), + title = stringResource(Res.string.feature_settings_choose_language), + items = MifosAppLanguage.entries.map { it.displayName }.toTypedArray(), selectItem = { _, index -> updateLanguage(MifosAppLanguage.entries[index]) }, onDismissRequest = { showLanguageUpdateDialog = false }, selectedItem = MifosAppLanguage.fromCode(selectedLanguage).displayName, @@ -179,7 +161,7 @@ internal fun SettingsScreen( if (showThemeUpdateDialog) { MifosRadioButtonDialog( - title = stringResource(R.string.feature_settings_change_app_theme), + title = stringResource(Res.string.feature_settings_change_app_theme), items = AppTheme.entries.map { it.themeName }.toTypedArray(), selectItem = { _, index -> updateTheme(AppTheme.entries[index]) }, onDismissRequest = { showThemeUpdateDialog = false }, @@ -246,12 +228,12 @@ private fun SettingsCardItem( modifier = Modifier.weight(0.8f), ) { Text( - text = stringResource(id = title), + text = stringResource(title), style = MaterialTheme.typography.bodyMedium, ) Text( modifier = Modifier.padding(end = 16.dp), - text = stringResource(id = details), + text = stringResource(details), color = MaterialTheme.colorScheme.onBackground.copy(alpha = 0.8f), style = MaterialTheme.typography.bodyMedium, ) @@ -260,62 +242,4 @@ private fun SettingsCardItem( } } -private fun updateLanguageLocale(context: Context, language: String, isSystemLanguage: Boolean) { - Log.d( - "SettingsScreen", - "updateLanguageLocale: $language" + context.packageName.toString() + isSystemLanguage, - ) -// if (isSystemLanguage) { -// LanguageHelper.setLocale(context, language) -// } else { -// val systemLanguageCode = Locale.getDefault().language -// if (MifosAppLanguage.entries.find { it.code == systemLanguageCode } == null) { -// LanguageHelper.setLocale(context, MifosAppLanguage.ENGLISH.code) -// } else { -// LanguageHelper.setLocale(context, language) -// } -// } -} - -private fun showRestartCountdownToast(context: Context, seconds: Int) { - val countDownTimer = object : CountDownTimer((seconds * 1000).toLong(), 1000) { - override fun onTick(millisUntilFinished: Long) { - val secondsRemaining = millisUntilFinished / 1000 - Toast.makeText( - context, - "Restarting app in $secondsRemaining seconds", - Toast.LENGTH_SHORT, - ).show() - } - override fun onFinish() { - context.restartApplication() - } - } - countDownTimer.start() -} - -private fun Context.restartApplication() { - val packageManager: PackageManager = this.packageManager - val intent: Intent = packageManager.getLaunchIntentForPackage(this.packageName)!! - val componentName: ComponentName = intent.component!! - val restartIntent: Intent = Intent.makeRestartActivityTask(componentName) - this.startActivity(restartIntent) - Runtime.getRuntime().exit(0) -} - -@Composable -@Preview(showSystemUi = true, showBackground = true) -private fun PreviewSettingsScreen() { - SettingsScreen( - onBackPressed = {}, - selectedLanguage = "", - selectedTheme = "", - baseURL = "", - tenant = "", - handleEndpointUpdate = { _, _ -> }, - updateLanguage = {}, - updateTheme = {}, - changePasscode = {}, - ) -} diff --git a/feature/settings/src/main/java/com/mifos/feature/settings/settings/SettingsViewModel.kt b/feature/settings/src/commonMain/kotlin/com/mifos/feature/settings/settings/SettingsViewModel.kt similarity index 80% rename from feature/settings/src/main/java/com/mifos/feature/settings/settings/SettingsViewModel.kt rename to feature/settings/src/commonMain/kotlin/com/mifos/feature/settings/settings/SettingsViewModel.kt index 9f24ebe162..7e8f3dd472 100644 --- a/feature/settings/src/main/java/com/mifos/feature/settings/settings/SettingsViewModel.kt +++ b/feature/settings/src/commonMain/kotlin/com/mifos/feature/settings/settings/SettingsViewModel.kt @@ -16,7 +16,7 @@ import com.mifos.core.common.enums.MifosAppLanguage import com.mifos.core.datastore.UserPreferencesRepository import com.mifos.core.datastore.model.AppTheme import com.mifos.core.designsystem.icon.MifosIcons -import com.mifos.feature.settings.R +import core.designsystem.generated.resources.Res import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.first @@ -73,33 +73,33 @@ enum class SettingsCardItem( val icon: ImageVector?, ) { SYNC_SURVEY( - title = R.string.feature_settings_sync_survey, - details = R.string.feature_settings_sync_survey_desc, + title = Res.string.feature_settings_sync_survey, + details = Res.string.feature_settings_sync_survey_desc, icon = null, ), LANGUAGE( - title = R.string.feature_settings_language, - details = R.string.feature_settings_language_desc, + title = Res.string.feature_settings_language, + details = Res.string.feature_settings_language_desc, icon = MifosIcons.Language, ), THEME( - title = R.string.feature_settings_theme, - details = R.string.feature_settings_theme_desc, + title = Res.string.feature_settings_theme, + details = Res.string.feature_settings_theme_desc, icon = MifosIcons.Theme, ), PASSCODE( - title = R.string.feature_settings_change_passcode, - details = R.string.feature_settings_change_passcode_desc, + title = Res.string.feature_settings_change_passcode, + details = Res.string.feature_settings_change_passcode_desc, icon = MifosIcons.Password, ), ENDPOINT( - title = R.string.feature_settings_instance_url, - details = R.string.feature_settings_instance_url_desc, + title = Res.string.feature_settings_instance_url, + details = Res.string.feature_settings_instance_url_desc, icon = null, ), SERVER_CONFIG( - title = R.string.feature_settings_server_config, - details = R.string.feature_settings_server_config_desc, + title = Res.string.feature_settings_server_config, + details = Res.string.feature_settings_server_config_desc, icon = null, ), } diff --git a/feature/settings/src/main/java/com/mifos/feature/settings/syncSurvey/SyncSurveysDialog.kt b/feature/settings/src/commonMain/kotlin/com/mifos/feature/settings/syncSurvey/SyncSurveysDialog.kt similarity index 82% rename from feature/settings/src/main/java/com/mifos/feature/settings/syncSurvey/SyncSurveysDialog.kt rename to feature/settings/src/commonMain/kotlin/com/mifos/feature/settings/syncSurvey/SyncSurveysDialog.kt index 61b1a22990..b1f917980d 100644 --- a/feature/settings/src/main/java/com/mifos/feature/settings/syncSurvey/SyncSurveysDialog.kt +++ b/feature/settings/src/commonMain/kotlin/com/mifos/feature/settings/syncSurvey/SyncSurveysDialog.kt @@ -9,9 +9,6 @@ */ package com.mifos.feature.settings.syncSurvey -import android.annotation.SuppressLint -import android.util.Log -import android.widget.Toast import androidx.compose.foundation.background import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box @@ -41,17 +38,13 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.Color -import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.res.stringResource -import androidx.compose.ui.tooling.preview.Preview -import androidx.compose.ui.tooling.preview.PreviewParameter -import androidx.compose.ui.tooling.preview.PreviewParameterProvider import androidx.compose.ui.unit.dp import androidx.compose.ui.window.Dialog import com.mifos.core.designsystem.component.MifosCircularProgress -import com.mifos.feature.settings.R +import core.designsystem.generated.resources.Res import kotlinx.coroutines.launch -import org.koin.androidx.compose.koinViewModel +import org.jetbrains.compose.resources.stringResource +import org.koin.compose.viewmodel.koinViewModel @Composable internal fun SyncSurveysDialog( @@ -135,7 +128,7 @@ internal fun SyncSurveysDialog( LaunchedEffect(key1 = true) { Toast.makeText( context, - context.getString(R.string.feature_settings_error_network_not_available), + context.getString(Res.string.feature_settings_error_network_not_available), Toast.LENGTH_SHORT, ).show() } @@ -148,7 +141,7 @@ internal fun SyncSurveysDialog( is SyncSurveysDialogUiState.ShowSurveysSyncSuccessfully -> { showCancelButton = false LaunchedEffect(key1 = true) { - Toast.makeText(context, R.string.feature_settings_sync_success, Toast.LENGTH_SHORT) + Toast.makeText(context, Res.string.feature_settings_sync_success, Toast.LENGTH_SHORT) .show() } } @@ -162,8 +155,8 @@ internal fun SyncSurveysDialog( surveySyncProgressMax = uiState.total totalSyncProgressMax = uiState.total val totalSurveys = - uiState.total.toString() + stringResource(R.string.feature_settings_space) + - stringResource(R.string.feature_settings_surveys) + uiState.total.toString() + stringResource(Res.string.feature_settings_space) + + stringResource(Res.string.feature_settings_surveys) totalSurveysText = totalSurveys syncFailedText = 0.toString() } @@ -174,8 +167,8 @@ internal fun SyncSurveysDialog( surveyName = uiState.name questionSyncProgressMax = uiState.questionTotal val totalSyncCount = - context.getString(R.string.feature_settings_space) + uiState.index + context.getString( - R.string.feature_settings_slash, + context.getString(Res.string.feature_settings_space) + uiState.index + context.getString( + Res.string.feature_settings_slash, ) + totalListSize totalProgressText = totalSyncCount } @@ -227,7 +220,7 @@ private fun SyncSurveysDialogContent( .padding(5.dp), ) { Text( - text = stringResource(id = R.string.feature_settings_sync_surveys_full_information), + text = stringResource(Res.string.feature_settings_sync_surveys_full_information), modifier = Modifier .padding(10.dp) .align(Alignment.CenterHorizontally), @@ -244,7 +237,7 @@ private fun SyncSurveysDialogContent( .padding(vertical = 8.dp), horizontalArrangement = Arrangement.SpaceBetween, ) { - Text(text = stringResource(id = R.string.feature_settings_name)) + Text(text = stringResource(Res.string.feature_settings_name)) Text(text = surveyName) } @@ -254,7 +247,7 @@ private fun SyncSurveysDialogContent( .padding(vertical = 8.dp), horizontalArrangement = Arrangement.SpaceBetween, ) { - Text(text = stringResource(id = R.string.feature_settings_total)) + Text(text = stringResource(Res.string.feature_settings_total)) Text(text = totalSurveysText) } @@ -264,7 +257,7 @@ private fun SyncSurveysDialogContent( .padding(vertical = 8.dp), horizontalArrangement = Arrangement.SpaceBetween, ) { - Text(text = stringResource(id = R.string.feature_settings_syncing_survey)) + Text(text = stringResource(Res.string.feature_settings_syncing_survey)) Text(text = surveyName) } @@ -281,7 +274,7 @@ private fun SyncSurveysDialogContent( .padding(vertical = 8.dp), horizontalArrangement = Arrangement.SpaceBetween, ) { - Text(text = stringResource(id = R.string.feature_settings_syncing_question)) + Text(text = stringResource(Res.string.feature_settings_syncing_question)) Text(text = questionName) } @@ -298,7 +291,7 @@ private fun SyncSurveysDialogContent( .padding(vertical = 8.dp), horizontalArrangement = Arrangement.SpaceBetween, ) { - Text(text = stringResource(id = R.string.feature_settings_syncing_response)) + Text(text = stringResource(Res.string.feature_settings_syncing_response)) Text(text = responseName) } @@ -315,7 +308,7 @@ private fun SyncSurveysDialogContent( .padding(vertical = 8.dp), horizontalArrangement = Arrangement.SpaceBetween, ) { - Text(text = stringResource(id = R.string.feature_settings_total_sync_progress)) + Text(text = stringResource(Res.string.feature_settings_total_sync_progress)) Text(text = totalProgressText) } @@ -332,7 +325,7 @@ private fun SyncSurveysDialogContent( .padding(vertical = 8.dp), horizontalArrangement = Arrangement.SpaceBetween, ) { - Text(text = stringResource(id = R.string.feature_settings_failed_sync)) + Text(text = stringResource(Res.string.feature_settings_failed_sync)) Text(text = syncFailedText) } } @@ -347,7 +340,7 @@ private fun SyncSurveysDialogContent( modifier = Modifier .weight(1f) .padding(end = 8.dp), - text = stringResource(id = R.string.feature_settings_cancel), + text = stringResource(Res.string.feature_settings_cancel), isEnabled = showCancelButton, ) @@ -356,7 +349,7 @@ private fun SyncSurveysDialogContent( modifier = Modifier .weight(1f) .padding(start = 8.dp), - text = stringResource(id = R.string.feature_settings_hide), + text = stringResource(Res.string.feature_settings_hide), isEnabled = true, ) } @@ -386,24 +379,4 @@ private fun SyncSurveyButton( } } -class SyncSurveysDialogPreviewProvider : PreviewParameterProvider { - override val values: Sequence - get() = sequenceOf( - SyncSurveysDialogUiState.DismissDialog, - SyncSurveysDialogUiState.ShowError("Error"), - SyncSurveysDialogUiState.ShowProgressbar, - SyncSurveysDialogUiState.ShowSurveysSyncSuccessfully, - SyncSurveysDialogUiState.ShowSyncedFailedSurveys(1), - ) -} -@Preview(showBackground = true) -@Composable -private fun SyncSurveysDialogPreview( - @PreviewParameter(SyncSurveysDialogPreviewProvider::class) state: SyncSurveysDialogUiState, -) { - SyncSurveysDialog( - uiState = state, - closeDialog = { }, - ) -} diff --git a/feature/settings/src/main/java/com/mifos/feature/settings/syncSurvey/SyncSurveysDialogRepository.kt b/feature/settings/src/commonMain/kotlin/com/mifos/feature/settings/syncSurvey/SyncSurveysDialogRepository.kt similarity index 100% rename from feature/settings/src/main/java/com/mifos/feature/settings/syncSurvey/SyncSurveysDialogRepository.kt rename to feature/settings/src/commonMain/kotlin/com/mifos/feature/settings/syncSurvey/SyncSurveysDialogRepository.kt diff --git a/feature/settings/src/main/java/com/mifos/feature/settings/syncSurvey/SyncSurveysDialogRepositoryImp.kt b/feature/settings/src/commonMain/kotlin/com/mifos/feature/settings/syncSurvey/SyncSurveysDialogRepositoryImp.kt similarity index 100% rename from feature/settings/src/main/java/com/mifos/feature/settings/syncSurvey/SyncSurveysDialogRepositoryImp.kt rename to feature/settings/src/commonMain/kotlin/com/mifos/feature/settings/syncSurvey/SyncSurveysDialogRepositoryImp.kt diff --git a/feature/settings/src/main/java/com/mifos/feature/settings/syncSurvey/SyncSurveysDialogUiState.kt b/feature/settings/src/commonMain/kotlin/com/mifos/feature/settings/syncSurvey/SyncSurveysDialogUiState.kt similarity index 100% rename from feature/settings/src/main/java/com/mifos/feature/settings/syncSurvey/SyncSurveysDialogUiState.kt rename to feature/settings/src/commonMain/kotlin/com/mifos/feature/settings/syncSurvey/SyncSurveysDialogUiState.kt diff --git a/feature/settings/src/main/java/com/mifos/feature/settings/syncSurvey/SyncSurveysDialogViewModel.kt b/feature/settings/src/commonMain/kotlin/com/mifos/feature/settings/syncSurvey/SyncSurveysDialogViewModel.kt similarity index 100% rename from feature/settings/src/main/java/com/mifos/feature/settings/syncSurvey/SyncSurveysDialogViewModel.kt rename to feature/settings/src/commonMain/kotlin/com/mifos/feature/settings/syncSurvey/SyncSurveysDialogViewModel.kt diff --git a/feature/settings/src/main/java/com/mifos/feature/settings/updateServer/UpdateServerConfigEvent.kt b/feature/settings/src/commonMain/kotlin/com/mifos/feature/settings/updateServer/UpdateServerConfigEvent.kt similarity index 100% rename from feature/settings/src/main/java/com/mifos/feature/settings/updateServer/UpdateServerConfigEvent.kt rename to feature/settings/src/commonMain/kotlin/com/mifos/feature/settings/updateServer/UpdateServerConfigEvent.kt diff --git a/feature/settings/src/main/java/com/mifos/feature/settings/updateServer/UpdateServerConfigScreen.kt b/feature/settings/src/commonMain/kotlin/com/mifos/feature/settings/updateServer/UpdateServerConfigScreen.kt similarity index 88% rename from feature/settings/src/main/java/com/mifos/feature/settings/updateServer/UpdateServerConfigScreen.kt rename to feature/settings/src/commonMain/kotlin/com/mifos/feature/settings/updateServer/UpdateServerConfigScreen.kt index 2eea248b69..d73df0f834 100644 --- a/feature/settings/src/main/java/com/mifos/feature/settings/updateServer/UpdateServerConfigScreen.kt +++ b/feature/settings/src/commonMain/kotlin/com/mifos/feature/settings/updateServer/UpdateServerConfigScreen.kt @@ -27,11 +27,8 @@ import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.rememberLazyListState import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.AddLink import androidx.compose.material.icons.filled.Close import androidx.compose.material.icons.filled.Info -import androidx.compose.material.icons.filled.Link -import androidx.compose.material.icons.filled.Save import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.ElevatedButton import androidx.compose.material3.Icon @@ -45,7 +42,6 @@ import androidx.compose.runtime.getValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color -import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.input.KeyboardType import androidx.compose.ui.text.style.TextOverflow @@ -54,8 +50,9 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.mifos.core.common.utils.ServerConfig import com.mifos.core.designsystem.component.MifosOutlinedTextField import com.mifos.core.ui.util.DevicePreview -import com.mifos.feature.settings.R -import org.koin.androidx.compose.koinViewModel +import core.designsystem.generated.resources.Res +import org.jetbrains.compose.resources.stringResource +import org.koin.compose.viewmodel.koinViewModel @Composable internal fun UpdateServerConfigScreenRoute( @@ -138,7 +135,7 @@ internal fun UpdateServerConfigScreenContent( verticalAlignment = Alignment.CenterVertically, ) { Text( - text = stringResource(R.string.feature_settings_title), + text = stringResource(Res.string.feature_settings_title), style = MaterialTheme.typography.headlineSmall, fontWeight = FontWeight.SemiBold, maxLines = 1, @@ -152,7 +149,7 @@ internal fun UpdateServerConfigScreenContent( ) { Icon( imageVector = Icons.Default.Close, - contentDescription = stringResource(R.string.feature_settings_close_bottomsheet), + contentDescription = stringResource(Res.string.feature_settings_close_bottomsheet), ) } } @@ -168,11 +165,11 @@ internal fun UpdateServerConfigScreenContent( item { MifosOutlinedTextField( value = serverConfig.protocol, - label = stringResource(R.string.feature_settings_label_protocol), + label = stringResource(Res.string.feature_settings_label_protocol), leadingIcon = Icons.Default.AddLink, isError = protocolError != null, errorText = protocolError?.let { stringResource(it) }, - placeholder = stringResource(R.string.feature_settings_protocol_placeholder), + placeholder = stringResource(Res.string.feature_settings_protocol_placeholder), keyboardType = KeyboardType.Uri, showClearIcon = serverConfig.protocol.isNotEmpty(), onClickClearIcon = { @@ -187,11 +184,11 @@ internal fun UpdateServerConfigScreenContent( item { MifosOutlinedTextField( value = serverConfig.endPoint, - label = stringResource(R.string.feature_settings_label_endpoint), + label = stringResource(Res.string.feature_settings_label_endpoint), leadingIcon = Icons.Default.Link, isError = endPointError != null, errorText = endPointError?.let { stringResource(it) }, - placeholder = stringResource(R.string.feature_settings_endpoint_placeholder), + placeholder = stringResource(Res.string.feature_settings_endpoint_placeholder), showClearIcon = serverConfig.endPoint.isNotEmpty(), onClickClearIcon = { onEvent(UpdateServerConfigEvent.UpdateEndPoint("")) @@ -205,11 +202,11 @@ internal fun UpdateServerConfigScreenContent( item { MifosOutlinedTextField( value = serverConfig.apiPath, - label = stringResource(R.string.feature_settings_label_api_path), + label = stringResource(Res.string.feature_settings_label_api_path), leadingIcon = Icons.Default.Link, isError = apiPathError != null, errorText = apiPathError?.let { stringResource(it) }, - placeholder = stringResource(R.string.feature_settings_api_path_placeholder), + placeholder = stringResource(Res.string.feature_settings_api_path_placeholder), showClearIcon = serverConfig.endPoint.isNotEmpty(), onClickClearIcon = { onEvent(UpdateServerConfigEvent.UpdateEndPoint("")) @@ -223,11 +220,11 @@ internal fun UpdateServerConfigScreenContent( item { MifosOutlinedTextField( value = serverConfig.port, - label = stringResource(R.string.feature_settings_label_port), + label = stringResource(Res.string.feature_settings_label_port), leadingIcon = Icons.Default.Link, isError = portError != null, errorText = portError?.let { stringResource(it) }, - placeholder = stringResource(R.string.feature_settings_port_placeholder), + placeholder = stringResource(Res.string.feature_settings_port_placeholder), keyboardType = KeyboardType.Number, showClearIcon = serverConfig.port.isNotEmpty(), onClickClearIcon = { @@ -242,11 +239,11 @@ internal fun UpdateServerConfigScreenContent( item { MifosOutlinedTextField( value = serverConfig.tenant, - label = stringResource(R.string.feature_settings_label_tenant), + label = stringResource(Res.string.feature_settings_label_tenant), leadingIcon = Icons.Default.Link, isError = tenantError != null, errorText = tenantError?.let { stringResource(it) }, - placeholder = stringResource(R.string.feature_settings_tenant_placeholder), + placeholder = stringResource(Res.string.feature_settings_tenant_placeholder), showClearIcon = serverConfig.tenant.isNotEmpty(), onClickClearIcon = { onEvent(UpdateServerConfigEvent.UpdateTenant("")) @@ -271,7 +268,7 @@ internal fun UpdateServerConfigScreenContent( ) Text( - text = stringResource(R.string.feature_settings_note_text), + text = stringResource(Res.string.feature_settings_note_text), style = MaterialTheme.typography.labelSmall, ) } @@ -297,7 +294,7 @@ internal fun UpdateServerConfigScreenContent( contentDescription = "updateConfig", ) Spacer(modifier = Modifier.width(4.dp)) - Text(stringResource(R.string.feature_settings_update_config_btn_text).uppercase()) + Text(stringResource(Res.string.feature_settings_update_config_btn_text).uppercase()) } } } diff --git a/feature/settings/src/main/java/com/mifos/feature/settings/updateServer/UpdateServerConfigViewModel.kt b/feature/settings/src/commonMain/kotlin/com/mifos/feature/settings/updateServer/UpdateServerConfigViewModel.kt similarity index 100% rename from feature/settings/src/main/java/com/mifos/feature/settings/updateServer/UpdateServerConfigViewModel.kt rename to feature/settings/src/commonMain/kotlin/com/mifos/feature/settings/updateServer/UpdateServerConfigViewModel.kt diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index b12926d162..9121c0b848 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -181,6 +181,8 @@ packageName = "AndroidClient" packageNamespace = "org.mifos.client.desktop" packageVersion = "1.0.0" material3Android = "1.3.1" +uiAndroid = "1.8.0" +material3AndroidVersion = "1.3.2" [libraries] @@ -542,6 +544,8 @@ moko-permission-compose = { group = "dev.icerock.moko", name = "permissions-comp window-size = { group = "dev.chrisbanes.material3", name = "material3-window-size-class-multiplatform", version.ref = "windowsSizeClass" } androidx-material3-android = { group = "androidx.compose.material3", name = "material3-android", version.ref = "material3Android" } +androidx-ui-android = { group = "androidx.compose.ui", name = "ui-android", version.ref = "uiAndroid" } +material3-android = { group = "androidx.compose.material3", name = "material3-android", version.ref = "material3AndroidVersion" } [plugins]