diff --git a/app/build.gradle b/app/build.gradle index 9a4c67701a..1edecd0f00 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,9 +11,10 @@ plugins { id('maven') id('com.google.firebase.crashlytics') id('com.google.gms.google-services') + id('com.google.firebase.firebase-perf') } -def VERSION_NAME = "1.1.1" +def VERSION_NAME = "1.1.2" android { compileSdkVersion 29 @@ -29,7 +30,7 @@ android { applicationId "com.naviapp" minSdkVersion 21 targetSdkVersion 29 - versionCode 32 + versionCode 33 versionName VERSION_NAME multiDexEnabled true testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" @@ -261,6 +262,9 @@ dependencies { // Auto fetch phone number implementation 'com.google.android.gms:play-services-auth:18.0.0' + // Add the dependency for the Performance Monitoring library + implementation 'com.google.firebase:firebase-perf:19.0.7' + // AndroidJUnitRunner and JUnit Rules androidTestImplementation 'com.android.support.test:runner:1.0.2' androidTestImplementation 'com.android.support.test:rules:1.0.2' diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 5685cbd6dd..58aec01667 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -147,6 +147,9 @@ + () val shouldUpdate = MutableLiveData() - fun checkAppUpdate() { - coroutineScope.launch { - val response = repository.checkAppUpdate() - if (response.error == null) { - appUpgradeData.value = response.data - } else { - appUpgradeData.value = null - } - } + fun setData(data: AppUpgradeResponse?) { + appUpgradeData.value = data } } \ No newline at end of file diff --git a/app/src/main/java/com/naviapp/common/FeedbackFragment.kt b/app/src/main/java/com/naviapp/common/FeedbackFragment.kt index 6a119f13a5..54cececf1f 100644 --- a/app/src/main/java/com/naviapp/common/FeedbackFragment.kt +++ b/app/src/main/java/com/naviapp/common/FeedbackFragment.kt @@ -99,15 +99,16 @@ class FeedbackFragment : BaseBottomSheet(), View.OnClickListener { val feedbackOption = FeedbackRowItemBinding.inflate(inflater, null, true) feedbackOption.data = option.desc feedbackOption.feedbackRb.tag = option.code.orEmpty() + feedbackOption.feedbackRb.setOnCheckedChangeListener { buttonView, isChecked -> - if (isChecked && prevSelectedCode != option.code) { + if (isChecked && selectedCode != option.code) { + prevSelectedCode = selectedCode + selectedCode = option.code + handleCheckClick() if (!isOptionSelected) { isOptionSelected = true submitButtonState() } - prevSelectedCode = selectedCode - selectedCode = option.code - handleCheckClick() } } binding.feedbackDetailLay.feedbackRg.addView(feedbackOption.root) @@ -157,7 +158,7 @@ class FeedbackFragment : BaseBottomSheet(), View.OnClickListener { if (isOptionSelected) { val comment = binding.feedbackDetailLay.commentEt.text?.toString().orEmpty() val data = FeedbackSubmitData( - selectedCode.orEmpty(), + screen.orEmpty(), arrayListOf(selectedCode.orEmpty()), comment ) diff --git a/app/src/main/java/com/naviapp/errors/utils/GenericErrorData.kt b/app/src/main/java/com/naviapp/errors/utils/GenericErrorData.kt index a86dbb42af..2d55b01213 100644 --- a/app/src/main/java/com/naviapp/errors/utils/GenericErrorData.kt +++ b/app/src/main/java/com/naviapp/errors/utils/GenericErrorData.kt @@ -86,10 +86,10 @@ fun getEditAccountData(): GenericWarningResponse { null, context.getString(R.string.warning), listOf( - Action(context.getString(R.string.cancel)), - Action(context.getString(R.string.confirm)) + Action(context.getString(R.string.confirm)), + Action(context.getString(R.string.cancel)) ), - listOf(Field(context.getString(R.string.verify_bank_account_again), null, null)) + null ) } diff --git a/app/src/main/java/com/naviapp/firebasedb/FirebaseConstants.kt b/app/src/main/java/com/naviapp/firebasedb/FirebaseConstants.kt index 2d08b3d4b7..a303aab959 100644 --- a/app/src/main/java/com/naviapp/firebasedb/FirebaseConstants.kt +++ b/app/src/main/java/com/naviapp/firebasedb/FirebaseConstants.kt @@ -8,6 +8,8 @@ package com.naviapp.firebasedb const val SELFIE = "SELFIE" const val CUSTOMER_DETAILS = "CUSTOMER_DETAILS" +const val BASIC_DETAILS = "BASIC_DETAILS" +const val WORK_DETAILS = "WORK_DETAILS" const val PAN_DETAILS = "PAN_DETAILS" const val INIT_REPAYMENT = "INIT_REPAYMENT" const val REPAYMENT_CONFIRMATION = "REPAYMENT_CONFIRMATION" diff --git a/app/src/main/java/com/naviapp/firebasedb/FirebaseDataHelper.kt b/app/src/main/java/com/naviapp/firebasedb/FirebaseDataHelper.kt index c5a6274d33..8fd99981e6 100644 --- a/app/src/main/java/com/naviapp/firebasedb/FirebaseDataHelper.kt +++ b/app/src/main/java/com/naviapp/firebasedb/FirebaseDataHelper.kt @@ -48,6 +48,8 @@ class FirebaseDataHelper { SELFIE -> "UPLOAD_SELFIE" LOAN_AGREEMENT_CREATE -> "CREATE_LOAN_AGREEMENT" CUSTOMER_DETAILS -> "UPDATE_CUSTOMER_DETAILS" + BASIC_DETAILS -> "UPDATE_BASIC_DETAILS" + WORK_DETAILS -> "UPDATE_WORK_DETAILS" PAN_DETAILS -> "UPDATE_PAN_DETAILS" INIT_REPAYMENT -> "INITIATE_REPAYMENT" REPAYMENT_CONFIRMATION -> "REPAYMENT_CONFIRMATION" diff --git a/app/src/main/java/com/naviapp/getloan/bankdetailsautodebit/fragments/BankDetailsAutoDebitFragment.kt b/app/src/main/java/com/naviapp/getloan/bankdetailsautodebit/fragments/BankDetailsAutoDebitFragment.kt index ee53a38290..0d1b00d40f 100644 --- a/app/src/main/java/com/naviapp/getloan/bankdetailsautodebit/fragments/BankDetailsAutoDebitFragment.kt +++ b/app/src/main/java/com/naviapp/getloan/bankdetailsautodebit/fragments/BankDetailsAutoDebitFragment.kt @@ -472,12 +472,12 @@ class BankDetailsAutoDebitFragment : BaseFragment(), View.OnClickListener { private fun handleEditAccountClick() { naviAnalyticsEventTracker.onEditAccountTap() val primaryAction = View.OnClickListener { - naviAnalyticsEventTracker.onCancelButtonTap() - } - val secondaryAction = View.OnClickListener { naviAnalyticsEventTracker.onConfirmButtonTap() navigateToBankDetailsScreen() } + val secondaryAction = View.OnClickListener { + naviAnalyticsEventTracker.onCancelButtonTap() + } try { val waringDialog = ActionWarningFragment.getInstance( diff --git a/app/src/main/java/com/naviapp/models/FeedbackPageType.kt b/app/src/main/java/com/naviapp/models/FeedbackPageType.kt index d86c2b17b7..1e8f3f5244 100644 --- a/app/src/main/java/com/naviapp/models/FeedbackPageType.kt +++ b/app/src/main/java/com/naviapp/models/FeedbackPageType.kt @@ -16,7 +16,7 @@ object FeedbackPageType { const val WORK_DETAILS_PAGE = "WORK_DETAILS_PAGE" const val PAN_DETAILS_PAGE = "PAN_DETAILS_PAGE" const val LOAN_OFFER_PAGE = "LOAN_OFFER_PAGE" - const val KYC_PAGE = "PERMISSIONS_PAGE" + const val KYC_PAGE = "KYC_PAGE" const val BANK_DETAILS_PAGE = "BANK_DETAILS_PAGE" const val AUTO_DEBIT_PAGE = "AUTO_DEBIT_PAGE" const val LOAN_AGREEMENT_PAGE = "LOAN_AGREEMENT_PAGE" diff --git a/app/src/main/java/com/naviapp/models/FeedbackSubmitData.kt b/app/src/main/java/com/naviapp/models/FeedbackSubmitData.kt index 8e4a2933db..932051d7b8 100644 --- a/app/src/main/java/com/naviapp/models/FeedbackSubmitData.kt +++ b/app/src/main/java/com/naviapp/models/FeedbackSubmitData.kt @@ -11,5 +11,5 @@ import com.google.gson.annotations.SerializedName data class FeedbackSubmitData( @SerializedName("pageCode") val collect: String? = null, @SerializedName("feedbackCodes") val feedbackCodesList: ArrayList? = null, - @SerializedName("comments") val comments: String? = null + @SerializedName("comment") val comments: String? = null ) \ No newline at end of file diff --git a/app/src/main/java/com/naviapp/models/LoginSettings.kt b/app/src/main/java/com/naviapp/models/LoginSettings.kt index b717cb0001..7d2792a8c0 100644 --- a/app/src/main/java/com/naviapp/models/LoginSettings.kt +++ b/app/src/main/java/com/naviapp/models/LoginSettings.kt @@ -1,10 +1,12 @@ package com.naviapp.models import com.google.gson.annotations.SerializedName +import com.naviapp.models.response.AppUpgradeResponse data class LoginSettings( @SerializedName("warning") val warning: Warning? = null, - @SerializedName("features") val features: List? = null + @SerializedName("features") val features: List? = null, + @SerializedName("appUpgradeSettings") val appUpgradeSettings: AppUpgradeResponse? = null ) data class Warning( diff --git a/app/src/main/java/com/naviapp/registration/SplashActivity.kt b/app/src/main/java/com/naviapp/registration/SplashActivity.kt index 4cd17edf07..80b0d78702 100644 --- a/app/src/main/java/com/naviapp/registration/SplashActivity.kt +++ b/app/src/main/java/com/naviapp/registration/SplashActivity.kt @@ -24,6 +24,7 @@ import com.naviapp.network.ApiErrorTagType import com.naviapp.permission.activities.PermissionActivity import com.naviapp.pushnotification.NotificationHandler import com.naviapp.registration.navigator.RegistrationNavigator +import com.naviapp.registration.viewmodel.ConfigVM import com.naviapp.registration.viewmodel.RegistrationVM import com.naviapp.sharedpref.PreferenceManager import com.naviapp.tutorial.TutorialActivity @@ -42,9 +43,11 @@ class SplashActivity : BaseActivity() { private lateinit var binding: ActivitySplashScreenBinding private val registrationVM by lazy { ViewModelProvider(this).get(RegistrationVM::class.java) } + private val configVM by lazy { ViewModelProvider(this).get(ConfigVM::class.java) } private var startTime = 0L private val navigator by lazy { RegistrationNavigator() } + private var handler: Handler? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -58,7 +61,10 @@ class SplashActivity : BaseActivity() { init() initObservers() loginSettings() - checkDevice() + } + + private fun loginSettings() { + configVM.fetchLoginSettings() } private fun loginSettings() { @@ -75,7 +81,11 @@ class SplashActivity : BaseActivity() { } } - private val noInternetListener = View.OnClickListener { checkDevice() } + private val noInternetListener = View.OnClickListener { + if (observeRedirectionStatus()) { + registrationVM.getRedirectStatus() + } + } private fun initErrors() { initError( @@ -90,10 +100,13 @@ class SplashActivity : BaseActivity() { private fun observeRedirectionStatus(): Boolean { val sessionToken = PreferenceManager.getStringPreference(SESSION_TOKEN) if (sessionToken.isNullOrBlank()) { - navigateToNextScreen() + navigateToNextScreen(getDelayBeforeTransition()) return false } - NotificationHandler.handleFcmToken() + return true + } + + private fun observeRedirectStatus() { registrationVM.redirectPage.observeNullable(this) { data -> hideLoader() data?.let { @@ -102,22 +115,35 @@ class SplashActivity : BaseActivity() { navigateToNextScreen() } } - return true } private fun initObservers() { loginSettingsObserver() - checkDeviceObserver() appUpdateObserver() + if (isRegisteredUser()) { + NotificationHandler.handleFcmToken() + observeRedirectStatus() + } else { + navigateToNextScreen() + } } private fun loginSettingsObserver() { - registrationVM.loginSettings.observeNonNull(this) { loginSettings -> - loginSettings.features?.forEach { - PreferenceManager.setBooleanPreference( - it.name.orEmpty(), - it.enabled.orFalse() - ) + configVM.loginSettings.observeNullable(this) { + it?.let { loginSetting -> + loginSetting.features?.forEach { + PreferenceManager.setBooleanPreference( + it.name.orEmpty(), + it.enabled.orFalse() + ) + } + loginSetting.appUpgradeSettings?.let { + appUpgradeVM.setData(it) + } + } ?: run { + if (observeRedirectionStatus()) { + registrationVM.getRedirectStatus() + } } } } @@ -132,44 +158,30 @@ class SplashActivity : BaseActivity() { } } - private fun checkDevice() { - getDeviceIdentifier().let { - registrationVM.checkDevice(it) - } - } - - private fun checkDeviceObserver() { - registrationVM.isBlacklisted.observeNullable(this) { isBlocked -> - isBlocked?.let { - if (it) { - toast(R.string.service_not_available) - } else { - appUpgradeVM.checkAppUpdate() - } - } ?: run { - appUpgradeVM.checkAppUpdate() - } - } - } - /*** * observeError fun is for handling error cases. eg : no network, server error, etc * **/ - private fun navigateToNextScreen() { - Handler().postDelayed({ - val nextActivityClass = destination() - val intent = Intent(this, nextActivityClass) - intent.addFlags( - Intent.FLAG_ACTIVITY_NEW_TASK or FLAG_ACTIVITY_CLEAR_TASK or Intent.FLAG_ACTIVITY_CLEAR_TOP - ) - if (nextActivityClass == TutorialActivity::class.java) { - startActivity(intent, getSharedTransitionBundle()) - } else { - startActivity(intent) - } - delayFinish() - }, getDelayBeforeTransition()) + private fun navigateToNextScreen(duration: Long = SPLASH_MAX_DELAY) { + handler?.removeCallbacksAndMessages(null) + handler = Handler() + handler?.postDelayed({ + startNextActivity() + }, duration) + } + + private fun startNextActivity() { + val nextActivityClass = destination() + val intent = Intent(this, nextActivityClass) + intent.addFlags( + Intent.FLAG_ACTIVITY_NEW_TASK or FLAG_ACTIVITY_CLEAR_TASK or Intent.FLAG_ACTIVITY_CLEAR_TOP + ) + if (nextActivityClass == TutorialActivity::class.java) { + startActivity(intent, getSharedTransitionBundle()) + } else { + startActivity(intent) + } + delayFinish() } private fun getDelayBeforeTransition(): Long { @@ -187,13 +199,21 @@ class SplashActivity : BaseActivity() { private fun destination(): Class { return when { - // isFirstTimeUser() -> TutorialActivity::class.java - !(PreferenceManager.getBooleanPreference(PERMISSION_SCREEN_SHOWN) - .orFalse()) -> PermissionActivity::class.java + // isFirstTimeUser() -> TutorialActivity::class.java + isPermissionScreenNeeded() -> PermissionActivity::class.java else -> RegistrationActivity::class.java } } + private fun isRegisteredUser(): Boolean { + val sessionToken = PreferenceManager.getStringPreference(SESSION_TOKEN) + return !sessionToken.isNullOrBlank() + } + + private fun isPermissionScreenNeeded(): Boolean { + return !(PreferenceManager.getBooleanPreference(PERMISSION_SCREEN_SHOWN).orFalse()) + } + private fun isFirstTimeUser(): Boolean { return PreferenceManager.getBooleanPreference(NOT_FIRST_TIME_USER).not() } @@ -204,5 +224,6 @@ class SplashActivity : BaseActivity() { companion object { private const val SPLASH_DELAY = 1000L private const val TAG = "SPLASH_ACTIVITY" + private const val SPLASH_MAX_DELAY = 10000L } } diff --git a/app/src/main/java/com/naviapp/registration/viewmodel/ConfigVM.kt b/app/src/main/java/com/naviapp/registration/viewmodel/ConfigVM.kt new file mode 100644 index 0000000000..9ec31cf35e --- /dev/null +++ b/app/src/main/java/com/naviapp/registration/viewmodel/ConfigVM.kt @@ -0,0 +1,37 @@ +/* + * * + * * Copyright (c) 2020 . All rights reserved @Navi + * + */ + +package com.naviapp.registration.viewmodel + +import androidx.lifecycle.LiveData +import androidx.lifecycle.MutableLiveData +import com.naviapp.common.BaseVM +import com.naviapp.models.LoginSettings +import com.naviapp.registration.repositories.RegisterRepository +import kotlinx.coroutines.launch +import timber.log.Timber + +class ConfigVM : BaseVM(false) { + + private val registerRepository = RegisterRepository() + + private val _loginSettings = MutableLiveData() + val loginSettings: LiveData + get() = _loginSettings + + + fun fetchLoginSettings() { + coroutineScope.launch { + val response = registerRepository.fetchLoginSettings() + Timber.tag("LOGIN SETTINGS").i("$response") + if (response.error == null) { + _loginSettings.value = response.data + } else { + _loginSettings.value = null + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/naviapp/registration/viewmodel/RegistrationVM.kt b/app/src/main/java/com/naviapp/registration/viewmodel/RegistrationVM.kt index 81c7e46bef..e692407a55 100644 --- a/app/src/main/java/com/naviapp/registration/viewmodel/RegistrationVM.kt +++ b/app/src/main/java/com/naviapp/registration/viewmodel/RegistrationVM.kt @@ -11,7 +11,6 @@ import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import com.naviapp.common.BaseVM import com.naviapp.firebasedb.FirebaseStatusType -import com.naviapp.models.LoginSettings import com.naviapp.models.RedirectPageStatus import com.naviapp.models.request.LoginRequest import com.naviapp.models.request.OtpRequest @@ -55,10 +54,6 @@ class RegistrationVM : BaseVM() { val privacyPolicy: LiveData get() = _privacyPolicy - private val _loginSettings = MutableLiveData() - val loginSettings: LiveData - get() = _loginSettings - private val _isBlacklisted = MutableLiveData() val isBlacklisted: LiveData get() = _isBlacklisted @@ -148,16 +143,6 @@ class RegistrationVM : BaseVM() { } } - fun fetchLoginSettings() { - coroutineScope.launch { - val response = registerRepository.fetchLoginSettings() - Timber.tag("LOGIN SETTINGS").i("$response") - if (response.error == null) { - _loginSettings.value = response.data - } - } - } - fun checkDevice(deviceId: String) { Timber.i("Device Id $deviceId") val registerRequest = RegisterRequest(deviceId, Constants.CHANNEL_ID) diff --git a/app/src/main/java/com/naviapp/selfiecapture/SelfieVerificationHelper.kt b/app/src/main/java/com/naviapp/selfiecapture/SelfieVerificationHelper.kt index d513923099..9dc9f7e27d 100644 --- a/app/src/main/java/com/naviapp/selfiecapture/SelfieVerificationHelper.kt +++ b/app/src/main/java/com/naviapp/selfiecapture/SelfieVerificationHelper.kt @@ -39,10 +39,13 @@ class SelfieVerificationHelper { else HVFaceConfig.LivenessMode.NONE ) + + /* if (introShownCount < MAX_NO_SLEFIE_INTRO) hvFaceConfig.isShouldShowInstructionPage = it.showInstructionsPage.orFalse() else hvFaceConfig.isShouldShowInstructionPage = false + */ if (it.faceCaptureTitle.isNullOrBlank().not()) hvFaceConfig.faceCaptureTitle = it.faceCaptureTitle @@ -59,7 +62,7 @@ class SelfieVerificationHelper { } ?: run { hvFaceConfig.setLivenessMode(HVFaceConfig.LivenessMode.TEXTURELIVENESS) - hvFaceConfig.isShouldShowInstructionPage = false + // hvFaceConfig.isShouldShowInstructionPage = false } val completionCallback = diff --git a/app/src/main/java/com/naviapp/useridentification/profile/fragments/ProfileFragment.kt b/app/src/main/java/com/naviapp/useridentification/profile/fragments/ProfileFragment.kt index 8ec7848107..c4dc586d49 100644 --- a/app/src/main/java/com/naviapp/useridentification/profile/fragments/ProfileFragment.kt +++ b/app/src/main/java/com/naviapp/useridentification/profile/fragments/ProfileFragment.kt @@ -24,11 +24,7 @@ import com.naviapp.common.navigator.ScreenNavigator import com.naviapp.dashboard.listeners.FragmentInterchangeListener import com.naviapp.databinding.UserProfileFragmentBinding import com.naviapp.errors.activities.ErrorActivity -import com.naviapp.firebasedb.CUSTOMER_DETAILS -import com.naviapp.firebasedb.FirebaseDataHelper -import com.naviapp.firebasedb.FirebaseDataReceiveListener -import com.naviapp.firebasedb.FirebaseResponse -import com.naviapp.firebasedb.FirebaseStatusType +import com.naviapp.firebasedb.* import com.naviapp.models.UserDetail import com.naviapp.network.ApiErrorTagType import com.naviapp.network.ApiErrorTagType.PROFILE_DETAILS_UPLOAD @@ -157,7 +153,7 @@ class ProfileFragment : BaseFragment(), View.OnClickListener, initFirebaseDataReceiver( lifecycle, firebaseDataReceiveListener, - CUSTOMER_DETAILS, + BASIC_DETAILS, requestId, notificationPath ) diff --git a/app/src/main/java/com/naviapp/useridentification/work/fragments/WorkFragment.kt b/app/src/main/java/com/naviapp/useridentification/work/fragments/WorkFragment.kt index 91e2c47226..99ee25288f 100644 --- a/app/src/main/java/com/naviapp/useridentification/work/fragments/WorkFragment.kt +++ b/app/src/main/java/com/naviapp/useridentification/work/fragments/WorkFragment.kt @@ -21,11 +21,7 @@ import com.naviapp.common.navigator.ScreenNavigator import com.naviapp.dashboard.listeners.FragmentInterchangeListener import com.naviapp.databinding.WorkFragmentBinding import com.naviapp.errors.activities.ErrorActivity -import com.naviapp.firebasedb.CUSTOMER_DETAILS -import com.naviapp.firebasedb.FirebaseDataHelper -import com.naviapp.firebasedb.FirebaseDataReceiveListener -import com.naviapp.firebasedb.FirebaseResponse -import com.naviapp.firebasedb.FirebaseStatusType +import com.naviapp.firebasedb.* import com.naviapp.models.UserDetail import com.naviapp.models.response.EmploymentTypeResponse import com.naviapp.network.ApiErrorTagType.WORK_DETAILS_UPLOAD @@ -155,7 +151,7 @@ class WorkFragment : BaseFragment(), View.OnClickListener, View.OnKeyListener, initFirebaseDataReceiver( lifecycle, firebaseDataReceiveListener, - CUSTOMER_DETAILS, + WORK_DETAILS, requestId, notificationPath ) diff --git a/app/src/main/res/layout/bank_details_auto_debit_fragment.xml b/app/src/main/res/layout/bank_details_auto_debit_fragment.xml index 8abeb31539..53b99d1c03 100644 --- a/app/src/main/res/layout/bank_details_auto_debit_fragment.xml +++ b/app/src/main/res/layout/bank_details_auto_debit_fragment.xml @@ -2,122 +2,127 @@ - + android:layout_height="match_parent"> - - - - - - - - - - - - - - - - - + android:layout_height="match_parent" + android:layout_margin="@dimen/container_margin" + android:clipChildren="false" + android:clipToPadding="false"> - - + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/kyc_fragment.xml b/app/src/main/res/layout/kyc_fragment.xml index ce719647f1..c50f9a817b 100644 --- a/app/src/main/res/layout/kyc_fragment.xml +++ b/app/src/main/res/layout/kyc_fragment.xml @@ -28,6 +28,7 @@ android:layout_marginEnd="@dimen/layout_dp_32" android:clipChildren="false" android:clipToPadding="false" + android:clickable="true" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent"> diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 567b36eb37..9049bcc05c 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -403,7 +403,7 @@ Same bank account will be used to get loan & to setup auto-debit of EMIs Change Bank? Leave a feedback…(optional) - It seems your are leaving! + It seems you are leaving! What went wrong? Close Thank you for sharing the \nfeedback with us. diff --git a/build.gradle b/build.gradle index 73393ff6f7..2b3200c839 100644 --- a/build.gradle +++ b/build.gradle @@ -17,6 +17,7 @@ buildscript { // Add the Crashlytics Gradle plugin. classpath 'com.google.firebase:firebase-crashlytics-gradle:2.0.0-beta04' + classpath 'com.google.firebase:perf-plugin:1.3.1' } }