112 lines
3.5 KiB
Kotlin
112 lines
3.5 KiB
Kotlin
package com.sw.platecabinet.activity
|
|
|
|
import android.app.Dialog
|
|
import android.content.Context
|
|
import android.os.Bundle
|
|
import android.text.TextUtils
|
|
import android.view.View
|
|
import android.widget.TextView
|
|
import androidx.activity.enableEdgeToEdge
|
|
import androidx.appcompat.app.AppCompatActivity
|
|
import androidx.viewbinding.ViewBinding
|
|
import com.sw.inbound.utils.DateTimeUtils
|
|
import com.sw.platecabinet.R
|
|
import com.sw.platecabinet.databinding.ItemTitleTimeBinding
|
|
import com.sw.platecabinet.ext.setClickListeners
|
|
import com.sw.platecabinet.utils.PermissionHelper
|
|
import com.sw.platecabinet.view.CustomDialog
|
|
import kotlinx.coroutines.CoroutineScope
|
|
import kotlinx.coroutines.Dispatchers
|
|
import kotlinx.coroutines.Job
|
|
import kotlinx.coroutines.launch
|
|
import timber.log.Timber
|
|
|
|
/**
|
|
* activity 基类
|
|
*/
|
|
abstract class BaseActivity<VB : ViewBinding> : AppCompatActivity() {
|
|
protected lateinit var binding: VB
|
|
private var headerBinding: ItemTitleTimeBinding? = null
|
|
protected lateinit var context: Context
|
|
private var timeJob: Job? = null
|
|
private var mDialogWaiting: CustomDialog? = null
|
|
|
|
override fun onCreate(savedInstanceState: Bundle?) {
|
|
super.onCreate(savedInstanceState)
|
|
enableEdgeToEdge()
|
|
context = this
|
|
binding = inflateViewBinding()
|
|
headerBinding = inflateTitleBinding()
|
|
setContentView(binding.root)
|
|
updateTime()
|
|
initialize()
|
|
}
|
|
|
|
fun updateTime() {
|
|
headerBinding?.let {
|
|
headerBinding!!.tvRightTime.setClickListeners(
|
|
onDoubleClick = {
|
|
MainActivity.start(context, pageType = PageType.SETTING_LIST)
|
|
}
|
|
)
|
|
val scope = CoroutineScope(Dispatchers.Main)
|
|
timeJob = scope.launch {
|
|
DateTimeUtils.realTimeChineseDateFlow()
|
|
.collect { (date, time) ->
|
|
headerBinding!!.tvLeftDate.text = date
|
|
headerBinding!!.tvRightTime.text = time
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
override fun onRequestPermissionsResult(
|
|
requestCode: Int,
|
|
permissions: Array<out String>,
|
|
grantResults: IntArray
|
|
) {
|
|
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
|
|
// 统一处理权限拒绝情况
|
|
val allGranted = PermissionHelper.handlePermissionResult(
|
|
this,
|
|
requestCode,
|
|
permissions,
|
|
grantResults
|
|
) { permanentlyDeniedPermissions ->
|
|
// 权限被永久拒绝的统一处理
|
|
Timber.e("用户永久拒绝权限 $permanentlyDeniedPermissions")
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 显示等待提示框
|
|
*/
|
|
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).setText(tip)
|
|
mDialogWaiting = CustomDialog(this, view, R.style.MyDialog)
|
|
mDialogWaiting!!.show()
|
|
mDialogWaiting!!.setCancelable(true)
|
|
return mDialogWaiting
|
|
}
|
|
|
|
/**
|
|
* 隐藏等待提示框
|
|
*/
|
|
fun hideWaitingDialog() {
|
|
mDialogWaiting?.dismiss()
|
|
mDialogWaiting = null
|
|
}
|
|
|
|
protected abstract fun inflateViewBinding(): VB
|
|
|
|
protected abstract fun inflateTitleBinding(): ItemTitleTimeBinding?
|
|
|
|
protected abstract fun initialize()
|
|
|
|
override fun onDestroy() {
|
|
timeJob?.cancel()
|
|
super.onDestroy()
|
|
}
|
|
} |