From c350041652be05917ed4008168befc42fbf59627 Mon Sep 17 00:00:00 2001 From: SuperMonster003 Date: Fri, 3 Jan 2025 20:14:50 +0800 Subject: [PATCH] =?UTF-8?q?6.6.2=20-=20Alpha=20-=20APK=20=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E7=B1=BB=E5=9E=8B=E4=BF=A1=E6=81=AF=E5=AF=B9=E8=AF=9D?= =?UTF-8?q?=E6=A1=86=E5=A2=9E=E5=8A=A0=E7=82=B9=E5=87=BB=E7=9B=91=E5=90=AC?= =?UTF-8?q?=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .changelog/lang_zh-Hans.json | 3 +- .../org/autojs/autojs/runtime/api/AppUtils.kt | 4 +- .../ui/main/scripts/ApkInfoDialogManager.kt | 88 ++++++++++++------- .../AboutAppAndDeveloperPreference.kt | 2 +- app/src/main/res/values-ar/strings.xml | 3 +- app/src/main/res/values-en/strings.xml | 3 +- app/src/main/res/values-es/strings.xml | 3 +- app/src/main/res/values-fr/strings.xml | 3 +- app/src/main/res/values-ja/strings.xml | 3 +- app/src/main/res/values-ko/strings.xml | 3 +- app/src/main/res/values-ru/strings.xml | 3 +- app/src/main/res/values-zh-rHK/strings.xml | 3 +- app/src/main/res/values-zh-rTW/strings.xml | 3 +- app/src/main/res/values-zh/strings.xml | 3 +- app/src/main/res/values/strings.xml | 3 +- version.properties | 6 +- 16 files changed, 85 insertions(+), 51 deletions(-) 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