From 49f6eb7545a4617f5116b5e17ed11b6c1b82d273 Mon Sep 17 00:00:00 2001 From: garvit984 Date: Fri, 13 Mar 2020 16:15:29 +0530 Subject: [PATCH] Transfer Screen Implemented --- app/src/main/AndroidManifest.xml | 3 + .../injection/component/ActivityComponent.kt | 3 + .../org/mifos/mobile/cn/ui/mifos/Account.kt | 194 ++++++++++++++++++ .../mobile/cn/ui/mifos/DashboardActivity.kt | 25 ++- .../org/mifos/mobile/cn/ui/mifos/Home.kt | 21 ++ .../org/mifos/mobile/cn/ui/mifos/Main.kt | 77 +++++++ .../org/mifos/mobile/cn/ui/mifos/Profile.kt | 20 ++ .../mifos/mobile/cn/ui/mifos/ShowActivity.kt | 13 ++ .../org/mifos/mobile/cn/ui/mifos/Test1.kt | 26 +++ .../org/mifos/mobile/cn/ui/mifos/Transfer.kt | 20 ++ .../cn/ui/mifos/accounts/AccountsFragment.kt | 2 +- .../CustomerDetailsFragment.kt | 91 ++++---- .../CustomerProfileActivity.kt | 6 +- .../ui/mifos/dashboard/DashboardFragment.kt | 32 ++- .../cn/ui/mifos/passcode/PasscodeActivity.kt | 37 +++- .../cn/ui/mifos/settings/SettingsFragment.kt | 10 +- .../mifos/mobile/cn/ui/utils/ConstantKeys.kt | 6 +- .../org/mifos/mobile/cn/ui/utils/Utils.kt | 8 + .../drawable_editable_image_hint.xml | 18 ++ app/src/main/res/drawable-v24/ic_camera.xml | 12 ++ .../main/res/drawable-v24/ic_error_state.xml | 9 + .../main/res/drawable-v24/ic_transaction.xml | 5 + app/src/main/res/drawable-v24/profile.png | Bin 0 -> 3800 bytes .../shape_bottom_sheet_dialog_grip.xml | 5 + .../main/res/drawable/bottomview_selector.xml | 6 + app/src/main/res/drawable/chip_outline.xml | 13 ++ .../res/drawable/chip_outline_selected.xml | 13 ++ app/src/main/res/drawable/gray_box.xml | 17 ++ app/src/main/res/drawable/greyborder.xml | 17 ++ app/src/main/res/drawable/ic_account.xml | 9 + .../res/drawable/ic_add_circle_black_24dp.xml | 9 + app/src/main/res/drawable/ic_home.xml | 9 + .../main/res/drawable/ic_notifications.xml | 2 +- app/src/main/res/drawable/ic_profile.xml | 9 + app/src/main/res/drawable/ic_swap_horiz.xml | 9 + app/src/main/res/drawable/pick_contact.png | Bin 0 -> 559 bytes app/src/main/res/drawable/qrcode.png | Bin 0 -> 5680 bytes app/src/main/res/drawable/round_gray.xml | 9 + app/src/main/res/drawable/selector_tab.xml | 9 + app/src/main/res/drawable/violet_concave.xml | 9 + app/src/main/res/drawable/violet_round.xml | 17 ++ app/src/main/res/drawable/white_card.xml | 15 ++ app/src/main/res/layout/activity_home.xml | 41 ++++ app/src/main/res/layout/activity_show.xml | 9 + .../content_bottom_sheet_account_details.xml | 55 +++++ app/src/main/res/layout/fragment_account.xml | 164 +++++++++++++++ app/src/main/res/layout/fragment_accounts.xml | 2 +- app/src/main/res/layout/fragment_home.xml | 142 +++++++++++++ app/src/main/res/layout/fragment_profile.xml | 55 +++++ .../layout/fragment_recent_transactions.xml | 28 ++- app/src/main/res/layout/fragment_transfer.xml | 96 +++++++++ app/src/main/res/layout/item_casual_list.xml | 63 ++++++ .../layout/item_customer_deposit_accounts.xml | 54 ++--- .../main/res/layout/item_customer_loans.xml | 20 +- app/src/main/res/layout/placeholder_state.xml | 38 ++++ .../res/layout/profile_username_and_image.xml | 58 ++++++ app/src/main/res/layout/toolbar_new.xml | 14 ++ .../main/res/menu/bottom_navigation_main.xml | 31 +++ app/src/main/res/menu/menu_nav_drawer.xml | 5 + app/src/main/res/values/colors.xml | 19 +- app/src/main/res/values/dimens.xml | 6 +- app/src/main/res/values/strings.xml | 15 +- app/src/main/res/values/styles.xml | 14 +- build.gradle | 2 +- gradle/wrapper/gradle-wrapper.properties | 4 +- 65 files changed, 1635 insertions(+), 115 deletions(-) create mode 100644 app/src/main/kotlin/org/mifos/mobile/cn/ui/mifos/Account.kt create mode 100644 app/src/main/kotlin/org/mifos/mobile/cn/ui/mifos/Home.kt create mode 100644 app/src/main/kotlin/org/mifos/mobile/cn/ui/mifos/Main.kt create mode 100644 app/src/main/kotlin/org/mifos/mobile/cn/ui/mifos/Profile.kt create mode 100644 app/src/main/kotlin/org/mifos/mobile/cn/ui/mifos/ShowActivity.kt create mode 100644 app/src/main/kotlin/org/mifos/mobile/cn/ui/mifos/Test1.kt create mode 100644 app/src/main/kotlin/org/mifos/mobile/cn/ui/mifos/Transfer.kt create mode 100644 app/src/main/res/drawable-v24/drawable_editable_image_hint.xml create mode 100644 app/src/main/res/drawable-v24/ic_camera.xml create mode 100644 app/src/main/res/drawable-v24/ic_error_state.xml create mode 100644 app/src/main/res/drawable-v24/ic_transaction.xml create mode 100644 app/src/main/res/drawable-v24/profile.png create mode 100644 app/src/main/res/drawable-v24/shape_bottom_sheet_dialog_grip.xml create mode 100644 app/src/main/res/drawable/bottomview_selector.xml create mode 100644 app/src/main/res/drawable/chip_outline.xml create mode 100644 app/src/main/res/drawable/chip_outline_selected.xml create mode 100644 app/src/main/res/drawable/gray_box.xml create mode 100644 app/src/main/res/drawable/greyborder.xml create mode 100644 app/src/main/res/drawable/ic_account.xml create mode 100644 app/src/main/res/drawable/ic_add_circle_black_24dp.xml create mode 100644 app/src/main/res/drawable/ic_home.xml create mode 100644 app/src/main/res/drawable/ic_profile.xml create mode 100644 app/src/main/res/drawable/ic_swap_horiz.xml create mode 100644 app/src/main/res/drawable/pick_contact.png create mode 100644 app/src/main/res/drawable/qrcode.png create mode 100644 app/src/main/res/drawable/round_gray.xml create mode 100644 app/src/main/res/drawable/selector_tab.xml create mode 100644 app/src/main/res/drawable/violet_concave.xml create mode 100644 app/src/main/res/drawable/violet_round.xml create mode 100644 app/src/main/res/drawable/white_card.xml create mode 100644 app/src/main/res/layout/activity_home.xml create mode 100644 app/src/main/res/layout/activity_show.xml create mode 100644 app/src/main/res/layout/content_bottom_sheet_account_details.xml create mode 100644 app/src/main/res/layout/fragment_account.xml create mode 100644 app/src/main/res/layout/fragment_home.xml create mode 100644 app/src/main/res/layout/fragment_profile.xml create mode 100644 app/src/main/res/layout/fragment_transfer.xml create mode 100644 app/src/main/res/layout/item_casual_list.xml create mode 100644 app/src/main/res/layout/placeholder_state.xml create mode 100644 app/src/main/res/layout/profile_username_and_image.xml create mode 100644 app/src/main/res/layout/toolbar_new.xml create mode 100644 app/src/main/res/menu/bottom_navigation_main.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index db3b07b5..0131f931 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -4,6 +4,7 @@ + @@ -24,6 +26,7 @@ + diff --git a/app/src/main/kotlin/org/mifos/mobile/cn/injection/component/ActivityComponent.kt b/app/src/main/kotlin/org/mifos/mobile/cn/injection/component/ActivityComponent.kt index 13cbf11c..b67631ae 100644 --- a/app/src/main/kotlin/org/mifos/mobile/cn/injection/component/ActivityComponent.kt +++ b/app/src/main/kotlin/org/mifos/mobile/cn/injection/component/ActivityComponent.kt @@ -4,6 +4,7 @@ package org.mifos.mobile.cn.injection.component import dagger.Subcomponent import org.mifos.mobile.cn.injection.PerActivity import org.mifos.mobile.cn.injection.module.ActivityModule +import org.mifos.mobile.cn.ui.mifos.Account import org.mifos.mobile.cn.ui.mifos.DashboardActivity import org.mifos.mobile.cn.ui.mifos.aboutus.AboutUsFragment import org.mifos.mobile.cn.ui.mifos.accounts.AccountsFragment @@ -39,6 +40,8 @@ interface ActivityComponent { fun inject(passcodeActivity: PasscodeActivity) + fun inject(account :Account) + fun inject(launcherActivity: LauncherActivity) fun inject(dashboardActivity: DashboardActivity) diff --git a/app/src/main/kotlin/org/mifos/mobile/cn/ui/mifos/Account.kt b/app/src/main/kotlin/org/mifos/mobile/cn/ui/mifos/Account.kt new file mode 100644 index 00000000..93b088de --- /dev/null +++ b/app/src/main/kotlin/org/mifos/mobile/cn/ui/mifos/Account.kt @@ -0,0 +1,194 @@ +package org.mifos.mobile.cn.ui.mifos + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.recyclerview.widget.DividerItemDecoration +import androidx.recyclerview.widget.LinearLayoutManager +import kotlinx.android.synthetic.main.fragment_account.* +import kotlinx.android.synthetic.main.fragment_accounts.* +import org.mifos.mobile.cn.R +import org.mifos.mobile.cn.data.models.CheckboxStatus +import org.mifos.mobile.cn.data.models.accounts.deposit.DepositAccount +import org.mifos.mobile.cn.data.models.accounts.loan.LoanAccount +import org.mifos.mobile.cn.ui.adapter.DepositAccountListAdapter +import org.mifos.mobile.cn.ui.adapter.LoanAccountListAdapter +import org.mifos.mobile.cn.ui.base.MifosBaseActivity +import org.mifos.mobile.cn.ui.base.MifosBaseFragment +import org.mifos.mobile.cn.ui.base.OnItemClickListener +import org.mifos.mobile.cn.ui.mifos.accounts.AccountsContract +import org.mifos.mobile.cn.ui.mifos.accounts.AccountsFragment +import org.mifos.mobile.cn.ui.mifos.accounts.AccountsPresenter +import org.mifos.mobile.cn.ui.mifos.customerDepositDetails.CustomerDepositDetailsFragment +import org.mifos.mobile.cn.ui.mifos.customerLoanDetails.CustomerLoanDetailsFragment +import org.mifos.mobile.cn.ui.utils.ConstantKeys +import javax.inject.Inject + +class Account : MifosBaseFragment() , View.OnClickListener, OnItemClickListener, AccountsContract.View { + private lateinit var accountType: String + private lateinit var loanAccounts: List + private lateinit var depositAccounts: List + var currentFilterList: List? = null + + @Inject + internal lateinit var accountsPresenter: AccountsPresenter + + @Inject + lateinit var loanAccountsListAdapter: LoanAccountListAdapter + + @Inject + lateinit var depositAccountListAdapter: DepositAccountListAdapter + companion object { + fun newInstance(accountType: String): Account { + val fragment = Account() + val args = Bundle() + args.putString(ConstantKeys.ACCOUNT_TYPE, accountType) + fragment.arguments = args + return fragment + } + } + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle?): View? { + // Inflate the layout for this fragment + getToolbar().setVisibility(View.GONE); + val rootview: View = inflater.inflate(R.layout.fragment_account, + container, false) + (activity as MifosBaseActivity).activityComponent.inject(this) + accountsPresenter.attachView(this) + return rootview + } + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + (activity as MifosBaseActivity).activityComponent.inject(this) + loanAccounts = ArrayList() + depositAccounts = ArrayList() + if (arguments != null) { + accountType = arguments!!.getString(ConstantKeys.ACCOUNT_TYPE) + } + + } + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + val layoutManager = LinearLayoutManager(activity) + layoutManager.orientation = LinearLayoutManager.VERTICAL + deposit_r.layoutManager = layoutManager + deposit_r.setHasFixedSize(true) + deposit_r.addItemDecoration(DividerItemDecoration(activity, + layoutManager.orientation)) + val layoutManager1 = LinearLayoutManager(activity) + layoutManager1.orientation = LinearLayoutManager.VERTICAL + loan_r.layoutManager = layoutManager1 + loan_r.setHasFixedSize(true) + loan_r.addItemDecoration(DividerItemDecoration(activity, + layoutManager.orientation)) + btn_deposit.setOnClickListener(this) + btn_loan.setOnClickListener(this) + accountsPresenter.loadLoanAccounts() + accountsPresenter.loadDepositAccounts() + when (accountType) { + ConstantKeys.LOAN_ACCOUNTS -> { + loan_r.adapter = loanAccountsListAdapter + loanAccountsListAdapter.setOnItemClickListener(this) + } + ConstantKeys.DEPOSIT_ACCOUNTS -> { + deposit_r.adapter = depositAccountListAdapter + depositAccountListAdapter.setOnItemClickListener(this) + } + } + } + + override fun onClick(view: View) { + when(view.id) + { + R.id.btn_deposit -> { + deposit() + } + R.id.btn_loan -> { + loan() + } + } + + } + + private fun loan() { + btn_loan.isSelected = true + btn_loan.isFocusable = true + btn_loan.setChipBackgroundColorResource(R.color.white) + btn_deposit.isSelected = false + btn_deposit.setChipBackgroundColorResource(R.color.light_grey) + loan_r.visibility = View.VISIBLE + loan_r.setHasFixedSize(true) + deposit_r.visibility = View.GONE + loan_r.adapter = loanAccountsListAdapter + loanAccountsListAdapter.setOnItemClickListener(this) + accountType="loanAccounts" + } + + private fun deposit() { + btn_deposit.isSelected = true + btn_deposit.isFocusable = true + btn_deposit.setChipBackgroundColorResource(R.color.white) + btn_loan.isSelected = false + btn_loan.setChipBackgroundColorResource(R.color.light_grey) + deposit_r.visibility = View.VISIBLE + deposit_r.setHasFixedSize(true) + loan_r.visibility = View.GONE + accountType="deposit_accounts" + } + + override fun onItemClick(childView: View, position: Int) { + when (accountType) { + ConstantKeys.LOAN_ACCOUNTS -> { + (activity as MifosBaseActivity).replaceFragment( + CustomerLoanDetailsFragment.newInstance( + loanAccounts[position].productIdentifier!!, + loanAccounts[position].identifier!!), true, R.id.bottom_navigation_fragment_container) + } + ConstantKeys.DEPOSIT_ACCOUNTS -> { + (activity as MifosBaseActivity).replaceFragment( + CustomerDepositDetailsFragment.newInstance( + depositAccounts[position].accountIdentifier!!),true,R.id.bottom_navigation_fragment_container + ) + } + } + } + + override fun onItemLongPress(childView: View, position: Int) { + TODO("Not yet implemented") + } + + override fun showLoanAccounts(loanAccounts: List) { + this.loanAccounts = loanAccounts + if (loanAccounts.isNotEmpty()) { + loanAccountsListAdapter.setCustomerLoanAccounts(loanAccounts) + } else { + showEmptyAccounts(getString(R.string.loan)) + } + } + override fun showDepositAccounts(depositAccounts: List) { + this.depositAccounts = depositAccounts + if (depositAccounts.isNotEmpty()) { + depositAccountListAdapter.setCustomerDepositAccounts(depositAccounts) + } else { + showEmptyAccounts(getString(R.string.deposit)) + } + + } + + override fun showEmptyAccounts(feature: String) { + TODO("Not yet implemented") + } + + override fun showError(message: String) { + TODO("Not yet implemented") + } + + override fun showProgress() { + + } + + override fun hideProgress() { + hideProgressBar() + } +} \ No newline at end of file diff --git a/app/src/main/kotlin/org/mifos/mobile/cn/ui/mifos/DashboardActivity.kt b/app/src/main/kotlin/org/mifos/mobile/cn/ui/mifos/DashboardActivity.kt index 6895b8e2..5cd897cf 100644 --- a/app/src/main/kotlin/org/mifos/mobile/cn/ui/mifos/DashboardActivity.kt +++ b/app/src/main/kotlin/org/mifos/mobile/cn/ui/mifos/DashboardActivity.kt @@ -31,12 +31,15 @@ import org.mifos.mobile.cn.ui.mifos.settings.SettingsFragment import org.mifos.mobile.cn.ui.utils.CircularImageView import org.mifos.mobile.cn.ui.utils.Toaster import android.widget.Toast +import com.mifos.mobile.passcode.utils.PasscodePreferencesHelper +import org.mifos.mobile.cn.ui.mifos.passcode.PasscodeActivity +import org.mifos.mobile.cn.ui.utils.ConstantKeys class DashboardActivity : MifosBaseActivity(), View.OnClickListener, NavigationView.OnNavigationItemSelectedListener { @Inject internal lateinit var preferencesHelper: PreferencesHelper - + private var passcodePreferencesHelper: PasscodePreferencesHelper? = null private lateinit var tvUsername: TextView private lateinit var ivCircularUserProfilePicture: CircularImageView private lateinit var ivTextDrawableUserProfilePicture: ImageView @@ -52,7 +55,7 @@ class DashboardActivity : MifosBaseActivity(), View.OnClickListener, NavigationV setupNavigationBar() setToolbarElevation() - replaceFragment(DashboardFragment.newInstance(), false, R.id.container) + replaceFragment(DashboardFragment.newInstance("customer_identifier"), false, R.id.container) } @@ -95,10 +98,6 @@ class DashboardActivity : MifosBaseActivity(), View.OnClickListener, NavigationV val actionBarDrawerToggle = object : ActionBarDrawerToggle(this, drawerLayout, getToolbar(), R.string.open_drawer, R.string.close_drawer) { - override fun onDrawerClosed(drawerView: View) { - super.onDrawerClosed(drawerView) - } - override fun onDrawerOpened(drawerView: View) { super.onDrawerOpened(drawerView) hideKeyboard(drawerView) @@ -160,7 +159,7 @@ class DashboardActivity : MifosBaseActivity(), View.OnClickListener, NavigationV when (item.itemId) { R.id.item_home -> { 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 +169,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/Home.kt b/app/src/main/kotlin/org/mifos/mobile/cn/ui/mifos/Home.kt new file mode 100644 index 00000000..ff9eb701 --- /dev/null +++ b/app/src/main/kotlin/org/mifos/mobile/cn/ui/mifos/Home.kt @@ -0,0 +1,21 @@ +package org.mifos.mobile.cn.ui.mifos + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import org.mifos.mobile.cn.R +import org.mifos.mobile.cn.ui.Test1 +import org.mifos.mobile.cn.ui.base.MifosBaseFragment + +class Home : MifosBaseFragment() { + companion object { + fun newInstance(): Home = Home() + } + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle?): View? { + // Inflate the layout for this fragment + getToolbar().setVisibility(View.GONE); + return inflater.inflate(R.layout.fragment_home, container, false) + } +} \ No newline at end of file diff --git a/app/src/main/kotlin/org/mifos/mobile/cn/ui/mifos/Main.kt b/app/src/main/kotlin/org/mifos/mobile/cn/ui/mifos/Main.kt new file mode 100644 index 00000000..c4a84d74 --- /dev/null +++ b/app/src/main/kotlin/org/mifos/mobile/cn/ui/mifos/Main.kt @@ -0,0 +1,77 @@ +package org.mifos.mobile.cn.ui.mifos + +import android.os.Bundle +import androidx.annotation.NonNull +import androidx.fragment.app.Fragment +import com.google.android.material.bottomnavigation.BottomNavigationView +import org.mifos.mobile.cn.R +import org.mifos.mobile.cn.ui.Test1 +import org.mifos.mobile.cn.ui.base.MifosBaseActivity +import org.mifos.mobile.cn.ui.utils.ConstantKeys +import android.view.MenuItem as MenuItem1 + + +class Main : MifosBaseActivity(), BottomNavigationView.OnNavigationItemSelectedListener { + private var bottomNavigationView: BottomNavigationView? = null + private var menuItem = -1 + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_home) + + bottomNavigationView = findViewById(R.id.bottom_navigation) + setupNavigationBar() + bottomNavigationView?.run { setSelectedItemId(R.id.action_home) + } + + + } + + override fun onNavigationItemSelected(item: MenuItem1): Boolean { + clearFragmentBackStack() + setToolbarElevation() + menuItem = item.itemId +navigateFragment(item.itemId,false) + return true + } + private fun setupNavigationBar() { + + bottomNavigationView?.setOnNavigationItemSelectedListener(object : BottomNavigationView.OnNavigationItemSelectedListener { + override fun onNavigationItemSelected(@NonNull item: android.view.MenuItem): Boolean { + navigateFragment(item.itemId, false) + return true + } + }) + + } + override fun onBackPressed() { + val fragment: Fragment? = supportFragmentManager + .findFragmentById(R.id.bottom_navigation_fragment_container) + if (fragment != null && fragment !is Home && fragment.isVisible()) { + navigateFragment(R.id.action_home, true) + return + } + val count = supportFragmentManager.backStackEntryCount + if (count == 0) { + super.onBackPressed() + //additional code + } else { + supportFragmentManager.popBackStack() + } + } + private fun navigateFragment(id: Int, shouldSelect: Boolean) { + if (shouldSelect) { + bottomNavigationView?.setSelectedItemId(id) + } else { + when (id) { + R.id.action_home -> replaceFragment(Home.newInstance(), false, + R.id.bottom_navigation_fragment_container) + R.id.action_acounts -> replaceFragment(Account.newInstance(ConstantKeys.DEPOSIT_ACCOUNTS), false, + R.id.bottom_navigation_fragment_container) + R.id.action_transfer -> replaceFragment(Transfer.newInstance(), false, + R.id.bottom_navigation_fragment_container) + R.id.action_profile -> replaceFragment(Profile.newInstance(), false, + R.id.bottom_navigation_fragment_container) + } + } + } +} diff --git a/app/src/main/kotlin/org/mifos/mobile/cn/ui/mifos/Profile.kt b/app/src/main/kotlin/org/mifos/mobile/cn/ui/mifos/Profile.kt new file mode 100644 index 00000000..9dda09d2 --- /dev/null +++ b/app/src/main/kotlin/org/mifos/mobile/cn/ui/mifos/Profile.kt @@ -0,0 +1,20 @@ +package org.mifos.mobile.cn.ui.mifos + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import org.mifos.mobile.cn.R +import org.mifos.mobile.cn.ui.base.MifosBaseFragment + +class Profile : MifosBaseFragment() { + companion object { + fun newInstance(): Profile = Profile() + } + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle?): View? { + // Inflate the layout for this fragment + getToolbar().setVisibility(View.GONE); + return inflater.inflate(R.layout.fragment_profile, container, false) + } +} \ No newline at end of file diff --git a/app/src/main/kotlin/org/mifos/mobile/cn/ui/mifos/ShowActivity.kt b/app/src/main/kotlin/org/mifos/mobile/cn/ui/mifos/ShowActivity.kt new file mode 100644 index 00000000..0f8c5197 --- /dev/null +++ b/app/src/main/kotlin/org/mifos/mobile/cn/ui/mifos/ShowActivity.kt @@ -0,0 +1,13 @@ +package org.mifos.mobile.cn.ui.mifos + +import androidx.appcompat.app.AppCompatActivity +import android.os.Bundle +import org.mifos.mobile.cn.R + +class ShowActivity : AppCompatActivity() { + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_show) + } +} diff --git a/app/src/main/kotlin/org/mifos/mobile/cn/ui/mifos/Test1.kt b/app/src/main/kotlin/org/mifos/mobile/cn/ui/mifos/Test1.kt new file mode 100644 index 00000000..16515844 --- /dev/null +++ b/app/src/main/kotlin/org/mifos/mobile/cn/ui/mifos/Test1.kt @@ -0,0 +1,26 @@ +package org.mifos.mobile.cn.ui + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.fragment.app.Fragment +import kotlinx.android.synthetic.main.toolbar.* +import org.mifos.mobile.cn.R +import org.mifos.mobile.cn.ui.base.MifosBaseFragment +import org.mifos.mobile.cn.ui.mifos.accounts.AccountsFragment +import org.mifos.mobile.cn.ui.mifos.recentTransactions.RecentTransactionsFragment +import org.mifos.mobile.cn.ui.utils.ConstantKeys + +class Test1 : MifosBaseFragment() { + companion object { + fun newInstance(): Test1 = Test1() + } + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle?): View? { + // Inflate the layout for this fragment + setToolbarTitle("Recent Transactions") + getToolbar().setVisibility(View.GONE); + return inflater.inflate(R.layout.fragment_home, container, false) + } +} \ No newline at end of file diff --git a/app/src/main/kotlin/org/mifos/mobile/cn/ui/mifos/Transfer.kt b/app/src/main/kotlin/org/mifos/mobile/cn/ui/mifos/Transfer.kt new file mode 100644 index 00000000..56680c25 --- /dev/null +++ b/app/src/main/kotlin/org/mifos/mobile/cn/ui/mifos/Transfer.kt @@ -0,0 +1,20 @@ +package org.mifos.mobile.cn.ui.mifos + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import org.mifos.mobile.cn.R +import org.mifos.mobile.cn.ui.base.MifosBaseFragment + +class Transfer : MifosBaseFragment() { + companion object { + fun newInstance(): Transfer = Transfer() + } + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle?): View? { + // Inflate the layout for this fragment + getToolbar().setVisibility(View.GONE); + return inflater.inflate(R.layout.fragment_transfer, container, false) + } +} \ No newline at end of file diff --git a/app/src/main/kotlin/org/mifos/mobile/cn/ui/mifos/accounts/AccountsFragment.kt b/app/src/main/kotlin/org/mifos/mobile/cn/ui/mifos/accounts/AccountsFragment.kt index 66d67927..30f51e6a 100644 --- a/app/src/main/kotlin/org/mifos/mobile/cn/ui/mifos/accounts/AccountsFragment.kt +++ b/app/src/main/kotlin/org/mifos/mobile/cn/ui/mifos/accounts/AccountsFragment.kt @@ -9,6 +9,7 @@ import android.view.View import android.view.ViewGroup import com.github.therajanmaurya.sweeterror.SweetUIErrorHandler import kotlinx.android.synthetic.main.fragment_accounts.* +import kotlinx.android.synthetic.main.layout_exception_handler.* import org.mifos.mobile.cn.R import org.mifos.mobile.cn.data.models.accounts.deposit.DepositAccount import org.mifos.mobile.cn.data.models.accounts.loan.LoanAccount @@ -19,7 +20,6 @@ import org.mifos.mobile.cn.ui.base.MifosBaseFragment import org.mifos.mobile.cn.ui.utils.ConstantKeys import org.mifos.mobile.cn.ui.utils.Network import javax.inject.Inject -import kotlinx.android.synthetic.main.layout_sweet_exception_handler.* import org.mifos.mobile.cn.data.models.CheckboxStatus import org.mifos.mobile.cn.ui.base.OnItemClickListener import org.mifos.mobile.cn.ui.mifos.customerDepositDetails.CustomerDepositDetailsFragment 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..b0efd9c7 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 @@ -9,24 +9,29 @@ import kotlinx.android.synthetic.main.fragment_dashboard.* import org.mifos.mobile.cn.data.models.customer.Customer import org.mifos.mobile.cn.R import org.mifos.mobile.cn.enums.AccountType +import org.mifos.mobile.cn.ui.Test1 import org.mifos.mobile.cn.ui.base.MifosBaseActivity import org.mifos.mobile.cn.ui.base.MifosBaseFragment +import org.mifos.mobile.cn.ui.mifos.Main 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 +import kotlin.random.Random.Default.Companion 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,15 +43,21 @@ 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) + ll_charges.setOnClickListener(this) } override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { @@ -69,6 +80,12 @@ class DashboardFragment : MifosBaseFragment(), View.OnClickListener { R.id.ll_recent_transactions -> { showRecentTransactions() } + R.id.iv_user_image -> { + openCustomerProfile() + } + R.id.ll_charges ->{ + test() + } } } @@ -77,7 +94,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), @@ -95,4 +116,9 @@ class DashboardFragment : MifosBaseFragment(), View.OnClickListener { .replaceFragment(RecentTransactionsFragment.Companion.newInstance(), true,R.id.container) } + private fun test(){ + val intent = Intent(activity, Main::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/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/kotlin/org/mifos/mobile/cn/ui/utils/Utils.kt b/app/src/main/kotlin/org/mifos/mobile/cn/ui/utils/Utils.kt index 8802c272..5e4fa9a0 100644 --- a/app/src/main/kotlin/org/mifos/mobile/cn/ui/utils/Utils.kt +++ b/app/src/main/kotlin/org/mifos/mobile/cn/ui/utils/Utils.kt @@ -1,6 +1,7 @@ package org.mifos.mobile.cn.ui.utils import android.content.Context +import android.content.res.Resources import android.graphics.PorterDuff import android.view.Menu import androidx.core.content.ContextCompat @@ -15,6 +16,13 @@ import java.util.* class Utils { companion object { + fun dpToPx(dp: Int): Int { + return ((dp * Resources.getSystem().displayMetrics.density).toInt()); + } + + fun pxToDp(px: Int, context: Context): Int { + return ((px / Resources.getSystem().displayMetrics.density).toInt()); + } fun getPrecision(aDouble: Double?): String { return String.format(Locale.ENGLISH, "%.2f", aDouble) } diff --git a/app/src/main/res/drawable-v24/drawable_editable_image_hint.xml b/app/src/main/res/drawable-v24/drawable_editable_image_hint.xml new file mode 100644 index 00000000..9790605f --- /dev/null +++ b/app/src/main/res/drawable-v24/drawable_editable_image_hint.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable-v24/ic_camera.xml b/app/src/main/res/drawable-v24/ic_camera.xml new file mode 100644 index 00000000..7b9b5cd4 --- /dev/null +++ b/app/src/main/res/drawable-v24/ic_camera.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable-v24/ic_error_state.xml b/app/src/main/res/drawable-v24/ic_error_state.xml new file mode 100644 index 00000000..c01af649 --- /dev/null +++ b/app/src/main/res/drawable-v24/ic_error_state.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable-v24/ic_transaction.xml b/app/src/main/res/drawable-v24/ic_transaction.xml new file mode 100644 index 00000000..fad1fe3e --- /dev/null +++ b/app/src/main/res/drawable-v24/ic_transaction.xml @@ -0,0 +1,5 @@ + + + + diff --git a/app/src/main/res/drawable-v24/profile.png b/app/src/main/res/drawable-v24/profile.png new file mode 100644 index 0000000000000000000000000000000000000000..0dcfeb06b9967ac7af3c65c9c5c57fab6da23156 GIT binary patch literal 3800 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 O0000 + + diff --git a/app/src/main/res/drawable/bottomview_selector.xml b/app/src/main/res/drawable/bottomview_selector.xml new file mode 100644 index 00000000..12200b02 --- /dev/null +++ b/app/src/main/res/drawable/bottomview_selector.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/chip_outline.xml b/app/src/main/res/drawable/chip_outline.xml new file mode 100644 index 00000000..4d772740 --- /dev/null +++ b/app/src/main/res/drawable/chip_outline.xml @@ -0,0 +1,13 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/chip_outline_selected.xml b/app/src/main/res/drawable/chip_outline_selected.xml new file mode 100644 index 00000000..0dae89da --- /dev/null +++ b/app/src/main/res/drawable/chip_outline_selected.xml @@ -0,0 +1,13 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/gray_box.xml b/app/src/main/res/drawable/gray_box.xml new file mode 100644 index 00000000..0e0364ef --- /dev/null +++ b/app/src/main/res/drawable/gray_box.xml @@ -0,0 +1,17 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/greyborder.xml b/app/src/main/res/drawable/greyborder.xml new file mode 100644 index 00000000..4a9acdf3 --- /dev/null +++ b/app/src/main/res/drawable/greyborder.xml @@ -0,0 +1,17 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_account.xml b/app/src/main/res/drawable/ic_account.xml new file mode 100644 index 00000000..b9d5db60 --- /dev/null +++ b/app/src/main/res/drawable/ic_account.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_add_circle_black_24dp.xml b/app/src/main/res/drawable/ic_add_circle_black_24dp.xml new file mode 100644 index 00000000..be629131 --- /dev/null +++ b/app/src/main/res/drawable/ic_add_circle_black_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_home.xml b/app/src/main/res/drawable/ic_home.xml new file mode 100644 index 00000000..70fb2910 --- /dev/null +++ b/app/src/main/res/drawable/ic_home.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_notifications.xml b/app/src/main/res/drawable/ic_notifications.xml index 10953e1d..2de5681a 100644 --- a/app/src/main/res/drawable/ic_notifications.xml +++ b/app/src/main/res/drawable/ic_notifications.xml @@ -4,6 +4,6 @@ android:viewportWidth="24.0" android:viewportHeight="24.0"> diff --git a/app/src/main/res/drawable/ic_profile.xml b/app/src/main/res/drawable/ic_profile.xml new file mode 100644 index 00000000..76785806 --- /dev/null +++ b/app/src/main/res/drawable/ic_profile.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_swap_horiz.xml b/app/src/main/res/drawable/ic_swap_horiz.xml new file mode 100644 index 00000000..f9df11df --- /dev/null +++ b/app/src/main/res/drawable/ic_swap_horiz.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/pick_contact.png b/app/src/main/res/drawable/pick_contact.png new file mode 100644 index 0000000000000000000000000000000000000000..0a33393a4fb658124a689a0a2312dcf01522f1b4 GIT binary patch literal 559 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 Kt*R%lBmNIF5ovA! literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/round_gray.xml b/app/src/main/res/drawable/round_gray.xml new file mode 100644 index 00000000..81cf96d7 --- /dev/null +++ b/app/src/main/res/drawable/round_gray.xml @@ -0,0 +1,9 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_tab.xml b/app/src/main/res/drawable/selector_tab.xml new file mode 100644 index 00000000..6cc08e7d --- /dev/null +++ b/app/src/main/res/drawable/selector_tab.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/violet_concave.xml b/app/src/main/res/drawable/violet_concave.xml new file mode 100644 index 00000000..518afafc --- /dev/null +++ b/app/src/main/res/drawable/violet_concave.xml @@ -0,0 +1,9 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/violet_round.xml b/app/src/main/res/drawable/violet_round.xml new file mode 100644 index 00000000..30cca1a2 --- /dev/null +++ b/app/src/main/res/drawable/violet_round.xml @@ -0,0 +1,17 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/white_card.xml b/app/src/main/res/drawable/white_card.xml new file mode 100644 index 00000000..57a1b6f1 --- /dev/null +++ b/app/src/main/res/drawable/white_card.xml @@ -0,0 +1,15 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_home.xml b/app/src/main/res/layout/activity_home.xml new file mode 100644 index 00000000..b3f97b87 --- /dev/null +++ b/app/src/main/res/layout/activity_home.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_show.xml b/app/src/main/res/layout/activity_show.xml new file mode 100644 index 00000000..892eb905 --- /dev/null +++ b/app/src/main/res/layout/activity_show.xml @@ -0,0 +1,9 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/content_bottom_sheet_account_details.xml b/app/src/main/res/layout/content_bottom_sheet_account_details.xml new file mode 100644 index 00000000..e0a95ffb --- /dev/null +++ b/app/src/main/res/layout/content_bottom_sheet_account_details.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + +