1、添加页面描述及说明
This commit is contained in:
shenzuqiang 2026-03-16 10:32:42 +08:00
parent 1148f91241
commit 589f5f08e5
20 changed files with 79 additions and 29 deletions

View File

@ -5,19 +5,18 @@
<uses-feature
android:name="android.hardware.camera"
android:required="false" />
<!-- 在Android14及以上版本读取SelectedPhotoAccess需要添加READ_MEDIA_VISUAL_USER_SELECTED权限 -->
<uses-permission android:name="android.permission.READ_MEDIA_VISUAL_USER_SELECTED" />
<!--相机权限,用于打开相机和拍照:如用户反馈等-->
<uses-permission android:name="android.permission.CAMERA" />
<!-- 写入外部存储权限用于保存拍照后的图片或者下载文件主要兼容Android 13及以下版本 -->
<!-- 写入外部存储权限用于保存拍照后的图片或者下载文件主要兼容Android 13及以下版本Android13以上高版本不需要但低版本必须 -->
<uses-permission android:name = "android.permission.WRITE_EXTERNAL_STORAGE"
android:maxSdkVersion="32"
tools:ignore="ScopedStorage" />
<!-- 读取外部存储权限用于读取相册图片主要兼容Android 13及以下版本 -->
<!-- 读取外部存储权限用于读取相册图片主要兼容Android 13及以下版本Android13以上高版本不需要但低版本必须 -->
<uses-permission android:name = "android.permission.READ_EXTERNAL_STORAGE"
android:maxSdkVersion="32" />
<!-- 读取相册图片权限-Android 13以上版本的权限两种解决方案1、使用Android 照片选择器 (Photo Picker)即PickVisualMedia 2、使用READ_MEDIA_VISUAL_USER_SELECTED权限。这里选择第二种因为需要自定义相册。 -->
<!-- 读取相册图片权限-Android 13以上版本的权限两种解决方案1、使用Android 照片选择器 (Photo Picker)即PickVisualMedia 2、使用READ_MEDIA_VISUAL_USER_SELECTED权限。这里选择第二种因为需要自定义相册。 -->
<uses-permission android:name = "android.permission.READ_MEDIA_IMAGES"
tools:ignore="PhotoAndVideoPolicy" />
<!--检测联网方式,在网络异常状态避免数据发送,节省流量和电量-->
@ -34,7 +33,6 @@
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<!--Unimp要求-->
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
<!-- 安装应用权限 -->
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"
tools:ignore="RequestInstallPackagesPolicy" />

View File

@ -106,7 +106,6 @@ class MainActivity : ComponentActivity(), LoadingCallback {
// 启用Edge-to-Edge模式沉浸模式
enableEdgeToEdge()
setContent {
val coroutineScope = rememberCoroutineScope()
var showSplash by remember { mutableStateOf(false) }

View File

@ -9,13 +9,15 @@ import android.widget.TextView
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity
/**
* 用于隐私政策协议内部浏览的WebActivity
*/
class WebViewActivity : AppCompatActivity() {
@SuppressLint("SetJavaScriptEnabled")
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// 启用Edge-to-Edge模式沉浸模式
enableEdgeToEdge()

View File

@ -82,6 +82,10 @@ import com.img.rabbit.utils.WXAuthEvent
import kotlinx.coroutines.delay
import org.json.JSONObject
/**
* 登录页
* 包含两种打开方式1直接打开登录页无返回按钮 2从其他页面跳转打开登录页包含返回按钮
*/
@SuppressLint("UnrememberedMutableState")
@Composable
@ -183,22 +187,24 @@ fun LoginScreen(navController: NavHostController? = null, generalViewModel: Gene
}
}
// LaunchedEffect(networkStatus) {
// delay(1000L)
// showNetworkDisconnected = true
// }
// if(showNetworkDisconnected){
// if(!networkStatus){
// NetworkDisconnectedPage(generalViewModel = generalViewModel, onNetworkStatus = {isNetworkAvailable->
// if(isNetworkAvailable){
// Toast.makeText(context, "网络已连接", Toast.LENGTH_SHORT).show()
// }else{
// Toast.makeText(context, "网络已断开", Toast.LENGTH_SHORT).show()
// }
// generalViewModel.setNetworkStatus(isNetworkAvailable)
// })
// }
// }
/*
LaunchedEffect(networkStatus) {
delay(1000L)
showNetworkDisconnected = true
}
if(showNetworkDisconnected){
if(!networkStatus){
NetworkDisconnectedPage(generalViewModel = generalViewModel, onNetworkStatus = {isNetworkAvailable->
if(isNetworkAvailable){
Toast.makeText(context, "网络已连接", Toast.LENGTH_SHORT).show()
}else{
Toast.makeText(context, "网络已断开", Toast.LENGTH_SHORT).show()
}
generalViewModel.setNetworkStatus(isNetworkAvailable)
})
}
}
*/
// 顶部栏
TitleBar(navController = navController, paddingValues = it, title = "", showSave = false, showBreak = isVisibilityBreak)

View File

@ -63,6 +63,9 @@ sealed class TabItem(val title: String, val router:String, val normalIconRes: In
object Mine : TabItem("我的", "mine", R.mipmap.ic_mine_normal, R.mipmap.ic_mine_selected, Color(0xFFAAAAAA), Color(0xFF1A1A1A))
}
/**
* 负责Tab切换和页面切换的NavController
*/
@SuppressLint("UnusedMaterial3ScaffoldPaddingParameter")
@Composable
fun MainScreen(generalViewModel: GeneralViewModel, loginViewModel: LoginViewModel) {

View File

@ -35,6 +35,9 @@ import com.img.rabbit.R
import com.img.rabbit.utils.NetworkStatus
import com.img.rabbit.viewmodel.GeneralViewModel
/**
* 网络断开页已经不再使用改为Toast提示了
*/
@Composable
fun NetworkDisconnectedPage(navController: NavHostController? = null, generalViewModel: GeneralViewModel, onNetworkStatus: (Boolean) -> Unit) {
val context = LocalContext.current

View File

@ -74,9 +74,10 @@ import kotlinx.coroutines.launch
import org.json.JSONObject
import kotlin.collections.chunked
@SuppressLint("UnrememberedMutableState", "MutableCollectionMutableState",
"SourceLockedOrientationActivity"
)
/**
* App首页页面
*/
@SuppressLint("UnrememberedMutableState", "MutableCollectionMutableState", "SourceLockedOrientationActivity")
@Composable
fun HomeScreen(
navController: NavHostController,
@ -204,8 +205,7 @@ fun HomeScreen(
val rows = homeIconConfig?.chunked(columnsCount)?:emptyList()
//模拟器
item {
Column(
) {
Column {
Column(
modifier = Modifier
.fillMaxWidth()
@ -766,7 +766,7 @@ private fun dealUniMpDownloadLaunch(
progressPair: SnapshotStateMap<String, Float>,
reportViewModel: ReportViewModel,
loadingCallback: LoadingCallback?){
val TAG = "Rabbit_HomeScreen"
val TAG = "Rabbit_HomeScreen_download"
val uniMpId = uniMp.unimp_id
// 处理点击事件,微信模拟器

View File

@ -59,6 +59,9 @@ import com.img.rabbit.viewmodel.MineViewModel
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
/**
* App我的页面
*/
@SuppressLint("UnrememberedMutableState", "CoroutineCreationDuringComposition")
@Composable
fun MineScreen(

View File

@ -135,6 +135,9 @@ object ResourceManager {
}
}
/**
* 抠图页面
*/
@Composable
fun CutoutScreen(navController: NavController, viewModel: CutoutViewModel = viewModel()) {
val context = LocalContext.current

View File

@ -44,6 +44,9 @@ import com.img.rabbit.utils.ImageUtils.convertToGallery
import com.img.rabbit.utils.ImageUtils.getBitmapFromUri
import kotlinx.coroutines.launch
/**
* 格式转换页
*/
@Composable
fun FormatScreen(navController: NavController) {
val context = LocalContext.current

View File

@ -65,6 +65,9 @@ import io.moyuru.cropify.Cropify
import io.moyuru.cropify.CropifyOption
import io.moyuru.cropify.rememberCropifyState
/**
* 长图页
*/
@Composable
fun LongImageScreen(navController: NavController) {
val context = LocalContext.current

View File

@ -64,6 +64,9 @@ import com.img.rabbit.utils.ImageUtils
import com.img.rabbit.utils.ImageUtils.saveCanvasToGallery
import kotlinx.coroutines.launch
/**
* 改尺寸页
*/
@Composable
fun ResizeScreen(navController: NavController) {
val context = LocalContext.current

View File

@ -45,6 +45,9 @@ import com.img.rabbit.pages.toolbar.TitleBar
import com.img.rabbit.viewmodel.FeedbackViewModel
import okhttp3.RequestBody.Companion.toRequestBody
/**
* 反馈页
*/
@Composable
fun FeedbackScreen(navController: NavHostController, viewModel: FeedbackViewModel = viewModel()) {
val context = LocalContext.current

View File

@ -48,6 +48,9 @@ import com.img.rabbit.provider.storage.PreferenceUtil
import com.img.rabbit.utils.AppDataStoreUtils
import com.img.rabbit.viewmodel.LoginViewModel
/**
* 设置页
*/
@SuppressLint("UnrememberedMutableState")
@Composable
fun SettingScreen(navController: NavHostController, loginViewModel: LoginViewModel) {

View File

@ -39,6 +39,9 @@ import com.img.rabbit.config.Constants.privacyUrl
import com.img.rabbit.pages.toolbar.TitleBar
import com.img.rabbit.utils.UrlLinkUtils.openAgreement
/**
* 关于我们页
*/
@Composable
fun AboutScreen(navController: NavHostController) {
Scaffold{

View File

@ -53,6 +53,9 @@ import com.img.rabbit.utils.LoginBindEvent
import com.img.rabbit.viewmodel.AccountBindViewModel
import com.img.rabbit.viewmodel.BindViewModel
/**
* 账号绑定页
*/
@SuppressLint("UnrememberedMutableState")
@Composable
fun AccountBindScreen(navController: NavHostController, viewModel: AccountBindViewModel = viewModel()) {

View File

@ -53,6 +53,9 @@ import com.img.rabbit.viewmodel.AccountManagerViewModel
import com.img.rabbit.viewmodel.LoginViewModel
import kotlinx.coroutines.delay
/**
* 账号管理页(切换或添加账号)
*/
@Composable
fun AccountManagerScreen(navController: NavHostController, viewModel: AccountManagerViewModel = viewModel()) {
var showDialogStatus by remember { mutableStateOf(false) }

View File

@ -79,6 +79,9 @@ import com.img.rabbit.viewmodel.GeneralViewModel
import kotlinx.coroutines.delay
import org.json.JSONObject
/**
* 账号绑定页绑定手机号或微信类似 登录页
*/
@SuppressLint("UnrememberedMutableState")
@Composable
fun BindScreen(navController: NavHostController, viewModel: BindViewModel = viewModel(), generalViewModel: GeneralViewModel, bindType: Int) {

View File

@ -48,6 +48,9 @@ import com.img.rabbit.components.CenterToast
import com.img.rabbit.pages.toolbar.TitleBar
import com.img.rabbit.viewmodel.DeleteAccountViewModel
/**
* 注销删除账号页
*/
@Composable
fun DeleteAccountScreen(navController: NavHostController,viewModel: DeleteAccountViewModel = viewModel()) {
val inputTextValue = "我自愿注销本账号"

View File

@ -31,6 +31,9 @@ import androidx.navigation.NavController
import com.img.rabbit.R
import com.img.rabbit.pages.toolbar.TitleBar
/**
* 拍照指南页
*/
@Composable
fun CameraGuideScreen(navController: NavController) {
Scaffold {