diff --git a/.changelog/lang_zh-Hans.json b/.changelog/lang_zh-Hans.json
index 3aa2a0ad..8814d411 100644
--- a/.changelog/lang_zh-Hans.json
+++ b/.changelog/lang_zh-Hans.json
@@ -5,7 +5,8 @@
"improvement": [
"精简打包应用模板 APK 文件大小",
"打包页面支持 Pinyin 库选项",
- "APK 文件类型增加文件大小与签名方案信息"
+ "APK 文件类型信息对话框增加文件大小与签名方案信息",
+ "APK 文件类型信息对话框增加点击监听器支持文本复制与应用详情跳转"
]
},
"v6.6.1": {
diff --git a/app/src/main/java/org/autojs/autojs/runtime/api/AppUtils.kt b/app/src/main/java/org/autojs/autojs/runtime/api/AppUtils.kt
index 3c28d6c2..d0043a8d 100644
--- a/app/src/main/java/org/autojs/autojs/runtime/api/AppUtils.kt
+++ b/app/src/main/java/org/autojs/autojs/runtime/api/AppUtils.kt
@@ -131,7 +131,7 @@ class AppUtils(context: Context, @get:ScriptInterface val fileProviderAuthority:
runCatching {
getPackageInfoCompat(mPackageManager, packageName!!, 0)
}.getOrElse {
- throw Exception(mContext.getString(R.string.error_app_not_installed, packageName))
+ throw Exception(mContext.getString(R.string.error_app_not_installed_with_name, packageName))
}
}
@@ -141,7 +141,7 @@ class AppUtils(context: Context, @get:ScriptInterface val fileProviderAuthority:
runCatching {
getPackageInfoCompat(mPackageManager, app.packageName, 0)
}.getOrElse {
- throw Exception("${mContext.getString(R.string.error_app_not_installed, app.getAppName())} [ ${app.packageName} ]")
+ throw Exception("${mContext.getString(R.string.error_app_not_installed_with_name, app.getAppName())} [ ${app.packageName} ]")
}
}
diff --git a/app/src/main/java/org/autojs/autojs/ui/main/scripts/ApkInfoDialogManager.kt b/app/src/main/java/org/autojs/autojs/ui/main/scripts/ApkInfoDialogManager.kt
index 83577ada..2058d3a3 100644
--- a/app/src/main/java/org/autojs/autojs/ui/main/scripts/ApkInfoDialogManager.kt
+++ b/app/src/main/java/org/autojs/autojs/ui/main/scripts/ApkInfoDialogManager.kt
@@ -5,6 +5,7 @@ import android.content.Context
import android.content.pm.PackageManager.GET_META_DATA
import android.os.Build
import android.view.LayoutInflater
+import android.view.View
import android.view.View.MeasureSpec.UNSPECIFIED
import android.view.ViewGroup
import android.widget.TextView
@@ -20,7 +21,9 @@ import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import org.autojs.autojs.pio.PFiles
import org.autojs.autojs.runtime.api.AppUtils
+import org.autojs.autojs.util.ClipboardUtils
import org.autojs.autojs.util.IntentUtils
+import org.autojs.autojs.util.ViewUtils
import org.autojs.autojs6.R
import org.autojs.autojs6.databinding.ApkFileInfoDialogListItemBinding
import java.io.File
@@ -85,29 +88,48 @@ object ApkInfoDialogManager {
// ! 优先处理 "已安装版本", 决定是否显示其内容视图.
// ! 这是唯一一个在显示对话框之前需要考虑的内容视图.
// ! 此时可立即安全显示对话框, 因所有内容视图均已完成占位.
- bindInstalledVersion(binding, context, packageName)
+ val installedPackageName: String? = packageName?.let { pkg ->
+ AppUtils.getInstalledVersionInfo(pkg)?.let { versionInfo ->
+ binding.installedVersionParent.isVisible = true
+ binding.installedVersionValue.setTextIfAbsent(dialog) { context.getString(R.string.text_full_version_info, versionInfo.versionName, versionInfo.versionCode) }
+ pkg /* returns as installedPackageName */
+ }
+ }
restoreEssentialViews(binding, context)
updateGuidelines(binding)
- packageName?.let { binding.packageNameValue.text = it }
- binding.deviceSdkValue.text = "${Build.VERSION.SDK_INT}"
- bindVersionInfo(binding, context, versionName, versionCode)
+ when {
+ versionName != null -> {
+ binding.versionPlaceholderLabel.text = context.getString(R.string.text_version)
+ binding.versionPlaceholderValue.setTextIfAbsent(dialog) { context.getString(R.string.text_full_version_info, versionName, versionCode) }
+ }
+ versionCode != null -> {
+ binding.versionPlaceholderLabel.text = context.getString(R.string.text_version_code)
+ binding.versionPlaceholderValue.setTextIfAbsent(dialog) { "$versionCode" }
+ }
+ else -> binding.versionPlaceholderValue.setTextIfAbsent(dialog) { null }
+ }
- binding.fileSizeValue.setTextIfAbsent { fileSize }
- binding.signatureSchemeValue.setTextIfAbsent { signatureScheme }
+ binding.packageNameValue.setTextIfAbsent(dialog) { packageName }
+ binding.deviceSdkValue.setTextIfAbsent(dialog) { "${Build.VERSION.SDK_INT}" }
+ binding.fileSizeValue.setTextIfAbsent(dialog) { fileSize }
+ binding.signatureSchemeValue.setTextIfAbsent(dialog) { signatureScheme }
dialog.setIcon(applicationInfo?.apply {
sourceDir = apkFilePath
publicSourceDir = apkFilePath
}?.loadIcon(packageManager) ?: context.getDrawable(R.drawable.ic_packaging))
+ dialog.makeSettingsLaunchable({ it.iconView }, installedPackageName)
+ dialog.makeTextCopyable { it.titleView }
+
val apkInfo = getApkInfo(apkFile)
- binding.labelNameValue.setTextIfAbsent { apkInfo?.label }
- binding.packageNameValue.setTextIfAbsent { apkInfo?.packageName }
- binding.minSdkValue.setTextIfAbsent { apkInfo?.minSdkVersion?.toString() }
- binding.targetSdkValue.setTextIfAbsent { apkInfo?.targetSdkVersion?.toString() }
+ binding.labelNameValue.setTextIfAbsent(dialog) { apkInfo?.label }
+ binding.packageNameValue.setTextIfAbsent(dialog) { apkInfo?.packageName }
+ binding.minSdkValue.setTextIfAbsent(dialog) { apkInfo?.minSdkVersion?.toString() }
+ binding.targetSdkValue.setTextIfAbsent(dialog) { apkInfo?.targetSdkVersion?.toString() }
if (apkInfo != null) dialog.getActionButton(DialogAction.NEUTRAL).let { neutralButton ->
neutralButton.isVisible = true
@@ -133,35 +155,35 @@ object ApkInfoDialogManager {
}.getOrNull()
}
- private fun bindVersionInfo(binding: ApkFileInfoDialogListItemBinding, context: Context, versionName: String?, versionCode: Long?) {
- when {
- versionName != null && versionCode != null -> {
- binding.versionPlaceholderLabel.text = context.getString(R.string.text_version)
- binding.versionPlaceholderValue.text = context.getString(R.string.text_full_version_info, versionName, versionCode)
- }
- else -> versionName?.let {
- binding.versionPlaceholderLabel.text = context.getString(R.string.text_version_name)
- binding.versionPlaceholderValue.text = it
- } ?: versionCode?.let {
- binding.versionPlaceholderLabel.text = context.getString(R.string.text_version_code)
- binding.versionPlaceholderValue.text = "$it"
- } ?: run { binding.versionPlaceholderValue.text = context.getString(R.string.text_unknown) }
+ private fun MaterialDialog.makeSettingsLaunchable(viewGetter: (dialog: MaterialDialog) -> View?, packageName: String?) {
+ viewGetter(this)?.setOnClickListener {
+ packageName?.let { pkg ->
+ IntentUtils.goToAppDetailSettings(this.context, pkg)
+ } ?: ViewUtils.showSnack(this.view, R.string.error_app_not_installed)
}
}
- private fun TextView.setTextIfAbsent(f: () -> String?) {
- if (this.text == context.getString(R.string.ellipsis_six)) {
- this.text = f.invoke() ?: context.getString(R.string.text_unknown)
+ private fun MaterialDialog.makeTextCopyable(textViewGetter: (dialog: MaterialDialog) -> TextView?) {
+ makeTextCopyable(textViewGetter(this))
+ }
+
+ private fun MaterialDialog.makeTextCopyable(textView: TextView?, textValue: String? = textView?.text?.toString()) {
+ if (textValue != null) {
+ val context = this.context
+ textView?.setOnClickListener {
+ ClipboardUtils.setClip(context, textValue)
+ ViewUtils.showSnack(this.view, "${context.getString(R.string.text_already_copied_to_clip)}: $textValue")
+ }
}
}
- private fun bindInstalledVersion(binding: ApkFileInfoDialogListItemBinding, context: Context, packageName: String?) {
- packageName?.let {
- AppUtils.getInstalledVersionInfo(it)?.let { versionInfo ->
- binding.installedVersionParent.isVisible = true
- binding.installedVersionValue.text = context.getString(R.string.text_full_version_info, versionInfo.versionName, versionInfo.versionCode)
- }
- } ?: run { binding.installedVersionValue.text = context.getString(R.string.text_unknown) }
+ private fun TextView.setTextIfAbsent(dialog: MaterialDialog, f: () -> String?) {
+ val textView = this
+ val textValue = f.invoke()
+ if (textView.text == context.getString(R.string.ellipsis_six)) {
+ textView.text = textValue ?: context.getString(R.string.text_unknown)
+ }
+ dialog.makeTextCopyable(textView, textValue)
}
private fun restoreEssentialViews(binding: ApkFileInfoDialogListItemBinding, context: Context) {
diff --git a/app/src/main/java/org/autojs/autojs/ui/settings/AboutAppAndDeveloperPreference.kt b/app/src/main/java/org/autojs/autojs/ui/settings/AboutAppAndDeveloperPreference.kt
index 92a4a181..9c9b3032 100644
--- a/app/src/main/java/org/autojs/autojs/ui/settings/AboutAppAndDeveloperPreference.kt
+++ b/app/src/main/java/org/autojs/autojs/ui/settings/AboutAppAndDeveloperPreference.kt
@@ -58,7 +58,7 @@ class AboutAppAndDeveloperPreference : MaterialPreference {
}.let { context.startActivity(it) }
} catch (e: Exception) {
context.getString(
- R.string.error_app_not_installed,
+ R.string.error_app_not_installed_with_name,
context.getString(R.string.app_name_qq),
).let { msg -> ViewUtils.showToast(context, msg, true) }
}
diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml
index cc13771a..ada6158d 100644
--- a/app/src/main/res/values-ar/strings.xml
+++ b/app/src/main/res/values-ar/strings.xml
@@ -104,7 +104,8 @@
يتعذر إكمال العملية \"%1$s\" لأن المعلمة تحتوي على قيم إحداثيات سالبة (%2$d, %3$d)
تتطلب عملية تنفيذ واجهة المستخدم نشاطًا يمكن توفيره من خلال وضع التنفيذ \"ui\"
لم يتم تنفيذ العملية
- التطبيق غير مثبت: \"%s\"
+ التطبيق غير مثبت: \"%s\"
+ التطبيق غير مثبت
لا يمكن أن تكون الوسائط %1$s بالنسبة لـ %2$s#%3$s فارغة
لا يمكن أن تكون الوسائط فارغة
يجب أن تكون الوسائط فارغة
diff --git a/app/src/main/res/values-en/strings.xml b/app/src/main/res/values-en/strings.xml
index 69cb7de7..00db225e 100644
--- a/app/src/main/res/values-en/strings.xml
+++ b/app/src/main/res/values-en/strings.xml
@@ -100,7 +100,8 @@
The \"%1$s\" operation cannot be completed because the parameter contains negative coordinate values (%2$d, %3$d)
An activity is required, which could be provided by running in \"ui\" execution mode
An operation is not implemented
- App is not installed: \"%s\"
+ App is not installed: \"%s\"
+ App is not installed
Argument %1$s for %2$s#%3$s cannot be nullish
Arguments cannot be empty
Arguments must be empty
diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml
index 8644302a..88caeea9 100644
--- a/app/src/main/res/values-es/strings.xml
+++ b/app/src/main/res/values-es/strings.xml
@@ -103,7 +103,8 @@
La operación \"%1$s\" no puede completarse porque el parámetro contiene valores de coordenadas negativos (%2$d, %3$d)
Se requiere una actividad, que podría proporcionarse ejecutando en modo de ejecución \"ui\"
Una operación no está implementada
- La aplicación no está instalada: \"%s\"
+ La aplicación no está instalada: \"%s\"
+ La aplicación no está instalada
El argumento %1$s para %2$s#%3$s no puede ser nulo
Los argumentos no pueden estar vacíos
Los argumentos deben estar vacíos
diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml
index 975bd239..426b5d3d 100644
--- a/app/src/main/res/values-fr/strings.xml
+++ b/app/src/main/res/values-fr/strings.xml
@@ -103,7 +103,8 @@
L\'opération \"%1$s\" ne peut pas être terminée car le paramètre contient des valeurs de coordonnées négatives (%2$d, %3$d)
Une activité est requise, qui pourrait être fournie en exécutant en mode d\'exécution \"ui\"
Une opération n\'est pas mise en œuvre
- L\'application n\'est pas installée: \"%s\"
+ L\'application n\'est pas installée: \"%s\"
+ L\'application n\'est pas installée
L\'argument %1$s pour %2$s#%3$s ne peut pas être nul
Les arguments ne peuvent pas être vides
Les arguments doivent être vides
diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml
index 0d55b3d5..bcd5dd29 100644
--- a/app/src/main/res/values-ja/strings.xml
+++ b/app/src/main/res/values-ja/strings.xml
@@ -103,7 +103,8 @@
\"%1$s\" 操作はパラメータに負の座標値 (%2$d, %3$d) が含まれているため, 完了できません
UI 実行モードに必要なアクティビティが不足しています
操作が実装されていません
- \"%s\" アプリがインストールされていません
+ \"%s\" アプリがインストールされていません
+ アプリがインストールされていません
%2$s#%3$s の引数 %1$s を null 値にはできません
引数を空にできません
引数は空でなければなりません
diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml
index 35f9c88a..f7ae7454 100644
--- a/app/src/main/res/values-ko/strings.xml
+++ b/app/src/main/res/values-ko/strings.xml
@@ -104,7 +104,8 @@
매개 변수에 음수 좌표 값 (%2$d, %3$d)이 포함되어 있으므로 \"%1$s\" 작업을 완료할 수 없습니다
UI 실행 모드를 위한 활동이 필요합니다
작업이 구현되지 않았습니다
- 앱이 설치되지 않았습니다: \"%s\"
+ 앱이 설치되지 않았습니다: \"%s\"
+ 앱이 설치되지 않았습니다
%2$s#%3$s 에 대한 인수 %1$s 는 null 값을 가질 수 없습니다
인수를 비울 수 없습니다
인수는 비어 있어야 합니다
diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml
index d4b9f0ab..424882cd 100644
--- a/app/src/main/res/values-ru/strings.xml
+++ b/app/src/main/res/values-ru/strings.xml
@@ -103,7 +103,8 @@
Операция \"%1$s\" не может быть завершена, так как параметр содержит отрицательные значения координат (%2$d, %3$d)
Требуется активность, которую можно предоставить, выполняя в режиме выполнения \"ui\"
Операция не выполняется
- Приложение не установлено: \"%s\"
+ Приложение не установлено: \"%s\"
+ Приложение не установлено
Аргумент %1$s для %2$s#%3$s не может быть пустым
Аргументы не могут быть пустыми
Аргументы должны быть пустыми
diff --git a/app/src/main/res/values-zh-rHK/strings.xml b/app/src/main/res/values-zh-rHK/strings.xml
index c766ea82..1b781c47 100644
--- a/app/src/main/res/values-zh-rHK/strings.xml
+++ b/app/src/main/res/values-zh-rHK/strings.xml
@@ -102,7 +102,8 @@
無法完成 \"%1$s\" 操作, 因為參數中包含負數座標值 (%2$d,%3$d)
缺少必要的 activity 對象, 可通過 \"ui\" 執行模式來提供
操作尚未實現
- 應用未安裝: \"%s\"
+ 應用未安裝: \"%s\"
+ 應用未安裝
參數 %1$s 對於 %2$s#%3$s 不可為 nullish
參數列表不可為空
參數列表需為空
diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml
index 92e4e87b..b28d42ad 100644
--- a/app/src/main/res/values-zh-rTW/strings.xml
+++ b/app/src/main/res/values-zh-rTW/strings.xml
@@ -102,7 +102,8 @@
無法完成 \"%1$s\" 操作, 因為引數中包含負數座標值 (%2$d,%3$d)
缺少必要的 activity 物件, 可透過 \"ui\" 執行模式來提供
操作尚未實現
- 應用未安裝: \"%s\"
+ 應用未安裝: \"%s\"
+ 應用未安裝
引數 %1$s 對於 %2$s#%3$s 不可為 nullish
引數列表不可為空
引數列表需為空
diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml
index edca81d7..a05dfb3a 100644
--- a/app/src/main/res/values-zh/strings.xml
+++ b/app/src/main/res/values-zh/strings.xml
@@ -98,7 +98,8 @@
无法完成 \"%1$s\" 操作, 因为参数中包含负数坐标值 (%2$d,%3$d)
缺少必要的 activity 对象, 可通过 \"ui\" 执行模式来提供
操作尚未实现
- 应用未安装: \"%s\"
+ 应用未安装: \"%s\"
+ 应用未安装
参数 %1$s 对于 %2$s#%3$s 不可为 nullish
参数列表不可为空
参数列表需为空
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index ce4c644b..4a11c37b 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -154,7 +154,8 @@
The \"%1$s\" operation cannot be completed because the parameter contains negative coordinate values (%2$d, %3$d)
An activity is required, which could be provided by running in \"ui\" execution mode
An operation is not implemented
- App is not installed: \"%s\"
+ App is not installed: \"%s\"
+ App is not installed
Argument %1$s for %2$s#%3$s cannot be nullish
Arguments cannot be empty
Arguments must be empty
diff --git a/version.properties b/version.properties
index 2e9d2e80..68a055d4 100644
--- a/version.properties
+++ b/version.properties
@@ -1,5 +1,5 @@
-#Fri Jan 03 18:02:21 CST 2025
-BUILD_TIME=1735898541894
+#Fri Jan 03 20:11:09 CST 2025
+BUILD_TIME=1735906269296
COMPILE_SDK_VERSION=34
JAVA_VERSION=23
JAVA_VERSION_MIN_RADICAL=0
@@ -17,6 +17,6 @@ RAPID_OCR_OPENCV_MOBILE_LABEL_VERSION=13
RAPID_OCR_OPENCV_MOBILE_VERSION=4.5.3
TARGET_SDK_VERSION=34
TARGET_SDK_VERSION_INRT=29
-VERSION_BUILD=2956
+VERSION_BUILD=2957
VERSION_NAME=6.6.2 Alpha
VSCODE_EXT_REQUIRED_VERSION=1.0.8