VancedManager/app/src/main/java/com/vanced/manager/ui/dialogs/ManagerUpdateDialog.kt

107 lines
3.5 KiB
Kotlin
Raw Normal View History

2020-10-31 19:45:39 +00:00
package com.vanced.manager.ui.dialogs
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.content.IntentFilter
import android.graphics.Color
import android.graphics.drawable.ColorDrawable
import android.os.Bundle
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.core.view.isVisible
2020-10-31 19:45:39 +00:00
import androidx.localbroadcastmanager.content.LocalBroadcastManager
import com.vanced.manager.R
import com.vanced.manager.core.ui.base.BindingDialogFragment
2020-10-31 19:45:39 +00:00
import com.vanced.manager.databinding.DialogManagerUpdateBinding
import com.vanced.manager.utils.DownloadHelper.downloadManager
import com.vanced.manager.utils.DownloadHelper.downloadProgress
import com.vanced.manager.utils.InternetTools.isUpdateAvailable
2020-11-15 17:40:56 +00:00
class ManagerUpdateDialog : BindingDialogFragment<DialogManagerUpdateBinding>() {
2020-10-31 19:45:39 +00:00
companion object {
2020-11-23 16:00:41 +00:00
const val CLOSE_DIALOG = "CLOSE_DIALOG"
2020-11-15 17:40:56 +00:00
private const val TAG_FORCE_UPDATE = "TAG_FORCE_UPDATE"
fun newInstance(
2020-11-15 17:40:56 +00:00
forceUpdate: Boolean
): ManagerUpdateDialog = ManagerUpdateDialog().apply {
arguments = Bundle().apply {
2020-11-15 17:40:56 +00:00
putBoolean(TAG_FORCE_UPDATE, forceUpdate)
}
}
}
2020-10-31 19:45:39 +00:00
private val localBroadcastManager by lazy { LocalBroadcastManager.getInstance(requireActivity()) }
private val broadcastReceiver: BroadcastReceiver = object : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
when (intent.action) {
CLOSE_DIALOG -> dismiss()
}
}
}
override fun binding(
inflater: LayoutInflater,
container: ViewGroup?,
2020-10-31 19:45:39 +00:00
savedInstanceState: Bundle?
) = DialogManagerUpdateBinding.inflate(inflater, container, false)
2020-10-31 19:45:39 +00:00
override fun otherSetups() {
dialog?.window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
bindData()
2020-11-23 16:00:41 +00:00
if (arguments?.getBoolean(TAG_FORCE_UPDATE) == true) {
binding.managerUpdatePatient.text = requireActivity().getString(R.string.please_be_patient)
downloadManager(requireActivity())
} else {
checkUpdates()
}
2020-10-31 19:45:39 +00:00
2020-11-23 16:00:41 +00:00
binding.managerUpdateCancel.setOnClickListener {
downloadProgress.value?.currentDownload?.cancel()
dismiss()
2020-10-31 19:45:39 +00:00
}
}
private fun bindData() {
with(binding) {
isCancelable = false
bindDownloadProgress()
}
}
private fun DialogManagerUpdateBinding.bindDownloadProgress() {
with(downloadProgress) {
observe(viewLifecycleOwner) { progressModel ->
progressModel.downloadProgress.observe(viewLifecycleOwner) {
managerUpdateProgressbar.progress = it
managerUpdateProgressbar.isVisible = it != 0
}
}
}
}
2020-10-31 19:45:39 +00:00
override fun onResume() {
super.onResume()
registerReceiver()
}
2020-11-23 16:00:41 +00:00
private fun checkUpdates() {
2020-11-05 18:35:48 +00:00
if (isUpdateAvailable()) {
2020-10-31 19:45:39 +00:00
binding.managerUpdatePatient.text = requireActivity().getString(R.string.please_be_patient)
downloadManager(requireActivity())
} else {
2020-10-31 19:45:39 +00:00
binding.managerUpdatePatient.text = requireActivity().getString(R.string.update_not_found)
}
2020-10-31 19:45:39 +00:00
}
private fun registerReceiver() {
val intentFilter = IntentFilter()
intentFilter.addAction(CLOSE_DIALOG)
localBroadcastManager.registerReceiver(broadcastReceiver, intentFilter)
}
}