From 1704351eab8aa3d28fbf082908ab998aa37f07e5 Mon Sep 17 00:00:00 2001 From: Sk Niyaj Ali Date: Fri, 30 Aug 2024 10:35:56 -0700 Subject: [PATCH] Apply & Fix Detekt, Ktlint Rules in About Module (#2676) Jira Tasks - [MM-63](https://mifosforge.jira.com/browse/MM-63) --- feature/about/build.gradle.kts | 14 ++++--- .../feature/about/ExampleInstrumentedTest.kt | 24 ----------- feature/about/src/main/AndroidManifest.xml | 11 ++++- .../feature/about/navigation/AboutNavGraph.kt | 34 +++++++++------ .../about/navigation/AboutNavigation.kt | 11 ++++- .../mobile/feature/about/ui/AboutUsHeader.kt | 27 ++++++++---- .../mobile/feature/about/ui/AboutUsScreen.kt | 41 +++++++++++-------- .../feature/about/ui/PrivacyPolicyScreen.kt | 41 ++++++++++++++----- .../src/main/res/drawable/ic_law_icon.xml | 10 +++++ .../main/res/drawable/ic_privacy_policy.xml | 10 +++++ .../src/main/res/drawable/ic_source_code.xml | 9 ++++ .../src/main/res/drawable/ic_website.xml | 9 ++++ feature/about/src/main/res/values/strings.xml | 9 ++++ .../mobile/feature/about/ExampleUnitTest.kt | 17 -------- 14 files changed, 172 insertions(+), 95 deletions(-) delete mode 100644 feature/about/src/androidTest/java/org/mifos/mobile/feature/about/ExampleInstrumentedTest.kt delete mode 100644 feature/about/src/test/java/org/mifos/mobile/feature/about/ExampleUnitTest.kt diff --git a/feature/about/build.gradle.kts b/feature/about/build.gradle.kts index 667370106..02a961385 100644 --- a/feature/about/build.gradle.kts +++ b/feature/about/build.gradle.kts @@ -1,7 +1,15 @@ +/* + * 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/mobile-mobile/blob/master/LICENSE.md + */ plugins { alias(libs.plugins.mifos.android.feature) alias(libs.plugins.mifos.android.library.compose) - alias(libs.plugins.kotlin.parcelize) } android { @@ -10,8 +18,4 @@ android { dependencies { implementation(projects.core.model) - - testImplementation(libs.junit) - androidTestImplementation(libs.androidx.test.ext.junit) - androidTestImplementation(libs.espresso.core) } \ No newline at end of file diff --git a/feature/about/src/androidTest/java/org/mifos/mobile/feature/about/ExampleInstrumentedTest.kt b/feature/about/src/androidTest/java/org/mifos/mobile/feature/about/ExampleInstrumentedTest.kt deleted file mode 100644 index a55a186f3..000000000 --- a/feature/about/src/androidTest/java/org/mifos/mobile/feature/about/ExampleInstrumentedTest.kt +++ /dev/null @@ -1,24 +0,0 @@ -package org.mifos.mobile.feature.about - -import androidx.test.platform.app.InstrumentationRegistry -import androidx.test.ext.junit.runners.AndroidJUnit4 - -import org.junit.Test -import org.junit.runner.RunWith - -import org.junit.Assert.* - -/** - * Instrumented test, which will execute on an Android device. - * - * See [testing documentation](http://d.android.com/tools/testing). - */ -@RunWith(AndroidJUnit4::class) -class ExampleInstrumentedTest { - @Test - fun useAppContext() { - // Context of the app under test. - val appContext = InstrumentationRegistry.getInstrumentation().targetContext - assertEquals("org.mifos.mobile.feature.about.test", appContext.packageName) - } -} \ No newline at end of file diff --git a/feature/about/src/main/AndroidManifest.xml b/feature/about/src/main/AndroidManifest.xml index a5918e68a..4ee22a4fb 100644 --- a/feature/about/src/main/AndroidManifest.xml +++ b/feature/about/src/main/AndroidManifest.xml @@ -1,4 +1,13 @@ - + + \ No newline at end of file diff --git a/feature/about/src/main/java/org/mifos/mobile/feature/about/navigation/AboutNavGraph.kt b/feature/about/src/main/java/org/mifos/mobile/feature/about/navigation/AboutNavGraph.kt index 11142ceb4..c0d466962 100644 --- a/feature/about/src/main/java/org/mifos/mobile/feature/about/navigation/AboutNavGraph.kt +++ b/feature/about/src/main/java/org/mifos/mobile/feature/about/navigation/AboutNavGraph.kt @@ -1,6 +1,14 @@ +/* + * 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/mobile-mobile/blob/master/LICENSE.md + */ package org.mifos.mobile.feature.about.navigation -import android.app.Activity import android.content.Context import android.content.Intent import android.net.Uri @@ -20,26 +28,28 @@ fun NavController.navigateToAboutUsScreen() { fun NavGraphBuilder.aboutUsNavGraph( navController: NavController, - navigateToOssLicense: () -> Unit + navigateToOssLicense: () -> Unit, ) { navigation( startDestination = AboutUsNavigation.AboutUsScreen.route, route = AboutUsNavigation.AboutUsBase.route, ) { aboutUsScreenRoute( - navigateToPrivacyPolicy = { navController.navigate(AboutUsNavigation.PrivacyPolicyScreen.route) }, - navigateToOssLicense = navigateToOssLicense + navigateToPrivacyPolicy = { + navController.navigate(AboutUsNavigation.PrivacyPolicyScreen.route) + }, + navigateToOssLicense = navigateToOssLicense, ) privacyPolicyScreenRoute( - navigateBack = navController::popBackStack + navigateBack = navController::popBackStack, ) } } fun NavGraphBuilder.aboutUsScreenRoute( navigateToPrivacyPolicy: () -> Unit, - navigateToOssLicense: () -> Unit + navigateToOssLicense: () -> Unit, ) { composable( route = AboutUsNavigation.AboutUsScreen.route, @@ -52,21 +62,21 @@ fun NavGraphBuilder.aboutUsScreenRoute( context = context, aboutUsItem = it.itemId, navigateToOssLicense = navigateToOssLicense, - navigateToPrivacyPolicy = navigateToPrivacyPolicy + navigateToPrivacyPolicy = navigateToPrivacyPolicy, ) - } + }, ) } } fun NavGraphBuilder.privacyPolicyScreenRoute( - navigateBack: () -> Unit + navigateBack: () -> Unit, ) { composable( route = AboutUsNavigation.PrivacyPolicyScreen.route, ) { PrivacyPolicyScreen( - navigateBack = navigateBack + navigateBack = navigateBack, ) } } @@ -75,7 +85,7 @@ private fun navigateToItem( context: Context, aboutUsItem: AboutUsListItemId, navigateToPrivacyPolicy: () -> Unit, - navigateToOssLicense: () -> Unit + navigateToOssLicense: () -> Unit, ) { when (aboutUsItem) { AboutUsListItemId.OFFICE_WEBSITE -> { @@ -104,4 +114,4 @@ private fun navigateToItem( fun startActivity(context: Context, uri: String) { context.startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(uri))) -} \ No newline at end of file +} diff --git a/feature/about/src/main/java/org/mifos/mobile/feature/about/navigation/AboutNavigation.kt b/feature/about/src/main/java/org/mifos/mobile/feature/about/navigation/AboutNavigation.kt index 4cb08ff9f..091dcd118 100644 --- a/feature/about/src/main/java/org/mifos/mobile/feature/about/navigation/AboutNavigation.kt +++ b/feature/about/src/main/java/org/mifos/mobile/feature/about/navigation/AboutNavigation.kt @@ -1,3 +1,12 @@ +/* + * 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/mobile-mobile/blob/master/LICENSE.md + */ package org.mifos.mobile.feature.about.navigation // Constants for Routes @@ -10,4 +19,4 @@ sealed class AboutUsNavigation(val route: String) { data object AboutUsBase : AboutUsNavigation(route = ABOUT_US_NAVIGATION_ROUTE_BASE) data object AboutUsScreen : AboutUsNavigation(route = ABOUT_US_SCREEN_ROUTE) data object PrivacyPolicyScreen : AboutUsNavigation(route = PRIVACY_POLICY_SCREEN_ROUTE) -} \ No newline at end of file +} diff --git a/feature/about/src/main/java/org/mifos/mobile/feature/about/ui/AboutUsHeader.kt b/feature/about/src/main/java/org/mifos/mobile/feature/about/ui/AboutUsHeader.kt index f65b10442..8aedf7907 100644 --- a/feature/about/src/main/java/org/mifos/mobile/feature/about/ui/AboutUsHeader.kt +++ b/feature/about/src/main/java/org/mifos/mobile/feature/about/ui/AboutUsHeader.kt @@ -1,3 +1,12 @@ +/* + * 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/mobile-mobile/blob/master/LICENSE.md + */ package org.mifos.mobile.feature.about.ui import androidx.compose.foundation.Image @@ -13,21 +22,23 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextAlign -import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp +import org.mifos.mobile.core.ui.utils.DevicePreviews import org.mifos.mobile.feature.about.R -@Preview +@DevicePreviews @Composable -fun AboutUsHeader() { - Column { +fun AboutUsHeader( + modifier: Modifier = Modifier, +) { + Column(modifier) { Image( painter = painterResource(id = R.mipmap.core_common_mifos_icon), contentDescription = null, modifier = Modifier .size(100.dp) .fillMaxWidth() - .align(Alignment.CenterHorizontally) + .align(Alignment.CenterHorizontally), ) Text( @@ -37,7 +48,7 @@ fun AboutUsHeader() { textAlign = TextAlign.Center, modifier = Modifier .fillMaxWidth() - .padding(bottom = 8.dp) + .padding(bottom = 8.dp), ) Text( @@ -47,7 +58,7 @@ fun AboutUsHeader() { textAlign = TextAlign.Center, modifier = Modifier .fillMaxWidth() - .padding(bottom = 16.dp) + .padding(bottom = 16.dp), ) } -} \ No newline at end of file +} diff --git a/feature/about/src/main/java/org/mifos/mobile/feature/about/ui/AboutUsScreen.kt b/feature/about/src/main/java/org/mifos/mobile/feature/about/ui/AboutUsScreen.kt index d43154546..40a671e43 100644 --- a/feature/about/src/main/java/org/mifos/mobile/feature/about/ui/AboutUsScreen.kt +++ b/feature/about/src/main/java/org/mifos/mobile/feature/about/ui/AboutUsScreen.kt @@ -1,3 +1,12 @@ +/* + * 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/mobile-mobile/blob/master/LICENSE.md + */ package org.mifos.mobile.feature.about.ui import android.content.Context @@ -10,23 +19,24 @@ import androidx.compose.foundation.lazy.items import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import org.mifos.mobile.core.designsystem.theme.MifosMobileTheme import org.mifos.mobile.core.model.entity.AboutUsItem import org.mifos.mobile.core.model.enums.AboutUsListItemId import org.mifos.mobile.core.ui.component.AboutUsItemCard import org.mifos.mobile.core.ui.component.MifosItemCard +import org.mifos.mobile.core.ui.utils.DevicePreviews import org.mifos.mobile.feature.about.R import java.util.Calendar @Composable fun AboutUsScreen( - navigateToItem: (AboutUsItem) -> Unit + navigateToItem: (AboutUsItem) -> Unit, + modifier: Modifier = Modifier, ) { val context = LocalContext.current LazyColumn( - modifier = Modifier + modifier = modifier .fillMaxSize() .padding(16.dp), ) { @@ -37,13 +47,13 @@ fun AboutUsScreen( items(getAboutUsItem(context)) { item -> MifosItemCard( modifier = Modifier.padding(bottom = 8.dp), - onClick = { navigateToItem(item) } + onClick = { navigateToItem(item) }, ) { item.title?.let { AboutUsItemCard( title = it, subtitle = item.subtitle, - iconUrl = item.iconUrl + iconUrl = item.iconUrl, ) } } @@ -52,49 +62,48 @@ fun AboutUsScreen( } fun getAboutUsItem(context: Context): List { - val currentYear = Calendar.getInstance().get(Calendar.YEAR) val copyrightText = context.getString(R.string.copy_right_mifos).replace("%1\$s", currentYear.toString()) return listOf( AboutUsItem( title = context.getString(R.string.app_version_text), - itemId = AboutUsListItemId.APP_VERSION_TEXT + itemId = AboutUsListItemId.APP_VERSION_TEXT, ), AboutUsItem( title = context.getString(R.string.official_website), iconUrl = R.drawable.ic_website, - itemId = AboutUsListItemId.OFFICE_WEBSITE + itemId = AboutUsListItemId.OFFICE_WEBSITE, ), AboutUsItem( title = context.getString(R.string.licenses), iconUrl = R.drawable.ic_law_icon, - itemId = AboutUsListItemId.LICENSES + itemId = AboutUsListItemId.LICENSES, ), AboutUsItem( title = context.getString(R.string.privacy_policy), iconUrl = R.drawable.ic_privacy_policy, - itemId = AboutUsListItemId.PRIVACY_POLICY + itemId = AboutUsListItemId.PRIVACY_POLICY, ), AboutUsItem( title = context.getString(R.string.sources), iconUrl = R.drawable.ic_source_code, - itemId = AboutUsListItemId.SOURCE_CODE + itemId = AboutUsListItemId.SOURCE_CODE, ), AboutUsItem( title = copyrightText, subtitle = R.string.license_string_with_value, - itemId = AboutUsListItemId.LICENSES_STRING_WITH_VALUE - ) + itemId = AboutUsListItemId.LICENSES_STRING_WITH_VALUE, + ), ) } -@Preview(showSystemUi = true, device = "id:pixel_5") +@DevicePreviews @Composable fun AboutScreenPreview() { MifosMobileTheme { AboutUsScreen( - navigateToItem = {} + navigateToItem = {}, ) } -} \ No newline at end of file +} diff --git a/feature/about/src/main/java/org/mifos/mobile/feature/about/ui/PrivacyPolicyScreen.kt b/feature/about/src/main/java/org/mifos/mobile/feature/about/ui/PrivacyPolicyScreen.kt index 46c595afd..3b5996561 100644 --- a/feature/about/src/main/java/org/mifos/mobile/feature/about/ui/PrivacyPolicyScreen.kt +++ b/feature/about/src/main/java/org/mifos/mobile/feature/about/ui/PrivacyPolicyScreen.kt @@ -1,6 +1,16 @@ +/* + * 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/mobile-mobile/blob/master/LICENSE.md + */ package org.mifos.mobile.feature.about.ui import android.annotation.SuppressLint +import android.content.Context import android.content.Intent import android.graphics.Bitmap import android.net.Uri @@ -25,28 +35,30 @@ import org.mifos.mobile.feature.about.R @Composable fun PrivacyPolicyScreen( navigateBack: () -> Unit, + modifier: Modifier = Modifier, ) { val context = LocalContext.current MifosScaffold( - topBarTitleResId= R.string.privacy_policy, - navigateBack= navigateBack, + topBarTitleResId = R.string.privacy_policy, + navigateBack = navigateBack, + modifier = modifier, content = { WebView( - url = context.getString(R.string.privacy_policy_host_url) + url = context.getString(R.string.privacy_policy_host_url), ) - } + }, ) } @SuppressLint("SetJavaScriptEnabled") @Composable fun WebView( - url: String + url: String, + modifier: Modifier = Modifier, ) { - var isLoading by remember { mutableStateOf(true) } - Column { + Column(modifier) { Spacer(modifier = Modifier.height(20.dp)) AndroidView( factory = { context -> @@ -55,8 +67,11 @@ fun WebView( settings.domStorageEnabled = true overScrollMode = WebView.OVER_SCROLL_NEVER this.webViewClient = object : WebViewClient() { - override fun shouldOverrideUrlLoading(view: WebView, url: String): Boolean { - return if (Uri.parse(url)?.host?.endsWith(context.getString(R.string.privacy_policy_host)) == true) { + override fun shouldOverrideUrlLoading( + view: WebView, + url: String, + ): Boolean { + return if (context.checkUri(url)) { false } else { context.startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(url))) @@ -77,10 +92,14 @@ fun WebView( }, update = { webView -> webView.loadUrl(url) - } + }, ) if (isLoading) { MifosProgressIndicator() } } -} \ No newline at end of file +} + +private fun Context.checkUri(uri: String): Boolean { + return Uri.parse(uri)?.host?.endsWith(this.getString(R.string.privacy_policy_host)) == true +} diff --git a/feature/about/src/main/res/drawable/ic_law_icon.xml b/feature/about/src/main/res/drawable/ic_law_icon.xml index 81ab1b718..e905b9c30 100644 --- a/feature/about/src/main/res/drawable/ic_law_icon.xml +++ b/feature/about/src/main/res/drawable/ic_law_icon.xml @@ -1,3 +1,13 @@ + + + + + + Mifos Mobile An Android Application built on top of the MifosX Self-Service platform for end-user customers to view/transact on the accounts and loans they hold. diff --git a/feature/about/src/test/java/org/mifos/mobile/feature/about/ExampleUnitTest.kt b/feature/about/src/test/java/org/mifos/mobile/feature/about/ExampleUnitTest.kt deleted file mode 100644 index 556d2a225..000000000 --- a/feature/about/src/test/java/org/mifos/mobile/feature/about/ExampleUnitTest.kt +++ /dev/null @@ -1,17 +0,0 @@ -package org.mifos.mobile.feature.about - -import org.junit.Test - -import org.junit.Assert.* - -/** - * Example local unit test, which will execute on the development machine (host). - * - * See [testing documentation](http://d.android.com/tools/testing). - */ -class ExampleUnitTest { - @Test - fun addition_isCorrect() { - assertEquals(4, 2 + 2) - } -} \ No newline at end of file