Skip to content

Commit

Permalink
修复部分项目配置无法保存
Browse files Browse the repository at this point in the history
  • Loading branch information
aiselp committed Sep 15, 2023
1 parent dfcf191 commit 7e4e358
Show file tree
Hide file tree
Showing 2 changed files with 116 additions and 137 deletions.
172 changes: 79 additions & 93 deletions app/src/main/java/org/autojs/autojs/ui/build/BuildPage.kt
Original file line number Diff line number Diff line change
Expand Up @@ -11,19 +11,52 @@ import androidx.activity.compose.rememberLauncherForActivityResult
import androidx.compose.foundation.Image
import androidx.compose.foundation.clickable
import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.foundation.shape.ZeroCornerSize
import androidx.compose.foundation.text.KeyboardActions
import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.foundation.verticalScroll
import androidx.compose.material.*
import androidx.compose.material.AlertDialog
import androidx.compose.material.Card
import androidx.compose.material.Checkbox
import androidx.compose.material.ContentAlpha
import androidx.compose.material.Divider
import androidx.compose.material.FabPosition
import androidx.compose.material.FloatingActionButton
import androidx.compose.material.Icon
import androidx.compose.material.IconButton
import androidx.compose.material.LocalContentAlpha
import androidx.compose.material.LocalTextStyle
import androidx.compose.material.MaterialTheme
import androidx.compose.material.Scaffold
import androidx.compose.material.Surface
import androidx.compose.material.Text
import androidx.compose.material.TextButton
import androidx.compose.material.TextField
import androidx.compose.material.TextFieldColors
import androidx.compose.material.TextFieldDefaults
import androidx.compose.material.TopAppBar
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.ArrowBack
import androidx.compose.material.icons.filled.Done
import androidx.compose.runtime.*
import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.focus.FocusDirection
Expand All @@ -47,15 +80,16 @@ import com.stardust.pio.PFile
import com.stardust.pio.PFiles
import com.stardust.util.IntentUtil
import org.autojs.autojs.Pref
import org.autojs.autoxjs.R
import org.autojs.autojs.build.ApkKeyStore
import org.autojs.autojs.build.ApkSigner
import org.autojs.autojs.external.fileprovider.AppFileProvider
import org.autojs.autojs.theme.dialog.ThemeColorMaterialDialogBuilder
import org.autojs.autojs.ui.compose.widget.ProgressDialog
import org.autojs.autojs.ui.filechooser.FileChooserDialogBuilder
import org.autojs.autojs.ui.shortcut.ShortcutIconSelectResult
import org.autojs.autoxjs.R
import java.io.File
import kotlin.reflect.KMutableProperty0

/**
* @author wilinz
Expand Down Expand Up @@ -226,42 +260,18 @@ private fun PackagingOptionCard(
onValueChange = { model.abiList = it },
label = { Text(text = stringResource(id = R.string.text_abi)) }
)
Row(verticalAlignment = Alignment.CenterVertically) {
Checkbox(
checked = model.isRequiredOpenCv,
onCheckedChange = { model.isRequiredOpenCv = it })
Text(text = stringResource(id = R.string.text_required_opencv))
}
Row(verticalAlignment = Alignment.CenterVertically) {
Checkbox(
checked = model.isRequiredMlKitOCR,
onCheckedChange = { model.isRequiredMlKitOCR = it })
Text(text = stringResource(id = R.string.text_required_google_mlkit_ocr))
}
Row(verticalAlignment = Alignment.CenterVertically) {
Checkbox(
checked = model.isRequiredPaddleOCR,
onCheckedChange = { model.isRequiredPaddleOCR = it })
Text(text = stringResource(id = R.string.text_required_paddle_ocr))
}
Row(verticalAlignment = Alignment.CenterVertically) {
Checkbox(
checked = model.isRequiredTesseractOCR,
onCheckedChange = { model.isRequiredTesseractOCR = it })
Text(text = stringResource(id = R.string.text_required_tesseract_ocr))
}
Row(verticalAlignment = Alignment.CenterVertically) {
Checkbox(
checked = model.isRequired7Zip,
onCheckedChange = { model.isRequired7Zip = it })
Text(text = stringResource(id = R.string.text_required_7zip))
}
Row(verticalAlignment = Alignment.CenterVertically) {
Checkbox(
checked = model.isRequiredDefaultOcrModelData,
onCheckedChange = { model.isRequiredDefaultOcrModelData = it })
Text(text = stringResource(id = R.string.text_required_default_paddle_ocr_model))
val map = mapOf(
stringResource(id = R.string.text_required_opencv) to model::isRequiredOpenCv,
stringResource(id = R.string.text_required_google_mlkit_ocr) to model::isRequiredMlKitOCR,
stringResource(id = R.string.text_required_paddle_ocr) to model::isRequiredPaddleOCR,
stringResource(id = R.string.text_required_tesseract_ocr) to model::isRequiredTesseractOCR,
stringResource(id = R.string.text_required_7zip) to model::isRequired7Zip,
stringResource(id = R.string.text_required_default_paddle_ocr_model) to model::isRequiredDefaultOcrModelData,
)
for ((t, v) in map) {
CheckboxOption(v, t)
}

//目前必须为true
/*Row(verticalAlignment = Alignment.CenterVertically) {
Checkbox(
Expand All @@ -273,6 +283,21 @@ private fun PackagingOptionCard(
}
}

@Composable
fun CheckboxOption(value: KMutableProperty0<Boolean>, name: String) {
Row(
modifier = Modifier
.fillMaxWidth()
.clickable { value.set(!value.get()) },
verticalAlignment = Alignment.CenterVertically
) {
Checkbox(
checked = value.get(),
onCheckedChange = { value.set(it) })
Text(text = name)
}
}

@Composable
private fun SignatureCard(
model: BuildViewModel
Expand Down Expand Up @@ -311,7 +336,7 @@ private fun RunConfigCard(model: BuildViewModel) {
}
)

Card() {
Card {
Column(
Modifier
.fillMaxSize()
Expand All @@ -324,60 +349,21 @@ private fun RunConfigCard(model: BuildViewModel) {
label = { Text(text = stringResource(id = R.string.text_main_file_name)) },
)
Spacer(modifier = Modifier.height(8.dp))
Row(verticalAlignment = Alignment.CenterVertically) {
Checkbox(
checked = model.isHideLauncher,
onCheckedChange = { model.isHideLauncher = it })
Text(text = stringResource(id = R.string.text_hideLaucher))
}
Row(verticalAlignment = Alignment.CenterVertically) {
Checkbox(
checked = model.isStableMode,
onCheckedChange = { model.isStableMode = it })
Text(text = stringResource(id = R.string.text_stable_mode))
}
Row(verticalAlignment = Alignment.CenterVertically) {
Checkbox(
checked = model.isHideLogs,
onCheckedChange = { model.isHideLogs = it })
Text(text = stringResource(id = R.string.text_hideLogs))
}
Row(verticalAlignment = Alignment.CenterVertically) {
Checkbox(
checked = model.isVolumeUpControl,
onCheckedChange = { model.isVolumeUpControl = it })
Text(text = stringResource(id = R.string.text_volumeUpcontrol))
}
Row(verticalAlignment = Alignment.CenterVertically) {
Checkbox(
checked = model.isRequiredAccessibilityServices,
onCheckedChange = { model.isRequiredAccessibilityServices = it })
Text(text = stringResource(id = R.string.text_required_accessibility_service))
}
Row(verticalAlignment = Alignment.CenterVertically) {
Checkbox(
checked = model.isHideAccessibilityServices,
onCheckedChange = { model.isHideAccessibilityServices = it })
Text(text = stringResource(id = R.string.text_hide_accessibility_services))
}
Row(verticalAlignment = Alignment.CenterVertically) {
Checkbox(
checked = model.isRequiredBackgroundStart,
onCheckedChange = { model.isRequiredBackgroundStart = it })
Text(text = stringResource(id = R.string.text_required_background_start))
}
Row(verticalAlignment = Alignment.CenterVertically) {
Checkbox(
checked = model.isRequiredDrawOverlay,
onCheckedChange = { model.isRequiredDrawOverlay = it })
Text(text = stringResource(id = R.string.text_required_draw_overlay))
}
Row(verticalAlignment = Alignment.CenterVertically) {
Checkbox(
checked = model.displaySplash,
onCheckedChange = { model.displaySplash = it })
Text(text = stringResource(id = R.string.text_display_splash))
val map = mapOf(
stringResource(id = R.string.text_hideLaucher) to model::isHideLauncher,
stringResource(id = R.string.text_stable_mode) to model::isStableMode,
stringResource(id = R.string.text_hideLogs) to model::isHideLogs,
stringResource(id = R.string.text_volumeUpcontrol) to model::isVolumeUpControl,
stringResource(id = R.string.text_required_accessibility_service) to model::isRequiredAccessibilityServices,
stringResource(id = R.string.text_hide_accessibility_services) to model::isHideAccessibilityServices,
stringResource(id = R.string.text_required_background_start) to model::isRequiredBackgroundStart,
stringResource(id = R.string.text_required_draw_overlay) to model::isRequiredDrawOverlay,
stringResource(id = R.string.text_display_splash) to model::displaySplash
)
for ((t, v) in map) {
CheckboxOption(v, t)
}

MyTextField(
value = model.splashText,
onValueChange = { model.splashText = it },
Expand Down
81 changes: 37 additions & 44 deletions app/src/main/java/org/autojs/autojs/ui/build/BuildViewModel.kt
Original file line number Diff line number Diff line change
Expand Up @@ -253,8 +253,8 @@ class BuildViewModel(private val app: Application, private var source: String) :
projectDirectory = directory!!
outputPath = viewModel.outputPath
assets = updateAssets(assets)
libs = updateLibs(libs).toMutableList()
abis = updateAbiList(abis).toMutableList()
updateLibs(libs)
updateAbiList(abis)
if (ignoredDirs.isEmpty()) ignoredDirs = listOf(buildDir)
name = viewModel.appName
versionCode = viewModel.versionCode.toInt()
Expand All @@ -271,7 +271,7 @@ class BuildViewModel(private val app: Application, private var source: String) :
splashText = viewModel.splashText
splashIcon = viewModel.splashIcon?.toRelativePathOrString()
serviceDesc = viewModel.serviceDesc
permissions = updatePermissions(permissions)
permissions = updatePermissions()
isHideAccessibilityServices = viewModel.isHideAccessibilityServices
}
signingConfig.apply {
Expand Down Expand Up @@ -345,15 +345,6 @@ class BuildViewModel(private val app: Application, private var source: String) :
)
)
}
// if (customOcrModelPath.isNotBlank()) {
// val dirName = File(customOcrModelPath).name
// assetsList.add(
// Asset(
// form = customOcrModelPath,
// to = "/${Constant.Assets.OCR_MODELS}/$dirName"
// )
// )
// }
if (!isSingleFile) {
assetsList.addIfNotExist(
Asset(
Expand All @@ -365,28 +356,29 @@ class BuildViewModel(private val app: Application, private var source: String) :
return assetsList.distinct()
}

private fun updateAbiList(oldAbis: List<String>): List<String> {
val newAbis = abiList.split(",").map { it.trim() }
return oldAbis.toMutableList().apply { addAllIfNotExist(newAbis) }.distinct()
private fun updateAbiList(aLibs: MutableList<String>) {
aLibs.clear()
abiList.split(",").forEach {
aLibs.add(it.trim())
}
}

private fun updateLibs(oldLibs: List<String>): List<String> {
val libList = oldLibs.toMutableList()
if (isRequiredOpenCv) libList.addAllIfNotExist(Constant.Libraries.OPEN_CV)
if (isRequiredPaddleOCR) libList.addAllIfNotExist(Constant.Libraries.PADDLE_OCR)
if (isRequiredMlKitOCR) libList.addAllIfNotExist(Constant.Libraries.GOOGLE_ML_KIT_OCR)
if (isRequiredTesseractOCR) libList.addAllIfNotExist(Constant.Libraries.TESSERACT_OCR)
if (isRequired7Zip) libList.addAllIfNotExist(Constant.Libraries.P7ZIP)
if (isRequiredTerminalEmulator) libList.addAllIfNotExist(Constant.Libraries.TERMINAL_EMULATOR)
return libList.distinct()
private fun updateLibs(libs: MutableList<String>) {
libs.clear()
if (isRequiredOpenCv) libs.addAll(Constant.Libraries.OPEN_CV)
if (isRequiredPaddleOCR) libs.addAll(Constant.Libraries.PADDLE_OCR)
if (isRequiredMlKitOCR) libs.addAll(Constant.Libraries.GOOGLE_ML_KIT_OCR)
if (isRequiredTesseractOCR) libs.addAll(Constant.Libraries.TESSERACT_OCR)
if (isRequired7Zip) libs.addAll(Constant.Libraries.P7ZIP)
if (isRequiredTerminalEmulator) libs.addAll(Constant.Libraries.TERMINAL_EMULATOR)
}

private fun updatePermissions(oldPermissions: List<String>): List<String> {
val permissionList = oldPermissions.toMutableList()
if (isRequiredAccessibilityServices) permissionList.addIfNotExist(Constant.Permissions.ACCESSIBILITY_SERVICES)
if (isRequiredBackgroundStart) permissionList.addIfNotExist(Constant.Permissions.BACKGROUND_START)
if (isRequiredDrawOverlay) permissionList.addIfNotExist(Constant.Permissions.DRAW_OVERLAY)
return permissionList.distinct()
private fun updatePermissions(): List<String> {
val permissionList = ArrayList<String>()
if (isRequiredAccessibilityServices) permissionList.add(Constant.Permissions.ACCESSIBILITY_SERVICES)
if (isRequiredBackgroundStart) permissionList.add(Constant.Permissions.BACKGROUND_START)
if (isRequiredDrawOverlay) permissionList.add(Constant.Permissions.DRAW_OVERLAY)
return permissionList
}


Expand All @@ -410,15 +402,11 @@ class BuildViewModel(private val app: Application, private var source: String) :
var isRequiredMlKitOCRLibs = false
var isRequiredMlKitOCRModels = false
projectConfig.libs.let {
when {
it.containsAll(Constant.Libraries.GOOGLE_ML_KIT_OCR) -> isRequiredMlKitOCRLibs =
true

it.containsAll(Constant.Libraries.PADDLE_OCR) -> isRequiredPaddleOCR = true
it.containsAll(Constant.Libraries.TESSERACT_OCR) -> isRequiredTesseractOCR = true
it.containsAll(Constant.Libraries.P7ZIP) -> isRequired7Zip = true
it.containsAll(Constant.Libraries.OPEN_CV) -> isRequiredOpenCv = true
}
isRequiredMlKitOCRLibs = it.containsAll(Constant.Libraries.GOOGLE_ML_KIT_OCR)
isRequiredPaddleOCR = it.containsAll(Constant.Libraries.PADDLE_OCR)
isRequiredTesseractOCR = it.containsAll(Constant.Libraries.TESSERACT_OCR)
isRequired7Zip = it.containsAll(Constant.Libraries.P7ZIP)
isRequiredOpenCv = it.containsAll(Constant.Libraries.OPEN_CV)
}
projectConfig.assets.forEach {
if (it.form == "${Constant.Protocol.ASSETS}${Constant.Assets.GOOGLE_ML_KIT_OCR}") {
Expand All @@ -428,18 +416,23 @@ class BuildViewModel(private val app: Application, private var source: String) :
isRequiredDefaultOcrModelData = true
}
}

isRequiredMlKitOCR = isRequiredMlKitOCRLibs && isRequiredMlKitOCRModels
}

private fun setPermissions(projectConfig: ProjectConfig) {
projectConfig.launchConfig.permissions.forEach {
when (it) {
Constant.Permissions.ACCESSIBILITY_SERVICES -> isRequiredAccessibilityServices =
true
Constant.Permissions.ACCESSIBILITY_SERVICES -> {
isRequiredAccessibilityServices = true
}

Constant.Permissions.BACKGROUND_START -> isRequiredBackgroundStart = true
Constant.Permissions.DRAW_OVERLAY -> isRequiredDrawOverlay = true
Constant.Permissions.BACKGROUND_START -> {
isRequiredBackgroundStart = true
}

Constant.Permissions.DRAW_OVERLAY -> {
isRequiredDrawOverlay = true
}
}
}
}
Expand Down

0 comments on commit 7e4e358

Please sign in to comment.