parent
1148f91241
commit
589f5f08e5
|
|
@ -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" />
|
||||
|
|
|
|||
|
|
@ -106,7 +106,6 @@ class MainActivity : ComponentActivity(), LoadingCallback {
|
|||
// 启用Edge-to-Edge模式(沉浸模式)
|
||||
enableEdgeToEdge()
|
||||
|
||||
|
||||
setContent {
|
||||
val coroutineScope = rememberCoroutineScope()
|
||||
var showSplash by remember { mutableStateOf(false) }
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
// 处理点击事件,微信模拟器
|
||||
|
|
|
|||
|
|
@ -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(
|
||||
|
|
|
|||
|
|
@ -135,6 +135,9 @@ object ResourceManager {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 抠图页面
|
||||
*/
|
||||
@Composable
|
||||
fun CutoutScreen(navController: NavController, viewModel: CutoutViewModel = viewModel()) {
|
||||
val context = LocalContext.current
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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{
|
||||
|
|
|
|||
|
|
@ -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()) {
|
||||
|
|
|
|||
|
|
@ -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) }
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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 = "我自愿注销本账号"
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
Loading…
Reference in New Issue