From ff59eb9415d3df520df98e14ef66d9a3d9804c5b Mon Sep 17 00:00:00 2001 From: Runt <qingingrunt2010@qq.com> Date: Sun, 18 May 2025 17:50:11 +0000 Subject: [PATCH] 封装dialog,popup,loading弹框, 优化权限申请 优化文件选择 --- libmvi/src/main/java/com/runt/open/mvi/base/model/BaseViewModel.kt | 76 +++++++++++++++++++++++++++++++++++++- 1 files changed, 74 insertions(+), 2 deletions(-) diff --git a/libmvi/src/main/java/com/runt/open/mvi/base/model/BaseViewModel.kt b/libmvi/src/main/java/com/runt/open/mvi/base/model/BaseViewModel.kt index 59f9956..12fedd1 100644 --- a/libmvi/src/main/java/com/runt/open/mvi/base/model/BaseViewModel.kt +++ b/libmvi/src/main/java/com/runt/open/mvi/base/model/BaseViewModel.kt @@ -3,22 +3,28 @@ import android.content.Intent import android.net.Uri import android.os.Build +import android.provider.MediaStore import android.util.Log import androidx.activity.ComponentActivity import androidx.core.content.FileProvider -import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import com.runt.open.mvi.base.BaseActivity import com.runt.open.mvi.base.LayoutView +import com.runt.open.mvi.data.LoadingState +import com.runt.open.mvi.data.MessageState +import com.runt.open.mvi.data.PopupMessage import com.runt.open.mvi.retrofit.AndroidScheduler import io.reactivex.Observable import io.reactivex.Observer import io.reactivex.schedulers.Schedulers +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.asStateFlow import okhttp3.Callback import okhttp3.OkHttpClient import okhttp3.Request import okhttp3.Response import java.io.File +import java.io.FileInputStream import java.io.FileOutputStream import java.io.IOException import java.io.InputStream @@ -33,7 +39,18 @@ var TAG = ""; protected var mActivity : BaseActivity<LayoutView<BaseViewModel> , BaseViewModel>? = null - var verifyResult = MutableLiveData<Int>() + + private val _isLoading = MutableStateFlow(LoadingState()) + val isLoading = _isLoading.asStateFlow() + + val messageSetDismiss = { + _messageState.value = _messageState.value.copy(isVisible = false); + } + private val _messageState = MutableStateFlow(MessageState(isVisible = false, setDismiss = { })) + val messageState = _messageState.asStateFlow() + + private val _popupState = MutableStateFlow(PopupMessage(isVisible = false,"","")) + val popupState = _popupState.asStateFlow() open fun onCreate(activity : BaseActivity<LayoutView<BaseViewModel> , BaseViewModel>) { mActivity = activity @@ -42,6 +59,35 @@ fun getActivity(): ComponentActivity { return mActivity!!; + } + + fun showLoading(message : String = "加载中...") { + _isLoading.value = LoadingState(isVisible = true,message = message); + } + + fun hideLoading() { + _isLoading.value = _isLoading.value.copy(isVisible = false); + } + + fun showDialog( title:String = "", message: String = "", confirmText:String = "确定", cancelText:String = "", + touchOutside:Boolean = true,//空白和系统返回 是否关闭 + showClose:Boolean = false,//显示关闭图标(默认不显示) + confirmDissmiss:Boolean = true,//点击确定是否关闭 + cancelDissmiss:Boolean = true,//点击取消是否关闭 + onDismissRequest : () -> Unit = {}, + onConfirmRequest : () -> Unit = {}, ){ + + _messageState.value = MessageState(title = title, message = message, touchOutside = touchOutside, showClose = showClose, confirmText = confirmText, + cancelText = cancelText, confirmDissmiss = confirmDissmiss, cancelDissmiss = cancelDissmiss, onDismissRequest = onDismissRequest, + onConfirmRequest = onConfirmRequest, setDismiss = messageSetDismiss); + } + + fun showPopupWindow(title : String,message : String){ + _popupState.value = PopupMessage(isVisible = true,title,message) + } + + fun hidePopupWindow(){ + _popupState.value = _popupState.value.copy(isVisible = false); } /** @@ -204,4 +250,30 @@ }.subscribe(observer) } + fun getFilePathFromUri(uri:Uri):String?{ + var filePath = ""; + var filePathColumn = arrayOf(MediaStore.Video.Media.DATA) + var cursor = mActivity!!.contentResolver.query(uri!!,filePathColumn,null,null,null) + cursor?.let { + it.moveToFirst() + var index = it.getColumnIndex(filePathColumn[0]) + if(index > -1 && index < it.columnCount){ + filePath = it.getString(index) + } + it.close(); + } + var file = File(filePath); + Log.i(TAG,"文件是否存在=${file.exists()} file=${filePath} ") + if(file.exists()){ + try { + var inputStream = FileInputStream(file) + inputStream.close(); + return filePath; + }catch (e:Exception){ + return null; + } + }else{ + return null; + } + } } \ No newline at end of file -- Gitblit v1.9.1