11package com.marknkamau.justjava.ui.checkout
22
33import android.annotation.SuppressLint
4+ import android.app.Activity
45import android.content.Intent
56import android.os.Bundle
67import android.view.View
8+ import android.widget.Toast
79import androidx.appcompat.app.AlertDialog
810import androidx.appcompat.app.AppCompatActivity
911import androidx.core.app.TaskStackBuilder
@@ -13,6 +15,7 @@ import com.marknjunge.core.data.model.PaymentMethod
1315import com.marknjunge.core.data.model.Resource
1416import com.marknjunge.core.data.model.User
1517import com.marknkamau.justjava.R
18+ import com.marknkamau.justjava.ui.addAddress.AddAddressActivity
1619import com.marknkamau.justjava.ui.login.SignInActivity
1720import com.marknkamau.justjava.ui.main.MainActivity
1821import com.marknkamau.justjava.ui.orderDetail.OrderDetailActivity
@@ -26,8 +29,9 @@ class CheckoutActivity : AppCompatActivity() {
2629
2730 private val checkoutViewModel: CheckoutViewModel by viewModel()
2831 private lateinit var paymentMethod: PaymentMethod
29- private lateinit var deliveryAddress: Address
32+ private var deliveryAddress: Address ? = null
3033 private lateinit var user: User
34+ private val ADD_ADDRESS_REQ = 99
3135
3236 @SuppressLint(" DefaultLocale" )
3337 override fun onCreate (savedInstanceState : Bundle ? ) {
@@ -50,10 +54,16 @@ class CheckoutActivity : AppCompatActivity() {
5054 checkoutViewModel.getCartItems()
5155 user = checkoutViewModel.getUser()
5256 if (user.address.isEmpty()) {
53- // TODO Handle no address
57+ btnAddDeliveryAddress.visibility = View .VISIBLE
58+ btnChangeDeliveryAddress.visibility = View .GONE
59+ tvDeliveryAddress.visibility = View .GONE
5460 } else {
61+ btnAddDeliveryAddress.visibility = View .GONE
62+ btnChangeDeliveryAddress.visibility = View .VISIBLE
63+ tvDeliveryAddress.visibility = View .VISIBLE
64+
5565 deliveryAddress = user.address[0 ]
56- tvDeliveryAddress.text = deliveryAddress.streetAddress
66+ tvDeliveryAddress.text = deliveryAddress!! .streetAddress
5767 }
5868
5969 btnChangeDeliveryAddress.setOnClickListener {
@@ -64,7 +74,34 @@ class CheckoutActivity : AppCompatActivity() {
6474 }
6575
6676 btnPlaceOrder.setOnClickListener {
67- placeOrder()
77+ if (valid()) {
78+ placeOrder()
79+ }
80+ }
81+ btnAddDeliveryAddress.setOnClickListener {
82+ startActivityForResult(Intent (this , AddAddressActivity ::class .java), ADD_ADDRESS_REQ )
83+ }
84+ }
85+
86+ override fun onActivityResult (requestCode : Int , resultCode : Int , data : Intent ? ) {
87+ super .onActivityResult(requestCode, resultCode, data)
88+
89+ if (requestCode == ADD_ADDRESS_REQ && resultCode == Activity .RESULT_OK ) {
90+ val address = data?.extras!! [AddAddressActivity .ADDRESS_KEY ] as Address
91+
92+ checkoutViewModel.addAddress(address).observe(this , Observer { resource ->
93+ when (resource) {
94+ is Resource .Success -> {
95+ btnAddDeliveryAddress.visibility = View .GONE
96+ btnChangeDeliveryAddress.visibility = View .VISIBLE
97+ tvDeliveryAddress.visibility = View .VISIBLE
98+
99+ deliveryAddress = address
100+ tvDeliveryAddress.text = deliveryAddress!! .streetAddress
101+ }
102+ is Resource .Failure -> toast(resource.message)
103+ }
104+ })
68105 }
69106 }
70107
@@ -91,7 +128,7 @@ class CheckoutActivity : AppCompatActivity() {
91128 .setTitle(R .string.delivery_address)
92129 .setItems(addresses) { _, which ->
93130 deliveryAddress = user.address[which]
94- tvDeliveryAddress.text = deliveryAddress.streetAddress
131+ tvDeliveryAddress.text = deliveryAddress!! .streetAddress
95132 }
96133 .create()
97134 .show()
@@ -115,7 +152,7 @@ class CheckoutActivity : AppCompatActivity() {
115152 if (etAdditionalComments.trimmedText.isNotEmpty()) etAdditionalComments.trimmedText else null
116153
117154 btnPlaceOrder.isEnabled = false
118- checkoutViewModel.placeOrder(paymentMethod, deliveryAddress, additionalComments)
155+ checkoutViewModel.placeOrder(paymentMethod, deliveryAddress!! , additionalComments)
119156 .observe(this , Observer { resource ->
120157 btnPlaceOrder.isEnabled = true
121158 when (resource) {
@@ -137,4 +174,15 @@ class CheckoutActivity : AppCompatActivity() {
137174 })
138175
139176 }
177+
178+ private fun valid (): Boolean {
179+ var isValid = true
180+
181+ if (deliveryAddress == null ) {
182+ toast(" A delivery address is required" , Toast .LENGTH_LONG )
183+ isValid = false
184+ }
185+
186+ return isValid
187+ }
140188}
0 commit comments