From 31c6f253ff4f5527a8f1665a576f447d4395fd09 Mon Sep 17 00:00:00 2001 From: garvit984 Date: Fri, 13 Mar 2020 16:15:29 +0530 Subject: [PATCH] FIX-152 Profile photo problem solved FIX#153 Option for Passcode Change --- app/src/main/AndroidManifest.xml | 1 + .../mobile/cn/ui/mifos/DashboardActivity.kt | 21 ++++- .../CustomerDetailsFragment.kt | 91 ++++++++++--------- .../CustomerProfileActivity.kt | 6 +- .../ui/mifos/dashboard/DashboardFragment.kt | 20 +++- .../cn/ui/mifos/passcode/PasscodeActivity.kt | 37 +++++++- .../cn/ui/mifos/settings/SettingsFragment.kt | 10 +- .../mifos/mobile/cn/ui/utils/ConstantKeys.kt | 6 +- app/src/main/res/menu/menu_nav_drawer.xml | 5 + app/src/main/res/values/strings.xml | 5 + build.gradle | 2 +- gradle/wrapper/gradle-wrapper.properties | 4 +- 12 files changed, 146 insertions(+), 62 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index db3b07b5..b71f3ea2 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -4,6 +4,7 @@ + { hideToolbarElevation() - replaceFragment(DashboardFragment.newInstance(), true, R.id.container) + replaceFragment(DashboardFragment.newInstance("customer_identifier"), true, R.id.container) } R.id.item_accounts -> { replaceFragment(CustomerAccountFragment.newInstance(AccountType.DEPOSIT), true, @@ -170,7 +173,17 @@ class DashboardActivity : MifosBaseActivity(), View.OnClickListener, NavigationV R.id.item_logout -> { showLogoutDialog() } - + R.id.item_passcode ->{ + if (this != null) { + passcodePreferencesHelper = PasscodePreferencesHelper(this) + val currentPass: String = passcodePreferencesHelper!!.getPassCode() + passcodePreferencesHelper!!.savePassCode("") + val intent = Intent(this, PasscodeActivity::class.java) + intent.putExtra(ConstantKeys.CURR_PASSWORD, currentPass) + intent.putExtra(ConstantKeys.UPDATE_PASSWORD_KEY, true) + startActivity(intent) + } + } R.id.item_product -> { replaceFragment(ProductFragment.Companion.newInstance(), true, R.id.container) diff --git a/app/src/main/kotlin/org/mifos/mobile/cn/ui/mifos/customerDetails/CustomerDetailsFragment.kt b/app/src/main/kotlin/org/mifos/mobile/cn/ui/mifos/customerDetails/CustomerDetailsFragment.kt index 507d1ac1..d8cf978c 100644 --- a/app/src/main/kotlin/org/mifos/mobile/cn/ui/mifos/customerDetails/CustomerDetailsFragment.kt +++ b/app/src/main/kotlin/org/mifos/mobile/cn/ui/mifos/customerDetails/CustomerDetailsFragment.kt @@ -28,44 +28,43 @@ import org.mifos.mobile.cn.ui.views.HeaderView import javax.inject.Inject -class CustomerDetailsFragment : MifosBaseFragment(), AppBarLayout.OnOffsetChangedListener,CustomerDetailsContract.View, View.OnClickListener{ - +class CustomerDetailsFragment : MifosBaseFragment(), AppBarLayout.OnOffsetChangedListener, CustomerDetailsContract.View, View.OnClickListener { @Inject lateinit var customerDetailsPresenter: CustomerDetailsPresenter - private lateinit var rootView : View - private lateinit var customerIdentification : String - private var isHideToolbarView: Boolean = false - private lateinit var collapsingToolbarLayout : CollapsingToolbarLayout - private lateinit var customer : Customer - private lateinit var toolbarHeaderView : HeaderView - private lateinit var floatHeaderView : HeaderView - - companion object { - fun newInstance(identifier: String): CustomerDetailsFragment { - val fragment = CustomerDetailsFragment() - val args = Bundle() - args.putString(ConstantKeys.CUSTOMER_IDENTIFIER,identifier) - fragment.arguments = args - return fragment - - } - } + private lateinit var rootView: View + private lateinit var customerIdentification: String + private var isHideToolbarView: Boolean = false + private lateinit var collapsingToolbarLayout: CollapsingToolbarLayout + private lateinit var customer: Customer + private lateinit var toolbarHeaderView: HeaderView + private lateinit var floatHeaderView: HeaderView + + companion object { + fun newInstance(identifier: String): CustomerDetailsFragment { + val fragment = CustomerDetailsFragment() + val args = Bundle() + args.putString(ConstantKeys.CUSTOMER_IDENTIFIER, identifier) + fragment.arguments = args + return fragment + } + } - override fun onCreate(savedInstanceState: Bundle?){ + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setToolbarTitle(getString(R.string.account_overview)) - if(arguments != null){1 + if (arguments != null) { + 1 customerIdentification = arguments!!.getString(ConstantKeys.CUSTOMER_IDENTIFIER) } } override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { - rootView = inflater.inflate(R.layout.fragment_customer_details,container,false) + rootView = inflater.inflate(R.layout.fragment_customer_details, container, false) (activity as MifosBaseActivity).activityComponent.inject(this) customerDetailsPresenter.attachView(this) @@ -88,12 +87,13 @@ class CustomerDetailsFragment : MifosBaseFragment(), AppBarLayout.OnOffsetChange } + override fun onClick(view: View) { - when(view.id){ + when (view.id) { R.id.ll_deposit_accounts -> { openDepositAccount() } - R.id.ll_loan_accounts-> { + R.id.ll_loan_accounts -> { openLoanAccount() } R.id.ll_activities -> { @@ -117,13 +117,12 @@ class CustomerDetailsFragment : MifosBaseFragment(), AppBarLayout.OnOffsetChange override fun onResume() { super.onResume() - cl_customer_details.visibility = View.GONE - collapsingToolbarLayout.title= " " + cl_customer_details.visibility = View.GONE + collapsingToolbarLayout.title = " " customerDetailsPresenter.loadCustomerDetails(customerIdentification) } - override fun showCustomerDetails(customer: Customer) { this.customer = customer cl_customer_details.visibility = View.VISIBLE @@ -132,10 +131,10 @@ class CustomerDetailsFragment : MifosBaseFragment(), AppBarLayout.OnOffsetChange loadCustomerPortrait() tv_current_status.text = customer.currentState!!.name - StatusUtils.setCustomerStatusIcon(customer.currentState!!,iv_current_status,context) + StatusUtils.setCustomerStatusIcon(customer.currentState!!, iv_current_status, context) - val address : Address = customer.address!! + val address: Address = customer.address!! val addressBuilder = StringBuilder() addressBuilder .append(address.street).append(", ") @@ -171,6 +170,7 @@ class CustomerDetailsFragment : MifosBaseFragment(), AppBarLayout.OnOffsetChange } showToolbarTitleSubtitle(title, subtitle) } + override fun showUserInterface() { if (toolbar_customer != null) { (activity as AppCompatActivity).setSupportActionBar(toolbar_customer) @@ -178,12 +178,13 @@ class CustomerDetailsFragment : MifosBaseFragment(), AppBarLayout.OnOffsetChange .setDisplayHomeAsUpEnabled(true) } - collapsingToolbarLayout.title= " " + collapsingToolbarLayout.title = " " app_bar_layout.addOnOffsetChangedListener(this) } + override fun showToolbarTitleSubtitle(title: String, subtitle: String) { - toolbarHeaderView.bindTo(title,subtitle) - floatHeaderView.bindTo(title,subtitle) + toolbarHeaderView.bindTo(title, subtitle) + floatHeaderView.bindTo(title, subtitle) } @@ -206,25 +207,22 @@ class CustomerDetailsFragment : MifosBaseFragment(), AppBarLayout.OnOffsetChange } - override fun loadCustomerPortrait() { val imageLoaderUtils = ImageLoaderUtils(this.context!!) - imageLoaderUtils.loadImage(imageLoaderUtils.buildCustomerPortraitImageUrl(customer.identifier),iv_customer_profile,R.drawable.mifos_logo_new) + imageLoaderUtils.loadImage(imageLoaderUtils.buildCustomerPortraitImageUrl(customer.identifier), iv_customer_profile, R.drawable.mifos_logo_new) } override fun showProgressbar() { - showProgressBar() + showProgressBar() } override fun hideProgressbar() { - hideProgressBar() + hideProgressBar() } - - override fun getCustomerStatus(): Customer.State { return customer.currentState!! } @@ -241,6 +239,7 @@ class CustomerDetailsFragment : MifosBaseFragment(), AppBarLayout.OnOffsetChange hideProgressDialog() customerDetailsPresenter.detachView() } + override fun onOffsetChanged(appBarLayout: AppBarLayout?, verticalOffset: Int) { val maxScroll = appBarLayout!!.totalScrollRange val percentage = Math.abs(verticalOffset).toFloat() / maxScroll.toFloat() @@ -254,28 +253,30 @@ class CustomerDetailsFragment : MifosBaseFragment(), AppBarLayout.OnOffsetChange } } + private fun openDepositAccount() { (activity as MifosBaseActivity) .replaceFragment(CustomerAccountFragment.newInstance(AccountType.DEPOSIT), true, R.id.container) } + private fun openLoanAccount() { (activity as MifosBaseActivity) .replaceFragment(CustomerAccountFragment.newInstance(AccountType.LOAN), true, R.id.container) } + private fun openCustomerActivities() { - val intent = Intent(activity,CustomerActivitiesActivity::class.java) - intent.putExtra(ConstantKeys.CUSTOMER_IDENTIFIER,"customer_identifier") + val intent = Intent(activity, CustomerActivitiesActivity::class.java) + intent.putExtra(ConstantKeys.CUSTOMER_IDENTIFIER, "customer_identifier") startActivity(intent) } + private fun openIdentificationCards() { - val intent = Intent(activity,IdentificationsActivity::class.java) - intent.putExtra(ConstantKeys.CUSTOMER_IDENTIFIER,"customer_identifier") + val intent = Intent(activity, IdentificationsActivity::class.java) + intent.putExtra(ConstantKeys.CUSTOMER_IDENTIFIER, "customer_identifier") startActivity(intent) } - - } \ No newline at end of file diff --git a/app/src/main/kotlin/org/mifos/mobile/cn/ui/mifos/customerProfile/CustomerProfileActivity.kt b/app/src/main/kotlin/org/mifos/mobile/cn/ui/mifos/customerProfile/CustomerProfileActivity.kt index 27cf1165..8370228f 100644 --- a/app/src/main/kotlin/org/mifos/mobile/cn/ui/mifos/customerProfile/CustomerProfileActivity.kt +++ b/app/src/main/kotlin/org/mifos/mobile/cn/ui/mifos/customerProfile/CustomerProfileActivity.kt @@ -12,13 +12,11 @@ import android.provider.MediaStore import android.view.Menu import android.view.MenuItem import android.widget.ImageView -import com.github.therajanmaurya.sweeterror.SweetUIErrorHandler import kotlinx.android.synthetic.main.activity_customer_profile.* import org.mifos.mobile.cn.R import org.mifos.mobile.cn.ui.base.MifosBaseActivity import org.mifos.mobile.cn.ui.utils.* import java.io.ByteArrayOutputStream -import java.util.jar.Manifest class CustomerProfileActivity: MifosBaseActivity(),CustomerProfileContract.View { @@ -98,6 +96,10 @@ class CustomerProfileActivity: MifosBaseActivity(),CustomerProfileContract.View resources.getString( R.string.dialog_message_write_permission_for_share_never_ask_again), ConstantKeys.PERMISSIONS_WRITE_EXTERNAL_STORAGE_STATUS) + if (CheckSelfPermissionAndRequest.checkSelfPermission(this, + android.Manifest.permission.WRITE_EXTERNAL_STORAGE)){ + shareImage() + } } override fun loadCustomerPortrait() { diff --git a/app/src/main/kotlin/org/mifos/mobile/cn/ui/mifos/dashboard/DashboardFragment.kt b/app/src/main/kotlin/org/mifos/mobile/cn/ui/mifos/dashboard/DashboardFragment.kt index 977343ff..0c3d1554 100644 --- a/app/src/main/kotlin/org/mifos/mobile/cn/ui/mifos/dashboard/DashboardFragment.kt +++ b/app/src/main/kotlin/org/mifos/mobile/cn/ui/mifos/dashboard/DashboardFragment.kt @@ -13,20 +13,22 @@ import org.mifos.mobile.cn.ui.base.MifosBaseActivity import org.mifos.mobile.cn.ui.base.MifosBaseFragment import org.mifos.mobile.cn.ui.mifos.customerAccounts.CustomerAccountFragment import org.mifos.mobile.cn.ui.mifos.customerDetails.CustomerDetailsActivity +import org.mifos.mobile.cn.ui.mifos.customerProfile.CustomerProfileActivity import org.mifos.mobile.cn.ui.mifos.loanApplication.loanActivity.LoanApplicationActivity import org.mifos.mobile.cn.ui.mifos.recentTransactions.RecentTransactionsFragment import org.mifos.mobile.cn.ui.utils.ConstantKeys class DashboardFragment : MifosBaseFragment(), View.OnClickListener { - + private lateinit var customerIdentification: String private lateinit var rootView: View private lateinit var customer: Customer companion object { - fun newInstance(): DashboardFragment { + fun newInstance(identifier: String): DashboardFragment { val fragment = DashboardFragment() val args = Bundle() + args.putString(ConstantKeys.CUSTOMER_IDENTIFIER, identifier) fragment.arguments = args return fragment } @@ -38,12 +40,17 @@ class DashboardFragment : MifosBaseFragment(), View.OnClickListener { rootView = inflater.inflate(R.layout.fragment_dashboard, container, false) setHasOptionsMenu(true) setToolbarTitle(getString(R.string.home)) + if (arguments != null) { + 1 + customerIdentification = arguments!!.getString(ConstantKeys.CUSTOMER_IDENTIFIER) + } return rootView } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) ll_apply_for_loan.setOnClickListener(this) + iv_user_image.setOnClickListener(this) ll_accounts.setOnClickListener(this) ll_account_overview.setOnClickListener(this) ll_recent_transactions.setOnClickListener(this) @@ -69,6 +76,9 @@ class DashboardFragment : MifosBaseFragment(), View.OnClickListener { R.id.ll_recent_transactions -> { showRecentTransactions() } + R.id.iv_user_image -> { + openCustomerProfile() + } } } @@ -77,7 +87,11 @@ class DashboardFragment : MifosBaseFragment(), View.OnClickListener { intent.putExtra(ConstantKeys.CUSTOMER_IDENTIFIER, "customer_identifier") startActivity(intent) } - + private fun openCustomerProfile() { + val intent = Intent(activity, CustomerProfileActivity::class.java) + intent.putExtra(ConstantKeys.CUSTOMER_IDENTIFIER, customerIdentification) + startActivity(intent) + } private fun openAccount() { (activity as MifosBaseActivity) .replaceFragment(CustomerAccountFragment.newInstance(AccountType.DEPOSIT), diff --git a/app/src/main/kotlin/org/mifos/mobile/cn/ui/mifos/passcode/PasscodeActivity.kt b/app/src/main/kotlin/org/mifos/mobile/cn/ui/mifos/passcode/PasscodeActivity.kt index f04d00e1..023b1318 100644 --- a/app/src/main/kotlin/org/mifos/mobile/cn/ui/mifos/passcode/PasscodeActivity.kt +++ b/app/src/main/kotlin/org/mifos/mobile/cn/ui/mifos/passcode/PasscodeActivity.kt @@ -1,19 +1,47 @@ package org.mifos.mobile.cn.ui.mifos.passcode +import android.Manifest import android.content.DialogInterface import android.content.Intent +import android.os.Bundle import android.view.View import android.widget.Toast import com.mifos.mobile.passcode.MifosPassCodeActivity import com.mifos.mobile.passcode.utils.EncryptionUtil +import com.mifos.mobile.passcode.utils.PasscodePreferencesHelper import org.mifos.mobile.cn.R import org.mifos.mobile.cn.ui.mifos.DashboardActivity import org.mifos.mobile.cn.ui.mifos.login.LoginActivity +import org.mifos.mobile.cn.ui.utils.CheckSelfPermissionAndRequest.checkSelfPermission +import org.mifos.mobile.cn.ui.utils.CheckSelfPermissionAndRequest.requestPermission +import org.mifos.mobile.cn.ui.utils.ConstantKeys import org.mifos.mobile.cn.ui.utils.MaterialDialog import org.mifos.mobile.cn.ui.utils.Toaster class PasscodeActivity : MifosPassCodeActivity(){ + private var currPass = "" + private var updatePassword = false + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + if (!checkSelfPermission(this, + Manifest.permission.READ_PHONE_STATE)) { + requestPermission() + } + + } + + private fun requestPermission() { + requestPermission( + this, + Manifest.permission.READ_PHONE_STATE, + ConstantKeys.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), + ConstantKeys.PERMISSIONS_READ_PHONE_STATE_STATUS) + } override fun getLogo(): Int { return R.drawable.mifos_logo_new @@ -49,5 +77,12 @@ class PasscodeActivity : MifosPassCodeActivity(){ override fun getEncryptionType(): Int { return EncryptionUtil.FINERACT_CN } - + override fun onBackPressed() { + super.onBackPressed() + if (updatePassword && !currPass.isEmpty()) { + val helper = PasscodePreferencesHelper(this) + helper.savePassCode(currPass) + } + finish() + } } \ No newline at end of file diff --git a/app/src/main/kotlin/org/mifos/mobile/cn/ui/mifos/settings/SettingsFragment.kt b/app/src/main/kotlin/org/mifos/mobile/cn/ui/mifos/settings/SettingsFragment.kt index 21f01cec..7e6913b1 100644 --- a/app/src/main/kotlin/org/mifos/mobile/cn/ui/mifos/settings/SettingsFragment.kt +++ b/app/src/main/kotlin/org/mifos/mobile/cn/ui/mifos/settings/SettingsFragment.kt @@ -1,13 +1,16 @@ package org.mifos.mobile.cn.ui.mifos.settings -import android.content.Context -import android.net.Uri +import android.content.Intent import android.os.Bundle -import androidx.fragment.app.Fragment import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import androidx.fragment.app.Fragment +import com.mifos.mobile.passcode.utils.PasscodePreferencesHelper import org.mifos.mobile.cn.R +import org.mifos.mobile.cn.ui.mifos.passcode.PasscodeActivity +import org.mifos.mobile.cn.ui.utils.ConstantKeys + // TODO: Rename parameter arguments, choose names that match // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER @@ -27,6 +30,7 @@ class SettingsFragment : Fragment() { override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { // Inflate the layout for this fragment + return inflater.inflate(R.layout.fragment_settings, container, false) } diff --git a/app/src/main/kotlin/org/mifos/mobile/cn/ui/utils/ConstantKeys.kt b/app/src/main/kotlin/org/mifos/mobile/cn/ui/utils/ConstantKeys.kt index 64fabae7..348066d7 100644 --- a/app/src/main/kotlin/org/mifos/mobile/cn/ui/utils/ConstantKeys.kt +++ b/app/src/main/kotlin/org/mifos/mobile/cn/ui/utils/ConstantKeys.kt @@ -10,7 +10,11 @@ object ConstantKeys { const val REQUEST_PERMISSION_SETTING = 254 const val PERMISSION_REQUEST_ALL = 4 const val PERMISSION_REQUEST_CAMERA = 5 - + const val PASSCODE = "Passcode" + const val CURR_PASSWORD = "currentPassword" + const val PERMISSIONS_READ_PHONE_STATE_STATUS = "read_phone_status" + const val PERMISSIONS_REQUEST_READ_PHONE_STATE = 2 + const val UPDATE_PASSWORD_KEY = "updatePassword" const val PERMISSIONS_WRITE_EXTERNAL_STORAGE_STATUS = "write_status" const val PERMISSION_READ_EXTERNAL_STORAGE_STATUS = "read_status" const val PERMISSIONS_CAMERA_STATUS = "camera_status" diff --git a/app/src/main/res/menu/menu_nav_drawer.xml b/app/src/main/res/menu/menu_nav_drawer.xml index 62900df9..553c569e 100644 --- a/app/src/main/res/menu/menu_nav_drawer.xml +++ b/app/src/main/res/menu/menu_nav_drawer.xml @@ -68,6 +68,11 @@ android:checked="false" android:icon="@drawable/ic_share_black_24dp" android:title="@string/share"/> + Please enter your credentials + This permission is required + to show currency according to your country.Are you sure you want to deny it? + You have denied permission + to fetch Phone State, without this permission currency might not be shown in proper format. + Please enable it in settings Username Password Login diff --git a/build.gradle b/build.gradle index 57bbb6f9..b6641553 100644 --- a/build.gradle +++ b/build.gradle @@ -8,7 +8,7 @@ buildscript { mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:3.3.2' + classpath 'com.android.tools.build:gradle:3.6.1' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath 'com.google.android.gms:oss-licenses-plugin:0.9.5' // NOTE: Do not place your application dependencies here; they belong diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 0a8c6ddf..e848cbe6 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Wed Jun 12 21:01:44 IST 2019 +#Tue Mar 17 00:23:48 IST 2020 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.4-all.zip