From f7913b308cb0d59108cc3ae96a45cac0a4a3ef5a Mon Sep 17 00:00:00 2001 From: Reyaz Ahmad Date: Tue, 5 Nov 2019 18:15:08 +0530 Subject: [PATCH 01/22] Add bottom navigation activity --- .../BottomNavigationActivity.kt | 32 ++++++++++++++++++ .../myLoans/MyLoansFragment.kt | 33 +++++++++++++++++++ .../myLoans/MyLoansViewModel.kt | 7 ++++ .../login/LoginActivity.kt | 1 - .../res/layout/activity_bottom_navigation.xml | 32 ++++++++++++++++++ app/src/main/res/layout/my_loans_fragment.xml | 13 ++++++++ .../main/res/menu/bottom_navigation_menu.xml | 4 +++ 7 files changed, 121 insertions(+), 1 deletion(-) create mode 100644 app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/BottomNavigationActivity.kt create mode 100644 app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/MyLoansFragment.kt create mode 100644 app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/MyLoansViewModel.kt create mode 100644 app/src/main/res/layout/activity_bottom_navigation.xml create mode 100644 app/src/main/res/layout/my_loans_fragment.xml create mode 100644 app/src/main/res/menu/bottom_navigation_menu.xml diff --git a/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/BottomNavigationActivity.kt b/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/BottomNavigationActivity.kt new file mode 100644 index 0000000000..cba54e1df3 --- /dev/null +++ b/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/BottomNavigationActivity.kt @@ -0,0 +1,32 @@ +package com.navi.medici.android_customer_app.bottomNavigation + +import android.os.Bundle +import androidx.appcompat.app.AppCompatActivity +import androidx.databinding.DataBindingUtil +import com.navi.medici.android_customer_app.R +import com.navi.medici.android_customer_app.bottomNavigation.myLoans.MyLoansFragment +import com.navi.medici.android_customer_app.databinding.ActivityBottomNavigationBinding + +class BottomNavigationActivity : AppCompatActivity() { + + private lateinit var binding: ActivityBottomNavigationBinding + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + binding = DataBindingUtil.setContentView(this, R.layout.activity_bottom_navigation) + + binding.bottomNavigationView.setOnNavigationItemSelectedListener { + when (it.itemId) { + R.id.my_loans -> navigateToMyLoans() + else -> false + } + } + } + + private fun navigateToMyLoans(): Boolean { + val fragmentManager = supportFragmentManager.beginTransaction() + fragmentManager.add(R.id.content_view, MyLoansFragment(), MyLoansFragment.TAG) + fragmentManager.commit() + return true + } +} diff --git a/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/MyLoansFragment.kt b/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/MyLoansFragment.kt new file mode 100644 index 0000000000..c283bf627a --- /dev/null +++ b/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/MyLoansFragment.kt @@ -0,0 +1,33 @@ +package com.navi.medici.android_customer_app.bottomNavigation + +import androidx.lifecycle.ViewModelProviders +import android.os.Bundle +import androidx.fragment.app.Fragment +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import com.navi.medici.android_customer_app.R + + +class MyLoansFragment : Fragment() { + + companion object { + fun newInstance() = MyLoansFragment() + } + + private lateinit var viewModel: MyLoansViewModel + + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { + return inflater.inflate(R.layout.my_loans_fragment, container, false) + } + + override fun onActivityCreated(savedInstanceState: Bundle?) { + super.onActivityCreated(savedInstanceState) + viewModel = ViewModelProviders.of(this).get(MyLoansViewModel::class.java) + // TODO: Use the ViewModel + } + +} diff --git a/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/MyLoansViewModel.kt b/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/MyLoansViewModel.kt new file mode 100644 index 0000000000..2a5ce328ef --- /dev/null +++ b/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/MyLoansViewModel.kt @@ -0,0 +1,7 @@ +package com.navi.medici.android_customer_app.bottomNavigation + +import androidx.lifecycle.ViewModel + +class MyLoansViewModel : ViewModel() { + // TODO: Implement the ViewModel +} diff --git a/app/src/main/java/com/navi/medici/android_customer_app/login/LoginActivity.kt b/app/src/main/java/com/navi/medici/android_customer_app/login/LoginActivity.kt index 3dcf777b21..d9dc66b925 100644 --- a/app/src/main/java/com/navi/medici/android_customer_app/login/LoginActivity.kt +++ b/app/src/main/java/com/navi/medici/android_customer_app/login/LoginActivity.kt @@ -17,7 +17,6 @@ class LoginActivity : AppCompatActivity() { loginViewModel = ViewModelProviders.of(this).get(LoginViewModel::class.java) binding = DataBindingUtil.setContentView(this, R.layout.activity_login) - binding.phoneEdit.addTextChangedListener { loginViewModel.onChangePhoneNumber(it.toString()) } } } \ No newline at end of file diff --git a/app/src/main/res/layout/activity_bottom_navigation.xml b/app/src/main/res/layout/activity_bottom_navigation.xml new file mode 100644 index 0000000000..351628e8e6 --- /dev/null +++ b/app/src/main/res/layout/activity_bottom_navigation.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/my_loans_fragment.xml b/app/src/main/res/layout/my_loans_fragment.xml new file mode 100644 index 0000000000..2cc0482d61 --- /dev/null +++ b/app/src/main/res/layout/my_loans_fragment.xml @@ -0,0 +1,13 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/menu/bottom_navigation_menu.xml b/app/src/main/res/menu/bottom_navigation_menu.xml new file mode 100644 index 0000000000..fe187c0cf4 --- /dev/null +++ b/app/src/main/res/menu/bottom_navigation_menu.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file From f659982e6c2231f23ee5228439853a9ce468380e Mon Sep 17 00:00:00 2001 From: Reyaz Ahmad Date: Tue, 5 Nov 2019 18:17:09 +0530 Subject: [PATCH 02/22] Add bottom navigation menu with Home MyLoans and Profile --- .../main/res/menu/bottom_navigation_menu.xml | 19 +++++++++++++++++-- app/src/main/res/values/strings.xml | 3 +++ 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/menu/bottom_navigation_menu.xml b/app/src/main/res/menu/bottom_navigation_menu.xml index fe187c0cf4..32fbbf6311 100644 --- a/app/src/main/res/menu/bottom_navigation_menu.xml +++ b/app/src/main/res/menu/bottom_navigation_menu.xml @@ -1,4 +1,19 @@ - - + + + + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index b3ad6ebc01..080dc6d781 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -4,4 +4,7 @@ Enter your mobile number to register with Navi Create New Account + Home + My Loans + Profile From 8d5817780376c02d3b0845c443d81d7727119053 Mon Sep 17 00:00:00 2001 From: Reyaz Ahmad Date: Tue, 5 Nov 2019 18:17:43 +0530 Subject: [PATCH 03/22] Add bottom navigation dependency --- app/build.gradle | 1 + 1 file changed, 1 insertion(+) diff --git a/app/build.gradle b/app/build.gradle index 11157863ac..395e3e7e5f 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -45,4 +45,5 @@ dependencies { androidTestImplementation 'androidx.test.ext:junit:1.1.1' androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' implementation 'androidx.lifecycle:lifecycle-extensions:2.1.0' + implementation 'com.google.android.material:material:1.0.0' } From ff28a57277396dafc4941a0e626e0d08673b2144 Mon Sep 17 00:00:00 2001 From: Reyaz Ahmad Date: Tue, 5 Nov 2019 18:19:28 +0530 Subject: [PATCH 04/22] AA-4 | Reyaz & Shashidhara | Add My Loans Fragment in my loans --- .../bottomNavigation/myLoans/LoanAdapter.kt | 2 ++ .../myLoans/MyLoansFragment.kt | 22 ++++++++++++------ .../myLoans/MyLoansViewModel.kt | 2 +- app/src/main/res/layout/my_loans_fragment.xml | 23 ++++++++++++------- 4 files changed, 33 insertions(+), 16 deletions(-) create mode 100644 app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/LoanAdapter.kt diff --git a/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/LoanAdapter.kt b/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/LoanAdapter.kt new file mode 100644 index 0000000000..9d8e722101 --- /dev/null +++ b/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/LoanAdapter.kt @@ -0,0 +1,2 @@ +package com.navi.medici.android_customer_app.bottomNavigation.myLoans + diff --git a/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/MyLoansFragment.kt b/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/MyLoansFragment.kt index c283bf627a..568b1ffc3c 100644 --- a/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/MyLoansFragment.kt +++ b/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/MyLoansFragment.kt @@ -1,4 +1,4 @@ -package com.navi.medici.android_customer_app.bottomNavigation +package com.navi.medici.android_customer_app.bottomNavigation.myLoans import androidx.lifecycle.ViewModelProviders import android.os.Bundle @@ -6,22 +6,26 @@ import androidx.fragment.app.Fragment import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import androidx.databinding.DataBindingUtil import com.navi.medici.android_customer_app.R +import com.navi.medici.android_customer_app.databinding.MyLoansFragmentBinding class MyLoansFragment : Fragment() { - - companion object { - fun newInstance() = MyLoansFragment() - } - private lateinit var viewModel: MyLoansViewModel + private lateinit var binding: MyLoansFragmentBinding override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { - return inflater.inflate(R.layout.my_loans_fragment, container, false) + binding = DataBindingUtil.inflate( + inflater, + R.layout.my_loans_fragment, + container, + false + ) + return binding.root } override fun onActivityCreated(savedInstanceState: Bundle?) { @@ -30,4 +34,8 @@ class MyLoansFragment : Fragment() { // TODO: Use the ViewModel } + companion object { + const val TAG = "MY_LOANS_FRAGMENT" + } + } diff --git a/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/MyLoansViewModel.kt b/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/MyLoansViewModel.kt index 2a5ce328ef..375c12c606 100644 --- a/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/MyLoansViewModel.kt +++ b/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/MyLoansViewModel.kt @@ -1,4 +1,4 @@ -package com.navi.medici.android_customer_app.bottomNavigation +package com.navi.medici.android_customer_app.bottomNavigation.myLoans import androidx.lifecycle.ViewModel diff --git a/app/src/main/res/layout/my_loans_fragment.xml b/app/src/main/res/layout/my_loans_fragment.xml index 2cc0482d61..d2dfa39513 100644 --- a/app/src/main/res/layout/my_loans_fragment.xml +++ b/app/src/main/res/layout/my_loans_fragment.xml @@ -1,13 +1,20 @@ - + - + + + + + tools:context=".bottomNavigation.myLoans.MyLoansFragment"> - \ No newline at end of file + + + + \ No newline at end of file From ccef60644840272df9d7b9221925ee68634c438e Mon Sep 17 00:00:00 2001 From: Reyaz Ahmad Date: Tue, 5 Nov 2019 18:39:43 +0530 Subject: [PATCH 05/22] AA-4 | Reyaz & Shashidhara | Create a base layout for My loans fragment --- .../bottomNavigation/myLoans/LoanAdapter.kt | 2 - .../myLoans/MyLoansFragment.kt | 5 +-- app/src/main/res/layout/my_loans_fragment.xml | 39 +++++++++++++------ app/src/main/res/values/strings.xml | 2 + 4 files changed, 31 insertions(+), 17 deletions(-) delete mode 100644 app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/LoanAdapter.kt diff --git a/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/LoanAdapter.kt b/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/LoanAdapter.kt deleted file mode 100644 index 9d8e722101..0000000000 --- a/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/LoanAdapter.kt +++ /dev/null @@ -1,2 +0,0 @@ -package com.navi.medici.android_customer_app.bottomNavigation.myLoans - diff --git a/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/MyLoansFragment.kt b/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/MyLoansFragment.kt index 568b1ffc3c..5d72078381 100644 --- a/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/MyLoansFragment.kt +++ b/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/MyLoansFragment.kt @@ -1,12 +1,12 @@ package com.navi.medici.android_customer_app.bottomNavigation.myLoans -import androidx.lifecycle.ViewModelProviders import android.os.Bundle -import androidx.fragment.app.Fragment import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.databinding.DataBindingUtil +import androidx.fragment.app.Fragment +import androidx.lifecycle.ViewModelProviders import com.navi.medici.android_customer_app.R import com.navi.medici.android_customer_app.databinding.MyLoansFragmentBinding @@ -37,5 +37,4 @@ class MyLoansFragment : Fragment() { companion object { const val TAG = "MY_LOANS_FRAGMENT" } - } diff --git a/app/src/main/res/layout/my_loans_fragment.xml b/app/src/main/res/layout/my_loans_fragment.xml index d2dfa39513..7a63081416 100644 --- a/app/src/main/res/layout/my_loans_fragment.xml +++ b/app/src/main/res/layout/my_loans_fragment.xml @@ -1,20 +1,35 @@ - + - - - - - + android:orientation="vertical"> + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginStart="16dp" + android:layout_marginTop="16dp" + android:text="@string/active_loans" /> - + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 080dc6d781..059442b7ed 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -7,4 +7,6 @@ Home My Loans Profile + Active Loans + Completed Loans From 69f8ba11c4a575df78619ca13bf97b63139349b6 Mon Sep 17 00:00:00 2001 From: Reyaz Ahmad Date: Tue, 5 Nov 2019 20:15:41 +0530 Subject: [PATCH 06/22] AA-4 | Reyaz & Shashidhara | Create a card layout for each loan --- .../bottomNavigation/myLoans/Loan.kt | 2 + .../bottomNavigation/myLoans/LoanStatus.kt | 2 + .../bottomNavigation/myLoans/LoanType.kt | 2 + .../myLoans/MyLoansAdapter.kt | 2 + app/src/main/res/layout/loan_card.xml | 84 +++++++++++++++++++ app/src/main/res/values/strings.xml | 4 + 6 files changed, 96 insertions(+) create mode 100644 app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/Loan.kt create mode 100644 app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/LoanStatus.kt create mode 100644 app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/LoanType.kt create mode 100644 app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/MyLoansAdapter.kt create mode 100644 app/src/main/res/layout/loan_card.xml diff --git a/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/Loan.kt b/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/Loan.kt new file mode 100644 index 0000000000..fa980cced8 --- /dev/null +++ b/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/Loan.kt @@ -0,0 +1,2 @@ +package com.navi.medici.android_customer_app.bottomNavigation.myLoans + diff --git a/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/LoanStatus.kt b/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/LoanStatus.kt new file mode 100644 index 0000000000..fa980cced8 --- /dev/null +++ b/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/LoanStatus.kt @@ -0,0 +1,2 @@ +package com.navi.medici.android_customer_app.bottomNavigation.myLoans + diff --git a/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/LoanType.kt b/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/LoanType.kt new file mode 100644 index 0000000000..fa980cced8 --- /dev/null +++ b/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/LoanType.kt @@ -0,0 +1,2 @@ +package com.navi.medici.android_customer_app.bottomNavigation.myLoans + diff --git a/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/MyLoansAdapter.kt b/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/MyLoansAdapter.kt new file mode 100644 index 0000000000..9d8e722101 --- /dev/null +++ b/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/MyLoansAdapter.kt @@ -0,0 +1,2 @@ +package com.navi.medici.android_customer_app.bottomNavigation.myLoans + diff --git a/app/src/main/res/layout/loan_card.xml b/app/src/main/res/layout/loan_card.xml new file mode 100644 index 0000000000..c9c58922ed --- /dev/null +++ b/app/src/main/res/layout/loan_card.xml @@ -0,0 +1,84 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 059442b7ed..37a68bc415 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -9,4 +9,8 @@ Profile Active Loans Completed Loans + EMI Due : + Rs %d + Loan Amount : + Due Date From 63324e8e38a91e9906f88f0ba7e6e87811b8edbb Mon Sep 17 00:00:00 2001 From: Reyaz Ahmad Date: Tue, 5 Nov 2019 20:16:47 +0530 Subject: [PATCH 07/22] AA-4 | Reyaz & Shashidhara | Set a default item for bottom navigation view --- .../bottomNavigation/BottomNavigationActivity.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/BottomNavigationActivity.kt b/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/BottomNavigationActivity.kt index cba54e1df3..f5bd2e3f20 100644 --- a/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/BottomNavigationActivity.kt +++ b/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/BottomNavigationActivity.kt @@ -21,6 +21,7 @@ class BottomNavigationActivity : AppCompatActivity() { else -> false } } + binding.bottomNavigationView.selectedItemId = R.id.my_loans } private fun navigateToMyLoans(): Boolean { From 50968e74f142f78528e07a1c8b9fa4b88cd04108 Mon Sep 17 00:00:00 2001 From: Reyaz Ahmad Date: Tue, 5 Nov 2019 20:17:45 +0530 Subject: [PATCH 08/22] AA-4 | Reyaz & Shashidhara | Create adapter for reading a card view --- .../bottomNavigation/myLoans/Loan.kt | 14 +++++++++- .../bottomNavigation/myLoans/LoanStatus.kt | 6 +++- .../bottomNavigation/myLoans/LoanType.kt | 6 +++- .../myLoans/MyLoansAdapter.kt | 28 +++++++++++++++++++ 4 files changed, 51 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/Loan.kt b/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/Loan.kt index fa980cced8..93d47667f9 100644 --- a/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/Loan.kt +++ b/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/Loan.kt @@ -1,2 +1,14 @@ -package com.navi.medici.android_customer_app.bottomNavigation.myLoans +package com.navi.medici.android_customer_app.bottomNavigation.myLoans +import java.util.* + +data class Loan( + val status: LoanStatus?, + val emiDue: Long?, + val amount: Long?, + val dueDate: Date?, + val type: LoanType?, + val startDate: Date?, + val interestRate: Float?, + val completionDate: Date? +) diff --git a/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/LoanStatus.kt b/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/LoanStatus.kt index fa980cced8..82487bd828 100644 --- a/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/LoanStatus.kt +++ b/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/LoanStatus.kt @@ -1,2 +1,6 @@ -package com.navi.medici.android_customer_app.bottomNavigation.myLoans +package com.navi.medici.android_customer_app.bottomNavigation.myLoans +enum class LoanStatus { + ACTIVE, + COMPLETED +} diff --git a/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/LoanType.kt b/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/LoanType.kt index fa980cced8..2097d0c312 100644 --- a/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/LoanType.kt +++ b/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/LoanType.kt @@ -1,2 +1,6 @@ -package com.navi.medici.android_customer_app.bottomNavigation.myLoans +package com.navi.medici.android_customer_app.bottomNavigation.myLoans +enum class LoanType(val type: String) { + COUNTDOWN("Countdown Loan"), + PERSONAL("Personal Loan") +} diff --git a/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/MyLoansAdapter.kt b/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/MyLoansAdapter.kt index 9d8e722101..5c7e2dc2c3 100644 --- a/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/MyLoansAdapter.kt +++ b/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/MyLoansAdapter.kt @@ -1,2 +1,30 @@ package com.navi.medici.android_customer_app.bottomNavigation.myLoans +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.recyclerview.widget.RecyclerView +import com.navi.medici.android_customer_app.R + +class MyLoansAdapter : RecyclerView.Adapter() { + private var loans = listOf() + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyLoansViewHolder { + val layoutInflater = LayoutInflater.from(parent.context) + val view = layoutInflater.inflate(R.layout.loan_card, parent, false) + return MyLoansViewHolder(view) + } + + fun setLoans(loans: List) { + this.loans = loans + } + + override fun getItemCount() = loans.count() + + override fun onBindViewHolder(holder: MyLoansViewHolder, position: Int) { + TODO("not implemented") //To change body of created functions use File | Settings | File Templates. + } + + class MyLoansViewHolder(view: View) : RecyclerView.ViewHolder(view) { + } +} \ No newline at end of file From 00eb8876776cbb610781b838e1d6a9ef2e867f00 Mon Sep 17 00:00:00 2001 From: Reyaz Ahmad Date: Wed, 6 Nov 2019 11:41:13 +0530 Subject: [PATCH 09/22] AA-4 | Reyaz & Shashidhara | Add new view items in card layout and complete LoansAdapter --- .../bottomNavigation/myLoans/LoanType.kt | 2 +- .../myLoans/MyLoansAdapter.kt | 27 ++- app/src/main/res/layout/loan_card.xml | 222 ++++++++++++------ app/src/main/res/values/strings.xml | 6 +- 4 files changed, 178 insertions(+), 79 deletions(-) diff --git a/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/LoanType.kt b/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/LoanType.kt index 2097d0c312..bf0d95fe10 100644 --- a/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/LoanType.kt +++ b/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/LoanType.kt @@ -1,6 +1,6 @@ package com.navi.medici.android_customer_app.bottomNavigation.myLoans -enum class LoanType(val type: String) { +enum class LoanType(val value: String) { COUNTDOWN("Countdown Loan"), PERSONAL("Personal Loan") } diff --git a/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/MyLoansAdapter.kt b/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/MyLoansAdapter.kt index 5c7e2dc2c3..34ea045a4d 100644 --- a/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/MyLoansAdapter.kt +++ b/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/MyLoansAdapter.kt @@ -1,30 +1,43 @@ package com.navi.medici.android_customer_app.bottomNavigation.myLoans +import android.content.Context import android.view.LayoutInflater -import android.view.View import android.view.ViewGroup import androidx.recyclerview.widget.RecyclerView import com.navi.medici.android_customer_app.R +import com.navi.medici.android_customer_app.databinding.LoanCardBinding -class MyLoansAdapter : RecyclerView.Adapter() { - private var loans = listOf() +class MyLoansAdapter(private val context: Context) : + RecyclerView.Adapter() { + private val loans = mutableListOf() override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyLoansViewHolder { val layoutInflater = LayoutInflater.from(parent.context) - val view = layoutInflater.inflate(R.layout.loan_card, parent, false) + val view = LoanCardBinding.inflate(layoutInflater, parent, false) return MyLoansViewHolder(view) } fun setLoans(loans: List) { - this.loans = loans + this.loans.clear() + this.loans.addAll(loans) + notifyDataSetChanged() } override fun getItemCount() = loans.count() override fun onBindViewHolder(holder: MyLoansViewHolder, position: Int) { - TODO("not implemented") //To change body of created functions use File | Settings | File Templates. + val loan = loans[position] + holder.binding.emiDueText.text = + context.getString(R.string.rupees_format, loan.emiDue) + holder.binding.loanAmountText.text = + context.getString(R.string.rupees_format, loan.amount) + holder.binding.dueDateText.text = loan.dueDate.toString() + holder.binding.loanTypeText.text = loan.type?.value + holder.binding.startDateText.text = loan.startDate.toString() + holder.binding.interestRateText.text = + context.getString(R.string.percentage_format, loan.interestRate) } - class MyLoansViewHolder(view: View) : RecyclerView.ViewHolder(view) { + class MyLoansViewHolder(val binding: LoanCardBinding) : RecyclerView.ViewHolder(binding.root) { } } \ No newline at end of file diff --git a/app/src/main/res/layout/loan_card.xml b/app/src/main/res/layout/loan_card.xml index c9c58922ed..453acfb068 100644 --- a/app/src/main/res/layout/loan_card.xml +++ b/app/src/main/res/layout/loan_card.xml @@ -1,84 +1,166 @@ - + xmlns:tools="http://schemas.android.com/tools"> - + android:layout_height="wrap_content"> - + - + - + - + - + - + - + - - + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 37a68bc415..7b10ed6856 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -10,7 +10,11 @@ Active Loans Completed Loans EMI Due : - Rs %d + Rs %d Loan Amount : Due Date + Loan Type + Start Date + Interest Rate + %d %% From b80115674a8cbb6613092540a15da82527aefb99 Mon Sep 17 00:00:00 2001 From: Reyaz Ahmad Date: Wed, 6 Nov 2019 11:44:37 +0530 Subject: [PATCH 10/22] AA-4 | Reyaz & Shashidhara | Register bottom navigation activity in manifest --- app/src/main/AndroidManifest.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ea793b5a59..52997b2228 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -11,6 +11,7 @@ android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> + From 90fc55d515c82366a203658c3c68e576e29059e2 Mon Sep 17 00:00:00 2001 From: Reyaz Ahmad Date: Wed, 6 Nov 2019 14:12:12 +0530 Subject: [PATCH 11/22] AA-4 | Reyaz & Shashidhara | Change background color of bottom navigation --- .../android_customer_app/bottomNavigation/myLoans/MyLoansApi.kt | 2 ++ .../bottomNavigation/myLoans/MyLoansRepository.kt | 2 ++ app/src/main/res/layout/activity_bottom_navigation.xml | 1 + 3 files changed, 5 insertions(+) create mode 100644 app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/MyLoansApi.kt create mode 100644 app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/MyLoansRepository.kt diff --git a/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/MyLoansApi.kt b/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/MyLoansApi.kt new file mode 100644 index 0000000000..fa980cced8 --- /dev/null +++ b/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/MyLoansApi.kt @@ -0,0 +1,2 @@ +package com.navi.medici.android_customer_app.bottomNavigation.myLoans + diff --git a/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/MyLoansRepository.kt b/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/MyLoansRepository.kt new file mode 100644 index 0000000000..fa980cced8 --- /dev/null +++ b/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/MyLoansRepository.kt @@ -0,0 +1,2 @@ +package com.navi.medici.android_customer_app.bottomNavigation.myLoans + diff --git a/app/src/main/res/layout/activity_bottom_navigation.xml b/app/src/main/res/layout/activity_bottom_navigation.xml index 351628e8e6..a7b0801b99 100644 --- a/app/src/main/res/layout/activity_bottom_navigation.xml +++ b/app/src/main/res/layout/activity_bottom_navigation.xml @@ -22,6 +22,7 @@ android:id="@+id/bottom_navigation_view" android:layout_width="match_parent" android:layout_height="wrap_content" + android:background="@android:color/white" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" From 0ae24b48778e38a61dfa1feea16384ea47117998 Mon Sep 17 00:00:00 2001 From: Reyaz Ahmad Date: Wed, 6 Nov 2019 14:19:32 +0530 Subject: [PATCH 12/22] AA-4 | Reyaz & Shashidhara | Provide default BASE_URL and gsonConverterFactory in Retrofit Service --- .../medici/android_customer_app/api/RetrofitService.kt | 9 ++++++++- .../navi/medici/android_customer_app/login/LoginApi.kt | 7 +------ 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/com/navi/medici/android_customer_app/api/RetrofitService.kt b/app/src/main/java/com/navi/medici/android_customer_app/api/RetrofitService.kt index 25c4e9a252..2fe747335e 100644 --- a/app/src/main/java/com/navi/medici/android_customer_app/api/RetrofitService.kt +++ b/app/src/main/java/com/navi/medici/android_customer_app/api/RetrofitService.kt @@ -2,9 +2,16 @@ package com.navi.medici.android_customer_app.api import retrofit2.Converter import retrofit2.Retrofit +import retrofit2.converter.gson.GsonConverterFactory + +private const val BASE_URL = "https://jsonplaceholder.typicode.com/" +private val gsonConverterFactory = GsonConverterFactory.create() object RetrofitService { - fun build(baseURL: String, converterFactory: Converter.Factory): Retrofit { + fun build( + baseURL: String = BASE_URL, + converterFactory: Converter.Factory = gsonConverterFactory + ): Retrofit { val retrofitBuilder = Retrofit.Builder().baseUrl(baseURL) return retrofitBuilder.addConverterFactory(converterFactory).build() } diff --git a/app/src/main/java/com/navi/medici/android_customer_app/login/LoginApi.kt b/app/src/main/java/com/navi/medici/android_customer_app/login/LoginApi.kt index 4b1177ad2a..f4035ab160 100644 --- a/app/src/main/java/com/navi/medici/android_customer_app/login/LoginApi.kt +++ b/app/src/main/java/com/navi/medici/android_customer_app/login/LoginApi.kt @@ -2,20 +2,15 @@ package com.navi.medici.android_customer_app.login import com.navi.medici.android_customer_app.api.RetrofitService import retrofit2.Response -import retrofit2.converter.gson.GsonConverterFactory import retrofit2.http.GET -private const val BASE_URL = "https://jsonplaceholder.typicode.com/" -private val gsonConverterFactory = GsonConverterFactory.create() - interface LoginApi { @GET("posts/1") suspend fun submitPhoneNumber(): Response companion object { operator fun invoke(): LoginApi { - return RetrofitService.build(BASE_URL, gsonConverterFactory) - .create(LoginApi::class.java) + return RetrofitService.build().create(LoginApi::class.java) } } } \ No newline at end of file From 1fa370507bd7b2ebc7375215113fcf242e1565d9 Mon Sep 17 00:00:00 2001 From: Reyaz Ahmad Date: Wed, 6 Nov 2019 14:26:02 +0530 Subject: [PATCH 13/22] AA-4 | Reyaz & Shashidhara | Change layout so that completed loans can also be viewed in same layout --- .../myLoans/MyLoansAdapter.kt | 31 +++++++++++----- app/src/main/res/layout/loan_card.xml | 36 ++++++++++--------- app/src/main/res/values/strings.xml | 4 ++- 3 files changed, 44 insertions(+), 27 deletions(-) diff --git a/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/MyLoansAdapter.kt b/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/MyLoansAdapter.kt index 34ea045a4d..45537b7804 100644 --- a/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/MyLoansAdapter.kt +++ b/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/MyLoansAdapter.kt @@ -27,15 +27,28 @@ class MyLoansAdapter(private val context: Context) : override fun onBindViewHolder(holder: MyLoansViewHolder, position: Int) { val loan = loans[position] - holder.binding.emiDueText.text = - context.getString(R.string.rupees_format, loan.emiDue) - holder.binding.loanAmountText.text = - context.getString(R.string.rupees_format, loan.amount) - holder.binding.dueDateText.text = loan.dueDate.toString() - holder.binding.loanTypeText.text = loan.type?.value - holder.binding.startDateText.text = loan.startDate.toString() - holder.binding.interestRateText.text = - context.getString(R.string.percentage_format, loan.interestRate) + holder.binding.apply { + loanAmountText.text = + context.getString(R.string.rupees_format, loan.amount) + loanTypeText.text = loan.type?.value + startDateText.text = loan.startDate + interestRateText.text = + context.getString(R.string.percentage_format, loan.interestRate) + if (loan.status == LoanStatus.ACTIVE) { + emiDueOrCompletionDateText.text = + context.getString(R.string.rupees_format, loan.emiDue) + emiDueOrCompletionDateLabelText.text = + context.getString(R.string.emi_due) + dueDateOrStatusLabelText.text = context.getString(R.string.due_date) + dueDateOrStatusText.text = loan.dueDate + } else { + emiDueOrCompletionDateText.text = loan.completionDate + emiDueOrCompletionDateLabelText.text = + context.getString(R.string.completion_date) + dueDateOrStatusLabelText.text = context.getString(R.string.status) + dueDateOrStatusText.text = loan.status?.value + } + } } class MyLoansViewHolder(val binding: LoanCardBinding) : RecyclerView.ViewHolder(binding.root) { diff --git a/app/src/main/res/layout/loan_card.xml b/app/src/main/res/layout/loan_card.xml index 453acfb068..a3eb979da5 100644 --- a/app/src/main/res/layout/loan_card.xml +++ b/app/src/main/res/layout/loan_card.xml @@ -6,34 +6,36 @@ + android:layout_height="wrap_content" + android:layout_margin="16dp" + app:cardElevation="8dp"> + app:layout_constraintTop_toTopOf="parent" + tools:text="@string/emi_due" /> + app:layout_constraintBottom_toBottomOf="@+id/emi_due_or_completion_date_label_text" + app:layout_constraintStart_toEndOf="@+id/emi_due_or_completion_date_label_text" + app:layout_constraintTop_toTopOf="@+id/emi_due_or_completion_date_label_text" + tools:text="Rs 25000" /> + app:layout_constraintStart_toStartOf="@+id/emi_due_or_completion_date_label_text" + app:layout_constraintTop_toBottomOf="@+id/emi_due_or_completion_date_label_text" /> + app:layout_constraintStart_toStartOf="@+id/due_date_or_status_text" + app:layout_constraintTop_toTopOf="@+id/emi_due_or_completion_date_text" + tools:text="@string/due_date" /> Loan Type Start Date Interest Rate - %d %% + %.1f %% + Completion Date + Status From 9fd6a4848eb231feb7825ef89b64525e8463416b Mon Sep 17 00:00:00 2001 From: Reyaz Ahmad Date: Wed, 6 Nov 2019 14:27:04 +0530 Subject: [PATCH 14/22] AA-4 | Reyaz & Shashidhara | Add loan status value --- .../bottomNavigation/myLoans/LoanStatus.kt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/LoanStatus.kt b/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/LoanStatus.kt index 82487bd828..5b45bb6ae8 100644 --- a/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/LoanStatus.kt +++ b/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/LoanStatus.kt @@ -1,6 +1,6 @@ package com.navi.medici.android_customer_app.bottomNavigation.myLoans -enum class LoanStatus { - ACTIVE, - COMPLETED +enum class LoanStatus(val value: String) { + ACTIVE("Active"), + COMPLETED("Closed") } From 1c73613f2893a777777a9c9197f4c564b420434e Mon Sep 17 00:00:00 2001 From: Reyaz Ahmad Date: Wed, 6 Nov 2019 14:28:15 +0530 Subject: [PATCH 15/22] AA-4 | Reyaz & Shashidhara | Create MyLoans Api and Repository --- .../bottomNavigation/myLoans/MyLoansApi.kt | 16 +++++++++++++++- .../myLoans/MyLoansRepository.kt | 7 ++++++- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/MyLoansApi.kt b/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/MyLoansApi.kt index fa980cced8..378a81637e 100644 --- a/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/MyLoansApi.kt +++ b/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/MyLoansApi.kt @@ -1,2 +1,16 @@ -package com.navi.medici.android_customer_app.bottomNavigation.myLoans +package com.navi.medici.android_customer_app.bottomNavigation.myLoans +import com.navi.medici.android_customer_app.api.RetrofitService +import retrofit2.Response +import retrofit2.http.GET + +interface MyLoansApi { + @GET("posts") + suspend fun fetchMyLoans(): Response> + + companion object { + operator fun invoke(): MyLoansApi { + return RetrofitService.build().create(MyLoansApi::class.java) + } + } +} diff --git a/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/MyLoansRepository.kt b/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/MyLoansRepository.kt index fa980cced8..afbf3407a6 100644 --- a/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/MyLoansRepository.kt +++ b/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/MyLoansRepository.kt @@ -1,2 +1,7 @@ -package com.navi.medici.android_customer_app.bottomNavigation.myLoans +package com.navi.medici.android_customer_app.bottomNavigation.myLoans +import com.navi.medici.android_customer_app.api.SafeApiRequest + +class MyLoansRepository(private val myLoansApi: MyLoansApi) : SafeApiRequest() { + suspend fun fetchMyLoans() = apiRequest { myLoansApi.fetchMyLoans() } +} From 037c0d0a412466dd0b8e75bd05321d648dd024f2 Mon Sep 17 00:00:00 2001 From: Reyaz Ahmad Date: Wed, 6 Nov 2019 14:29:56 +0530 Subject: [PATCH 16/22] AA-4 | Reyaz & Shashidhara | Implement method to fetch MyLoans in viewModel --- .../myLoans/MyLoansViewModel.kt | 36 ++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/MyLoansViewModel.kt b/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/MyLoansViewModel.kt index 375c12c606..58d1684d50 100644 --- a/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/MyLoansViewModel.kt +++ b/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/MyLoansViewModel.kt @@ -1,7 +1,41 @@ package com.navi.medici.android_customer_app.bottomNavigation.myLoans +import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch class MyLoansViewModel : ViewModel() { - // TODO: Implement the ViewModel + private val myLoansRepository = MyLoansRepository(MyLoansApi()) + private val coroutineScope = CoroutineScope(Dispatchers.Main) + val myLoans = MutableLiveData>() + + fun fetchMyLoans() { + coroutineScope.launch { + val response = myLoansRepository.fetchMyLoans() + response.forEachIndexed { index, loan -> + loan.apply { + if (index % 2 == 0) { + amount = 25000 + dueDate = "24th December" + interestRate = 12.5f + startDate = "24th September" + emiDue = 2500 + status = LoanStatus.ACTIVE + type = LoanType.PERSONAL + } else { + amount = 25000 + dueDate = "24th December" + interestRate = 12.5f + startDate = "24th September" + completionDate = "21 January" + status = LoanStatus.COMPLETED + type = LoanType.PERSONAL + } + } + } + myLoans.value = response.subList(0,7) + } + } } From 6d1f3b9a3e51cd267add779bb863f4b7073efd09 Mon Sep 17 00:00:00 2001 From: Reyaz Ahmad Date: Wed, 6 Nov 2019 14:32:30 +0530 Subject: [PATCH 17/22] AA-4 | Reyaz & Shashidhara | Observe my loans view model and pass data fetched to the adapter --- .../bottomNavigation/myLoans/Loan.kt | 18 +++--- .../myLoans/MyLoansFragment.kt | 28 ++++++++- app/src/main/res/layout/my_loans_fragment.xml | 62 +++++++++++-------- 3 files changed, 71 insertions(+), 37 deletions(-) diff --git a/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/Loan.kt b/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/Loan.kt index 93d47667f9..f228064f4f 100644 --- a/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/Loan.kt +++ b/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/Loan.kt @@ -1,14 +1,12 @@ package com.navi.medici.android_customer_app.bottomNavigation.myLoans -import java.util.* - data class Loan( - val status: LoanStatus?, - val emiDue: Long?, - val amount: Long?, - val dueDate: Date?, - val type: LoanType?, - val startDate: Date?, - val interestRate: Float?, - val completionDate: Date? + var status: LoanStatus?, + var emiDue: Long?, + var amount: Long?, + var dueDate: String?, + var type: LoanType?, + var startDate: String?, + var interestRate: Float?, + var completionDate: String? ) diff --git a/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/MyLoansFragment.kt b/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/MyLoansFragment.kt index 5d72078381..1bdecc6cff 100644 --- a/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/MyLoansFragment.kt +++ b/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/MyLoansFragment.kt @@ -6,7 +6,9 @@ import android.view.View import android.view.ViewGroup import androidx.databinding.DataBindingUtil import androidx.fragment.app.Fragment +import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProviders +import androidx.recyclerview.widget.LinearLayoutManager import com.navi.medici.android_customer_app.R import com.navi.medici.android_customer_app.databinding.MyLoansFragmentBinding @@ -31,7 +33,31 @@ class MyLoansFragment : Fragment() { override fun onActivityCreated(savedInstanceState: Bundle?) { super.onActivityCreated(savedInstanceState) viewModel = ViewModelProviders.of(this).get(MyLoansViewModel::class.java) - // TODO: Use the ViewModel + context?.let { + val myActiveLoansAdapter = MyLoansAdapter(it) + binding.activeLoansRecycler.layoutManager = LinearLayoutManager(it) + binding.activeLoansRecycler.adapter = myActiveLoansAdapter + + val myCompletedLoansAdapter = MyLoansAdapter(it) + binding.completedLoansRecycler.layoutManager = LinearLayoutManager(it) + binding.completedLoansRecycler.adapter = myCompletedLoansAdapter + + viewModel.myLoans.observe(this, Observer { loans -> + val myActiveLoans = loans.filter { loan -> + loan.status == LoanStatus.ACTIVE + } + myActiveLoansAdapter.setLoans(myActiveLoans) + + val myCompletedLoans = loans.filter { loan -> + loan.status == LoanStatus.COMPLETED + } + myCompletedLoansAdapter.setLoans(myCompletedLoans) + }) + + viewModel.fetchMyLoans() + } + + } companion object { diff --git a/app/src/main/res/layout/my_loans_fragment.xml b/app/src/main/res/layout/my_loans_fragment.xml index 7a63081416..cd94392c2e 100644 --- a/app/src/main/res/layout/my_loans_fragment.xml +++ b/app/src/main/res/layout/my_loans_fragment.xml @@ -1,35 +1,45 @@ - + android:layout_height="match_parent"> - - - + android:layout_height="match_parent" + android:background="@android:color/white" + android:orientation="vertical"> - + - - + + + + + + + \ No newline at end of file From a822aa155726c47299feb281a370ff7c993171c0 Mon Sep 17 00:00:00 2001 From: Reyaz Ahmad Date: Wed, 6 Nov 2019 15:02:49 +0530 Subject: [PATCH 18/22] Navigate from login screen to my loans screen on success --- app/src/main/AndroidManifest.xml | 2 +- .../bottomNavigation/myLoans/MyLoansViewModel.kt | 11 +++++------ .../android_customer_app/login/LoginActivity.kt | 9 +++++++++ .../android_customer_app/login/LoginViewModel.kt | 10 ++++++++-- 4 files changed, 23 insertions(+), 9 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 52997b2228..6189c7579b 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -12,7 +12,7 @@ android:supportsRtl="true" android:theme="@style/AppTheme"> - + diff --git a/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/MyLoansViewModel.kt b/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/MyLoansViewModel.kt index 58d1684d50..53079a00b7 100644 --- a/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/MyLoansViewModel.kt +++ b/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/MyLoansViewModel.kt @@ -23,13 +23,12 @@ class MyLoansViewModel : ViewModel() { startDate = "24th September" emiDue = 2500 status = LoanStatus.ACTIVE - type = LoanType.PERSONAL + type = LoanType.COUNTDOWN } else { - amount = 25000 - dueDate = "24th December" - interestRate = 12.5f - startDate = "24th September" - completionDate = "21 January" + amount = 50000 + interestRate = 16.7f + startDate = "24th August" + completionDate = "21st February" status = LoanStatus.COMPLETED type = LoanType.PERSONAL } diff --git a/app/src/main/java/com/navi/medici/android_customer_app/login/LoginActivity.kt b/app/src/main/java/com/navi/medici/android_customer_app/login/LoginActivity.kt index d9dc66b925..9e9bf6f05f 100644 --- a/app/src/main/java/com/navi/medici/android_customer_app/login/LoginActivity.kt +++ b/app/src/main/java/com/navi/medici/android_customer_app/login/LoginActivity.kt @@ -1,11 +1,14 @@ package com.navi.medici.android_customer_app.login +import android.content.Intent import android.os.Bundle import androidx.appcompat.app.AppCompatActivity import androidx.core.widget.addTextChangedListener import androidx.databinding.DataBindingUtil +import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProviders import com.navi.medici.android_customer_app.R +import com.navi.medici.android_customer_app.bottomNavigation.BottomNavigationActivity import com.navi.medici.android_customer_app.databinding.ActivityLoginBinding class LoginActivity : AppCompatActivity() { @@ -16,6 +19,12 @@ class LoginActivity : AppCompatActivity() { super.onCreate(savedInstanceState) loginViewModel = ViewModelProviders.of(this).get(LoginViewModel::class.java) binding = DataBindingUtil.setContentView(this, R.layout.activity_login) + loginViewModel.isLoggedIn.observe(this, Observer { isLoggedIn -> + if (isLoggedIn) { + val intent = Intent(this, BottomNavigationActivity::class.java) + startActivity(intent) + } + }) binding.phoneEdit.addTextChangedListener { loginViewModel.onChangePhoneNumber(it.toString()) } } diff --git a/app/src/main/java/com/navi/medici/android_customer_app/login/LoginViewModel.kt b/app/src/main/java/com/navi/medici/android_customer_app/login/LoginViewModel.kt index 761ec10f8e..be3bc5d840 100644 --- a/app/src/main/java/com/navi/medici/android_customer_app/login/LoginViewModel.kt +++ b/app/src/main/java/com/navi/medici/android_customer_app/login/LoginViewModel.kt @@ -1,12 +1,16 @@ package com.navi.medici.android_customer_app.login -import android.util.Log +import androidx.lifecycle.LiveData +import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch class LoginViewModel : ViewModel() { + private val _isLoggedIn = MutableLiveData(false) + val isLoggedIn: LiveData + get() = _isLoggedIn private val login = Login() private val loginRepository = LoginRepository(LoginApi()) private val coroutineScope = CoroutineScope(Dispatchers.Main) @@ -21,7 +25,9 @@ class LoginViewModel : ViewModel() { private fun submitPhoneNumber() { coroutineScope.launch { val response = loginRepository.submitPhoneNumber(login.phoneNumber) - Log.i("login response", response.toString()) + if (response.id != 0) { + _isLoggedIn.value = true + } } } From df442a3d9aeed7b0790470a8d03d87c4d5d571c2 Mon Sep 17 00:00:00 2001 From: Reyaz Ahmad Date: Wed, 6 Nov 2019 16:52:52 +0530 Subject: [PATCH 19/22] AA-4 | Reyaz & Shashidhara | Reuse same fragment for my loans if it exists --- .../bottomNavigation/BottomNavigationActivity.kt | 6 +++++- .../bottomNavigation/myLoans/MyLoansFragment.kt | 2 -- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/BottomNavigationActivity.kt b/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/BottomNavigationActivity.kt index f5bd2e3f20..b5ff21ac9a 100644 --- a/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/BottomNavigationActivity.kt +++ b/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/BottomNavigationActivity.kt @@ -26,7 +26,11 @@ class BottomNavigationActivity : AppCompatActivity() { private fun navigateToMyLoans(): Boolean { val fragmentManager = supportFragmentManager.beginTransaction() - fragmentManager.add(R.id.content_view, MyLoansFragment(), MyLoansFragment.TAG) + supportFragmentManager.findFragmentByTag(MyLoansFragment.TAG)?.let { fragment -> + fragmentManager.replace(R.id.content_view, fragment, MyLoansFragment.TAG) + } ?: run { + fragmentManager.add(R.id.content_view, MyLoansFragment(), MyLoansFragment.TAG) + } fragmentManager.commit() return true } diff --git a/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/MyLoansFragment.kt b/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/MyLoansFragment.kt index 1bdecc6cff..cb1c9c456a 100644 --- a/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/MyLoansFragment.kt +++ b/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/MyLoansFragment.kt @@ -56,8 +56,6 @@ class MyLoansFragment : Fragment() { viewModel.fetchMyLoans() } - - } companion object { From 974044fe4b4e0932cef17d7069c0273a9fdb5765 Mon Sep 17 00:00:00 2001 From: Shashidhara Gopal Date: Thu, 7 Nov 2019 11:50:12 +0530 Subject: [PATCH 20/22] Remove onActivityCreated lifecycle in my loans fragment --- .../bottomNavigation/myLoans/MyLoansFragment.kt | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/MyLoansFragment.kt b/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/MyLoansFragment.kt index cb1c9c456a..fd0b60c21d 100644 --- a/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/MyLoansFragment.kt +++ b/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/MyLoansFragment.kt @@ -27,11 +27,6 @@ class MyLoansFragment : Fragment() { container, false ) - return binding.root - } - - override fun onActivityCreated(savedInstanceState: Bundle?) { - super.onActivityCreated(savedInstanceState) viewModel = ViewModelProviders.of(this).get(MyLoansViewModel::class.java) context?.let { val myActiveLoansAdapter = MyLoansAdapter(it) @@ -56,6 +51,7 @@ class MyLoansFragment : Fragment() { viewModel.fetchMyLoans() } + return binding.root } companion object { From ea1f47b2aa5f89dafa4a8fb0e60e7535a57d3c3e Mon Sep 17 00:00:00 2001 From: Shashidhara Gopal Date: Thu, 7 Nov 2019 11:50:12 +0530 Subject: [PATCH 21/22] AA-4 | Reyaz & Shashidhara | Remove onActivityCreated lifecycle in my loans fragment --- .../bottomNavigation/myLoans/MyLoansFragment.kt | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/MyLoansFragment.kt b/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/MyLoansFragment.kt index cb1c9c456a..fd0b60c21d 100644 --- a/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/MyLoansFragment.kt +++ b/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/myLoans/MyLoansFragment.kt @@ -27,11 +27,6 @@ class MyLoansFragment : Fragment() { container, false ) - return binding.root - } - - override fun onActivityCreated(savedInstanceState: Bundle?) { - super.onActivityCreated(savedInstanceState) viewModel = ViewModelProviders.of(this).get(MyLoansViewModel::class.java) context?.let { val myActiveLoansAdapter = MyLoansAdapter(it) @@ -56,6 +51,7 @@ class MyLoansFragment : Fragment() { viewModel.fetchMyLoans() } + return binding.root } companion object { From c591ad8fa68b67de6e6492fd82a3257903db4920 Mon Sep 17 00:00:00 2001 From: Shashidhara Gopal Date: Thu, 7 Nov 2019 12:07:34 +0530 Subject: [PATCH 22/22] AA-4 | Reyaz & Shashidhara | Replace fragment once added to fragment manager --- .../bottomNavigation/BottomNavigationActivity.kt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/BottomNavigationActivity.kt b/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/BottomNavigationActivity.kt index b5ff21ac9a..da76efc6a9 100644 --- a/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/BottomNavigationActivity.kt +++ b/app/src/main/java/com/navi/medici/android_customer_app/bottomNavigation/BottomNavigationActivity.kt @@ -29,7 +29,9 @@ class BottomNavigationActivity : AppCompatActivity() { supportFragmentManager.findFragmentByTag(MyLoansFragment.TAG)?.let { fragment -> fragmentManager.replace(R.id.content_view, fragment, MyLoansFragment.TAG) } ?: run { - fragmentManager.add(R.id.content_view, MyLoansFragment(), MyLoansFragment.TAG) + val fragment = MyLoansFragment() + fragmentManager.add(R.id.content_view, fragment, MyLoansFragment.TAG) + fragmentManager.replace(R.id.content_view, fragment, MyLoansFragment.TAG) } fragmentManager.commit() return true