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 : 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, 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(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() } }