From 7bfcd06377cfb0c798b7260361f4a10b420a1eb5 Mon Sep 17 00:00:00 2001 From: Runt <qingingrunt2010@qq.com> Date: Thu, 07 Aug 2025 11:38:16 +0000 Subject: [PATCH] 优化 --- libmvi/src/main/java/com/runt/open/mvi/base/model/BaseViewModel.kt | 92 ++++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 88 insertions(+), 4 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..f8a1e09 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,31 @@ 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.google.gson.Gson 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.MediaType.Companion.toMediaType import okhttp3.OkHttpClient import okhttp3.Request +import okhttp3.RequestBody +import okhttp3.RequestBody.Companion.toRequestBody import okhttp3.Response import java.io.File +import java.io.FileInputStream import java.io.FileOutputStream import java.io.IOException import java.io.InputStream @@ -33,15 +42,57 @@ 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 TAG = javaClass.simpleName; } - fun getActivity(): ComponentActivity { + fun getActivity(): BaseActivity<LayoutView<BaseViewModel> , BaseViewModel> { 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 = {} , + onCancelRequest : () -> Unit = {} , + onConfirmRequest : () -> Unit = {} , + ){ + _messageState.value = MessageState(title = title, message = message, touchOutside = touchOutside, showClose = showClose, confirmText = confirmText, + cancelText = cancelText, confirmDissmiss = confirmDissmiss, cancelDissmiss = cancelDissmiss, onCancelRequest = onCancelRequest, 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 +255,37 @@ }.subscribe(observer) } + fun createJsonBody(obj : Any) : RequestBody { + val mediaType = "application/json; charset=utf-8".toMediaType() + val json = if (obj is String) obj else Gson().toJson(obj) + val requestBody = json.toString().toRequestBody(mediaType) + return requestBody; + } + + 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