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 0000000..9b6e53f Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_launch_alipay_unimp.webp differ