diff --git a/build-logic/convention/src/main/kotlin/CMPFeatureConventionPlugin.kt b/build-logic/convention/src/main/kotlin/CMPFeatureConventionPlugin.kt index 9096643537..84784f96e2 100644 --- a/build-logic/convention/src/main/kotlin/CMPFeatureConventionPlugin.kt +++ b/build-logic/convention/src/main/kotlin/CMPFeatureConventionPlugin.kt @@ -17,7 +17,7 @@ class CMPFeatureConventionPlugin : Plugin { dependencies { add("commonMainImplementation", project(":core:ui")) add("commonMainImplementation", project(":core:designsystem")) - add("commonMainImplementation", project(":core:data")) + add("commonMainImplementation", project(":core:data")) add("commonMainImplementation", libs.findLibrary("koin.compose").get()) add("commonMainImplementation", libs.findLibrary("koin.compose.viewmodel").get()) diff --git a/cmp-navigation/build.gradle.kts b/cmp-navigation/build.gradle.kts index 24924f6c21..847981c9aa 100644 --- a/cmp-navigation/build.gradle.kts +++ b/cmp-navigation/build.gradle.kts @@ -30,7 +30,7 @@ kotlin { implementation(projects.core.database) implementation(projects.core.network) -// implementation(projects.feature.about) + implementation(projects.feature.about) // implementation(projects.feature.activate) implementation(projects.feature.auth) // implementation(projects.feature.center) diff --git a/cmp-navigation/src/commonMain/kotlin/cmp/navigation/navigation/FeatureNavHost.kt b/cmp-navigation/src/commonMain/kotlin/cmp/navigation/navigation/FeatureNavHost.kt index b6dc1afdc0..61db741459 100644 --- a/cmp-navigation/src/commonMain/kotlin/cmp/navigation/navigation/FeatureNavHost.kt +++ b/cmp-navigation/src/commonMain/kotlin/cmp/navigation/navigation/FeatureNavHost.kt @@ -22,6 +22,7 @@ import androidx.navigation.NavGraphBuilder import androidx.navigation.compose.NavHost import androidx.navigation.compose.composable import cmp.navigation.AppState +import com.mifos.feature.about.navigation.aboutNavGraph const val WELCOME_ROUTE = "home_route" @@ -38,6 +39,8 @@ internal fun FeatureNavHost( modifier = modifier, ) { homeScreen() + + aboutNavGraph(onBackPressed = appState.navController::popBackStack) } } diff --git a/feature/about/build.gradle.kts b/feature/about/build.gradle.kts index 93f6acb9f6..e281bb9572 100644 --- a/feature/about/build.gradle.kts +++ b/feature/about/build.gradle.kts @@ -8,17 +8,19 @@ * 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.about" } -dependencies { -// testImplementation(libs.hilt.android.testing) -// testImplementation(projects.core.testing) -// androidTestImplementation(projects.core.testing) +kotlin { + sourceSets { + commonMain.dependencies { + implementation(compose.material3) + implementation(compose.components.resources) + implementation(compose.ui) + } + } } \ No newline at end of file diff --git a/feature/about/src/main/AndroidManifest.xml b/feature/about/src/androidMain/AndroidManifest.xml similarity index 100% rename from feature/about/src/main/AndroidManifest.xml rename to feature/about/src/androidMain/AndroidManifest.xml diff --git a/feature/about/src/main/res/drawable/feature_about_ic_launcher.png b/feature/about/src/commonMain/composeResources/drawable/feature_about_ic_launcher.png similarity index 100% rename from feature/about/src/main/res/drawable/feature_about_ic_launcher.png rename to feature/about/src/commonMain/composeResources/drawable/feature_about_ic_launcher.png diff --git a/feature/about/src/main/res/drawable/feature_about_ic_source_code.xml b/feature/about/src/commonMain/composeResources/drawable/feature_about_ic_source_code.xml similarity index 100% rename from feature/about/src/main/res/drawable/feature_about_ic_source_code.xml rename to feature/about/src/commonMain/composeResources/drawable/feature_about_ic_source_code.xml diff --git a/feature/about/src/main/res/drawable/feature_about_ic_website.xml b/feature/about/src/commonMain/composeResources/drawable/feature_about_ic_website.xml similarity index 100% rename from feature/about/src/main/res/drawable/feature_about_ic_website.xml rename to feature/about/src/commonMain/composeResources/drawable/feature_about_ic_website.xml diff --git a/feature/about/src/main/res/drawable/feature_about_icon_twitter.xml b/feature/about/src/commonMain/composeResources/drawable/feature_about_icon_twitter.xml similarity index 100% rename from feature/about/src/main/res/drawable/feature_about_icon_twitter.xml rename to feature/about/src/commonMain/composeResources/drawable/feature_about_icon_twitter.xml diff --git a/feature/about/src/main/res/values/strings.xml b/feature/about/src/commonMain/composeResources/values/strings.xml similarity index 100% rename from feature/about/src/main/res/values/strings.xml rename to feature/about/src/commonMain/composeResources/values/strings.xml diff --git a/feature/about/src/commonMain/kotlin/com/mifos/feature/about/AboutData.kt b/feature/about/src/commonMain/kotlin/com/mifos/feature/about/AboutData.kt new file mode 100644 index 0000000000..878bc1ef65 --- /dev/null +++ b/feature/about/src/commonMain/kotlin/com/mifos/feature/about/AboutData.kt @@ -0,0 +1,50 @@ +/* + * Copyright 2025 Mifos Initiative + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + * + * See https://github.com/openMF/android-client/blob/master/LICENSE.md + */ +package com.mifos.feature.about + +import androidclient.feature.about.generated.resources.Res +import androidclient.feature.about.generated.resources.feature_about_app_version +import androidclient.feature.about.generated.resources.feature_about_ic_source_code +import androidclient.feature.about.generated.resources.feature_about_ic_website +import androidclient.feature.about.generated.resources.feature_about_icon_twitter +import androidclient.feature.about.generated.resources.feature_about_license +import androidclient.feature.about.generated.resources.feature_about_license_sub +import androidclient.feature.about.generated.resources.feature_about_support_github +import androidclient.feature.about.generated.resources.feature_about_support_twitter +import androidclient.feature.about.generated.resources.feature_about_website + +val aboutItems = listOf( + AboutItem( + icon = null, + title = Res.string.feature_about_app_version, + id = AboutItems.APP_VERSION, + ), + AboutItem( + icon = Res.drawable.feature_about_ic_website, + title = Res.string.feature_about_website, + id = AboutItems.OFFICIAL_WEBSITE, + ), + AboutItem( + icon = Res.drawable.feature_about_icon_twitter, + title = Res.string.feature_about_support_twitter, + id = AboutItems.TWITTER, + ), + AboutItem( + icon = Res.drawable.feature_about_ic_source_code, + title = Res.string.feature_about_support_github, + id = AboutItems.SOURCE_CODE, + ), + AboutItem( + icon = null, + title = Res.string.feature_about_license, + subtitle = Res.string.feature_about_license_sub, + id = AboutItems.LICENSE, + ), +) diff --git a/feature/about/src/main/java/com/mifos/feature/about/AboutItem.kt b/feature/about/src/commonMain/kotlin/com/mifos/feature/about/AboutItem.kt similarity index 53% rename from feature/about/src/main/java/com/mifos/feature/about/AboutItem.kt rename to feature/about/src/commonMain/kotlin/com/mifos/feature/about/AboutItem.kt index 9d67d99e6a..94dac6f736 100644 --- a/feature/about/src/main/java/com/mifos/feature/about/AboutItem.kt +++ b/feature/about/src/commonMain/kotlin/com/mifos/feature/about/AboutItem.kt @@ -10,11 +10,22 @@ package com.mifos.feature.about import androidx.compose.ui.graphics.Color +import org.jetbrains.compose.resources.DrawableResource +import org.jetbrains.compose.resources.StringResource data class AboutItem( - val icon: Int?, - val title: Int, - val subtitle: Int?, - val color: Color, + val icon: DrawableResource? = null, + val title: StringResource, + val subtitle: StringResource? = null, + val color: Color? = null, val id: AboutItems, ) + +enum class AboutItems { + CONTRIBUTIONS, + APP_VERSION, + OFFICIAL_WEBSITE, + TWITTER, + SOURCE_CODE, + LICENSE, +} diff --git a/feature/about/src/commonMain/kotlin/com/mifos/feature/about/AboutScreen.kt b/feature/about/src/commonMain/kotlin/com/mifos/feature/about/AboutScreen.kt new file mode 100644 index 0000000000..80a91407c1 --- /dev/null +++ b/feature/about/src/commonMain/kotlin/com/mifos/feature/about/AboutScreen.kt @@ -0,0 +1,152 @@ +/* + * Copyright 2025 Mifos Initiative + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + * + * See https://github.com/openMF/android-client/blob/master/LICENSE.md + */ +package com.mifos.feature.about + +import androidclient.feature.about.generated.resources.Res +import androidclient.feature.about.generated.resources.feature_about +import androidclient.feature.about.generated.resources.feature_about_app +import androidclient.feature.about.generated.resources.feature_about_ic_launcher +import androidclient.feature.about.generated.resources.feature_about_mifos +import androidclient.feature.about.generated.resources.feature_about_mifos_x_droid +import androidx.compose.foundation.Image +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.foundation.lazy.items +import androidx.compose.material3.CardDefaults +import androidx.compose.material3.ElevatedCard +import androidx.compose.material3.Icon +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.SnackbarHostState +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.unit.dp +import com.mifos.core.designsystem.component.MifosScaffold +import com.mifos.core.designsystem.theme.aboutItemTextStyle +import com.mifos.core.designsystem.theme.aboutItemTextStyleBold +import com.mifos.core.ui.util.ShareUtils +import org.jetbrains.compose.resources.painterResource +import org.jetbrains.compose.resources.stringResource + +@Composable +internal fun AboutScreen( + onBackPressed: () -> Unit, +) { + MifosScaffold( + title = stringResource(Res.string.feature_about), + onBackPressed = onBackPressed, + snackbarHostState = remember { SnackbarHostState() }, + ) { paddingValues -> + LazyColumn( + modifier = Modifier + .padding(paddingValues), + horizontalAlignment = Alignment.CenterHorizontally, + ) { + item { + Box(modifier = Modifier.fillMaxWidth()) { + Image( + modifier = Modifier.size(100.dp).align(Alignment.Center), + painter = painterResource(Res.drawable.feature_about_ic_launcher), + contentDescription = "App icon", + ) + } + + Text( + modifier = Modifier + .fillMaxWidth() + .padding(16.dp), + text = stringResource(Res.string.feature_about_mifos_x_droid), + style = aboutItemTextStyleBold, + ) + Text( + modifier = Modifier + .fillMaxWidth() + .padding(start = 16.dp, end = 16.dp), + text = stringResource(Res.string.feature_about_app), + style = aboutItemTextStyle, + ) + Text( + modifier = Modifier + .fillMaxWidth() + .padding(16.dp) + .clickable { + ShareUtils.openUrl("https://github.com/openMF/android-client/graphs/contributors") + }, + text = stringResource(Res.string.feature_about_mifos), + style = MaterialTheme.typography.bodyMedium, + textAlign = TextAlign.Center, + ) + } + items(aboutItems) { about -> + AboutCardItem(about = about) { + when (it) { + AboutItems.CONTRIBUTIONS -> ShareUtils.openUrl("https://github.com/openMF/android-client/graphs/contributors") + AboutItems.APP_VERSION -> Unit + AboutItems.OFFICIAL_WEBSITE -> ShareUtils.openUrl("https://openmf.github.io/mobileapps.github.io/") + AboutItems.TWITTER -> ShareUtils.openUrl("https://twitter.com/mifos") + AboutItems.SOURCE_CODE -> ShareUtils.openUrl("https://github.com/openMF/android-client") + AboutItems.LICENSE -> ShareUtils.openUrl("https://github.com/openMF/android-client/blob/master/LICENSE.md") + } + } + } + } + } +} + +@Composable +private fun AboutCardItem( + about: AboutItem, + onOptionClick: (AboutItems) -> Unit, +) { + ElevatedCard( + modifier = Modifier.padding(horizontal = 16.dp, vertical = 8.dp), + elevation = CardDefaults.elevatedCardElevation(0.dp), + onClick = { onOptionClick(about.id) }, + ) { + Row( + modifier = Modifier.padding(16.dp), + verticalAlignment = Alignment.CenterVertically, + ) { + about.icon?.let { + Icon( + painter = painterResource(it), + contentDescription = stringResource(about.title), + ) + } + Column { + Text( + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = 16.dp), + text = stringResource(about.title), + style = MaterialTheme.typography.titleMedium, + ) + about.subtitle?.let { + Text( + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = 16.dp), + text = stringResource(it), + style = MaterialTheme.typography.bodyMedium, + ) + } + } + } + } +} diff --git a/feature/about/src/main/java/com/mifos/feature/about/AboutUiState.kt b/feature/about/src/commonMain/kotlin/com/mifos/feature/about/AboutUiState.kt similarity index 80% rename from feature/about/src/main/java/com/mifos/feature/about/AboutUiState.kt rename to feature/about/src/commonMain/kotlin/com/mifos/feature/about/AboutUiState.kt index 50b6df6fd9..d836a1c1fc 100644 --- a/feature/about/src/main/java/com/mifos/feature/about/AboutUiState.kt +++ b/feature/about/src/commonMain/kotlin/com/mifos/feature/about/AboutUiState.kt @@ -9,11 +9,13 @@ */ package com.mifos.feature.about +import org.jetbrains.compose.resources.StringResource + sealed class AboutUiState { data object Loading : AboutUiState() - data class Error(val message: Int) : AboutUiState() + data class Error(val message: StringResource) : AboutUiState() data class AboutOptions(val aboutOptions: List) : AboutUiState() } diff --git a/feature/about/src/main/java/com/mifos/feature/about/navigation/AboutScreens.kt b/feature/about/src/commonMain/kotlin/com/mifos/feature/about/navigation/AboutScreens.kt similarity index 100% rename from feature/about/src/main/java/com/mifos/feature/about/navigation/AboutScreens.kt rename to feature/about/src/commonMain/kotlin/com/mifos/feature/about/navigation/AboutScreens.kt diff --git a/feature/about/src/main/java/com/mifos/feature/about/navigation/AccountNavigation.kt b/feature/about/src/commonMain/kotlin/com/mifos/feature/about/navigation/AccountNavigation.kt similarity index 81% rename from feature/about/src/main/java/com/mifos/feature/about/navigation/AccountNavigation.kt rename to feature/about/src/commonMain/kotlin/com/mifos/feature/about/navigation/AccountNavigation.kt index edfa9e7a0a..e9dd696e9e 100644 --- a/feature/about/src/main/java/com/mifos/feature/about/navigation/AccountNavigation.kt +++ b/feature/about/src/commonMain/kotlin/com/mifos/feature/about/navigation/AccountNavigation.kt @@ -9,6 +9,7 @@ */ package com.mifos.feature.about.navigation +import androidx.navigation.NavController import androidx.navigation.NavGraphBuilder import androidx.navigation.compose.composable import com.mifos.feature.about.AboutScreen @@ -16,7 +17,11 @@ import com.mifos.feature.about.AboutScreen /** * Created by Pronay Sarker on 10/08/2024 (7:56 AM) */ -fun NavGraphBuilder.aboutScreen( +fun NavController.navigateToAboutScreen() { + navigate(AboutScreens.AboutScreen.route) +} + +fun NavGraphBuilder.aboutNavGraph( onBackPressed: () -> Unit, ) { composable(AboutScreens.AboutScreen.route) { diff --git a/feature/about/src/main/java/com/mifos/feature/about/AboutScreen.kt b/feature/about/src/main/java/com/mifos/feature/about/AboutScreen.kt deleted file mode 100644 index a4f1eae17f..0000000000 --- a/feature/about/src/main/java/com/mifos/feature/about/AboutScreen.kt +++ /dev/null @@ -1,257 +0,0 @@ -/* - * Copyright 2024 Mifos Initiative - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. - * - * See https://github.com/openMF/android-client/blob/master/LICENSE.md - */ -package com.mifos.feature.about - -import androidx.compose.foundation.Image -import androidx.compose.foundation.clickable -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.size -import androidx.compose.foundation.lazy.LazyColumn -import androidx.compose.foundation.lazy.items -import androidx.compose.material3.CardDefaults -import androidx.compose.material3.ElevatedCard -import androidx.compose.material3.Icon -import androidx.compose.material3.SnackbarHostState -import androidx.compose.material3.Text -import androidx.compose.runtime.Composable -import androidx.compose.runtime.LaunchedEffect -import androidx.compose.runtime.getValue -import androidx.compose.runtime.remember -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.Color -import androidx.compose.ui.graphics.Color.Companion.Black -import androidx.compose.ui.graphics.Color.Companion.White -import androidx.compose.ui.platform.LocalUriHandler -import androidx.compose.ui.res.painterResource -import androidx.compose.ui.res.stringResource -import androidx.compose.ui.text.TextStyle -import androidx.compose.ui.text.style.TextAlign -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.unit.sp -import androidx.lifecycle.compose.collectAsStateWithLifecycle -import com.mifos.core.designsystem.component.MifosCircularProgress -import com.mifos.core.designsystem.component.MifosScaffold -import com.mifos.core.designsystem.component.MifosSweetError -import com.mifos.core.designsystem.theme.aboutItemTextStyle -import com.mifos.core.designsystem.theme.aboutItemTextStyleBold -import org.koin.androidx.compose.koinViewModel - -@Composable -internal fun AboutScreen( - onBackPressed: () -> Unit, - viewModel: AboutViewModel = koinViewModel(), -) { - val state by viewModel.aboutUiState.collectAsStateWithLifecycle() - val uriHandler = LocalUriHandler.current - - LaunchedEffect(Unit) { - viewModel.getAboutOptions() - } - - AboutScreen( - state = state, - onBackPressed = onBackPressed, - onRetry = { viewModel.getAboutOptions() }, - onOptionClick = { - when (it) { - AboutItems.CONTRIBUTIONS -> uriHandler.openUri("https://github.com/openMF/android-client/graphs/contributors") - - AboutItems.APP_VERSION -> Unit - - AboutItems.OFFICIAL_WEBSITE -> uriHandler.openUri("https://openmf.github.io/mobileapps.github.io/") - - AboutItems.TWITTER -> uriHandler.openUri("https://twitter.com/mifos") - - AboutItems.SOURCE_CODE -> uriHandler.openUri("https://github.com/openMF/android-client") - - AboutItems.LICENSE -> uriHandler.openUri("https://github.com/openMF/android-client/blob/master/LICENSE.md") - } - }, - ) -} - -@Composable -internal fun AboutScreen( - state: AboutUiState, - onBackPressed: () -> Unit, - onRetry: () -> Unit, - onOptionClick: (AboutItems) -> Unit, -) { - val snackbarHostState = remember { SnackbarHostState() } - - MifosScaffold( - title = stringResource(R.string.feature_about), - onBackPressed = onBackPressed, - snackbarHostState = snackbarHostState, - ) { paddingValues -> - Column( - modifier = Modifier.padding(paddingValues), - horizontalAlignment = Alignment.CenterHorizontally, - ) { - when (state) { - is AboutUiState.AboutOptions -> { - AboutScreenContent( - aboutOptions = state.aboutOptions, - onOptionClick = onOptionClick, - ) - } - - is AboutUiState.Error -> MifosSweetError(message = stringResource(id = state.message)) { - onRetry() - } - - is AboutUiState.Loading -> MifosCircularProgress() - } - } - } -} - -@Composable -private fun AboutScreenContent( - aboutOptions: List, - onOptionClick: (AboutItems) -> Unit, -) { - Column { - Image( - modifier = Modifier.size(100.dp), - painter = painterResource(id = R.drawable.feature_about_ic_launcher), - contentDescription = null, - ) - Text( - modifier = Modifier - .fillMaxWidth() - .padding(16.dp), - text = stringResource(id = R.string.feature_about_mifos_x_droid), - style = aboutItemTextStyleBold, - ) - Text( - modifier = Modifier - .fillMaxWidth() - .padding(start = 16.dp, end = 16.dp), - text = stringResource(id = R.string.feature_about_app), - style = aboutItemTextStyle, - ) - Text( - modifier = Modifier - .fillMaxWidth() - .padding(16.dp) - .clickable { - onOptionClick(AboutItems.CONTRIBUTIONS) - }, - text = stringResource(id = R.string.feature_about_mifos), - style = TextStyle( - fontSize = 16.sp, - ), - color = Color.Blue, - textAlign = TextAlign.Center, - ) - LazyColumn { - items(aboutOptions) { about -> - AboutCardItem(about = about, onOptionClick = onOptionClick) - } - } - } -} - -@Composable -private fun AboutCardItem( - about: AboutItem, - onOptionClick: (AboutItems) -> Unit, -) { - ElevatedCard( - modifier = Modifier.padding( - start = 16.dp, - end = 16.dp, - top = 8.dp, - bottom = 8.dp, - ), - elevation = CardDefaults.elevatedCardElevation(0.dp), - colors = CardDefaults.elevatedCardColors(about.color), - onClick = { - onOptionClick(about.id) - }, - ) { - Row( - modifier = Modifier.padding(16.dp), - verticalAlignment = Alignment.CenterVertically, - ) { - about.icon?.let { - Icon( - painter = painterResource(it), - contentDescription = null, - ) - } - Column { - Text( - modifier = Modifier - .fillMaxWidth() - .padding(start = 16.dp, end = 16.dp), - text = stringResource(id = about.title), - style = TextStyle( - fontSize = 16.sp, - ), - color = Black, - ) - about.subtitle?.let { - Text( - modifier = Modifier - .fillMaxWidth() - .padding(start = 16.dp, end = 16.dp), - text = stringResource(id = it), - style = TextStyle( - fontSize = 16.sp, - ), - color = Black, - ) - } - } - } - } -} - -private class AboutUiStateProvider : PreviewParameterProvider { - - override val values: Sequence - get() = sequenceOf( - AboutUiState.Loading, - AboutUiState.Error(R.string.feature_about_failed_to_load), - AboutUiState.AboutOptions(sampleAboutItem), - ) -} - -@Preview(showBackground = true) -@Composable -private fun AboutScreenPreview( - @PreviewParameter(AboutUiStateProvider::class) state: AboutUiState, -) { - AboutScreen( - state = state, - onBackPressed = {}, - onRetry = {}, - onOptionClick = {}, - ) -} - -val sampleAboutItem = List(4) { - AboutItem( - icon = R.drawable.feature_about_icon_twitter, - title = R.string.feature_about_support_twitter, - subtitle = R.string.feature_about_license_sub, - color = White, - id = AboutItems.TWITTER, - ) -} diff --git a/feature/about/src/main/java/com/mifos/feature/about/AboutViewModel.kt b/feature/about/src/main/java/com/mifos/feature/about/AboutViewModel.kt deleted file mode 100644 index 45306e15f3..0000000000 --- a/feature/about/src/main/java/com/mifos/feature/about/AboutViewModel.kt +++ /dev/null @@ -1,78 +0,0 @@ -/* - * Copyright 2024 Mifos Initiative - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. - * - * See https://github.com/openMF/android-client/blob/master/LICENSE.md - */ -package com.mifos.feature.about - -import androidx.compose.ui.graphics.Color -import androidx.compose.ui.graphics.Color.Companion.White -import androidx.lifecycle.ViewModel -import androidx.lifecycle.viewModelScope -import kotlinx.coroutines.flow.MutableStateFlow -import kotlinx.coroutines.flow.asStateFlow -import kotlinx.coroutines.launch - -class AboutViewModel : ViewModel() { - - private val _aboutUiState = MutableStateFlow(AboutUiState.Loading) - val aboutUiState = _aboutUiState.asStateFlow() - - fun getAboutOptions() = viewModelScope.launch { - try { - val options = listOf( - AboutItem( - icon = null, - title = R.string.feature_about_app_version, - subtitle = null, - color = Color.Blue, - id = AboutItems.APP_VERSION, - ), - AboutItem( - icon = R.drawable.feature_about_ic_website, - title = R.string.feature_about_website, - subtitle = null, - color = White, - id = AboutItems.OFFICIAL_WEBSITE, - ), - AboutItem( - icon = R.drawable.feature_about_icon_twitter, - title = R.string.feature_about_support_twitter, - subtitle = null, - color = White, - id = AboutItems.TWITTER, - ), - AboutItem( - icon = R.drawable.feature_about_ic_source_code, - title = R.string.feature_about_support_github, - subtitle = null, - color = White, - id = AboutItems.SOURCE_CODE, - ), - AboutItem( - icon = null, - title = R.string.feature_about_license, - subtitle = R.string.feature_about_license_sub, - color = Color.Blue, - id = AboutItems.LICENSE, - ), - ) - _aboutUiState.value = AboutUiState.AboutOptions(options) - } catch (exception: Exception) { - _aboutUiState.value = AboutUiState.Error(R.string.feature_about_failed_to_load) - } - } -} - -enum class AboutItems { - CONTRIBUTIONS, - APP_VERSION, - OFFICIAL_WEBSITE, - TWITTER, - SOURCE_CODE, - LICENSE, -} diff --git a/feature/about/src/main/java/com/mifos/feature/about/di/AboutModule.kt b/feature/about/src/main/java/com/mifos/feature/about/di/AboutModule.kt deleted file mode 100644 index 3184f2cce5..0000000000 --- a/feature/about/src/main/java/com/mifos/feature/about/di/AboutModule.kt +++ /dev/null @@ -1,18 +0,0 @@ -/* - * Copyright 2025 Mifos Initiative - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. - * - * See https://github.com/openMF/android-client/blob/master/LICENSE.md - */ -package com.mifos.feature.about.di - -import com.mifos.feature.about.AboutViewModel -import org.koin.core.module.dsl.viewModelOf -import org.koin.dsl.module - -val AboutModule = module { - viewModelOf(::AboutViewModel) -} diff --git a/settings.gradle.kts b/settings.gradle.kts index 7614a1869a..320431e849 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -45,7 +45,7 @@ include(":core:ui") //include(":libs:pullrefresh") //include(":libs:mifos-passcode") -////include(":feature:about") +include(":feature:about") //include(":feature:activate") include(":feature:auth") //include(":feature:center")