Advertisement
hasancse1991

Untitled

Jan 3rd, 2020
313
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Kotlin 3.04 KB | None | 0 0
  1. package com.grameenphone.chitchatsdk.base
  2.  
  3. import android.content.Context
  4. import android.graphics.Color
  5. import android.graphics.drawable.ColorDrawable
  6. import android.os.Bundle
  7. import androidx.fragment.app.Fragment
  8. import android.view.LayoutInflater
  9. import android.view.View
  10. import android.view.ViewGroup
  11. import android.widget.Toast
  12. import androidx.appcompat.app.AlertDialog
  13. import androidx.lifecycle.Observer
  14. import androidx.lifecycle.ViewModelProviders
  15. import com.google.android.material.dialog.MaterialAlertDialogBuilder
  16. import com.grameenphone.chitchatsdk.R
  17. import com.grameenphone.chitchatsdk.utils.ServiceLocator
  18. import java.lang.Math.max
  19. import java.lang.reflect.ParameterizedType
  20.  
  21. abstract class BaseFragment<vm : BaseViewModel> : Fragment() {
  22.  
  23.     lateinit var viewModel : vm
  24.     private var loaderRequest = 0
  25.  
  26.     private val loaderDialog: AlertDialog by lazy {
  27.  
  28.         val builder = MaterialAlertDialogBuilder(context)
  29.         val dialogView = LayoutInflater.from(context).inflate(R.layout.cc_dialog_loader, activity?.findViewById(android.R.id.content), false)
  30.         builder.setView(dialogView)
  31.         builder.setCancelable(false)
  32.         return@lazy builder.create().apply {
  33.             window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
  34.         }
  35.     }
  36.  
  37.     abstract fun setLayout() : Int
  38.  
  39.     override fun onCreateView(
  40.         inflater: LayoutInflater, container: ViewGroup?,
  41.         savedInstanceState: Bundle?
  42.     ): View? {
  43.         return inflater.inflate(setLayout(), container, false)
  44.     }
  45.  
  46.     override fun onAttach(context: Context) {
  47.         super.onAttach(context)
  48.  
  49.         ServiceLocator.initialize(context.applicationContext)
  50.  
  51.         viewModel = ViewModelProviders.of(this).get(setViewModel())
  52.     }
  53.  
  54.     override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
  55.         super.onViewCreated(view, savedInstanceState)
  56.  
  57.         viewModel.showLoader.observe(this, Observer {
  58.             if (it) showLoader()
  59.             else hideLoader()
  60.         })
  61.  
  62.         viewModel.toastMessage.observe(this, Observer {
  63.             showShortToast(it)
  64.         })
  65.     }
  66.  
  67.     private fun setViewModel() : Class<vm> {
  68.  
  69.         val type = (javaClass.genericSuperclass as ParameterizedType).actualTypeArguments[0]  // index of 0 means first argument of Base class param
  70.  
  71.         return type as Class<vm>
  72.     }
  73.  
  74.     private fun showLoader() {
  75.         activity?.runOnUiThread {
  76.             if (!loaderDialog.isShowing) {
  77.                 loaderDialog.show()
  78.                 loaderRequest++
  79.             }
  80.         }
  81.     }
  82.  
  83.     private fun hideLoader() {
  84.         activity?.runOnUiThread {
  85.             loaderRequest = max(0, loaderRequest-1)
  86.             if (loaderDialog.isShowing && loaderRequest==0)
  87.                 loaderDialog.dismiss()
  88.         }
  89.     }
  90.  
  91.     fun showShortToast(message: String) {
  92.         Toast.makeText(context, message, Toast.LENGTH_SHORT).show()
  93.     }
  94.  
  95.     fun showLongToast(message: String) {
  96.         Toast.makeText(context, message, Toast.LENGTH_LONG).show()
  97.     }
  98.  
  99. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement