This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"$data": {
|
||||
"v6.7.0": {
|
||||
"released_date": "2025/06/23",
|
||||
"released_date": "2025/06/28",
|
||||
"feature": [
|
||||
"zip 模块, 用于文件压缩与解压缩操作 (Ref to [Auto.js Pro](https://g.pro.autojs.org/)) (参阅 项目文档 > [Zip](https://docs.autojs6.com/#/zip))",
|
||||
"mediainfo 模块, 用于查看媒体文件的详细信息 (参阅 项目文档 > [媒体信息](https://docs.autojs6.com/#/mediainfo))",
|
||||
@@ -13,12 +13,15 @@
|
||||
"images 部分相关方法出现异常时 oneShot 标记功能失效的问题 _[`issue #372`](http://issues.autojs6.com/372)_",
|
||||
"Android 10 UiObject#child 方法可能出现 ArrayIndexOutOfBoundsException 异常的问题 _[`issue #416`](http://issues.autojs6.com/416)_",
|
||||
"打包应用无法正常使用 Paddle OCR 与 Rapid OCR 功能的问题",
|
||||
"版本历史页面部分系统因字体差别导致统计数据显示不完整的问题"
|
||||
"版本历史页面部分系统因字体差别导致统计数据显示不完整的问题",
|
||||
"ErrorDialogActivity 可能无法正常启动的问题 _[`issue #414`](http://issues.autojs6.com/414)_ _[`issue #340`](http://issues.autojs6.com/340#issuecomment-2973485826)_",
|
||||
"错误报告页面复制详细信息功能失效的问题"
|
||||
],
|
||||
"improvement": [
|
||||
"http 模块相关方法支持不安全选项参数 (isInsecure/insecure), 用于忽略证书相关异常 _[`issue #417`](http://issues.autojs6.com/417)_",
|
||||
"android.graphics.Paint#setColor 支持正常解析 ColorInt/ColorHex/ColorName 等颜色参数",
|
||||
"内置模块相关方法实参类型的异常消息增加类型摘要信息"
|
||||
"内置模块相关方法实参类型的异常消息增加类型摘要信息",
|
||||
"错误报告页面支持双指缩放调整字体大小并添加常用功能按钮"
|
||||
],
|
||||
"dependency": [
|
||||
"附加 Androidx Core (KTX) 版本 1.16.0",
|
||||
|
||||
@@ -3,6 +3,7 @@ package org.autojs.autojs.runtime.api.augment.ocr
|
||||
import org.autojs.autojs.annotation.RhinoRuntimeFunctionInterface
|
||||
import org.autojs.autojs.core.image.ImageWrapper
|
||||
import org.autojs.autojs.extension.AnyExtensions.isJsNullish
|
||||
import org.autojs.autojs.extension.AnyExtensions.isJsString
|
||||
import org.autojs.autojs.extension.AnyExtensions.jsBrief
|
||||
import org.autojs.autojs.extension.AnyExtensions.jsSpecies
|
||||
import org.autojs.autojs.extension.ArrayExtensions.toNativeArray
|
||||
@@ -14,6 +15,7 @@ import org.autojs.autojs.runtime.api.augment.Invokable
|
||||
import org.autojs.autojs.runtime.api.augment.images.Images
|
||||
import org.autojs.autojs.runtime.exception.WrappedIllegalArgumentException
|
||||
import org.autojs.autojs.runtime.exception.ShouldNeverHappenException
|
||||
import org.autojs.autojs.util.RhinoUtils
|
||||
import org.autojs.autojs.util.RhinoUtils.UNDEFINED
|
||||
import org.autojs.autojs.util.RhinoUtils.newNativeArray
|
||||
import org.autojs.autojs.util.RhinoUtils.newNativeObject
|
||||
@@ -58,13 +60,12 @@ class Ocr(private val scriptRuntime: ScriptRuntime) : Augmentable(scriptRuntime)
|
||||
scriptRuntime.augmentedOcrMLKit -> OcrMode.MLKIT
|
||||
scriptRuntime.augmentedOcrPaddle -> OcrMode.PADDLE
|
||||
scriptRuntime.augmentedOcrRapid -> OcrMode.RAPID
|
||||
is String -> when (mode.lowercase()) {
|
||||
else -> when (RhinoUtils.coerceStringLowercase(mode, "")) {
|
||||
OcrMode.MLKIT.value -> OcrMode.MLKIT
|
||||
OcrMode.PADDLE.value -> OcrMode.PADDLE
|
||||
OcrMode.RAPID.value -> OcrMode.RAPID
|
||||
else -> null
|
||||
}
|
||||
else -> null
|
||||
} ?: OcrMode.MLKIT.also { throw WrappedIllegalArgumentException("Unknown mode ${mode.jsSpecies()} for ocr.tap") }
|
||||
return@ensureArgumentsOnlyOne UNDEFINED
|
||||
}
|
||||
@@ -75,7 +76,7 @@ class Ocr(private val scriptRuntime: ScriptRuntime) : Augmentable(scriptRuntime)
|
||||
val (arg0, arg1, arg2) = argList
|
||||
|
||||
when {
|
||||
arg0 is String -> {
|
||||
arg0.isJsString() -> {
|
||||
|
||||
// @Signature
|
||||
// recognizeText(imgPath: string, options?: DetectOptionsMLKit | DetectOptionsPaddle): string[];
|
||||
@@ -153,7 +154,7 @@ class Ocr(private val scriptRuntime: ScriptRuntime) : Augmentable(scriptRuntime)
|
||||
val (arg0, arg1, arg2) = argList
|
||||
|
||||
when {
|
||||
arg0 is String -> {
|
||||
arg0.isJsString() -> {
|
||||
|
||||
// @Signature
|
||||
// detect(imgPath: string, options?: DetectOptionsMLKit | DetectOptionsPaddle): org.autojs.autojs.runtime.api.OcrResult[];
|
||||
|
||||
@@ -1,12 +1,15 @@
|
||||
package org.autojs.autojs.runtime.api.augment.util
|
||||
|
||||
import android.os.Build
|
||||
import org.autojs.autojs.runtime.exception.WrappedIllegalArgumentException
|
||||
import org.autojs.autojs.util.RhinoUtils.newNativeObject
|
||||
|
||||
object VersionCodesInfo {
|
||||
|
||||
// @UpTo Jan 2, 2025.
|
||||
// @Updated by SuperMonster003 on Jun 26, 2025.
|
||||
// @Reference https://en.wikipedia.org/wiki/Android_version_history
|
||||
private val raw = mutableMapOf(
|
||||
"BAKLAVA" to listOf("Android 16", "Baklava", "16", "36", "Q2, 2025"),
|
||||
"BAKLAVA" to listOf("Android 16", "Baklava", "16", "36", "Jun 10, 2025"),
|
||||
"VANILLA_ICE_CREAM" to listOf("Android 15", "Vanilla Ice Cream", "15", "35", "September 3, 2024"),
|
||||
"UPSIDE_DOWN_CAKE" to listOf("Android 14", "Upside Down Cake", "14", "34", "October 4, 2023"),
|
||||
"TIRAMISU" to listOf("Android 13", "Tiramisu", "13", "33", "August 15, 2022"),
|
||||
@@ -57,4 +60,19 @@ object VersionCodesInfo {
|
||||
}
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
@JvmOverloads
|
||||
fun briefOfVersionInt(versionInt: Int, isCompat: Boolean = false): String {
|
||||
return list.find { runCatching { it.apiLevel.toInt() }.getOrNull() == versionInt }?.let { info ->
|
||||
var result = "${if (isCompat) "API Lv." else "Android API Level "}${info.apiLevel}"
|
||||
info.releaseName.takeIf { it.isNotBlank() }?.let { result += " ($it)" }
|
||||
info.internalCodename.takeIf { it.isNotBlank() }?.let { result += " [$it]" }
|
||||
result
|
||||
} ?: throw WrappedIllegalArgumentException("$versionInt is an invalid or unknown version int")
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
@JvmOverloads
|
||||
fun briefOfCurrentVersionInt(isCompat: Boolean = false) = briefOfVersionInt(Build.VERSION.SDK_INT, isCompat)
|
||||
|
||||
}
|
||||
|
||||
@@ -2,7 +2,6 @@ package org.autojs.autojs.ui.error;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.view.Window;
|
||||
import com.afollestad.materialdialogs.MaterialDialog;
|
||||
import org.autojs.autojs.extension.MaterialDialogExtensions;
|
||||
import org.autojs.autojs.ui.BaseActivity;
|
||||
@@ -21,7 +20,6 @@ public class ErrorDialogActivity extends BaseActivity {
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
requestWindowFeature(Window.FEATURE_NO_TITLE);
|
||||
|
||||
// Get extras from intent
|
||||
Intent intent = getIntent();
|
||||
|
||||
@@ -1,21 +1,16 @@
|
||||
package org.autojs.autojs.ui.error
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.content.ClipData
|
||||
import android.content.ClipboardManager
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.os.Build
|
||||
import android.os.Bundle
|
||||
import android.util.Log
|
||||
import com.afollestad.materialdialogs.MaterialDialog
|
||||
import org.autojs.autojs.app.GlobalAppContext
|
||||
import org.autojs.autojs.runtime.api.augment.util.VersionCodesInfo.briefOfCurrentVersionInt
|
||||
import org.autojs.autojs.ui.BaseActivity
|
||||
import org.autojs.autojs.ui.main.MainActivity
|
||||
import org.autojs.autojs.util.ClipboardUtils
|
||||
import org.autojs.autojs.util.ViewUtils
|
||||
import org.autojs.autojs6.BuildConfig
|
||||
import org.autojs.autojs6.R
|
||||
import org.autojs.autojs6.databinding.ActivityErrorReportBinding
|
||||
import java.util.*
|
||||
|
||||
/**
|
||||
* Created by Stardust on Feb 2, 2017.
|
||||
@@ -23,88 +18,62 @@ import java.util.*
|
||||
*/
|
||||
class ErrorReportActivity : BaseActivity() {
|
||||
|
||||
private lateinit var errorMessage: String
|
||||
|
||||
@SuppressLint("ClickableViewAccessibility")
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
try {
|
||||
super.onCreate(savedInstanceState)
|
||||
ActivityErrorReportBinding.inflate(layoutInflater).also { binding ->
|
||||
setContentView(binding.root)
|
||||
binding.toolbar.apply {
|
||||
title = getString(R.string.text_error_report)
|
||||
setSupportActionBar(this)
|
||||
}
|
||||
supportActionBar?.setHomeButtonEnabled(false)
|
||||
super.onCreate(savedInstanceState)
|
||||
|
||||
val msg = buildString {
|
||||
appendLine("${getString(R.string.app_name)} ${BuildConfig.VERSION_NAME} (${BuildConfig.VERSION_CODE})")
|
||||
appendLine(briefOfCurrentVersionInt(true))
|
||||
intent.getStringExtra("message")?.let { appendLine().appendLine(it.trimEnd()) }
|
||||
intent.getStringExtra("error")?.let { appendLine().appendLine(it.trimEnd()) }
|
||||
}.also { errorMessage = it }
|
||||
|
||||
val binding = ActivityErrorReportBinding.inflate(layoutInflater).also {
|
||||
setContentView(it.root)
|
||||
it.toolbar.apply {
|
||||
title = getString(R.string.text_app_crashed)
|
||||
setSupportActionBar(this)
|
||||
}
|
||||
} catch (t: Throwable) {
|
||||
t.message?.let { msg ->
|
||||
copyToClip(msg)
|
||||
ViewUtils.showToast(this, msg)
|
||||
}
|
||||
Log.e(TAG, t.message ?: "", t)
|
||||
exitAfter(3000)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
|
||||
val message = intent.getStringExtra("message")
|
||||
val errorDetail = intent.getStringExtra("error")
|
||||
|
||||
val errorMessage = buildString {
|
||||
appendLine("Version: ${BuildConfig.VERSION_CODE}")
|
||||
appendLine("Android: ${Build.VERSION.SDK_INT}")
|
||||
message?.let { appendLine().appendLine(it) }
|
||||
errorDetail?.let { appendLine().appendLine(it) }
|
||||
supportActionBar?.setHomeButtonEnabled(false)
|
||||
}
|
||||
|
||||
MaterialDialog.Builder(this)
|
||||
.title(R.string.text_app_crashed)
|
||||
.content(R.string.crash_feedback)
|
||||
.neutralText(R.string.text_copy_debug_info)
|
||||
.neutralColorRes(R.color.dialog_button_hint)
|
||||
.onNegative { _, _ ->
|
||||
copyToClip(errorMessage)
|
||||
exitAfter(1500)
|
||||
val textView = binding.errorMessage.apply { text = msg }
|
||||
|
||||
val textSizeScaleDetector = ViewUtils.TextSizeScaleDetector(this, textView)
|
||||
|
||||
binding.errorMessageContainer.setOnTouchListener { _, event ->
|
||||
when (event.pointerCount) {
|
||||
2 -> false.also { textSizeScaleDetector.onTouchEvent(event) }
|
||||
else -> super.onTouchEvent(event)
|
||||
}
|
||||
.positiveText(R.string.text_exit)
|
||||
.positiveColorRes(R.color.dialog_button_failure)
|
||||
.onPositive { _, _ -> exit() }
|
||||
.cancelable(false)
|
||||
.show()
|
||||
}
|
||||
}
|
||||
|
||||
private fun exitAfter(delay: Int) {
|
||||
Timer().schedule(object : TimerTask() {
|
||||
override fun run() = exit()
|
||||
}, delay.toLong())
|
||||
}
|
||||
binding.copy.setOnClickListener { copy() }
|
||||
binding.restart.setOnClickListener { restart() }
|
||||
binding.exit.setOnClickListener { exit() }
|
||||
|
||||
private fun copyToClip(text: String) {
|
||||
val clipboardManager = getSystemService(CLIPBOARD_SERVICE) as ClipboardManager
|
||||
clipboardManager.setPrimaryClip(ClipData.newPlainText("Debug", text))
|
||||
ViewUtils.showToast(this, R.string.text_already_copied_to_clip)
|
||||
savedInstanceState ?: copy()
|
||||
}
|
||||
|
||||
@Deprecated("Deprecated in Java")
|
||||
@SuppressLint("MissingSuperCall")
|
||||
override fun onBackPressed() = exit()
|
||||
|
||||
private fun copy() = ClipboardUtils.setClip(this, errorMessage)
|
||||
|
||||
private fun exit() = finishAffinity()
|
||||
|
||||
companion object {
|
||||
|
||||
private val TAG: String = ErrorReportActivity::class.java.simpleName
|
||||
|
||||
@JvmStatic
|
||||
@JvmOverloads
|
||||
fun test(context: Context = GlobalAppContext.get()) {
|
||||
Intent(context, ErrorReportActivity::class.java)
|
||||
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
|
||||
.putExtra("message", "Test message\nSecond line")
|
||||
.putExtra("error", "Test error\nSecond line")
|
||||
.let { context.startActivity(it) }
|
||||
private fun restart() {
|
||||
val intent = packageManager.getLaunchIntentForPackage(packageName)?.apply {
|
||||
addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
|
||||
} ?: Intent(this, MainActivity::class.java).apply {
|
||||
addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_NEW_TASK)
|
||||
}
|
||||
|
||||
startActivity(intent)
|
||||
exit()
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -6,9 +6,7 @@ import android.content.ClipboardManager
|
||||
import android.content.res.ColorStateList
|
||||
import android.os.Bundle
|
||||
import android.text.SpannableStringBuilder
|
||||
import android.util.TypedValue
|
||||
import android.view.KeyEvent
|
||||
import android.view.ScaleGestureDetector
|
||||
import android.view.View
|
||||
import android.widget.TextView
|
||||
import com.google.android.material.floatingactionbutton.FloatingActionButton
|
||||
@@ -24,11 +22,9 @@ import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.sync.Mutex
|
||||
import kotlinx.coroutines.sync.withLock
|
||||
import org.autojs.autojs.ui.BaseActivity
|
||||
import org.autojs.autojs.util.DisplayUtils
|
||||
import org.autojs.autojs.util.ViewUtils
|
||||
import org.autojs.autojs6.R
|
||||
import org.autojs.autojs6.databinding.ActivityDisplayScrollableContentBinding
|
||||
import kotlin.math.floor
|
||||
|
||||
abstract class BaseDisplayContentActivity : BaseActivity() {
|
||||
|
||||
@@ -49,12 +45,6 @@ abstract class BaseDisplayContentActivity : BaseActivity() {
|
||||
private var mIsContentLoaded = false
|
||||
private val mTextUpdateMutex = Mutex()
|
||||
|
||||
protected val minTextSize = 4.0f
|
||||
protected val maxTextSize = 72.0f
|
||||
|
||||
private var mLastScaleFactor = 1.0f
|
||||
private var mLastTextSize = 0.0f
|
||||
|
||||
@SuppressLint("ClickableViewAccessibility")
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
@@ -73,7 +63,7 @@ abstract class BaseDisplayContentActivity : BaseActivity() {
|
||||
}
|
||||
}
|
||||
|
||||
val scaleGestureDetector = ScaleGestureDetector(this, ScaleListener(internalTextView))
|
||||
val scaleGestureDetector = ViewUtils.TextSizeScaleDetector(this, internalTextView)
|
||||
|
||||
val innerScrollView = binding.innerScrollView.also {
|
||||
ViewUtils.excludePaddingClippableViewFromBottomNavigationBar(it)
|
||||
@@ -264,35 +254,4 @@ abstract class BaseDisplayContentActivity : BaseActivity() {
|
||||
ViewUtils.showSnack(internalTextView, R.string.text_already_copied_to_clip, true)
|
||||
}
|
||||
|
||||
// Scaling & Text Size Handling
|
||||
protected inner class ScaleListener(private val textView: TextView) : ScaleGestureDetector.SimpleOnScaleGestureListener() {
|
||||
|
||||
override fun onScale(detector: ScaleGestureDetector): Boolean {
|
||||
val currentFactor = (floor((detector.scaleFactor * 10).toDouble()) / 10).toFloat()
|
||||
if (mLastTextSize <= 0) {
|
||||
mLastTextSize = getTextSize()
|
||||
}
|
||||
if (currentFactor > 0 && mLastScaleFactor != currentFactor) {
|
||||
val currentTextSize: Float = mLastTextSize + (if (currentFactor > mLastScaleFactor) 1 else -1)
|
||||
mLastTextSize = currentTextSize.coerceIn(minTextSize, maxTextSize)
|
||||
setTextSize(mLastTextSize)
|
||||
mLastScaleFactor = currentFactor
|
||||
}
|
||||
return super.onScale(detector)
|
||||
}
|
||||
|
||||
override fun onScaleEnd(detector: ScaleGestureDetector) {
|
||||
mLastScaleFactor = 1.0f
|
||||
super.onScaleEnd(detector)
|
||||
}
|
||||
|
||||
fun setTextSize(size: Float) {
|
||||
mLastTextSize = size
|
||||
textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, size)
|
||||
}
|
||||
|
||||
fun getTextSize(): Float = DisplayUtils.pxToSp(textView.textSize)
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -21,6 +21,7 @@ import android.util.DisplayMetrics
|
||||
import android.util.TypedValue
|
||||
import android.view.Gravity
|
||||
import android.view.Menu
|
||||
import android.view.ScaleGestureDetector
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.view.ViewGroup.LayoutParams.MATCH_PARENT
|
||||
@@ -32,6 +33,7 @@ import android.view.inputmethod.InputMethodManager
|
||||
import android.widget.EditText
|
||||
import android.widget.FrameLayout
|
||||
import android.widget.ImageView
|
||||
import android.widget.TextView
|
||||
import android.widget.Toast
|
||||
import androidx.annotation.ColorInt
|
||||
import androidx.annotation.IdRes
|
||||
@@ -52,6 +54,7 @@ import org.autojs.autojs.core.pref.Pref
|
||||
import org.autojs.autojs.theme.ThemeColorManager
|
||||
import org.autojs.autojs.util.StringUtils.key
|
||||
import org.autojs.autojs6.R
|
||||
import kotlin.math.floor
|
||||
import kotlin.math.roundToInt
|
||||
|
||||
/**
|
||||
@@ -700,4 +703,64 @@ object ViewUtils {
|
||||
|
||||
}
|
||||
|
||||
@SuppressLint("ClickableViewAccessibility")
|
||||
class TextSizeScaleDetector(context: Context, textView: TextView) :ScaleGestureDetector(context, TextSizeScaleListener(textView)) {
|
||||
|
||||
init {
|
||||
textView.apply {
|
||||
setTextIsSelectable(true)
|
||||
isLongClickable = true
|
||||
isFocusableInTouchMode = true
|
||||
setOnTouchListener { v, event ->
|
||||
this@TextSizeScaleDetector.onTouchEvent(event)
|
||||
when {
|
||||
event.pointerCount > 1 -> {
|
||||
v.parent?.requestDisallowInterceptTouchEvent(true)
|
||||
true
|
||||
}
|
||||
else -> false
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// Scaling & Text Size Handling
|
||||
private class TextSizeScaleListener(private val textView: TextView) : ScaleGestureDetector.SimpleOnScaleGestureListener() {
|
||||
|
||||
private val mMinTextSize = 4.0f
|
||||
private val mMaxTextSize = 72.0f
|
||||
|
||||
private var mLastScaleFactor = 1.0f
|
||||
private var mLastTextSize = 0.0f
|
||||
|
||||
override fun onScale(detector: ScaleGestureDetector): Boolean {
|
||||
val currentFactor = (floor((detector.scaleFactor * 10).toDouble()) / 10).toFloat()
|
||||
if (mLastTextSize <= 0) {
|
||||
mLastTextSize = getTextSize()
|
||||
}
|
||||
if (currentFactor > 0 && mLastScaleFactor != currentFactor) {
|
||||
val currentTextSize: Float = mLastTextSize + (if (currentFactor > mLastScaleFactor) 1 else -1)
|
||||
mLastTextSize = currentTextSize.coerceIn(mMinTextSize, mMaxTextSize)
|
||||
setTextSize(mLastTextSize)
|
||||
mLastScaleFactor = currentFactor
|
||||
}
|
||||
return super.onScale(detector)
|
||||
}
|
||||
|
||||
override fun onScaleEnd(detector: ScaleGestureDetector) {
|
||||
mLastScaleFactor = 1.0f
|
||||
super.onScaleEnd(detector)
|
||||
}
|
||||
|
||||
fun setTextSize(size: Float) {
|
||||
mLastTextSize = size
|
||||
textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, size)
|
||||
}
|
||||
|
||||
fun getTextSize(): Float = DisplayUtils.pxToSp(textView.textSize)
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,15 +1,16 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
<LinearLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:fitsSystemWindows="true"
|
||||
android:orientation="vertical">
|
||||
|
||||
<com.google.android.material.appbar.AppBarLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:fitsSystemWindows="true"
|
||||
app:theme="@style/AppTheme.AppBarOverlay">
|
||||
|
||||
<org.autojs.autojs.theme.widget.ThemeColorToolbar
|
||||
@@ -21,14 +22,130 @@
|
||||
|
||||
</com.google.android.material.appbar.AppBarLayout>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/error"
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:padding="16dp"
|
||||
android:scrollbars="vertical"
|
||||
android:textColor="@android:color/secondary_text_light"
|
||||
android:textSize="16sp"
|
||||
tools:text="@string/text_error" />
|
||||
android:orientation="vertical">
|
||||
|
||||
<ScrollView
|
||||
android:id="@+id/error_message_container"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0dp"
|
||||
android:layout_weight="1">
|
||||
|
||||
<org.autojs.autojs.ui.widget.SelectableTextView
|
||||
android:id="@+id/error_message"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:padding="16dp"
|
||||
android:scrollbars="vertical"
|
||||
android:textColor="@color/day_night_full"
|
||||
android:textSize="16sp"
|
||||
tools:text="@string/text_error" />
|
||||
|
||||
</ScrollView>
|
||||
|
||||
<View
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="1dp"
|
||||
android:background="@color/day_night_alpha_20" />
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="41dp"
|
||||
android:layout_gravity="center_horizontal"
|
||||
android:baselineAligned="false">
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/copy"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="1"
|
||||
android:background="?selectableItemBackground"
|
||||
android:gravity="center"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<ImageView
|
||||
android:layout_width="16dp"
|
||||
android:layout_height="16dp"
|
||||
android:layout_gravity="center"
|
||||
android:layout_marginEnd="10dp"
|
||||
android:src="@drawable/ic_content_copy_small_black_48dp"
|
||||
app:tint="?android:textColorPrimary"
|
||||
tools:ignore="ContentDescription" />
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:layout_marginEnd="4dp"
|
||||
android:gravity="center"
|
||||
android:text="@string/text_copy"
|
||||
android:textColor="?android:textColorPrimary"
|
||||
android:textSize="15sp" />
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/restart"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="1"
|
||||
android:background="?selectableItemBackground"
|
||||
android:gravity="center"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<ImageView
|
||||
android:layout_width="16dp"
|
||||
android:layout_height="16dp"
|
||||
android:layout_gravity="center"
|
||||
android:layout_marginEnd="10dp"
|
||||
android:src="@drawable/ic_refresh_white_24dp"
|
||||
app:tint="?android:textColorPrimary"
|
||||
tools:ignore="ContentDescription" />
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:layout_marginEnd="4dp"
|
||||
android:gravity="center"
|
||||
android:text="@string/text_restart"
|
||||
android:textColor="?android:textColorPrimary"
|
||||
android:textSize="15sp" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/exit"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="1"
|
||||
android:background="?selectableItemBackground"
|
||||
android:gravity="center"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<ImageView
|
||||
android:layout_width="16dp"
|
||||
android:layout_height="16dp"
|
||||
android:layout_gravity="center"
|
||||
android:layout_marginEnd="10dp"
|
||||
android:src="@drawable/ic_ali_exit"
|
||||
app:tint="?android:textColorPrimary"
|
||||
tools:ignore="ContentDescription" />
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:layout_marginEnd="4dp"
|
||||
android:textColor="?android:textColorPrimary"
|
||||
android:gravity="center"
|
||||
android:text="@string/text_exit"
|
||||
android:textSize="15sp" />
|
||||
</LinearLayout>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</LinearLayout>
|
||||
@@ -83,7 +83,7 @@
|
||||
android:layout_gravity="center_vertical"
|
||||
android:layout_marginEnd="4dp"
|
||||
android:gravity="center"
|
||||
android:text="@string/text_restart_app"
|
||||
android:text="@string/text_restart"
|
||||
android:textColor="?android:textColorPrimary"
|
||||
android:textSize="15sp" />
|
||||
|
||||
|
||||
@@ -910,7 +910,7 @@
|
||||
<string name="text_reset_succeed">نجحت إعادة تعيين</string>
|
||||
<string name="text_reset_to_initial_content">إعادة تعيين في البداية</string>
|
||||
<string name="text_reset_to_initial_content_only_for_assets">إعادة التعيين هي فقط للعينات</string>
|
||||
<string name="text_restart_app">إعادة بدء</string>
|
||||
<string name="text_restart">إعادة بدء</string>
|
||||
<string name="text_result">نتيجة</string>
|
||||
<string name="text_revoke_autojs6_access_in_shizuku_app">قم بإلغاء الوصول إلى AutoJs6 في تطبيق Shizuku</string>
|
||||
<string name="text_root_mode_title">فحص الجذر مجموعة القوة</string>
|
||||
|
||||
@@ -905,7 +905,7 @@
|
||||
<string name="text_reset_succeed">Reset succeeded</string>
|
||||
<string name="text_reset_to_initial_content">Reset initially</string>
|
||||
<string name="text_reset_to_initial_content_only_for_assets">Reset is only for samples</string>
|
||||
<string name="text_restart_app">Restart</string>
|
||||
<string name="text_restart">Restart</string>
|
||||
<string name="text_result">Result</string>
|
||||
<string name="text_revoke_autojs6_access_in_shizuku_app">Revoke AutoJs6 access in Shizuku app</string>
|
||||
<string name="text_root_mode_title">Force set root check</string>
|
||||
|
||||
@@ -908,7 +908,7 @@
|
||||
<string name="text_reset_succeed">Restablecer con éxito</string>
|
||||
<string name="text_reset_to_initial_content">Restablecer inicialmente</string>
|
||||
<string name="text_reset_to_initial_content_only_for_assets">El restablecimiento es sólo para las muestras</string>
|
||||
<string name="text_restart_app">Reiniciar</string>
|
||||
<string name="text_restart">Reiniciar</string>
|
||||
<string name="text_result">Resultado</string>
|
||||
<string name="text_revoke_autojs6_access_in_shizuku_app">Revocar privilegios de AutoJs6 en una aplicación Shizuku</string>
|
||||
<string name="text_root_mode_title">Forzar la comprobación de root</string>
|
||||
|
||||
@@ -908,7 +908,7 @@
|
||||
<string name="text_reset_succeed">Réinitialisation réussie</string>
|
||||
<string name="text_reset_to_initial_content">Réinitialisation initiale</string>
|
||||
<string name="text_reset_to_initial_content_only_for_assets">Reset n\'est que pour les échantillons</string>
|
||||
<string name="text_restart_app">Redémarrer</string>
|
||||
<string name="text_restart">Redémarrer</string>
|
||||
<string name="text_result">Résultat</string>
|
||||
<string name="text_revoke_autojs6_access_in_shizuku_app">Révoquer les privilèges AutoJs6 dans une application Shizuku</string>
|
||||
<string name="text_root_mode_title">Force set root check</string>
|
||||
|
||||
@@ -909,7 +909,7 @@
|
||||
<string name="text_reset_succeed">リセット成功</string>
|
||||
<string name="text_reset_to_initial_content">初期リセット</string>
|
||||
<string name="text_reset_to_initial_content_only_for_assets">リセットはサンプルのみ</string>
|
||||
<string name="text_restart_app">再起動</string>
|
||||
<string name="text_restart">再起動</string>
|
||||
<string name="text_result">結果</string>
|
||||
<string name="text_revoke_autojs6_access_in_shizuku_app">Shizuku アプリケーションで AutoJs6 権限を取り消す</string>
|
||||
<string name="text_root_mode_title">強制的に root にするチェック</string>
|
||||
|
||||
@@ -910,7 +910,7 @@
|
||||
<string name="text_reset_succeed">재설정이 성공했습니다</string>
|
||||
<string name="text_reset_to_initial_content">처음에 재설정하십시오</string>
|
||||
<string name="text_reset_to_initial_content_only_for_assets">재설정은 샘플에만 해당됩니다</string>
|
||||
<string name="text_restart_app">재시작</string>
|
||||
<string name="text_restart">재시작</string>
|
||||
<string name="text_result">결과</string>
|
||||
<string name="text_revoke_autojs6_access_in_shizuku_app">Shizuku 애플리케이션에서 AutoJs6 권한 취소하기</string>
|
||||
<string name="text_root_mode_title">강제 설정 루트 검사</string>
|
||||
|
||||
@@ -908,7 +908,7 @@
|
||||
<string name="text_reset_succeed">Сброс выполнен успешно</string>
|
||||
<string name="text_reset_to_initial_content">Сброс первоначально</string>
|
||||
<string name="text_reset_to_initial_content_only_for_assets">Сброс выполняется только для образцов</string>
|
||||
<string name="text_restart_app">Перезапустить</string>
|
||||
<string name="text_restart">Перезапустить</string>
|
||||
<string name="text_result">Результат</string>
|
||||
<string name="text_revoke_autojs6_access_in_shizuku_app">Отмена привилегий AutoJs6 в приложении Shizuku</string>
|
||||
<string name="text_root_mode_title">Проверка принудительной установки root</string>
|
||||
|
||||
@@ -906,7 +906,7 @@
|
||||
<string name="text_reset_succeed">重置成功</string>
|
||||
<string name="text_reset_to_initial_content">重置為初始內容</string>
|
||||
<string name="text_reset_to_initial_content_only_for_assets">只能重置示例代碼文件</string>
|
||||
<string name="text_restart_app">重啓</string>
|
||||
<string name="text_restart">重啓</string>
|
||||
<string name="text_result">結果</string>
|
||||
<string name="text_revoke_autojs6_access_in_shizuku_app">在 Shizuku 應用中撤銷 AutoJs6 權限</string>
|
||||
<string name="text_root_mode_title">強制 Root 權限檢查</string>
|
||||
|
||||
@@ -906,7 +906,7 @@
|
||||
<string name="text_reset_succeed">重置成功</string>
|
||||
<string name="text_reset_to_initial_content">重置為初始內容</string>
|
||||
<string name="text_reset_to_initial_content_only_for_assets">只能重置示例程式碼檔案</string>
|
||||
<string name="text_restart_app">重啟</string>
|
||||
<string name="text_restart">重啟</string>
|
||||
<string name="text_result">結果</string>
|
||||
<string name="text_revoke_autojs6_access_in_shizuku_app">在 Shizuku 應用中撤銷 AutoJs6 許可權</string>
|
||||
<string name="text_root_mode_title">強制 Root 許可權檢查</string>
|
||||
|
||||
@@ -906,7 +906,7 @@
|
||||
<string name="text_reset_succeed">重置成功</string>
|
||||
<string name="text_reset_to_initial_content">重置为初始内容</string>
|
||||
<string name="text_reset_to_initial_content_only_for_assets">只能重置示例代码文件</string>
|
||||
<string name="text_restart_app">重启</string>
|
||||
<string name="text_restart">重启</string>
|
||||
<string name="text_result">结果</string>
|
||||
<string name="text_revoke_autojs6_access_in_shizuku_app">在 Shizuku 应用中撤销 AutoJs6 权限</string>
|
||||
<string name="text_root_mode_title">强制 Root 权限检查</string>
|
||||
|
||||
@@ -1136,7 +1136,7 @@
|
||||
<string name="text_reset_succeed">Reset succeeded</string>
|
||||
<string name="text_reset_to_initial_content">Reset initially</string>
|
||||
<string name="text_reset_to_initial_content_only_for_assets">Reset is only for samples</string>
|
||||
<string name="text_restart_app">Restart</string>
|
||||
<string name="text_restart">Restart</string>
|
||||
<string name="text_result">Result</string>
|
||||
<string name="text_revoke_autojs6_access_in_shizuku_app">Revoke AutoJs6 access in Shizuku app</string>
|
||||
<string name="text_root_mode_title">Force set root check</string>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#Mon Jun 23 16:34:06 CST 2025
|
||||
BUILD_TIME=1750667646268
|
||||
#Sat Jun 28 19:48:58 CST 2025
|
||||
BUILD_TIME=1751111338507
|
||||
COMPILE_SDK_VERSION=35
|
||||
IMAGE_QUANT_CMAKE_VERSION=3.22.1
|
||||
IMAGE_QUANT_NDK_VERSION=26.1.10909125
|
||||
@@ -19,6 +19,6 @@ RAPID_OCR_OPENCV_MOBILE_LABEL_VERSION=13
|
||||
RAPID_OCR_OPENCV_MOBILE_VERSION=4.5.3
|
||||
TARGET_SDK_VERSION=35
|
||||
TARGET_SDK_VERSION_INRT=29
|
||||
VERSION_BUILD=3302
|
||||
VERSION_BUILD=3308
|
||||
VERSION_NAME=6.7.0 Alpha2
|
||||
VSCODE_EXT_REQUIRED_VERSION=1.0.8
|
||||
|
||||
Reference in New Issue
Block a user