Fixed Gradle Build Error (#2670)

This commit is contained in:
Sk Niyaj Ali 2024-08-25 12:16:34 +05:30 committed by GitHub
parent 75770658f9
commit 8146fce9a8
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
18 changed files with 208 additions and 931 deletions

View File

@ -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)

View File

@ -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()
}

View File

@ -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)

View File

@ -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()
// }
}

View File

@ -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)

View File

@ -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()
}
}

View File

@ -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()
}

View File

@ -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,
)
}
}
}

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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)
}

View File

@ -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)

View File

@ -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" }

View File

@ -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")