From 5ca8b01844798011e887e02b6934d6f125b56db1 Mon Sep 17 00:00:00 2001
From: Runt <qingingrunt2010@qq.com>
Date: Tue, 24 Jun 2025 16:49:19 +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..5e10ab6 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 = {} ,
+        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 +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