From 8dfffa0c954b90528dae69ee1778133f29f9da62 Mon Sep 17 00:00:00 2001 From: shenzuqiang Date: Mon, 9 Mar 2026 17:58:36 +0800 Subject: [PATCH] =?UTF-8?q?Dev=EF=BC=9A=201=E3=80=81=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E5=A4=9AUniMp=E7=9B=B8=E5=85=B3=E6=9B=B4=E6=96=B0=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E9=80=BB=E8=BE=91=202=E3=80=81=E9=A6=96=E9=A1=B5UI?= =?UTF-8?q?=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../img/rabbit/bean/local/UniMpVersionBean.kt | 9 + .../rabbit/bean/response/UniVersionEntity.kt | 2 +- .../java/com/img/rabbit/pages/MainPage.kt | 12 +- .../com/img/rabbit/pages/screen/HomeScreen.kt | 523 +++++++++--------- .../rabbit/provider/storage/PreferenceUtil.kt | 31 +- .../img/rabbit/provider/utils/NetworkUtils.kt | 7 + .../img/rabbit/uni/UniMPAlipaySplashView.java | 31 ++ ...SplashView.java => UniMPWxSplashView.java} | 2 +- .../java/com/img/rabbit/utils/UniAppUtils.kt | 26 +- .../com/img/rabbit/viewmodel/BaseViewModel.kt | 5 + .../img/rabbit/viewmodel/GeneralViewModel.kt | 22 +- .../mipmap-xxhdpi/ic_launch_alipay_unimp.webp | Bin 0 -> 902038 bytes 12 files changed, 385 insertions(+), 285 deletions(-) create mode 100644 app/src/main/java/com/img/rabbit/bean/local/UniMpVersionBean.kt create mode 100644 app/src/main/java/com/img/rabbit/provider/utils/NetworkUtils.kt create mode 100644 app/src/main/java/com/img/rabbit/uni/UniMPAlipaySplashView.java rename app/src/main/java/com/img/rabbit/uni/{UniMPSplashView.java => UniMPWxSplashView.java} (93%) create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_launch_alipay_unimp.webp diff --git a/app/src/main/java/com/img/rabbit/bean/local/UniMpVersionBean.kt b/app/src/main/java/com/img/rabbit/bean/local/UniMpVersionBean.kt new file mode 100644 index 0000000..f0fea89 --- /dev/null +++ b/app/src/main/java/com/img/rabbit/bean/local/UniMpVersionBean.kt @@ -0,0 +1,9 @@ +package com.img.rabbit.bean.local + +import kotlinx.serialization.Serializable + +@Serializable +data class UniMpVersionBean( + val uniId: String, // id + val version: String, // 版本 +) \ No newline at end of file diff --git a/app/src/main/java/com/img/rabbit/bean/response/UniVersionEntity.kt b/app/src/main/java/com/img/rabbit/bean/response/UniVersionEntity.kt index 497ceab..691a970 100644 --- a/app/src/main/java/com/img/rabbit/bean/response/UniVersionEntity.kt +++ b/app/src/main/java/com/img/rabbit/bean/response/UniVersionEntity.kt @@ -5,7 +5,7 @@ import kotlinx.serialization.Serializable @Serializable class UniVersionEntity( - var version: String = "", + var version: String = "0.0.0", var url: String = "", var last_version_force: String = "", var force: Boolean = false, diff --git a/app/src/main/java/com/img/rabbit/pages/MainPage.kt b/app/src/main/java/com/img/rabbit/pages/MainPage.kt index 6800506..abc74c9 100644 --- a/app/src/main/java/com/img/rabbit/pages/MainPage.kt +++ b/app/src/main/java/com/img/rabbit/pages/MainPage.kt @@ -2,6 +2,7 @@ package com.img.rabbit.pages import android.annotation.SuppressLint import android.util.Log +import android.widget.Toast import androidx.compose.foundation.background import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.fillMaxSize @@ -61,6 +62,7 @@ sealed class TabItem(val title: String, val router:String, val normalIconRes: In @SuppressLint("UnusedMaterial3ScaffoldPaddingParameter") @Composable fun MainScreen(generalViewModel: GeneralViewModel, loginViewModel: LoginViewModel) { + val context = LocalContext.current val navController = rememberNavController() val networkStatus by generalViewModel.networkStatus.observeAsState(initial = true) val isNavigationBarVisible by generalViewModel.isNavigationBarVisible.observeAsState(initial = true) @@ -89,12 +91,18 @@ fun MainScreen(generalViewModel: GeneralViewModel, loginViewModel: LoginViewMode Log.w("NetworkStatus","网络断开") //延迟500ms,确保页面初始化完成后,再跳转网络错误页面 delay(500) + + Toast.makeText(context, "网络已断开,请检查网络设置!", Toast.LENGTH_SHORT).show() + /* navController.navigate("netError") generalViewModel.setNavigationBarVisible(false) + */ }else{ + /* if(navBackStackEntry?.destination?.route == "home"||navBackStackEntry?.destination?.route == "mine"){ generalViewModel.setNavigationBarVisible(true) } + */ Log.w("NetworkStatus","网络已连接") } } @@ -102,7 +110,7 @@ fun MainScreen(generalViewModel: GeneralViewModel, loginViewModel: LoginViewMode Scaffold( bottomBar = { if (isNavigationBarVisible) { - Box { + Box(modifier = Modifier.height(52.dp)) { NavigationBar( containerColor = Color.White, contentColor = Color.Transparent @@ -135,7 +143,7 @@ fun MainScreen(generalViewModel: GeneralViewModel, loginViewModel: LoginViewMode modifier = Modifier .fillMaxWidth() .height(1.dp) - .background(Color.Gray.copy(alpha = 0.3f)) + .background(Color(0x1AD0D0D0)) ) } } diff --git a/app/src/main/java/com/img/rabbit/pages/screen/HomeScreen.kt b/app/src/main/java/com/img/rabbit/pages/screen/HomeScreen.kt index 8accf6a..2ac5c85 100644 --- a/app/src/main/java/com/img/rabbit/pages/screen/HomeScreen.kt +++ b/app/src/main/java/com/img/rabbit/pages/screen/HomeScreen.kt @@ -126,18 +126,11 @@ fun HomeScreen( .background(Color.White) .fillMaxSize() ){ - Image( - painter = painterResource(id = R.mipmap.ic_home_top_mask), - contentDescription = null, - contentScale = ContentScale.FillWidth, - modifier = Modifier.fillMaxWidth() - ) LazyColumn ( modifier = Modifier .fillMaxWidth() .weight(1f) - .offset(y = (-17).dp) - .padding(bottom = 56.dp) + .padding(bottom = 52.dp) .background( color = Color.White, shape = RoundedCornerShape(topStart = 18.dp, topEnd = 18.dp) @@ -149,280 +142,300 @@ fun HomeScreen( val rows = homeIconConfig?.chunked(columnsCount)?:emptyList() item { - //通过配置展示-AD1(模拟器) - val uniVersionConfig = uniVersionConfig - if(uniVersionConfig?.isNotEmpty() == true){ - val uniVersionSize = uniVersionConfig.size - //模拟器 + Column( + ) { Image( - painter = painterResource(id = R.mipmap.ic_home_title_0_mock), + painter = painterResource(id = R.mipmap.ic_home_top_mask), contentDescription = null, - contentScale = ContentScale.Crop, - modifier = Modifier - .wrapContentWidth() - .padding(start = 16.dp, end = 16.dp, top = 12.dp) + contentScale = ContentScale.FillWidth, + modifier = Modifier.fillMaxWidth() ) - Row( + Column( modifier = Modifier .fillMaxWidth() - .padding(start = 16.dp, end = 16.dp, top = 12.dp) - ){ - Box( - modifier = Modifier - .wrapContentWidth() - .weight(1f) - .clickable( - indication = null, - interactionSource = remember { MutableInteractionSource() } - ) { - val uniMp = uniVersionConfig[0] - val uniMpId = uniMp.unimp_id - // 处理点击事件,微信模拟器 - if (UniAppUtils.isDownloadUniMp(uniMp)) { - //强制更新(更新释放新版本并启动) - UniAppUtils.downloadWGT( - context, - scope, - uniMp - ) { uniState, _, progress -> - progressPair[uniMpId] - ?: mutableMapOf().apply { put(uniMpId, 0f) } - when (uniState) { - UniMpUpdate.DOWNLOAD_START -> { - //资源开始下载 - progressPair.apply { put(uniMpId, 0f) } - Log.i("HomeScreen", "DOWNLOAD_START") - } - - UniMpUpdate.DOWNLOAD_FINISH -> { - //资源下载完成 - progressPair.apply { put(uniMpId, 1f) } - Log.i("HomeScreen", "DOWNLOAD_FINISH") - } - - UniMpUpdate.DOWNLOAD_FAIL -> { - //资源下载失败 - progressPair.apply { put(uniMpId, -1f) } - Log.i("HomeScreen", "DOWNLOAD_FAIL") - } - - else -> { - //资源下载进度 - if (progress != null) { - progressPair.apply { - put( - uniMpId, - progress - ) - } - Log.i( - "HomeScreen", - "DOWNLOAD_PROGRESS:$progress" - ) - } - - } - } - } - } else if (UniAppUtils.isUpdate(uniMp)) { - // 提示更新(1、更新释放新版本并启动;2、直接启动现有版本) - UniAppUtils.currentUpdateUniMp = uniMp - scope.launch { - GlobalStateManager(context).storeGlobalUniUpdateNotify( - true - ) - } - } else { - loadingCallback?.showLoading() - //启动uni小程序(1、直接启动;2、释放并启动) - UniAppUtils.distributeUniMp(context, uniMp) { - loadingCallback?.hideLoading() - } - } - } - ) { - val uniMpId = uniVersionConfig[0].unimp_id - val uniIcon = uniVersionConfig[0].icon - AsyncImage( - model = uniIcon, - contentDescription = "微信模拟器图标", - contentScale = ContentScale.FillWidth, + .offset(y = (-17).dp) + .background( + color = Color.White, + shape = RoundedCornerShape(topStart = 18.dp, topEnd = 18.dp) + ) + ) { + //通过配置展示-AD1(模拟器) + val uniVersionConfig = uniVersionConfig + if(uniVersionConfig?.isNotEmpty() == true){ + val uniVersionSize = uniVersionConfig.size + //模拟器 + Image( + painter = painterResource(id = R.mipmap.ic_home_title_0_mock), + contentDescription = null, + contentScale = ContentScale.Crop, + modifier = Modifier + .wrapContentWidth() + .padding(start = 16.dp, end = 16.dp, top = 12.dp) + ) + Row( modifier = Modifier .fillMaxWidth() - .aspectRatio(168 / 96f), - fallback = painterResource(id = R.mipmap.ic_wx_mock), - error = painterResource(id = R.mipmap.ic_wx_mock) - ) - - //下载完成前显示 - if((progressPair[uniMpId]?:0f) > 0f && (progressPair[uniMpId]?:0f) < 1f){ + .padding(start = 16.dp, end = 16.dp, top = 12.dp) + ){ Box( modifier = Modifier - .fillMaxWidth() - .aspectRatio(168 / 96f) - .background( - Color( - 0x66000000 - ), RoundedCornerShape(18.dp) - ), - ){ - Column( - modifier = Modifier - .fillMaxWidth() - .align(Alignment.Center) - .padding(horizontal = 12.dp) - ) { - // 使用 LinearProgressIndicator 显示确定性进度 - LinearProgressIndicator( - progress = { progressPair[uniMpId]?:0f }, // 使用 Lambda 更新进度0~1 - modifier = Modifier - .fillMaxWidth() - .height(8.dp) - ) - Text( - text = "下载${((progressPair[uniMpId]?:0f) * 100).toInt()}%", - color = Color.White, - fontSize = 12.sp, - modifier = Modifier.align(Alignment.CenterHorizontally), - textAlign = TextAlign.Center, - ) - } - } - } + .wrapContentWidth() + .weight(1f) + .clickable( + indication = null, + interactionSource = remember { MutableInteractionSource() } + ) { + val uniMp = uniVersionConfig[0] + val uniMpId = uniMp.unimp_id + // 处理点击事件,微信模拟器 + if (UniAppUtils.isDownloadUniMp(uniMp)) { + //强制更新(更新释放新版本并启动) + UniAppUtils.downloadWGT( + context, + scope, + uniMp + ) { uniState, _, progress -> + progressPair[uniMpId] + ?: mutableMapOf().apply { put(uniMpId, 0f) } + when (uniState) { + UniMpUpdate.DOWNLOAD_START -> { + //资源开始下载 + progressPair.apply { put(uniMpId, 0f) } + Log.i("HomeScreen", "DOWNLOAD_START") + } - } - Box(modifier = Modifier.width(7.dp)) - Box( - modifier = Modifier - .wrapContentWidth() - .weight(1f) - .clickable( - indication = null, - interactionSource = remember { MutableInteractionSource() } - ) { - val uniMp = uniVersionConfig[1] - val uniMpId = uniMp.unimp_id - // 处理点击事件,微信模拟器 - if (UniAppUtils.isDownloadUniMp(uniMp)) { - //强制更新(更新释放新版本并启动) - UniAppUtils.downloadWGT( - context, - scope, - uniMp - ) { uniState, _, progress -> - progressPair[uniMpId] - ?: mutableMapOf().apply { - put( - uniMpId, - 0f + UniMpUpdate.DOWNLOAD_FINISH -> { + //资源下载完成 + progressPair.apply { put(uniMpId, 1f) } + Log.i("HomeScreen", "DOWNLOAD_FINISH") + } + + UniMpUpdate.DOWNLOAD_FAIL -> { + //资源下载失败 + progressPair.apply { put(uniMpId, -1f) } + Log.i("HomeScreen", "DOWNLOAD_FAIL") + } + + else -> { + //资源下载进度 + if (progress != null) { + progressPair.apply { + put( + uniMpId, + progress + ) + } + Log.i( + "HomeScreen", + "DOWNLOAD_PROGRESS:$progress" + ) + } + + } + } + } + } else if (UniAppUtils.isUpdate(uniMp)) { + // 提示更新(1、更新释放新版本并启动;2、直接启动现有版本) + UniAppUtils.currentUpdateUniMp = uniMp + scope.launch { + GlobalStateManager(context).storeGlobalUniUpdateNotify( + true ) } - when (uniState) { - UniMpUpdate.DOWNLOAD_START -> { - //资源开始下载 - progressPair.apply { put(uniMpId, 0f) } - Log.i("HomeScreen", "DOWNLOAD_START") - } - - UniMpUpdate.DOWNLOAD_FINISH -> { - //资源下载完成 - progressPair.apply { put(uniMpId, 1f) } - Log.i("HomeScreen", "DOWNLOAD_FINISH") - } - - UniMpUpdate.DOWNLOAD_FAIL -> { - //资源下载失败 - progressPair.apply { put(uniMpId, -1f) } - Log.i("HomeScreen", "DOWNLOAD_FAIL") - } - - else -> { - //资源下载进度 - if (progress != null) { - progressPair.apply { - put( - uniMpId, - progress - ) - } - Log.i( - "HomeScreen", - "DOWNLOAD_PROGRESS:$progress" - ) - } - + } else { + loadingCallback?.showLoading() + //启动uni小程序(1、直接启动;2、释放并启动) + UniAppUtils.distributeUniMp(context, uniMp) { + loadingCallback?.hideLoading() } } } - } else if (UniAppUtils.isUpdate(uniMp)) { - // 提示更新(1、更新释放新版本并启动;2、直接启动现有版本) - UniAppUtils.currentUpdateUniMp = uniMp - scope.launch { - GlobalStateManager(context).storeGlobalUniUpdateNotify( - true - ) - } - } else { - loadingCallback?.showLoading() - //启动uni小程序(1、直接启动;2、释放并启动) - UniAppUtils.distributeUniMp(context, uniMp) { - loadingCallback?.hideLoading() - } - } - } - ) { - val uniMpId = uniVersionConfig[1].unimp_id - val uniIcon = uniVersionConfig[1].icon - if(uniVersionSize>1){ - AsyncImage( - model = uniIcon, - contentDescription = "支付宝模拟器", - contentScale = ContentScale.FillWidth, - modifier = Modifier - .fillMaxWidth() - .aspectRatio(168 / 96f), - fallback = painterResource(id = R.mipmap.ic_alipay_mock), - error = painterResource(id = R.mipmap.ic_alipay_mock) - ) - - //下载完成前显示 - if((progressPair[uniMpId]?:0f) > 0f && (progressPair[uniMpId]?:0f) < 1f){ - Box( + ) { + val uniMpId = uniVersionConfig[0].unimp_id + val uniIcon = uniVersionConfig[0].icon + AsyncImage( + model = uniIcon, + contentDescription = "微信模拟器图标", + contentScale = ContentScale.FillWidth, modifier = Modifier .fillMaxWidth() - .aspectRatio(168 / 96f) - .background( - Color( - 0x66000000 - ), RoundedCornerShape(18.dp) - ), - ){ - Column( + .aspectRatio(168 / 96f), + fallback = painterResource(id = R.mipmap.ic_wx_mock), + error = painterResource(id = R.mipmap.ic_wx_mock) + ) + + //下载完成前显示 + if((progressPair[uniMpId]?:0f) > 0f && (progressPair[uniMpId]?:0f) < 1f){ + Box( modifier = Modifier .fillMaxWidth() - .align(Alignment.Center) - .padding(horizontal = 12.dp) - ) { - // 使用 LinearProgressIndicator 显示确定性进度 - LinearProgressIndicator( - progress = { progressPair[uniMpId]?:0f }, // 使用 Lambda 更新进度0~1 + .aspectRatio(168 / 96f) + .background( + Color( + 0x66000000 + ), RoundedCornerShape(18.dp) + ), + ){ + Column( modifier = Modifier .fillMaxWidth() - .height(8.dp) - ) - Text( - text = "下载${((progressPair[uniMpId]?:0f) * 100).toInt()}%", - color = Color.White, - fontSize = 12.sp, - modifier = Modifier.align(Alignment.CenterHorizontally), - textAlign = TextAlign.Center, - ) + .align(Alignment.Center) + .padding(horizontal = 12.dp) + ) { + // 使用 LinearProgressIndicator 显示确定性进度 + LinearProgressIndicator( + progress = { progressPair[uniMpId]?:0f }, // 使用 Lambda 更新进度0~1 + modifier = Modifier + .fillMaxWidth() + .height(8.dp) + ) + Text( + text = "下载${((progressPair[uniMpId]?:0f) * 100).toInt()}%", + color = Color.White, + fontSize = 12.sp, + modifier = Modifier.align(Alignment.CenterHorizontally), + textAlign = TextAlign.Center, + ) + } + } + } + + } + Box(modifier = Modifier.width(7.dp)) + Box( + modifier = Modifier + .wrapContentWidth() + .weight(1f) + .clickable( + indication = null, + interactionSource = remember { MutableInteractionSource() } + ) { + val uniMp = uniVersionConfig[1] + val uniMpId = uniMp.unimp_id + // 处理点击事件,微信模拟器 + if (UniAppUtils.isDownloadUniMp(uniMp)) { + //强制更新(更新释放新版本并启动) + UniAppUtils.downloadWGT( + context, + scope, + uniMp + ) { uniState, _, progress -> + progressPair[uniMpId] + ?: mutableMapOf().apply { + put( + uniMpId, + 0f + ) + } + when (uniState) { + UniMpUpdate.DOWNLOAD_START -> { + //资源开始下载 + progressPair.apply { put(uniMpId, 0f) } + Log.i("HomeScreen", "DOWNLOAD_START") + } + + UniMpUpdate.DOWNLOAD_FINISH -> { + //资源下载完成 + progressPair.apply { put(uniMpId, 1f) } + Log.i("HomeScreen", "DOWNLOAD_FINISH") + } + + UniMpUpdate.DOWNLOAD_FAIL -> { + //资源下载失败 + progressPair.apply { put(uniMpId, -1f) } + Log.i("HomeScreen", "DOWNLOAD_FAIL") + } + + else -> { + //资源下载进度 + if (progress != null) { + progressPair.apply { + put( + uniMpId, + progress + ) + } + Log.i( + "HomeScreen", + "DOWNLOAD_PROGRESS:$progress" + ) + } + + } + } + } + } else if (UniAppUtils.isUpdate(uniMp)) { + // 提示更新(1、更新释放新版本并启动;2、直接启动现有版本) + UniAppUtils.currentUpdateUniMp = uniMp + scope.launch { + GlobalStateManager(context).storeGlobalUniUpdateNotify( + true + ) + } + } else { + loadingCallback?.showLoading() + //启动uni小程序(1、直接启动;2、释放并启动) + UniAppUtils.distributeUniMp(context, uniMp) { + loadingCallback?.hideLoading() + } + } + } + ) { + val uniMpId = uniVersionConfig[1].unimp_id + val uniIcon = uniVersionConfig[1].icon + if(uniVersionSize>1){ + AsyncImage( + model = uniIcon, + contentDescription = "支付宝模拟器", + contentScale = ContentScale.FillWidth, + modifier = Modifier + .fillMaxWidth() + .aspectRatio(168 / 96f), + fallback = painterResource(id = R.mipmap.ic_alipay_mock), + error = painterResource(id = R.mipmap.ic_alipay_mock) + ) + + //下载完成前显示 + if((progressPair[uniMpId]?:0f) > 0f && (progressPair[uniMpId]?:0f) < 1f){ + Box( + modifier = Modifier + .fillMaxWidth() + .aspectRatio(168 / 96f) + .background( + Color( + 0x66000000 + ), RoundedCornerShape(18.dp) + ), + ){ + Column( + modifier = Modifier + .fillMaxWidth() + .align(Alignment.Center) + .padding(horizontal = 12.dp) + ) { + // 使用 LinearProgressIndicator 显示确定性进度 + LinearProgressIndicator( + progress = { progressPair[uniMpId]?:0f }, // 使用 Lambda 更新进度0~1 + modifier = Modifier + .fillMaxWidth() + .height(8.dp) + ) + Text( + text = "下载${((progressPair[uniMpId]?:0f) * 100).toInt()}%", + color = Color.White, + fontSize = 12.sp, + modifier = Modifier.align(Alignment.CenterHorizontally), + textAlign = TextAlign.Center, + ) + } + } } } } } } } + } } items(rows) {rowItems -> diff --git a/app/src/main/java/com/img/rabbit/provider/storage/PreferenceUtil.kt b/app/src/main/java/com/img/rabbit/provider/storage/PreferenceUtil.kt index b5984a1..0a2b907 100644 --- a/app/src/main/java/com/img/rabbit/provider/storage/PreferenceUtil.kt +++ b/app/src/main/java/com/img/rabbit/provider/storage/PreferenceUtil.kt @@ -3,6 +3,9 @@ package com.img.rabbit.provider.storage import android.text.TextUtils import com.google.gson.Gson import com.google.gson.GsonBuilder +import com.google.gson.JsonArray +import com.google.gson.JsonObject +import com.img.rabbit.bean.local.UniMpVersionBean import com.img.rabbit.bean.response.UserConfigEntity import com.img.rabbit.bean.response.LoginInfoEntity import com.img.rabbit.bean.response.UserInfoEntity @@ -10,6 +13,7 @@ import com.img.rabbit.provider.utils.HeadParamUtils.applicationContext import com.img.rabbit.utils.MMKVUtils import com.img.rabbit.utils.MMKVUtils.mmkv import com.img.rabbit.utils.appwalle.ChannelReader +import kotlinx.serialization.json.Json import org.json.JSONObject /** @@ -159,12 +163,31 @@ object PreferenceUtil { return mmkv.decodeString(KEY_WX_CODE, null) } - fun saveWgtVersion(wgtVersion: String) { - mmkv.encode(KEY_WGT_VERSION, wgtVersion) + fun saveWgtVersion(uniId:String, wgtVersion: String) { + val json = mmkv.decodeString(KEY_WGT_VERSION, null) + val versions = if (!json.isNullOrEmpty()) { + Json.decodeFromString>(json) + } else { + mutableListOf() + } + + val existingIndex = versions.indexOfFirst { it.uniId == uniId } + if (existingIndex != -1) { + versions[existingIndex] = versions[existingIndex].copy(version = wgtVersion) + } else { + versions.add(UniMpVersionBean(uniId = uniId, version = wgtVersion)) + } + + mmkv.encode(KEY_WGT_VERSION, Json.encodeToString(versions)) } - fun getWgtVersion(): String? { - return mmkv.decodeString(KEY_WGT_VERSION, null) + fun getWgtVersion(uniId:String): String? { + val json = mmkv.decodeString(KEY_WGT_VERSION, null) + if(json.isNullOrEmpty()){ + return "0.0.0" + } + val versions = Json.decodeFromString>(json) + return versions.find { it.uniId == uniId }?.version } //真实的服务器时间 diff --git a/app/src/main/java/com/img/rabbit/provider/utils/NetworkUtils.kt b/app/src/main/java/com/img/rabbit/provider/utils/NetworkUtils.kt new file mode 100644 index 0000000..c24733a --- /dev/null +++ b/app/src/main/java/com/img/rabbit/provider/utils/NetworkUtils.kt @@ -0,0 +1,7 @@ +package com.img.rabbit.provider.utils + + +object NetworkUtils { + //实时更新网络状态 + var globalNetworkStatus: Boolean = false +} \ No newline at end of file diff --git a/app/src/main/java/com/img/rabbit/uni/UniMPAlipaySplashView.java b/app/src/main/java/com/img/rabbit/uni/UniMPAlipaySplashView.java new file mode 100644 index 0000000..c710a35 --- /dev/null +++ b/app/src/main/java/com/img/rabbit/uni/UniMPAlipaySplashView.java @@ -0,0 +1,31 @@ +package com.img.rabbit.uni; + +import android.content.Context; +import android.view.View; +import android.view.ViewGroup; +import android.widget.FrameLayout; +import android.widget.ImageView; + +import com.img.rabbit.R; + +import io.dcloud.feature.sdk.Interface.IDCUniMPAppSplashView; + +public class UniMPAlipaySplashView implements IDCUniMPAppSplashView { + FrameLayout splashView; + + @Override + public View getSplashView(Context context, String appid, String s1, String s2) { + splashView = new FrameLayout(context); + ImageView imageView = new ImageView(context); + imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); + imageView.setImageResource(R.mipmap.ic_launch_alipay_unimp); + splashView.addView(imageView, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); + return splashView; + } + + @Override + public void onCloseSplash(ViewGroup rootView) { + if(rootView != null) + rootView.removeView(splashView); + } +} diff --git a/app/src/main/java/com/img/rabbit/uni/UniMPSplashView.java b/app/src/main/java/com/img/rabbit/uni/UniMPWxSplashView.java similarity index 93% rename from app/src/main/java/com/img/rabbit/uni/UniMPSplashView.java rename to app/src/main/java/com/img/rabbit/uni/UniMPWxSplashView.java index db49c04..ddecb5f 100644 --- a/app/src/main/java/com/img/rabbit/uni/UniMPSplashView.java +++ b/app/src/main/java/com/img/rabbit/uni/UniMPWxSplashView.java @@ -11,7 +11,7 @@ import com.img.rabbit.R; import io.dcloud.feature.sdk.Interface.IDCUniMPAppSplashView; -public class UniMPSplashView implements IDCUniMPAppSplashView { +public class UniMPWxSplashView implements IDCUniMPAppSplashView { FrameLayout splashView; @Override diff --git a/app/src/main/java/com/img/rabbit/utils/UniAppUtils.kt b/app/src/main/java/com/img/rabbit/utils/UniAppUtils.kt index acd677e..27dcc24 100644 --- a/app/src/main/java/com/img/rabbit/utils/UniAppUtils.kt +++ b/app/src/main/java/com/img/rabbit/utils/UniAppUtils.kt @@ -11,7 +11,8 @@ import com.img.rabbit.provider.storage.PreferenceUtil import com.img.rabbit.provider.storage.PreferenceUtil.getBDVID import com.img.rabbit.provider.utils.HeadParamUtils.applicationContext import com.img.rabbit.provider.utils.HeadParamUtils.getAppVersionName -import com.img.rabbit.uni.UniMPSplashView +import com.img.rabbit.uni.UniMPAlipaySplashView +import com.img.rabbit.uni.UniMPWxSplashView import com.tencent.mm.opensdk.modelbiz.WXLaunchMiniProgram import com.tencent.mm.opensdk.openapi.IWXAPI import io.dcloud.feature.sdk.DCUniMPSDK @@ -58,14 +59,14 @@ object UniAppUtils { * 是否存在更新 */ fun isUpdate(uniVersion: UniVersionEntity): Boolean{ - return checkUpdate(uniVersion, PreferenceUtil.getWgtVersion()?:"0.0.0") + return checkUpdate(uniVersion, PreferenceUtil.getWgtVersion(uniVersion.unimp_id)?:"0.0.0") } /** * 是否强制更新 */ private fun isUpdateForce(uniVersion: UniVersionEntity): Boolean{ - return checkUpdate(uniVersion, PreferenceUtil.getWgtVersion()?:"0.0.0") && uniVersion.force + return checkUpdate(uniVersion, PreferenceUtil.getWgtVersion(uniVersion.unimp_id)?:"0.0.0") && uniVersion.force } /** @@ -96,8 +97,8 @@ object UniAppUtils { if(version.isEmpty()){ return false } - val newVersions = version.split("\\.") - val originVersions = currentVersion.split("\\.") + val newVersions = version.split(".") + val originVersions = currentVersion.split(".") if(newVersions.size != 3){ return false @@ -144,7 +145,9 @@ object UniAppUtils { Log.i("UniAppUtils", "startUniMp: 重新加载...") val configuration = getUniMPOpenConfiguration() if(uniVersion.unimp_type == "wx"){ - configuration.splashClass = UniMPSplashView::class.java + configuration.splashClass = UniMPWxSplashView::class.java + }else if("alipay" == uniVersion.unimp_type){ + configuration.splashClass = UniMPAlipaySplashView::class.java } updateUniMp(uniVersion.unimp_id, DCUniMPSDK.getInstance().openUniMP(context, uniVersion.unimp_id, configuration)) } @@ -174,11 +177,15 @@ object UniAppUtils { // 启动直达页面 val configuration = getUniMPOpenConfiguration() if(uniMpType == "wx"){ - configuration.splashClass = UniMPSplashView::class.java + configuration.splashClass = UniMPWxSplashView::class.java + } + if(uniMpType == "wx"){ + configuration.splashClass = UniMPWxSplashView::class.java + }else if("alipay" == uniMpType){ + configuration.splashClass = UniMPAlipaySplashView::class.java } configuration.path = pagePath updateUniMp(uniMpId, DCUniMPSDK.getInstance().openUniMP(context, uniMpId, configuration)) -// uniMpPair[uniMpId] = DCUniMPSDK.getInstance().openUniMP(context, uniMpId, configuration) } private fun releaseWgt(versionEntity: UniVersionEntity, onReleaseWgt: (isSuccess: Boolean, versionEntity: UniVersionEntity) -> Unit) { @@ -225,6 +232,7 @@ object UniAppUtils { downloadUniMp(scope, uniVersion){uniState, filePath, progress -> onProgress(uniState, filePath, progress) if(uniState == UniMpUpdate.DOWNLOAD_FINISH){ + PreferenceUtil.saveWgtVersion(uniVersion.unimp_id, uniVersion.version) distributeUniMp(context, uniVersion) { _ ->} } } @@ -242,6 +250,7 @@ object UniAppUtils { downloadUniMp(scope, uniVersion){uniState, _, progress -> onProgress(UniMpUpdate.DOWNLOAD_LOADING, progress) if(uniState == UniMpUpdate.DOWNLOAD_FINISH){ + PreferenceUtil.saveWgtVersion(uniVersion.unimp_id, uniVersion.version) onProgress(UniMpUpdate.DOWNLOAD_FINISH, 1f) scope.launch { val uniMPReleaseConfiguration = UniMPReleaseConfiguration().apply { @@ -278,6 +287,7 @@ object UniAppUtils { val uniMpID = uniVersion.unimp_id val wgtName = String.format("%s.wgt", uniMpID) val path = FileUtils.getInstance().cacheUniAppDir.absolutePath + Log.i("UniAppUtils", "下载wgt---->downloadUniMp: $path/$wgtName ------>${uniVersion.url}") UpdateUtils.download( scope = scope, url = uniVersion.url, diff --git a/app/src/main/java/com/img/rabbit/viewmodel/BaseViewModel.kt b/app/src/main/java/com/img/rabbit/viewmodel/BaseViewModel.kt index 10c68e5..c8188ec 100644 --- a/app/src/main/java/com/img/rabbit/viewmodel/BaseViewModel.kt +++ b/app/src/main/java/com/img/rabbit/viewmodel/BaseViewModel.kt @@ -2,6 +2,7 @@ package com.img.rabbit.viewmodel import androidx.compose.runtime.mutableStateOf import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope +import com.img.rabbit.provider.utils.NetworkUtils.globalNetworkStatus import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.withContext @@ -12,6 +13,10 @@ open class BaseViewModel : ViewModel() { val isLoading = mutableStateOf(false) fun mLaunch(block: suspend () -> Unit) { + if (!globalNetworkStatus) { + isLoading.value = false // 加载完成 + return + } viewModelScope.launch(Dispatchers.IO) { try { block() diff --git a/app/src/main/java/com/img/rabbit/viewmodel/GeneralViewModel.kt b/app/src/main/java/com/img/rabbit/viewmodel/GeneralViewModel.kt index dfae07e..9974528 100644 --- a/app/src/main/java/com/img/rabbit/viewmodel/GeneralViewModel.kt +++ b/app/src/main/java/com/img/rabbit/viewmodel/GeneralViewModel.kt @@ -1,7 +1,6 @@ package com.img.rabbit.viewmodel import android.annotation.SuppressLint -import android.app.Application import android.content.BroadcastReceiver import android.content.Context import android.content.Context.RECEIVER_EXPORTED @@ -14,28 +13,24 @@ import android.net.NetworkRequest import android.os.Build import androidx.compose.runtime.State import androidx.compose.runtime.mutableStateOf -import androidx.lifecycle.AndroidViewModel import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import com.img.rabbit.config.Constants import com.img.rabbit.provider.api.ApiManager import com.img.rabbit.provider.storage.PreferenceUtil +import com.img.rabbit.provider.utils.HeadParamUtils +import com.img.rabbit.provider.utils.NetworkUtils.globalNetworkStatus import com.tencent.mm.opensdk.constants.ConstantsAPI import com.tencent.mm.opensdk.openapi.IWXAPI import com.tencent.mm.opensdk.openapi.WXAPIFactory import kotlinx.coroutines.DelicateCoroutinesApi -import kotlinx.coroutines.GlobalScope -import kotlinx.coroutines.launch @SuppressLint("ObsoleteSdkInt") -class GeneralViewModel(application: Application) : AndroidViewModel(application) { +class GeneralViewModel: BaseViewModel(){ lateinit var api: IWXAPI lateinit var receiver: BroadcastReceiver private val _networkStatus = MutableLiveData() val networkStatus: LiveData = _networkStatus - fun setNetworkStatus(status: Boolean) { - _networkStatus.value = status - } private val _serverTime = mutableStateOf(null) val serverTime: State = _serverTime @@ -44,15 +39,17 @@ class GeneralViewModel(application: Application) : AndroidViewModel(application) val isNavigationBarVisible: LiveData = _isNavigationBarVisible private val connectivityManager = - application.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager + HeadParamUtils.applicationContext?.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager private val networkCallback = object : ConnectivityManager.NetworkCallback() { override fun onAvailable(network: Network) { _networkStatus.postValue(true) + globalNetworkStatus = true } override fun onLost(network: Network) { _networkStatus.postValue(false) + globalNetworkStatus = false } } @@ -76,7 +73,7 @@ class GeneralViewModel(application: Application) : AndroidViewModel(application) _agreementStatus.value = PreferenceUtil.getAgreement() // 初始化微信API - initWXApi(application) + HeadParamUtils.applicationContext?.let { initWXApi(it) } } private fun isNetworkAvailable(): Boolean { @@ -138,10 +135,7 @@ class GeneralViewModel(application: Application) : AndroidViewModel(application) @OptIn(DelicateCoroutinesApi::class) fun getServerTime() { - if (networkStatus.value != true) { - return - } - GlobalScope.launch { + mLaunch { val response = ApiManager.serviceVo.getServerTime() if (response.status) { _serverTime.value = response.data diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launch_alipay_unimp.webp b/app/src/main/res/mipmap-xxhdpi/ic_launch_alipay_unimp.webp new file mode 100644 index 0000000000000000000000000000000000000000..9b6e53f2bac0bae075ae5097a3e5ff759f04e245 GIT binary patch literal 902038 zcmeF(d00~0-zac9r;ZJ$Y_@W0&}>pGQ*(lo4W^}*Ii)F?Q#p|%Dhj7bPnlYpnweUe zIcv_doH8}%oO1v&6$b=V1Ox;w{oX&``^S6l-}kxCcl&^g?GpC>?C)OdyB4s`jV@e> zZrCVcecs@T)s@pW>m?*4_KI)Lt0f++lQ24a_R7~);)fEezW%yjeOyAq%iG`A+|XdJ z&2`(ol0PI?iGTjHI6C>={jbvhcrUKS9{8`iy(<4>jsN?~bo2Zz?|%Ha{J%PxBj=X(_PP(`Gi|ZFr{O;%1uUiuR2=urxf~xmOdH!=n zBb_u(yt8Zcr`<`{zmK-HFU4?r<@u7~*)I>PAKkbAz)8K&pW2;!_z05sh?SRCdHyJG zSKQ7A-(uT6C3~BGoNm9IMps^O31v9ChTlX-9Qa(`UVQsb_m^($2HTIcCNIT=l%V*( zOx8S*Q~WA?{Ev8<|4Wp%zpA4=EGNWuXQ}OpOW|#sH6JF$9ldMc+1UPH%iZPb*rSQ# z%TH!}FFVF5j>JAnD795#T*jm%%_i9!B`?2z+O@9SZY0_ywzP06csKgEdU2loNI4fR zDD%Q((%SF-fkI>!dW)4ClQufbm%&+4N3kZM!2!H?xfB*=900@8p2!H?x zfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=9 z00@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p z2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?x zfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=9 z00@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p z2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?x zfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=9 z00@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p z2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?x zfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=9 z00@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p z2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?x zfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=9 z00@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p z2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?x zfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=9 z00@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p z2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?x zfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=9 z00@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p z2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?x zfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=9 z00@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p z2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?x zfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=9 z00@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p z2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?x 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 zAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd& z00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY z0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4ea zAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd& z00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY z0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4ea zAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd& z00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY z0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4ea zAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd& z00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY z0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4ea zAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd& z00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY z0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4ea zAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd& z00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY z0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4ea 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