mirror of
https://github.com/openMF/mifos-mobile.git
synced 2026-02-06 11:26:51 +00:00
Fixed Gradle Build Error (#2670)
This commit is contained in:
parent
75770658f9
commit
8146fce9a8
@ -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)
|
||||
|
||||
@ -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()
|
||||
}
|
||||
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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()
|
||||
// }
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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()
|
||||
}
|
||||
}
|
||||
|
||||
@ -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()
|
||||
}
|
||||
|
||||
@ -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,
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,30 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<!--
|
||||
~ This project is licensed under the open source MPL V2.
|
||||
~ See https://github.com/openMF/android-client/blob/master/LICENSE.md
|
||||
-->
|
||||
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:id="@+id/column_header_container"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="@dimen/default_column_header_height"
|
||||
android:orientation="vertical">
|
||||
|
||||
|
||||
<TextView
|
||||
android:id="@+id/column_header_textView"
|
||||
style="@style/Mifos.DesignSystem.TextStyle.Body"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="@dimen/height_0dp"
|
||||
android:layout_gravity="center"
|
||||
android:layout_weight="4"
|
||||
android:gravity="center"
|
||||
android:textColor="@color/black"
|
||||
android:textAppearance="@style/Base.TextAppearance.AppCompat.Medium"
|
||||
tools:text="Header Data" />
|
||||
|
||||
|
||||
<View style="@style/Mifos.DesignSystem.Components.HorizontalSpacer" />
|
||||
</LinearLayout>
|
||||
@ -1,117 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?><!--
|
||||
~ This project is licensed under the open source MPL V2.
|
||||
~ See https://github.com/openMF/self-service-app/blob/master/LICENSE.md
|
||||
-->
|
||||
|
||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical">
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/ll_loan_summary"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical"
|
||||
android:visibility="visible">
|
||||
|
||||
<com.google.android.material.card.MaterialCardView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@color/white"
|
||||
app:cardUseCompatPadding="true"
|
||||
app:contentPadding="@dimen/Mifos.DesignSystem.Spacing.CardInnerPadding">
|
||||
|
||||
<TableLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical">
|
||||
|
||||
<TableRow>
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="start"
|
||||
android:layout_weight="1"
|
||||
android:text="@string/account_number"
|
||||
android:textAppearance="@style/Base.TextAppearance.AppCompat.Medium" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv_account_number"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="start"
|
||||
android:layout_weight="1"
|
||||
android:gravity="start"
|
||||
android:textAppearance="@style/Base.TextAppearance.AppCompat.Medium"
|
||||
tools:text="@string/account_number" />
|
||||
</TableRow>
|
||||
|
||||
<TableRow>
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="start"
|
||||
android:layout_weight="1"
|
||||
android:text="@string/disbursement_date"
|
||||
android:textAppearance="@style/Base.TextAppearance.AppCompat.Medium" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv_disbursement_date"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="start"
|
||||
android:layout_weight="1"
|
||||
android:gravity="start"
|
||||
android:textAppearance="@style/Base.TextAppearance.AppCompat.Medium"
|
||||
tools:text="@string/disbursement_date" />
|
||||
</TableRow>
|
||||
|
||||
<TableRow>
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="start"
|
||||
android:layout_weight="1"
|
||||
android:text="@string/no_of_payments"
|
||||
android:textAppearance="@style/Base.TextAppearance.AppCompat.Medium" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv_number_of_payments"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="start"
|
||||
android:layout_weight="1"
|
||||
android:gravity="start"
|
||||
android:textAppearance="@style/Base.TextAppearance.AppCompat.Medium"
|
||||
tools:text="@string/no_of_payments" />
|
||||
</TableRow>
|
||||
|
||||
</TableLayout>
|
||||
|
||||
</com.google.android.material.card.MaterialCardView>
|
||||
|
||||
<com.evrencoskun.tableview.TableView
|
||||
android:id="@+id/tv_repayment_schedule"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="@dimen/default_margin"
|
||||
android:layout_marginLeft="@dimen/default_margin"
|
||||
android:layout_marginTop="@dimen/default_margin"
|
||||
android:layout_marginRight="@dimen/default_margin"
|
||||
android:layout_marginBottom="@dimen/default_margin"
|
||||
app:selected_color="?attr/colorPrimary" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<include
|
||||
android:id="@+id/layout_error"
|
||||
layout="@layout/error_layout"
|
||||
android:visibility="gone" />
|
||||
|
||||
</RelativeLayout>
|
||||
@ -1,13 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:gravity="center"
|
||||
android:orientation="vertical">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/iv_qr_code"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/Mifos.DesignSystem.Size.QRCode" />
|
||||
|
||||
</LinearLayout>
|
||||
@ -1,46 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:custom="http://schemas.android.com/apk/res-auto"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical">
|
||||
|
||||
<TextView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center"
|
||||
android:padding="@dimen/Mifos.DesignSystem.Spacing.CardInnerPaddingLarge"
|
||||
android:text="@string/select_region_qr" />
|
||||
|
||||
|
||||
<com.isseiaoki.simplecropview.CropImageView
|
||||
android:id="@+id/iv_crop_qr_code"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="@dimen/height_0dp"
|
||||
android:layout_weight="1"
|
||||
android:adjustViewBounds="true"
|
||||
android:scaleType="centerInside"
|
||||
custom:scv_animation_duration="200"
|
||||
custom:scv_animation_enabled="true"
|
||||
custom:scv_background_color="@color/light_black"
|
||||
custom:scv_crop_enabled="true"
|
||||
custom:scv_frame_color="@color/blue_light"
|
||||
custom:scv_frame_stroke_weight="@dimen/stroke_weight"
|
||||
custom:scv_guide_color="@color/blue_light"
|
||||
custom:scv_guide_show_mode="show_always"
|
||||
custom:scv_guide_stroke_weight="@dimen/stroke_weight"
|
||||
custom:scv_handle_color="@color/blue_light"
|
||||
custom:scv_handle_shadow_enabled="true"
|
||||
custom:scv_handle_show_mode="show_always"
|
||||
custom:scv_handle_size="@dimen/scv_handle_size"
|
||||
custom:scv_initial_frame_scale="1.0"
|
||||
custom:scv_min_frame_size="@dimen/min_frame_size"
|
||||
custom:scv_overlay_color="@color/gray_dark" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/btn_proceed"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/proceed" />
|
||||
|
||||
</LinearLayout>
|
||||
@ -1,205 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.core.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginHorizontal="@dimen/Mifos.DesignSystem.Spacing.screenHorizontalMargin"
|
||||
android:layout_marginVertical="@dimen/Mifos.DesignSystem.Spacing.screenVerticalMargin"
|
||||
android:orientation="vertical">
|
||||
|
||||
<com.google.android.material.textfield.TextInputLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="@dimen/Mifos.DesignSystem.Spacing.marginBetweenItemsSmall">
|
||||
|
||||
<com.google.android.material.textfield.TextInputEditText
|
||||
android:id="@+id/et_account_number"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:hint="@string/account_number"
|
||||
android:inputType="text" />
|
||||
</com.google.android.material.textfield.TextInputLayout>
|
||||
|
||||
<com.google.android.material.textfield.TextInputLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="@dimen/Mifos.DesignSystem.Spacing.marginBetweenItemsSmall">
|
||||
|
||||
<com.google.android.material.textfield.TextInputEditText
|
||||
android:id="@+id/et_username"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:hint="@string/username"
|
||||
android:inputType="textEmailAddress" />
|
||||
</com.google.android.material.textfield.TextInputLayout>
|
||||
|
||||
<com.google.android.material.textfield.TextInputLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="@dimen/Mifos.DesignSystem.Spacing.marginBetweenItemsSmall">
|
||||
|
||||
<com.google.android.material.textfield.TextInputEditText
|
||||
android:id="@+id/et_first_name"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:hint="@string/first_name"
|
||||
android:inputType="text" />
|
||||
</com.google.android.material.textfield.TextInputLayout>
|
||||
|
||||
<com.google.android.material.textfield.TextInputLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="@dimen/Mifos.DesignSystem.Spacing.marginBetweenItemsSmall">
|
||||
|
||||
<com.google.android.material.textfield.TextInputEditText
|
||||
android:id="@+id/et_last_name"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:hint="@string/last_name"
|
||||
android:inputType="text" />
|
||||
</com.google.android.material.textfield.TextInputLayout>
|
||||
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<com.hbb20.CountryCodePicker
|
||||
android:id="@+id/countryCodePicker"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
app:ccp_showNameCode="false" />
|
||||
|
||||
<com.google.android.material.textfield.TextInputLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="@dimen/Mifos.DesignSystem.Spacing.marginBetweenItemsSmall">
|
||||
|
||||
<com.google.android.material.textfield.TextInputEditText
|
||||
android:id="@+id/et_phone_number"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:hint="@string/phone_number"
|
||||
android:inputType="number" />
|
||||
</com.google.android.material.textfield.TextInputLayout>
|
||||
</LinearLayout>
|
||||
|
||||
|
||||
<com.google.android.material.textfield.TextInputLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="@dimen/Mifos.DesignSystem.Spacing.marginBetweenItemsSmall">
|
||||
|
||||
<com.google.android.material.textfield.TextInputEditText
|
||||
android:id="@+id/et_email"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:hint="@string/email"
|
||||
android:inputType="textEmailAddress" />
|
||||
</com.google.android.material.textfield.TextInputLayout>
|
||||
|
||||
|
||||
<com.google.android.material.textfield.TextInputLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="@dimen/Mifos.DesignSystem.Spacing.marginBetweenItemsSmall"
|
||||
app:passwordToggleEnabled="true">
|
||||
|
||||
<com.google.android.material.textfield.TextInputEditText
|
||||
android:id="@+id/et_password"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:hint="@string/password"
|
||||
android:inputType="textPassword" />
|
||||
</com.google.android.material.textfield.TextInputLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center_vertical"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<com.google.android.material.progressindicator.LinearProgressIndicator
|
||||
android:id="@+id/progressBar"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:visibility="gone"
|
||||
android:indeterminate="false"
|
||||
android:progress="0" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/password_strength"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="@dimen/Mifos.DesignSystem.Spacing.marginWords"
|
||||
android:visibility="gone"
|
||||
android:gravity="center_horizontal"
|
||||
android:text="@string/password_strength_weak" />
|
||||
</LinearLayout>
|
||||
|
||||
<com.google.android.material.textfield.TextInputLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="@dimen/Mifos.DesignSystem.Spacing.marginBetweenItemsSmall"
|
||||
app:passwordToggleEnabled="true">
|
||||
|
||||
<com.google.android.material.textfield.TextInputEditText
|
||||
android:id="@+id/et_confirm_password"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:hint="@string/confirm_password"
|
||||
android:inputType="textPassword" />
|
||||
</com.google.android.material.textfield.TextInputLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="@dimen/Mifos.DesignSystem.Spacing.marginBetweenItemsSmall"
|
||||
android:gravity="center"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<TextView
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:text="@string/verification_mode" />
|
||||
|
||||
<RadioGroup
|
||||
android:id="@+id/rg_verification_mode"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<RadioButton
|
||||
android:id="@+id/rb_email"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginEnd="@dimen/Mifos.DesignSystem.Spacing.marginBetweenItemsSmall"
|
||||
android:checked="true"
|
||||
android:text="@string/rb_email" />
|
||||
|
||||
<RadioButton
|
||||
android:id="@+id/rb_mobile"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/rb_mobile" />
|
||||
|
||||
</RadioGroup>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<Button
|
||||
android:id="@+id/btn_register"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/register" />
|
||||
|
||||
</LinearLayout>
|
||||
</androidx.core.widget.NestedScrollView>
|
||||
@ -1,31 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical">
|
||||
|
||||
<FrameLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<me.dm7.barcodescanner.zxing.ZXingScannerView
|
||||
android:id="@+id/view_scanner"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_gravity="center">
|
||||
|
||||
</me.dm7.barcodescanner.zxing.ZXingScannerView>
|
||||
|
||||
<ImageButton
|
||||
android:id="@+id/btn_flash"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="bottom|center"
|
||||
android:layout_marginBottom="@dimen/Mifos.DesignSystem.Spacing.marginBetweenSections"
|
||||
android:background="@null"
|
||||
app:srcCompat="@drawable/ic_flash_on" />
|
||||
|
||||
</FrameLayout>
|
||||
|
||||
</LinearLayout>
|
||||
@ -1,17 +1,11 @@
|
||||
package org.mifos.mobile.feature.home.navigation
|
||||
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.net.Uri
|
||||
import android.provider.Settings
|
||||
import android.widget.Toast
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.navigation.NavController
|
||||
import androidx.navigation.NavGraphBuilder
|
||||
import androidx.navigation.NavOptions
|
||||
import androidx.navigation.compose.composable
|
||||
import androidx.navigation.compose.navigation
|
||||
import org.mifos.mobile.feature.home.R
|
||||
import org.mifos.mobile.feature.home.screens.HomeScreen
|
||||
import org.mifos.mobile.feature.home.viewmodel.HomeCardItem
|
||||
|
||||
fun NavGraphBuilder.homeNavGraph(
|
||||
onNavigate: (HomeDestinations) -> Unit,
|
||||
@ -45,3 +39,7 @@ fun NavGraphBuilder.homeRoute(
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
fun NavController.navigateToHomeScreen(navOptions: NavOptions? = null) {
|
||||
return this.navigate(HomeNavigation.HomeScreen.route, navOptions)
|
||||
}
|
||||
@ -22,7 +22,7 @@ dependencies {
|
||||
|
||||
//qr code
|
||||
implementation("com.google.zxing:core:3.5.2")
|
||||
implementation("me.dm7.barcodescanner:zxing:1.9.13")
|
||||
// implementation("me.dm7.barcodescanner:zxing:1.9.13")
|
||||
|
||||
//gson
|
||||
implementation(libs.squareup.retrofit.converter.gson)
|
||||
|
||||
@ -1,9 +1,31 @@
|
||||
[versions]
|
||||
androidImageCropperVersion = "4.0.0"
|
||||
annotationVersion = "1.1.0"
|
||||
appcompatVersion = "1.6.1"
|
||||
biometricVersion = "1.1.0"
|
||||
ccpVersion = "2.7.2"
|
||||
compileSdk = "34"
|
||||
constraintlayoutVersion = "2.1.4"
|
||||
coreKtxVersion = "1.12.0"
|
||||
coreTestingVersion = "2.2.0"
|
||||
coreVersion = "3.5.2"
|
||||
countrycodechooserVersion = "1.0"
|
||||
espressoContribVersion = "3.5.1"
|
||||
kotlinxCoroutinesAndroidVersion = "1.6.4"
|
||||
kotlinxCoroutinesTestVersion = "1.7.3"
|
||||
legacySupportV4Version = "1.0.0"
|
||||
mifosPasscodeVersion = "1.0.3"
|
||||
minSdk = "24"
|
||||
mockitoAndroidVersion = "5.4.0"
|
||||
mockitoCoreVersion = "5.4.0"
|
||||
mockitoCore = "5.4.0"
|
||||
multidexVersion = "2.0.1"
|
||||
recyclerviewVersion = "1.2.1"
|
||||
rulesVersion = "1.6.0-alpha01"
|
||||
runnerVersion = "1.6.0-alpha04"
|
||||
simplecropviewVersion = "1.1.8"
|
||||
sweetErrorVersion = "1.0.0"
|
||||
tableviewVersion = "0.8.9.4"
|
||||
targetSdk = "34"
|
||||
androidGradlePlugin = "8.2.2"
|
||||
androidTools = "31.2.1"
|
||||
@ -53,12 +75,21 @@ googleAppCodeScanner = "17.2.0"
|
||||
cameraxVersion = "1.3.1"
|
||||
compose-material = "1.6.8"
|
||||
googleMaps = "4.4.1"
|
||||
turbineVersion = "1.1.0"
|
||||
uihouseVersion = "alpha-2.1"
|
||||
vectordrawableVersion = "1.1.0"
|
||||
zxingVersion = "1.9.13"
|
||||
|
||||
[libraries]
|
||||
android-image-cropper = { module = "com.github.CanHub:Android-Image-Cropper", version.ref = "androidImageCropperVersion" }
|
||||
androidx-activity-ktx = { module = "androidx.activity:activity-ktx", version.ref = "activityVersion" }
|
||||
androidx-annotation = { module = "androidx.annotation:annotation", version.ref = "annotationVersion" }
|
||||
androidx-appcompat = { module = "androidx.appcompat:appcompat", version.ref = "appcompatVersion" }
|
||||
androidx-biometric = { module = "androidx.biometric:biometric", version.ref = "biometricVersion" }
|
||||
androidx-constraintlayout = { module = "androidx.constraintlayout:constraintlayout", version.ref = "constraintlayoutVersion" }
|
||||
androidx-core-ktx = { module = "androidx.core:core-ktx", version.ref = "coreKtxVersion" }
|
||||
androidx-core-testing = { module = "androidx.arch.core:core-testing", version.ref = "coreTestingVersion" }
|
||||
androidx-espresso-contrib = { module = "androidx.test.espresso:espresso-contrib", version.ref = "espressoContribVersion" }
|
||||
androidx-fragment-ktx = { module = "androidx.fragment:fragment-ktx", version.ref = "fragmentVersion" }
|
||||
android-desugarJdkLibs = { group = "com.android.tools", name = "desugar_jdk_libs", version.ref = "androidDesugarJdkLibs" }
|
||||
androidx-compose-bom = { group = "androidx.compose", name = "compose-bom", version.ref = "androidxComposeBom" }
|
||||
@ -74,6 +105,15 @@ androidx-compose-ui-test-junit4 = { group = "androidx.compose.ui", name = "ui-te
|
||||
androidx-compose-ui-test-manifest = { group = "androidx.compose.ui", name = "ui-test-manifest"}
|
||||
androidx-compose-ui-tooling = { group = "androidx.compose.ui", name = "ui-tooling"}
|
||||
androidx-compose-runtime = { group = "androidx.compose.runtime", name = "runtime" }
|
||||
androidx-legacy-support-v4 = { module = "androidx.legacy:legacy-support-v4", version.ref = "legacySupportV4Version" }
|
||||
androidx-multidex = { module = "androidx.multidex:multidex", version.ref = "multidexVersion" }
|
||||
androidx-rules = { module = "androidx.test:rules", version.ref = "rulesVersion" }
|
||||
androidx-runner = { module = "androidx.test:runner", version.ref = "runnerVersion" }
|
||||
androidx-vectordrawable = { module = "androidx.vectordrawable:vectordrawable", version.ref = "vectordrawableVersion" }
|
||||
androidx-recyclerview = { module = "androidx.recyclerview:recyclerview", version.ref = "recyclerviewVersion" }
|
||||
ccp = { module = "com.hbb20:ccp", version.ref = "ccpVersion" }
|
||||
zxing-core = { module = "com.google.zxing:core", version.ref = "coreVersion" }
|
||||
countrycodechooser = { module = "com.github.ParveshSandila:CountryCodeChooser", version.ref = "countrycodechooserVersion" }
|
||||
hilt-android = { group = "com.google.dagger", name = "hilt-android", version.ref = "hilt" }
|
||||
hilt-compiler = { group = "com.google.dagger", name = "hilt-android-compiler", version.ref = "hilt" }
|
||||
androidx-compose-ui-tooling-preview = { group = "androidx.compose.ui", name = "ui-tooling-preview"}
|
||||
@ -85,6 +125,12 @@ androidx-lifecycle-ktx = { module = "androidx.lifecycle:lifecycle-viewmodel-ktx"
|
||||
androidx-lifecycle-extensions = { module = "androidx.lifecycle:lifecycle-extensions", version.ref = "lifecycleExtensionsVersion" }
|
||||
jakewharton-butterknife = { module = "com.jakewharton:butterknife", version.ref = "butterKnifeVersion" }
|
||||
jakewharton-compiler = { module = "com.jakewharton:butterknife-compiler", version.ref = "butterKnifeVersion" }
|
||||
kotlinx-coroutines-android = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-android", version.ref = "kotlinxCoroutinesAndroidVersion" }
|
||||
kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-test", version.ref = "kotlinxCoroutinesTestVersion" }
|
||||
mifos-passcode = { module = "com.github.openMF.mifos-passcode:compose", version.ref = "mifosPasscodeVersion" }
|
||||
mockito-android = { module = "org.mockito:mockito-android", version.ref = "mockitoAndroidVersion" }
|
||||
mockito-core = { module = "org.mockito:mockito-core", version.ref = "mockitoCoreVersion" }
|
||||
simplecropview = { module = "com.isseiaoki:simplecropview", version.ref = "simplecropviewVersion" }
|
||||
squareup-retrofit2 = { module = "com.squareup.retrofit2:retrofit", version.ref = "retrofitVersion" }
|
||||
squareup-retrofit-adapter-rxjava = { module = "com.squareup.retrofit2:adapter-rxjava2", version.ref = "retrofitVersion" }
|
||||
squareup-retrofit-converter-gson = { module = "com.squareup.retrofit2:converter-gson", version.ref = "retrofitVersion" }
|
||||
@ -92,6 +138,8 @@ squareup-okhttp = { module = "com.squareup.okhttp3:okhttp", version.ref = "okHtt
|
||||
squareup-logging-interceptor = { module = "com.squareup.okhttp3:logging-interceptor", version.ref = "okHttp3Version" }
|
||||
reactivex-rxjava2-android = { module = "io.reactivex.rxjava2:rxandroid", version.ref = "rxandroidVersion" }
|
||||
reactivex-rxjava2 = { module = "io.reactivex.rxjava2:rxjava", version.ref = "rxjavaVersion" }
|
||||
sweet-error = { module = "com.github.therajanmaurya:Sweet-Error", version.ref = "sweetErrorVersion" }
|
||||
tableview = { module = "com.evrencoskun.library:tableview", version.ref = "tableviewVersion" }
|
||||
truth = { group = "com.google.truth", name = "truth", version.ref = "truth" }
|
||||
junit = { module = "junit:junit", version.ref = "junitVersion"}
|
||||
google-oss-licenses = { group = "com.google.android.gms", name = "play-services-oss-licenses", version.ref = "googleOss" }
|
||||
@ -123,10 +171,13 @@ firebase-performance-gradlePlugin = { group = "com.google.firebase", name = "per
|
||||
kotlin-gradlePlugin = { group = "org.jetbrains.kotlin", name = "kotlin-gradle-plugin", version.ref = "kotlin" }
|
||||
ksp-gradlePlugin = { group = "com.google.devtools.ksp", name = "com.google.devtools.ksp.gradle.plugin", version.ref = "ksp" }
|
||||
room-gradlePlugin = { group = "androidx.room", name = "room-gradle-plugin", version.ref = "room" }
|
||||
turbine = { module = "app.cash.turbine:turbine", version.ref = "turbineVersion" }
|
||||
uihouse = { module = "com.github.rahul-gill.mifos-ui-library:uihouse", version.ref = "uihouseVersion" }
|
||||
work-testing = { group = "androidx.work", name = "work-testing", version = "2.8.1" }
|
||||
androidx-test-ext-junit = { group = "androidx.test.ext", name = "junit", version.ref = "androidx-test-ext-junit" }
|
||||
espresso-core = { group = "androidx.test.espresso", name = "espresso-core", version.ref = "espresso-core" }
|
||||
material = { group = "com.google.android.material", name = "material", version.ref = "material" }
|
||||
zxing = { module = "me.dm7.barcodescanner:zxing", version.ref = "zxingVersion" }
|
||||
|
||||
[plugins]
|
||||
android-application = { id = "com.android.application", version.ref = "androidGradlePlugin" }
|
||||
|
||||
@ -4,19 +4,18 @@ pluginManagement {
|
||||
gradlePluginPortal()
|
||||
google()
|
||||
mavenCentral()
|
||||
maven("https://www.jitpack.io")
|
||||
maven("https://plugins.gradle.org/m2/")
|
||||
}
|
||||
}
|
||||
dependencyResolutionManagement {
|
||||
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
|
||||
repositoriesMode.set(RepositoriesMode.PREFER_PROJECT)
|
||||
repositories {
|
||||
google()
|
||||
mavenCentral()
|
||||
maven("https://www.jitpack.io")
|
||||
maven("https://jitpack.io")
|
||||
maven("https://plugins.gradle.org/m2/")
|
||||
}
|
||||
}
|
||||
|
||||
rootProject.name = "mifos-mobile"
|
||||
|
||||
enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS")
|
||||
|
||||
Loading…
Reference in New Issue
Block a user