first commit
This commit is contained in:
182
app/src/main/java/com/amz/genie/fragments/TODOFragment.kt
Normal file
182
app/src/main/java/com/amz/genie/fragments/TODOFragment.kt
Normal file
@@ -0,0 +1,182 @@
|
||||
package com.amz.genie.fragments
|
||||
|
||||
import android.content.Intent
|
||||
import android.os.Bundle
|
||||
import androidx.fragment.app.Fragment
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.widget.TextView
|
||||
import android.widget.Toast
|
||||
import androidx.activity.result.contract.ActivityResultContracts
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
|
||||
import com.amz.genie.R
|
||||
import com.amz.genie.activities.GeneralDetailActivity
|
||||
import com.amz.genie.activities.MainActivity
|
||||
import com.amz.genie.adapters.GeneralAdapter
|
||||
import com.amz.genie.helpers.Preferences
|
||||
import com.amz.genie.helpers.Utils.forceLogoutAndGoLogin
|
||||
import com.amz.genie.helpers.Utils.isNetworkAvailable
|
||||
import com.amz.genie.helpers.Utils.showEmpty
|
||||
import com.amz.genie.models.GeneralResponse
|
||||
import com.amz.genie.models.GeneralThreadItem
|
||||
import com.amz.genie.models.Pengguna
|
||||
import com.amz.genie.services.APIMain
|
||||
import com.google.android.material.snackbar.Snackbar
|
||||
import com.google.gson.Gson
|
||||
import com.google.gson.JsonParser
|
||||
import retrofit2.Call
|
||||
import retrofit2.Callback
|
||||
import retrofit2.Response
|
||||
import kotlin.collections.orEmpty
|
||||
|
||||
|
||||
class TODOFragment : Fragment() {
|
||||
|
||||
private lateinit var srlTODO: SwipeRefreshLayout
|
||||
private lateinit var tvEmpty: TextView
|
||||
private lateinit var rvTODO: RecyclerView
|
||||
private lateinit var adapter: GeneralAdapter
|
||||
private lateinit var detailLauncher: androidx.activity.result.ActivityResultLauncher<Intent>
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
|
||||
detailLauncher =
|
||||
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
|
||||
val needsRefresh = result.data?.getBooleanExtra("needs_refresh", false) ?: false
|
||||
if (result.resultCode == android.app.Activity.RESULT_OK && needsRefresh) {
|
||||
initData()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun onCreateView(
|
||||
inflater: LayoutInflater, container: ViewGroup?,
|
||||
savedInstanceState: Bundle?
|
||||
): View? {
|
||||
val view = inflater.inflate(R.layout.fragment_todo, container, false)
|
||||
initUI(view)
|
||||
return view
|
||||
}
|
||||
|
||||
private fun initUI(view: View) {
|
||||
srlTODO = view.findViewById(R.id.srl_todo)
|
||||
tvEmpty = view.findViewById(R.id.tv_empty_todo)
|
||||
rvTODO = view.findViewById(R.id.rl_todo)
|
||||
|
||||
val userData = Gson().fromJson(Preferences.getUserData(requireContext()),
|
||||
Pengguna::class.java)
|
||||
adapter = GeneralAdapter(userData.pegawai?.kode!!) { item ->
|
||||
val intent = Intent(requireContext(), GeneralDetailActivity::class.java)
|
||||
|
||||
val gson = Gson()
|
||||
val dataJson = gson.toJson(item, GeneralThreadItem::class.java)
|
||||
intent.putExtra("data", dataJson)
|
||||
detailLauncher.launch(intent)
|
||||
}
|
||||
|
||||
rvTODO.layoutManager = LinearLayoutManager(requireContext())
|
||||
rvTODO.adapter = adapter
|
||||
rvTODO.setHasFixedSize(true)
|
||||
|
||||
srlTODO.setOnRefreshListener { initData() }
|
||||
|
||||
initData()
|
||||
}
|
||||
|
||||
private fun initData() {
|
||||
if (!isNetworkAvailable(requireContext())) {
|
||||
showSnack(getString(R.string.no_internet_message))
|
||||
srlTODO.isRefreshing = false
|
||||
return
|
||||
}
|
||||
|
||||
showLoading(true)
|
||||
|
||||
APIMain.require().generalServices
|
||||
.list(
|
||||
Preferences.getAccessToken(requireContext()),
|
||||
2
|
||||
)
|
||||
.enqueue(object : Callback<GeneralResponse> {
|
||||
|
||||
override fun onResponse(call: Call<GeneralResponse>, response: Response<GeneralResponse>) {
|
||||
showLoading(false)
|
||||
|
||||
if (response.isSuccessful) {
|
||||
val list = response.body()?.items.orEmpty()
|
||||
|
||||
if (list.isEmpty()) {
|
||||
showEmpty(true, tvEmpty, rvTODO)
|
||||
adapter.submitList(emptyList())
|
||||
} else {
|
||||
showEmpty(false, tvEmpty, rvTODO)
|
||||
adapter.submitList(list)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
handleError(response)
|
||||
}
|
||||
|
||||
override fun onFailure(call: Call<GeneralResponse>, t: Throwable) {
|
||||
showLoading(false)
|
||||
showSnack(t.message ?: "Terjadi kesalahan")
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
private fun handleError(response: Response<GeneralResponse>) {
|
||||
showLoading(false)
|
||||
val raw = runCatching { response.errorBody()?.string().orEmpty() }.getOrDefault("")
|
||||
val expired = raw.contains("Signature has expired", true) || raw.contains("token_expired", true)
|
||||
|
||||
val message = when {
|
||||
(response.code() == 401 || response.code() == 500) && expired -> {
|
||||
forceLogoutAndGoLogin(requireActivity())
|
||||
"Session expired. Please login again."
|
||||
}
|
||||
response.code() == 400 -> runCatching {
|
||||
JsonParser.parseString(raw).asJsonObject["message"].asString
|
||||
}.getOrDefault("Bad request")
|
||||
else -> "${response.code()}, ${response.message()}"
|
||||
}
|
||||
|
||||
showSnack(message)
|
||||
}
|
||||
|
||||
private fun showLoading(show: Boolean) {
|
||||
srlTODO.isRefreshing = false
|
||||
(activity as? MainActivity)?.showProgressDialog(show)
|
||||
}
|
||||
|
||||
private fun showSnack(message: String) {
|
||||
(activity as? MainActivity)?.let { act ->
|
||||
Snackbar.make(act.findViewById(android.R.id.content), message, Snackbar.LENGTH_LONG).show()
|
||||
}
|
||||
}
|
||||
|
||||
private fun setupActions() {
|
||||
(activity as? MainActivity)?.setSearchClick({
|
||||
Toast.makeText(requireContext(), "TEST RUN", Toast.LENGTH_LONG).show()
|
||||
}, (activity as MainActivity).ibSearch)
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
setupActions()
|
||||
}
|
||||
|
||||
override fun onPause() {
|
||||
super.onPause()
|
||||
(activity as? MainActivity)?.ibSearch?.setOnClickListener(null)
|
||||
}
|
||||
|
||||
override fun onDestroy() {
|
||||
super.onDestroy()
|
||||
(activity as? MainActivity)?.ibSearch?.setOnClickListener(null)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user