Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.grameenphone.chitchatsdk.base
- import android.content.Context
- import android.graphics.Color
- import android.graphics.drawable.ColorDrawable
- import android.os.Bundle
- import androidx.fragment.app.Fragment
- import android.view.LayoutInflater
- import android.view.View
- import android.view.ViewGroup
- import android.widget.Toast
- import androidx.appcompat.app.AlertDialog
- import androidx.lifecycle.Observer
- import androidx.lifecycle.ViewModelProviders
- import com.google.android.material.dialog.MaterialAlertDialogBuilder
- import com.grameenphone.chitchatsdk.R
- import com.grameenphone.chitchatsdk.utils.ServiceLocator
- import java.lang.Math.max
- import java.lang.reflect.ParameterizedType
- abstract class BaseFragment<vm : BaseViewModel> : Fragment() {
- lateinit var viewModel : vm
- private var loaderRequest = 0
- private val loaderDialog: AlertDialog by lazy {
- val builder = MaterialAlertDialogBuilder(context)
- val dialogView = LayoutInflater.from(context).inflate(R.layout.cc_dialog_loader, activity?.findViewById(android.R.id.content), false)
- builder.setView(dialogView)
- builder.setCancelable(false)
- return@lazy builder.create().apply {
- window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
- }
- }
- abstract fun setLayout() : Int
- override fun onCreateView(
- inflater: LayoutInflater, container: ViewGroup?,
- savedInstanceState: Bundle?
- ): View? {
- return inflater.inflate(setLayout(), container, false)
- }
- override fun onAttach(context: Context) {
- super.onAttach(context)
- ServiceLocator.initialize(context.applicationContext)
- viewModel = ViewModelProviders.of(this).get(setViewModel())
- }
- override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
- super.onViewCreated(view, savedInstanceState)
- viewModel.showLoader.observe(this, Observer {
- if (it) showLoader()
- else hideLoader()
- })
- viewModel.toastMessage.observe(this, Observer {
- showShortToast(it)
- })
- }
- private fun setViewModel() : Class<vm> {
- val type = (javaClass.genericSuperclass as ParameterizedType).actualTypeArguments[0] // index of 0 means first argument of Base class param
- return type as Class<vm>
- }
- private fun showLoader() {
- activity?.runOnUiThread {
- if (!loaderDialog.isShowing) {
- loaderDialog.show()
- loaderRequest++
- }
- }
- }
- private fun hideLoader() {
- activity?.runOnUiThread {
- loaderRequest = max(0, loaderRequest-1)
- if (loaderDialog.isShowing && loaderRequest==0)
- loaderDialog.dismiss()
- }
- }
- fun showShortToast(message: String) {
- Toast.makeText(context, message, Toast.LENGTH_SHORT).show()
- }
- fun showLongToast(message: String) {
- Toast.makeText(context, message, Toast.LENGTH_LONG).show()
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement