coding-blocks/CBOnlineApp

View on GitHub
app/src/main/java/com/codingblocks/cbonlineapp/course/checkout/CheckoutPersonalDetailsFragment.kt

Summary

Maintainability
A
2 hrs
Test Coverage
package com.codingblocks.cbonlineapp.course.checkout

import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ArrayAdapter
import com.codingblocks.cbonlineapp.R
import com.codingblocks.cbonlineapp.baseclasses.BaseCBFragment
import com.codingblocks.cbonlineapp.util.FileUtils.loadJsonObjectFromAsset
import com.codingblocks.cbonlineapp.util.extensions.replaceFragmentSafely
import com.codingblocks.cbonlineapp.util.livedata.observer
import kotlinx.android.synthetic.main.fragment_checkout_personal_details.*
import org.jetbrains.anko.AnkoLogger
import org.json.JSONArray
import org.json.JSONException
import org.koin.androidx.viewmodel.ext.android.sharedViewModel

class CheckoutPersonalDetailsFragment : BaseCBFragment(), AnkoLogger {

    val vm by sharedViewModel<CheckoutViewModel>()

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? = inflater.inflate(R.layout.fragment_checkout_personal_details, container, false)

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        vm.getCart()
        if (vm.map["stateId"] != null)
            checkoutBtn.isEnabled = true
        vm.cart.observer(thisLifecycleOwner) {
            finalPriceTv.text = "${getString(R.string.rupee_sign)} ${it["totalAmount"].asString}"
        }
        val json = loadJsonObjectFromAsset(requireContext(), "csvjson.json") as JSONArray?

        val refList: MutableList<String> = ArrayList()
        try {
            for (i in 0 until json?.length()!!) {
                val ref = json.getJSONObject(i).getString("state")
                refList.add(ref)
            }
        } catch (e: JSONException) {
            e.printStackTrace()
        }

        val arrayAdapter: ArrayAdapter<String> =
            ArrayAdapter(requireContext(), android.R.layout.simple_spinner_dropdown_item, refList)
        state.setAdapter(arrayAdapter)
        state.setOnItemClickListener { _, _, position, _ ->
            val name = arrayAdapter.getItem(position)
            for (i in 0 until json?.length()!!) {
                val ref = json.getJSONObject(i)
                if (ref.getString("state") == name) {
                    vm.map["stateId"] = ref.getString("stateId")
                }
            }
            checkoutBtn.isEnabled = true
            vm.updateCart()
        }
        checkoutBtn.setOnClickListener {
            replaceFragmentSafely(
                CheckoutPaymentFragment(),
                tag = "Personal",
                containerViewId = R.id.checkoutContainer,
                addToStack = true
            )
        }
    }
}