From 8146fce9a852433040e1a0541d08bee48edab343 Mon Sep 17 00:00:00 2001 From: Sk Niyaj Ali Date: Sun, 25 Aug 2024 12:16:34 +0530 Subject: [PATCH] Fixed Gradle Build Error (#2670) --- androidApp/build.gradle.kts | 64 ++--- .../org/mifos/mobile/MifosSelfServiceApp.kt | 4 +- .../mifos/mobile/navigation/MifosNavGraph.kt | 113 +++++---- .../mobile/ui/activities/HomeActivity.kt | 30 ++- .../mobile/ui/activities/LoginActivity.kt | 5 +- .../mobile/ui/activities/PassCodeActivity.kt | 158 ++---------- .../mobile/ui/activities/SplashActivity.kt | 19 +- .../mobile/ui/activities/base/BaseActivity.kt | 230 ------------------ .../column_header_loan_repayment_schedule.xml | 30 --- .../fragment_loan_repayment_schedule.xml | 117 --------- .../res/layout/fragment_qr_code_display.xml | 13 - .../res/layout/fragment_qr_code_import.xml | 46 ---- .../main/res/layout/fragment_registration.xml | 205 ---------------- .../main/res/layout/fragment_scan_qr_code.xml | 31 --- .../feature/home/navigation/HomeNavGraph.kt | 14 +- feature/qr/build.gradle.kts | 2 +- gradle/libs.versions.toml | 51 ++++ settings.gradle.kts | 7 +- 18 files changed, 208 insertions(+), 931 deletions(-) delete mode 100644 androidApp/src/main/java/org/mifos/mobile/ui/activities/base/BaseActivity.kt delete mode 100644 androidApp/src/main/res/layout/column_header_loan_repayment_schedule.xml delete mode 100644 androidApp/src/main/res/layout/fragment_loan_repayment_schedule.xml delete mode 100644 androidApp/src/main/res/layout/fragment_qr_code_display.xml delete mode 100644 androidApp/src/main/res/layout/fragment_qr_code_import.xml delete mode 100644 androidApp/src/main/res/layout/fragment_registration.xml delete mode 100644 androidApp/src/main/res/layout/fragment_scan_qr_code.xml diff --git a/androidApp/build.gradle.kts b/androidApp/build.gradle.kts index 88912c957..149894513 100644 --- a/androidApp/build.gradle.kts +++ b/androidApp/build.gradle.kts @@ -107,7 +107,7 @@ dependencies { implementation(projects.feature.auth) implementation(projects.feature.userProfile) - implementation("androidx.legacy:legacy-support-v4:1.0.0") + implementation(libs.androidx.legacy.support.v4) implementation(libs.androidx.lifecycle.ktx) implementation(libs.androidx.lifecycle.extensions) implementation(libs.androidx.appcompat) @@ -120,16 +120,18 @@ dependencies { kapt(libs.dbflow.processor) implementation(libs.dbflow.core) - implementation("androidx.recyclerview:recyclerview:1.2.1") - implementation("androidx.vectordrawable:vectordrawable:1.1.0") + implementation(libs.androidx.recyclerview) + implementation(libs.androidx.vectordrawable) implementation(libs.google.oss.licenses) - implementation("com.isseiaoki:simplecropview:1.1.8") + +// implementation(libs.simplecropview) + implementation(libs.androidx.activity.ktx) implementation(libs.androidx.fragment.ktx) //Country Code picker - implementation("com.hbb20:ccp:2.7.2") - implementation("com.github.ParveshSandila:CountryCodeChooser:1.0") +// implementation(libs.ccp) +// implementation(libs.countrycodechooser) //Square dependencies implementation(libs.squareup.retrofit2) { @@ -150,51 +152,49 @@ dependencies { implementation(libs.jakewharton.compiler) //Annotation library - implementation("androidx.annotation:annotation:1.1.0") + implementation(libs.androidx.annotation) //qr code - implementation("com.google.zxing:core:3.5.2") - implementation("me.dm7.barcodescanner:zxing:1.9.13") +// implementation(libs.zxing.core) +// implementation(libs.zxing) //sweet error dependency - implementation("com.github.therajanmaurya:Sweet-Error:1.0.0") + implementation(libs.sweet.error) //mifos passcode - implementation("com.mifos.mobile:mifos-passcode:1.0.0") + implementation(libs.mifos.passcode) //multidex - implementation("androidx.multidex:multidex:2.0.1") + implementation(libs.androidx.multidex) //TableView - implementation("com.evrencoskun.library:tableview:0.8.9.4") +// implementation(libs.tableview) //Biometric Authentication - implementation("androidx.biometric:biometric:1.1.0") + implementation(libs.androidx.biometric) // Coroutines - implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4") - testImplementation("org.jetbrains.kotlinx:kotlinx-coroutines-test:1.7.3") + implementation(libs.kotlinx.coroutines.android) + testImplementation(libs.kotlinx.coroutines.test) // Unit tests dependencies testImplementation(libs.junit) - testImplementation("org.mockito:mockito-core:5.4.0") - implementation("org.mockito:mockito-core:5.4.0") + testImplementation(libs.mockito.core) + implementation(libs.mockito.core) //turbine - testImplementation("app.cash.turbine:turbine:1.1.0") - implementation("org.mockito:mockito-android:5.4.0") + testImplementation(libs.turbine) + implementation(libs.mockito.android) androidTestImplementation((libs.junit)) - androidTestImplementation("org.mockito:mockito-core:5.4.0") - androidTestImplementation("org.mockito:mockito-android:5.4.0") - androidTestImplementation("androidx.annotation:annotation:1.0.0") - implementation("androidx.arch.core:core-testing:2.2.0") - androidTestImplementation("androidx.test.espresso:espresso-contrib:3.5.1") { + androidTestImplementation(libs.mockito.core) + androidTestImplementation(libs.mockito.android) + androidTestImplementation(libs.androidx.annotation) + implementation(libs.androidx.core.testing) + androidTestImplementation(libs.androidx.espresso.contrib) + androidTestImplementation(libs.espresso.core) + androidTestImplementation(libs.androidx.runner) + androidTestImplementation(libs.androidx.rules) - } - androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1") - androidTestImplementation("androidx.test:runner:1.6.0-alpha04") - androidTestImplementation("androidx.test:rules:1.6.0-alpha01") - - implementation("com.github.rahul-gill.mifos-ui-library:uihouse:alpha-2.1") + implementation(libs.uihouse) // Jetpack Compose api(libs.androidx.activity.compose) @@ -213,7 +213,7 @@ dependencies { //image cropper - implementation("com.github.CanHub:Android-Image-Cropper:4.0.0") + implementation(libs.android.image.cropper) // Google Bar code scanner implementation(libs.google.app.code.scanner) diff --git a/androidApp/src/main/java/org/mifos/mobile/MifosSelfServiceApp.kt b/androidApp/src/main/java/org/mifos/mobile/MifosSelfServiceApp.kt index 9dc985bb0..53cf8ec12 100644 --- a/androidApp/src/main/java/org/mifos/mobile/MifosSelfServiceApp.kt +++ b/androidApp/src/main/java/org/mifos/mobile/MifosSelfServiceApp.kt @@ -6,12 +6,11 @@ import androidx.appcompat.app.AppCompatDelegate import androidx.multidex.MultiDex import androidx.multidex.MultiDexApplication import com.google.firebase.crashlytics.FirebaseCrashlytics -import com.mifos.mobile.passcode.utils.ForegroundChecker import com.raizlabs.android.dbflow.config.FlowConfig import com.raizlabs.android.dbflow.config.FlowManager import dagger.hilt.android.HiltAndroidApp -import org.mifos.mobile.core.datastore.PreferencesHelper import org.mifos.mobile.core.common.utils.LanguageHelper.onAttach +import org.mifos.mobile.core.datastore.PreferencesHelper import org.mifos.mobile.feature.settings.applySavedTheme /** @@ -41,7 +40,6 @@ class MifosSelfServiceApp : MultiDexApplication() { FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(true) instance = this FlowManager.init(FlowConfig.Builder(this).build()) - ForegroundChecker.init(this) PreferencesHelper(this).applySavedTheme() } diff --git a/androidApp/src/main/java/org/mifos/mobile/navigation/MifosNavGraph.kt b/androidApp/src/main/java/org/mifos/mobile/navigation/MifosNavGraph.kt index 985a85135..5ac7d1926 100644 --- a/androidApp/src/main/java/org/mifos/mobile/navigation/MifosNavGraph.kt +++ b/androidApp/src/main/java/org/mifos/mobile/navigation/MifosNavGraph.kt @@ -4,16 +4,20 @@ import android.app.Activity import android.content.Context import android.content.Intent import android.net.Uri +import android.provider.Settings +import android.widget.Toast import androidx.compose.runtime.Composable import androidx.compose.ui.platform.LocalContext -import androidx.navigation.NavGraphBuilder +import androidx.navigation.NavController import androidx.navigation.NavHostController +import androidx.navigation.NavOptions import androidx.navigation.compose.NavHost import androidx.navigation.compose.composable import com.google.android.gms.oss.licenses.OssLicensesMenuActivity -import org.mifos.mobile.core.common.Constants.CURR_PASSWORD +import com.mifos.compose.component.PasscodeScreen +import org.mifos.mobile.R import org.mifos.mobile.core.common.Constants.INTIAL_LOGIN -import org.mifos.mobile.core.common.Constants.IS_TO_UPDATE_PASS_CODE +import org.mifos.mobile.core.common.Constants.TRANSFER_PAY_TO import org.mifos.mobile.core.model.enums.AccountType import org.mifos.mobile.core.model.enums.ChargeType import org.mifos.mobile.feature.about.navigation.aboutUsNavGraph @@ -22,19 +26,19 @@ import org.mifos.mobile.feature.account.navigation.clientAccountsNavGraph import org.mifos.mobile.feature.account.navigation.navigateToClientAccountsScreen import org.mifos.mobile.feature.auth.navigation.authenticationNavGraph import org.mifos.mobile.feature.auth.navigation.navigateToLoginScreen -import org.mifos.mobile.feature.client_charge.navigation.clientChargeNavGraph -import org.mifos.mobile.feature.client_charge.navigation.navigateToClientChargeScreen -import org.mifos.mobile.feature.beneficiary.navigation.BeneficiaryNavigation import org.mifos.mobile.feature.beneficiary.navigation.beneficiaryNavGraph import org.mifos.mobile.feature.beneficiary.navigation.navigateToAddBeneficiaryScreen import org.mifos.mobile.feature.beneficiary.navigation.navigateToBeneficiaryApplicationScreen import org.mifos.mobile.feature.beneficiary.navigation.navigateToBeneficiaryListScreen +import org.mifos.mobile.feature.client_charge.navigation.clientChargeNavGraph +import org.mifos.mobile.feature.client_charge.navigation.navigateToClientChargeScreen import org.mifos.mobile.feature.guarantor.navigation.guarantorNavGraph import org.mifos.mobile.feature.guarantor.navigation.navigateToGuarantorScreen import org.mifos.mobile.feature.help.navigation.helpNavGraph import org.mifos.mobile.feature.help.navigation.navigateToHelpScreen import org.mifos.mobile.feature.home.navigation.HomeDestinations import org.mifos.mobile.feature.home.navigation.homeNavGraph +import org.mifos.mobile.feature.home.navigation.navigateToHomeScreen import org.mifos.mobile.feature.loan.navigation.loanNavGraph import org.mifos.mobile.feature.loan.navigation.navigateToLoanApplication import org.mifos.mobile.feature.loan.navigation.navigateToLoanDetailScreen @@ -42,37 +46,28 @@ import org.mifos.mobile.feature.location.navigation.locationsNavGraph import org.mifos.mobile.feature.location.navigation.navigateToLocationsScreen import org.mifos.mobile.feature.notification.navigation.navigateToNotificationScreen import org.mifos.mobile.feature.notification.navigation.notificationNavGraph +import org.mifos.mobile.feature.qr.navigation.navigateToQrDisplayScreen +import org.mifos.mobile.feature.qr.navigation.navigateToQrImportScreen +import org.mifos.mobile.feature.qr.navigation.navigateToQrReaderScreen +import org.mifos.mobile.feature.qr.navigation.qrNavGraph import org.mifos.mobile.feature.recent_transaction.navigation.navigateToRecentTransaction import org.mifos.mobile.feature.recent_transaction.navigation.recentTransactionNavGraph +import org.mifos.mobile.feature.savings.navigation.navigateToSavingsApplicationScreen +import org.mifos.mobile.feature.savings.navigation.navigateToSavingsDetailScreen +import org.mifos.mobile.feature.savings.navigation.navigateToSavingsMakeTransfer +import org.mifos.mobile.feature.savings.navigation.savingsNavGraph import org.mifos.mobile.feature.settings.navigation.navigateToSettings import org.mifos.mobile.feature.settings.navigation.settingsNavGraph import org.mifos.mobile.feature.third.party.transfer.third_party_transfer.navigation.navigateToThirdPartyTransfer import org.mifos.mobile.feature.third.party.transfer.third_party_transfer.navigation.thirdPartyTransferNavGraph +import org.mifos.mobile.feature.transfer.process.navigation.navigateToTransferProcessScreen import org.mifos.mobile.feature.transfer.process.navigation.transferProcessNavGraph import org.mifos.mobile.feature.update_password.navigation.navigateToUpdatePassword import org.mifos.mobile.feature.update_password.navigation.updatePasswordNavGraph import org.mifos.mobile.feature.user_profile.navigation.navigateToUserProfile import org.mifos.mobile.feature.user_profile.navigation.userProfileNavGraph -import org.mifos.mobile.feature.qr.navigation.QrNavigation -import org.mifos.mobile.feature.qr.navigation.navigateToQrDisplayScreen -import org.mifos.mobile.feature.qr.navigation.navigateToQrImportScreen -import org.mifos.mobile.feature.qr.navigation.navigateToQrReaderScreen -import org.mifos.mobile.feature.qr.navigation.qrNavGraph -import org.mifos.mobile.feature.savings.navigation.SavingsNavigation -import org.mifos.mobile.feature.savings.navigation.navigateToSavingsApplicationScreen -import org.mifos.mobile.feature.savings.navigation.navigateToSavingsDetailScreen -import org.mifos.mobile.feature.savings.navigation.navigateToSavingsMakeTransfer -import org.mifos.mobile.feature.savings.navigation.savingsNavGraph -import org.mifos.mobile.feature.transfer.process.navigation.navigateToTransferProcessScreen -import org.mifos.mobile.ui.activities.PassCodeActivity -import android.provider.Settings -import android.widget.Toast -import org.mifos.mobile.R -import org.mifos.mobile.core.common.Constants -import org.mifos.mobile.core.common.Constants.TRANSFER_PAY_FROM -import org.mifos.mobile.core.common.Constants.TRANSFER_PAY_TO -import org.mifos.mobile.core.model.enums.TransferType import org.mifos.mobile.ui.activities.HomeActivity +import org.mifos.mobile.ui.activities.PassCodeActivity @Composable @@ -127,7 +122,7 @@ fun RootNavGraph( settingsNavGraph( navController = navController, changePassword = navController::navigateToUpdatePassword, - changePasscode = { navigateToUpdatePasscodeActivity(it, context) }, + changePasscode = {}, // { navigateToUpdatePasscodeActivity(it, context) }, navigateToLoginScreen = navController::navigateToLoginScreen, languageChanged = { startActivity(context, HomeActivity::class.java) } ) @@ -160,7 +155,7 @@ fun RootNavGraph( navigateToOssLicense = { startActivity(context, OssLicensesMenuActivity::class.java) } ) - transferProcessNavGraph ( + transferProcessNavGraph( navController = navController ) @@ -188,16 +183,33 @@ fun RootNavGraph( navigateToLoanApplicationScreen = navController::navigateToLoanApplication, navigateToSavingsApplicationScreen = navController::navigateToSavingsApplicationScreen, navigateToAccountDetail = { accountType, id -> - when(accountType) { + when (accountType) { AccountType.SAVINGS -> navController.navigateToSavingsDetailScreen(savingsId = id) AccountType.LOAN -> navController.navigateToLoanDetailScreen(loanId = id) AccountType.SHARE -> {} } } ) + + composable(PASSCODE_SCREEN) { + PasscodeScreen( + onForgotButton = navController::navigateToHomeScreen, + onSkipButton = navController::navigateToHomeScreen, + onPasscodeConfirm = { + navController.navigateToHomeScreen() + }, + onPasscodeRejected = {} + ) + } } } +const val PASSCODE_SCREEN = "passcode_screen" + +fun NavController.navigateToPasscodeScreen(navOptions: NavOptions? = null) { + return this.navigate(PASSCODE_SCREEN, navOptions) +} + fun handleHomeNavigation( navController: NavHostController, homeDestinations: HomeDestinations, @@ -214,10 +226,20 @@ fun handleHomeNavigation( HomeDestinations.SETTINGS -> navController.navigateToSettings() HomeDestinations.ABOUT_US -> navController.navigateToAboutUsScreen() HomeDestinations.HELP -> navController.navigateToHelpScreen() - HomeDestinations.SHARE -> { shareApp(context) } - HomeDestinations.APP_INFO -> { openAppInfo(context) } + HomeDestinations.SHARE -> { + shareApp(context) + } + + HomeDestinations.APP_INFO -> { + openAppInfo(context) + } + HomeDestinations.LOGOUT -> navController.navigateToLoginScreen() - HomeDestinations.TRANSFER -> navController.navigateToSavingsMakeTransfer(accountId = 1, transferType = TRANSFER_PAY_TO) + HomeDestinations.TRANSFER -> navController.navigateToSavingsMakeTransfer( + accountId = 1, + transferType = TRANSFER_PAY_TO + ) + HomeDestinations.BENEFICIARIES -> navController.navigateToBeneficiaryListScreen() HomeDestinations.SURVEY -> Unit HomeDestinations.NOTIFICATIONS -> navController.navigateToNotificationScreen() @@ -234,26 +256,33 @@ private fun startPassCodeActivity(context: Context) { intent.putExtra(INTIAL_LOGIN, true) context.startActivity(intent) } - -private fun navigateToUpdatePasscodeActivity(passcode: String, context: Context) { - val intent = Intent(context, PassCodeActivity::class.java).apply { - putExtra(CURR_PASSWORD, passcode) - putExtra(IS_TO_UPDATE_PASS_CODE, true) - } - context.startActivity(intent) -} +// +//private fun navigateToUpdatePasscodeActivity(passcode: String, context: Context) { +// val intent = Intent(context, PassCodeActivity::class.java).apply { +// putExtra(CURR_PASSWORD, passcode) +// putExtra(IS_TO_UPDATE_PASS_CODE, true) +// } +// context.startActivity(intent) +//} private fun callHelpline(context: Context) { val intent = Intent(Intent.ACTION_DIAL) - intent.data = Uri.parse("tel:" + context.getString(org.mifos.mobile.feature.home.R.string.help_line_number)) + intent.data = + Uri.parse("tel:" + context.getString(org.mifos.mobile.feature.home.R.string.help_line_number)) context.startActivity(intent) } private fun mailHelpline(context: Context) { val intent = Intent(Intent.ACTION_SENDTO).apply { data = Uri.parse("mailto:") - putExtra(Intent.EXTRA_EMAIL, arrayOf(context.getString(org.mifos.mobile.feature.home.R.string.contact_email))) - putExtra(Intent.EXTRA_SUBJECT, context.getString(org.mifos.mobile.feature.home.R.string.user_query)) + putExtra( + Intent.EXTRA_EMAIL, + arrayOf(context.getString(org.mifos.mobile.feature.home.R.string.contact_email)) + ) + putExtra( + Intent.EXTRA_SUBJECT, + context.getString(org.mifos.mobile.feature.home.R.string.user_query) + ) } try { context.startActivity(intent) diff --git a/androidApp/src/main/java/org/mifos/mobile/ui/activities/HomeActivity.kt b/androidApp/src/main/java/org/mifos/mobile/ui/activities/HomeActivity.kt index 15060b790..0318315fd 100644 --- a/androidApp/src/main/java/org/mifos/mobile/ui/activities/HomeActivity.kt +++ b/androidApp/src/main/java/org/mifos/mobile/ui/activities/HomeActivity.kt @@ -4,18 +4,14 @@ import android.content.BroadcastReceiver import android.content.Context import android.content.Intent import android.content.IntentFilter -import android.graphics.Bitmap -import android.net.Uri import android.os.Bundle import android.os.Handler import android.util.Log -import android.view.MenuItem -import android.widget.Toast +import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.activity.enableEdgeToEdge import androidx.activity.viewModels import androidx.localbroadcastmanager.content.LocalBroadcastManager -import androidx.navigation.NavController import androidx.navigation.NavHostController import androidx.navigation.compose.rememberNavController import com.google.android.gms.common.ConnectionResult @@ -23,20 +19,19 @@ import com.google.android.gms.common.GoogleApiAvailability import dagger.hilt.android.AndroidEntryPoint import org.mifos.mobile.R import org.mifos.mobile.core.common.Constants -import org.mifos.mobile.ui.activities.base.BaseActivity -import org.mifos.mobile.utils.Toaster -import org.mifos.mobile.utils.fcm.RegistrationIntentService import org.mifos.mobile.core.ui.theme.MifosMobileTheme import org.mifos.mobile.feature.home.navigation.HomeNavigation import org.mifos.mobile.feature.user_profile.viewmodel.UserDetailViewModel import org.mifos.mobile.navigation.RootNavGraph +import org.mifos.mobile.utils.Toaster +import org.mifos.mobile.utils.fcm.RegistrationIntentService /** * @author Vishwajeet * @since 14/07/2016 */ @AndroidEntryPoint -class HomeActivity : BaseActivity() { +class HomeActivity : ComponentActivity() { private val viewModel: UserDetailViewModel by viewModels() private var isReceiverRegistered = false @@ -84,22 +79,25 @@ class HomeActivity : BaseActivity() { /** * Handling back press */ + @Deprecated("Deprecated in Java") override fun onBackPressed() { val currentRoute = navHostController.currentBackStackEntry?.destination?.route if (currentRoute == HomeNavigation.HomeScreen.route) { - if (doubleBackToExitPressedOnce && stackCount() == 0) { - finish() - return - } +// if (doubleBackToExitPressedOnce && stackCount() == 0) { +// finish() +// return +// } doubleBackToExitPressedOnce = true Toaster.show(findViewById(android.R.id.content), getString(R.string.exit_message)) Handler().postDelayed({ doubleBackToExitPressedOnce = false }, 2000) } - if (stackCount() != 0) { - super.onBackPressed() - } + super.onBackPressed() + +// if (stackCount() != 0) { +// super.onBackPressed() +// } } diff --git a/androidApp/src/main/java/org/mifos/mobile/ui/activities/LoginActivity.kt b/androidApp/src/main/java/org/mifos/mobile/ui/activities/LoginActivity.kt index 932d63e81..518ba7974 100644 --- a/androidApp/src/main/java/org/mifos/mobile/ui/activities/LoginActivity.kt +++ b/androidApp/src/main/java/org/mifos/mobile/ui/activities/LoginActivity.kt @@ -1,7 +1,7 @@ package org.mifos.mobile.ui.activities -import android.content.Intent import android.os.Bundle +import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.activity.enableEdgeToEdge import androidx.navigation.compose.rememberNavController @@ -9,14 +9,13 @@ import dagger.hilt.android.AndroidEntryPoint import org.mifos.mobile.core.ui.theme.MifosMobileTheme import org.mifos.mobile.feature.auth.navigation.AuthenticationNavigation import org.mifos.mobile.navigation.RootNavGraph -import org.mifos.mobile.ui.activities.base.BaseActivity /** * @author Vishwajeet * @since 05/06/16 */ @AndroidEntryPoint -class LoginActivity : BaseActivity() { +class LoginActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) diff --git a/androidApp/src/main/java/org/mifos/mobile/ui/activities/PassCodeActivity.kt b/androidApp/src/main/java/org/mifos/mobile/ui/activities/PassCodeActivity.kt index b3ebc087f..aac696fbc 100644 --- a/androidApp/src/main/java/org/mifos/mobile/ui/activities/PassCodeActivity.kt +++ b/androidApp/src/main/java/org/mifos/mobile/ui/activities/PassCodeActivity.kt @@ -1,149 +1,35 @@ package org.mifos.mobile.ui.activities -import android.Manifest -import android.content.Intent import android.os.Bundle -import android.provider.Settings -import android.util.TypedValue -import android.view.View -import androidx.appcompat.widget.AppCompatButton -import androidx.core.widget.NestedScrollView -import butterknife.BindView -import butterknife.ButterKnife -import butterknife.OnClick -import com.mifos.mobile.passcode.MifosPassCodeActivity -import com.mifos.mobile.passcode.utils.EncryptionUtil -import org.mifos.mobile.R -import org.mifos.mobile.core.model.enums.BiometricCapability -import org.mifos.mobile.utils.CheckSelfPermissionAndRequest -import org.mifos.mobile.core.common.Constants -import org.mifos.mobile.utils.MaterialDialog -import org.mifos.mobile.utils.Toaster +import androidx.activity.ComponentActivity +import androidx.activity.compose.setContent +import androidx.activity.enableEdgeToEdge +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.statusBarsPadding +import androidx.compose.ui.Modifier +import androidx.navigation.compose.rememberNavController +import dagger.hilt.android.AndroidEntryPoint +import org.mifos.mobile.core.ui.theme.MifosMobileTheme +import org.mifos.mobile.navigation.PASSCODE_SCREEN +import org.mifos.mobile.navigation.RootNavGraph -class PassCodeActivity : MifosPassCodeActivity() { - private var currPassCode: String? = null - private var isToUpdatePassCode: Boolean = false - - @JvmField - @BindView(R.id.btn_forgot_passcode) - var forgetPasswordButton: AppCompatButton? = null - - @JvmField - @BindView(R.id.btn_save) - var btnSave: AppCompatButton? = null - - @JvmField - @BindView(R.id.cl_rootview) - var nestedScrollView: NestedScrollView? = null - - private var biometricAuthentication: BiometricAuthentication? = null +@AndroidEntryPoint +class PassCodeActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - ButterKnife.bind(this) - biometricAuthentication = BiometricAuthentication(this) + enableEdgeToEdge() + setContent { + MifosMobileTheme { + val navController = rememberNavController() - if (!CheckSelfPermissionAndRequest.checkSelfPermission( - this, - Manifest.permission.READ_PHONE_STATE, - ) - ) { - requestPermission() - } - setBackgroundColor() - - if (btnSave?.text?.equals(getString(R.string.use_touch_id)) == true) { - biometricAuthentication?.authenticateWithBiometrics() - } - if (biometricAuthentication?.getBiometricCapabilities() == BiometricCapability.HAS_BIOMETRIC_AUTH) { - if (btnSave?.visibility == View.GONE) { - btnSave?.visibility = View.VISIBLE - btnSave?.text = getString(R.string.use_touch_id) - btnSave?.setOnClickListener { - biometricAuthentication?.authenticateWithBiometrics() + Box(modifier = Modifier.statusBarsPadding()) { + RootNavGraph( + startDestination = PASSCODE_SCREEN, + navController = navController, + ) } } - } else if (biometricAuthentication?.getBiometricCapabilities() == BiometricCapability.NOT_SUPPORTED) { - startActivity(Intent(Settings.ACTION_SECURITY_SETTINGS)) } - - intent?.let { - currPassCode = it.getStringExtra(Constants.CURR_PASSWORD) - isToUpdatePassCode = it.getBooleanExtra(Constants.IS_TO_UPDATE_PASS_CODE, false) - } - } - - /** - * Uses [CheckSelfPermissionAndRequest] to check fomifosr runtime permissions - */ - private fun requestPermission() { - CheckSelfPermissionAndRequest.requestPermission( - this, - Manifest.permission.READ_PHONE_STATE, - org.mifos.mobile.core.common.Constants.PERMISSIONS_REQUEST_READ_PHONE_STATE, - resources.getString( - R.string.dialog_message_phone_state_permission_denied_prompt, - ), - resources.getString(R.string.dialog_message_phone_state_permission_never_ask_again), - org.mifos.mobile.core.common.Constants.PERMISSIONS_READ_PHONE_STATE_STATUS, - ) - } - - private fun setBackgroundColor() { - val typedValue = TypedValue() - theme.resolveAttribute(android.R.attr.colorBackground, typedValue, true) - nestedScrollView?.setBackgroundColor(typedValue.data) - } - - override fun getLogo(): Int { - return R.drawable.mifos_logo - } - - override fun startNextActivity() { - startActivity(Intent(this@PassCodeActivity, HomeActivity::class.java)) - } - - override fun startLoginActivity() {} - - - @OnClick(R.id.btn_forgot_passcode) - fun onForgotPasswordLoginManually() { - MaterialDialog.Builder().init(this@PassCodeActivity) - .setCancelable(false) - .setMessage(R.string.login_using_password_confirmation) - .setPositiveButton( - getString(R.string.logout), - ) { _, _ -> - clearTokenPreferences() - val i = Intent( - this@PassCodeActivity, - LoginActivity::class.java, - ) - i.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK - startActivity(i) - finish() - } - .setNegativeButton( - getString(R.string.cancel), - ) { dialog, _ -> - dialog.dismiss() - } - .createMaterialDialog() - .show() - } - - override fun showToaster(view: View, msg: Int) { - Toaster.show(view, msg) - } - - override fun getEncryptionType(): Int { - return EncryptionUtil.MOBILE_BANKING - } - - override fun onResume() { - if (btnSave?.text?.equals(getString(R.string.use_touch_id)) == true) { - biometricAuthentication?.authenticateWithBiometrics() - } - super.onResume() } } diff --git a/androidApp/src/main/java/org/mifos/mobile/ui/activities/SplashActivity.kt b/androidApp/src/main/java/org/mifos/mobile/ui/activities/SplashActivity.kt index 1ec7097e2..69169dd48 100644 --- a/androidApp/src/main/java/org/mifos/mobile/ui/activities/SplashActivity.kt +++ b/androidApp/src/main/java/org/mifos/mobile/ui/activities/SplashActivity.kt @@ -2,27 +2,18 @@ package org.mifos.mobile.ui.activities import android.content.Intent import android.os.Bundle -import com.mifos.mobile.passcode.utils.PasscodePreferencesHelper -import org.mifos.mobile.ui.activities.base.BaseActivity -import org.mifos.mobile.core.common.Constants +import androidx.activity.ComponentActivity /* * Created by saksham on 01/June/2018 */ -class SplashActivity : BaseActivity() { - - private var passcodePreferencesHelper: PasscodePreferencesHelper? = null +class SplashActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { - val intent: Intent? super.onCreate(savedInstanceState) - passcodePreferencesHelper = PasscodePreferencesHelper(this) - if (passcodePreferencesHelper?.passCode?.isNotEmpty() == true) { - intent = Intent(this, PassCodeActivity::class.java) - intent.putExtra(Constants.INTIAL_LOGIN, true) - } else { - intent = Intent(this, LoginActivity::class.java) - } + // TODO:: check for user logged in or not, and if logged in move to PasscodeActivity instead. + val intent = Intent(this, LoginActivity::class.java) + startActivity(intent) finish() } diff --git a/androidApp/src/main/java/org/mifos/mobile/ui/activities/base/BaseActivity.kt b/androidApp/src/main/java/org/mifos/mobile/ui/activities/base/BaseActivity.kt deleted file mode 100644 index acf1aa3bc..000000000 --- a/androidApp/src/main/java/org/mifos/mobile/ui/activities/base/BaseActivity.kt +++ /dev/null @@ -1,230 +0,0 @@ -package org.mifos.mobile.ui.activities.base - -import android.annotation.SuppressLint -import android.app.Activity -import android.app.ProgressDialog -import android.content.Context -import android.view.MenuItem -import android.view.View -import android.view.inputmethod.InputMethodManager -import android.widget.Toast -import androidx.appcompat.widget.Toolbar -import androidx.core.view.ViewCompat -import androidx.fragment.app.Fragment -import androidx.fragment.app.FragmentManager -import com.mifos.mobile.passcode.BasePassCodeActivity -import dagger.hilt.android.AndroidEntryPoint -import org.mifos.mobile.R -import org.mifos.mobile.core.common.utils.LanguageHelper -import org.mifos.mobile.ui.activities.PassCodeActivity -import org.mifos.mobile.ui.views.BaseActivityCallback - -/** - * @author ishan - * @since 08/07/16 - */ -@AndroidEntryPoint -@SuppressLint("Registered") -open class BaseActivity : BasePassCodeActivity(), BaseActivityCallback { - /** - * @return Returns toolbar linked with current activity - */ - var toolbar: Toolbar? = null - protected set - - private var progress: ProgressDialog? = null - override fun setContentView(layoutResID: Int) { - super.setContentView(layoutResID) - toolbar = findViewById(R.id.toolbar) - if (toolbar != null) { - setSupportActionBar(toolbar) - setToolbarElevation() - } - } - - override fun setContentView(view: View?) { - super.setContentView(view) - toolbar = findViewById(R.id.toolbar) - if (toolbar != null) { - setSupportActionBar(toolbar) - setToolbarElevation() - } - } - - fun showToolbar() { - toolbar = findViewById(R.id.toolbar) - toolbar?.visibility = View.VISIBLE - } - - fun hideToolbar() { - toolbar = findViewById(R.id.toolbar) - toolbar?.visibility = View.GONE - } - - /** - * Used for removing elevation from toolbar - */ - fun hideToolbarElevation() { - ViewCompat.setElevation(toolbar!!, 0f) - } - - /** - * Used for setting toolbar elevation - */ - fun setToolbarElevation() { - ViewCompat.setElevation(toolbar!!, 8f) - } - - /** - * This method is use to provide back button feature in the toolbar of activities - */ - protected fun showBackButton() { - if (supportActionBar != null) { - supportActionBar?.setHomeButtonEnabled(true) - supportActionBar?.setDisplayHomeAsUpEnabled(true) - } - } - - override fun onOptionsItemSelected(item: MenuItem): Boolean { - when (item.itemId) { - android.R.id.home -> onBackPressed() - } - return super.onOptionsItemSelected(item) - } - - /** - * Displays a toast in current activity. In this method the duration - * supplied is Short by default. If you want to specify duration - * use [BaseActivity.showToast] method. - * - * @param message Message that the toast must show. - */ - fun showToast(message: String) { - showToast(message, Toast.LENGTH_SHORT) - } - - /** - * Displays a toast in current activity. The duration can of two types: - * - * * SHORT - * * LONG - * - * - * @param message Message that the toast must show. - * @param toastType Duration for which the toast must be visible. - */ - fun showToast(message: String?, toastType: Int) { - Toast.makeText(this@BaseActivity, message, toastType).show() - } - - /** - * Calls a method `showProgressDialog("Working")` which displays ProgressDialog - */ - fun showProgressDialog() { - showProgressDialog(getString(R.string.working)) - } - - /** - * Displays a ProgressDialog - * @param message Message you want to display in Progress Dialog - */ - override fun showProgressDialog(message: String?) { - if (progress == null) { - progress = ProgressDialog(this, ProgressDialog.STYLE_SPINNER) - progress?.setCancelable(false) - } - progress?.setMessage(message) - progress?.show() - } - - /** - * Hides the progress dialog if it is currently being shown - */ - override fun hideProgressDialog() { - if (progress != null && (progress?.isShowing == true)) { - progress?.dismiss() - progress = null - } - } - - /** - * Used for setting title of Toolbar - * @param title String you want to display as title - */ - private fun setActionBarTitle(title: String?) { - if (supportActionBar != null && getTitle() != null) { - setTitle(title) - } - } - - /** - * Calls `setActionBarTitle()` to set Toolbar title - * @param title String you want to set as title - */ - override fun setToolbarTitle(title: String?) { - setActionBarTitle(title) - } - - override fun getPassCodeClass(): Class<*> { - return PassCodeActivity::class.java - } - - override fun attachBaseContext(base: Context) { - super.attachBaseContext(LanguageHelper.onAttach(base)) - } - - /** - * Replace Fragment in FrameLayout Container. - * - * @param fragment Fragment - * @param addToBackStack Add to BackStack - * @param containerId Container Id - */ - fun replaceFragment(fragment: Fragment, addToBackStack: Boolean, containerId: Int) { - invalidateOptionsMenu() - val backStateName = fragment.javaClass.name - val fragmentPopped = supportFragmentManager.popBackStackImmediate( - backStateName, - 0, - ) - if (!fragmentPopped && supportFragmentManager.findFragmentByTag(backStateName) == - null - ) { - val transaction = supportFragmentManager.beginTransaction() - transaction.replace(containerId, fragment, backStateName) - if (addToBackStack) { - transaction.addToBackStack(backStateName) - } - transaction.commit() - } - } - - /** - * It pops all the fragments which are currently in the backStack - */ - fun clearFragmentBackStack() { - val fm = supportFragmentManager - val backStackCount = supportFragmentManager.backStackEntryCount - for (i in 0 until backStackCount) { - val backStackId = supportFragmentManager.getBackStackEntryAt(i).id - fm.popBackStack(backStackId, FragmentManager.POP_BACK_STACK_INCLUSIVE) - } - } - - fun stackCount(): Int { - return supportFragmentManager.backStackEntryCount - } - - companion object { - fun hideKeyboard(context: Context) { - val activity = context as Activity - val inputMethodManager = context.getSystemService( - Activity.INPUT_METHOD_SERVICE, - ) as InputMethodManager - inputMethodManager.hideSoftInputFromWindow( - activity.currentFocus?.windowToken, - 0, - ) - } - } -} diff --git a/androidApp/src/main/res/layout/column_header_loan_repayment_schedule.xml b/androidApp/src/main/res/layout/column_header_loan_repayment_schedule.xml deleted file mode 100644 index 54718c1cd..000000000 --- a/androidApp/src/main/res/layout/column_header_loan_repayment_schedule.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - diff --git a/androidApp/src/main/res/layout/fragment_loan_repayment_schedule.xml b/androidApp/src/main/res/layout/fragment_loan_repayment_schedule.xml deleted file mode 100644 index d5c9e87ce..000000000 --- a/androidApp/src/main/res/layout/fragment_loan_repayment_schedule.xml +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/androidApp/src/main/res/layout/fragment_qr_code_display.xml b/androidApp/src/main/res/layout/fragment_qr_code_display.xml deleted file mode 100644 index 35ff85bbf..000000000 --- a/androidApp/src/main/res/layout/fragment_qr_code_display.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - diff --git a/androidApp/src/main/res/layout/fragment_qr_code_import.xml b/androidApp/src/main/res/layout/fragment_qr_code_import.xml deleted file mode 100644 index f1e90076e..000000000 --- a/androidApp/src/main/res/layout/fragment_qr_code_import.xml +++ /dev/null @@ -1,46 +0,0 @@ - - - - - - - - -