103 lines
3.1 KiB
Kotlin
103 lines
3.1 KiB
Kotlin
package com.sw.dualscreen.activity
|
|
|
|
import android.app.Dialog
|
|
import android.content.Context
|
|
import android.content.res.Configuration
|
|
import android.content.res.Resources
|
|
import android.os.Bundle
|
|
import android.text.TextUtils
|
|
import android.view.View
|
|
import android.view.WindowManager
|
|
import android.widget.TextView
|
|
import androidx.activity.enableEdgeToEdge
|
|
import androidx.activity.result.contract.ActivityResultContracts
|
|
import androidx.appcompat.app.AppCompatActivity
|
|
import androidx.lifecycle.lifecycleScope
|
|
import androidx.viewbinding.ViewBinding
|
|
import com.sw.dualscreen.R
|
|
import com.sw.dualscreen.model.IActivityResult
|
|
import com.sw.dualscreen.view.CustomDialog
|
|
import com.sw.dualscreen.viewmodel.BaseViewModel
|
|
import kotlinx.coroutines.launch
|
|
import timber.log.Timber
|
|
|
|
|
|
abstract class BaseActivity<VB : ViewBinding> : AppCompatActivity() {
|
|
protected lateinit var binding: VB
|
|
protected lateinit var context: Context
|
|
private var mDialogWaiting: CustomDialog? = null
|
|
private lateinit var viewModel: BaseViewModel
|
|
|
|
override fun onCreate(savedInstanceState: Bundle?) {
|
|
super.onCreate(savedInstanceState)
|
|
enableEdgeToEdge()
|
|
context = this
|
|
|
|
//保持亮屏
|
|
window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
|
|
|
|
binding = inflateViewBinding()
|
|
setContentView(binding.root)
|
|
viewModel = getViewModel()
|
|
initialize()
|
|
registerDataChange()
|
|
}
|
|
|
|
abstract fun getViewModel(): BaseViewModel
|
|
|
|
protected abstract fun inflateViewBinding(): VB
|
|
|
|
open fun initialize() {
|
|
|
|
}
|
|
|
|
open fun registerDataChange() {
|
|
lifecycleScope.launch {
|
|
viewModel.showLoading.collect {
|
|
Timber.d("registerDataChange 用户 showLoading = $it")
|
|
if (it) {
|
|
showWaitingDialog("")
|
|
} else {
|
|
hideWaitingDialog()
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 显示等待提示框
|
|
*/
|
|
fun showWaitingDialog(tip: String?): Dialog? {
|
|
hideWaitingDialog()
|
|
val view = View.inflate(this, R.layout.dialog_waiting, null)
|
|
if (!TextUtils.isEmpty(tip)) (view.findViewById<View?>(R.id.tvTip) as TextView).text = tip
|
|
mDialogWaiting = CustomDialog(this, view, R.style.MyDialog)
|
|
mDialogWaiting!!.show()
|
|
mDialogWaiting!!.setCancelable(true)
|
|
return mDialogWaiting
|
|
}
|
|
|
|
/**
|
|
* 隐藏等待提示框
|
|
*/
|
|
fun hideWaitingDialog() {
|
|
mDialogWaiting?.dismiss()
|
|
mDialogWaiting = null
|
|
}
|
|
|
|
private var launchPermissionCallback: IActivityResult.RequestPermissionCallback? = null
|
|
|
|
fun requestSinglePermissionResult(
|
|
permission: String,
|
|
permissionCallback: IActivityResult.RequestPermissionCallback?
|
|
) {
|
|
this.launchPermissionCallback = permissionCallback
|
|
permissionLauncher.launch(permission)
|
|
}
|
|
|
|
private val permissionLauncher = registerForActivityResult(
|
|
ActivityResultContracts.RequestPermission()
|
|
) { result: Boolean ->
|
|
launchPermissionCallback?.callback(result)
|
|
}
|
|
} |