package com.sw.dualscreen.activity import android.content.Context import android.graphics.drawable.ColorDrawable import android.hardware.display.DisplayManager import android.os.Bundle import android.view.Display import android.view.LayoutInflater import android.view.View import android.view.ViewGroup 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.viewbinding.ViewBinding import com.sw.dualscreen.R import com.sw.dualscreen.databinding.DialogWaitingBinding import com.sw.dualscreen.model.IActivityResult import com.sw.dualscreen.model.response.PostEvent import com.sw.dualscreen.view.CustomDialog import com.sw.dualscreen.viewmodel.BaseViewModel import com.sw.plate.utils.ToastUtils import org.greenrobot.eventbus.EventBus import org.greenrobot.eventbus.Subscribe import org.greenrobot.eventbus.ThreadMode abstract class BaseActivity : AppCompatActivity() { val displays: Array by lazy { val displayManager = getSystemService(Context.DISPLAY_SERVICE) as DisplayManager displayManager.displays } 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) EventBus.getDefault().register(this) enableEdgeToEdge() context = this //保持亮屏 window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) binding = inflateViewBinding() setContentView(binding.root) viewModel = getViewModel() initialize() registerDataChange() } override fun onDestroy() { EventBus.getDefault().unregister(this) super.onDestroy() } 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?) { runOnUiThread { hideWaitingDialog() //val view = View.inflate(this, R.layout.dialog_waiting, null) val dialogBinding = DialogWaitingBinding.inflate(LayoutInflater.from(this)) dialogBinding.tvTip.text = tip mDialogWaiting = CustomDialog(this, dialogBinding.root) mDialogWaiting?.show() } } /** * 隐藏等待提示框 */ fun hideWaitingDialog() { runOnUiThread { mDialogWaiting?.dismiss() mDialogWaiting = null } } fun showWaitingDialog2(tip: String?) { if (mDialogWaiting == null) { hideWaitingDialog() val view = View.inflate(this, R.layout.dialog_waiting, null) mDialogWaiting = CustomDialog(this, view, R.style.MyDialog) mDialogWaiting?.show() } val contentView = mDialogWaiting?.findViewById(android.R.id.content) val tvTip = contentView?.findViewById(R.id.tvTip) tvTip?.text = tip } 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) } @Subscribe(threadMode = ThreadMode.MAIN) fun onPostEvent(event: PostEvent) { } }