diff --git a/.readme/common.json b/.readme/common.json index 9058b974..0d794913 100644 --- a/.readme/common.json +++ b/.readme/common.json @@ -1,15 +1,15 @@ { - "android_studio_latest_recommended_version_name": "Android Studio Otter 3 Feature Drop | 2025.2.3", - "var_date_android_studio_latest_recommended_version_name": "2026/01/15", - "android_studio_latest_recommended_file_name_of_exe": "android-studio-2025.2.3.9-windows.exe", - "android_studio_latest_recommended_download_address_of_exe": "https://edgedl.me.gvt1.com/android/studio/install/2025.2.3.9/android-studio-2025.2.3.9-windows.exe", - "android_studio_latest_recommended_file_size_of_exe": "1.35 GiB", - "android_studio_latest_recommended_file_name_of_zip": "android-studio-2025.2.3.9-windows.zip", - "android_studio_latest_recommended_download_address_of_zip": "https://edgedl.me.gvt1.com/android/studio/ide-zips/2025.2.3.9/android-studio-2025.2.3.9-windows.zip", - "android_studio_latest_recommended_file_size_of_zip": "1.36 GiB", - "android_studio_latest_recommended_file_name_of_tar": "android-studio-2025.2.3.9-linux.tar.gz", - "android_studio_latest_recommended_download_address_of_tar": "https://edgedl.me.gvt1.com/android/studio/ide-zips/2025.2.3.9/android-studio-2025.2.3.9-linux.tar.gz", - "android_studio_latest_recommended_file_size_of_tar": "1.39 GiB", + "android_studio_latest_recommended_version_name": "Android Studio Panda 1 | 2025.3.1", + "var_date_android_studio_latest_recommended_version_name": "2026/02/10", + "android_studio_latest_recommended_file_name_of_exe": "android-studio-panda1-windows.exe", + "android_studio_latest_recommended_download_address_of_exe": "https://edgedl.me.gvt1.com/android/studio/install/2025.3.1.7/android-studio-panda1-windows.exe", + "android_studio_latest_recommended_file_size_of_exe": "1.28 GiB", + "android_studio_latest_recommended_file_name_of_zip": "android-studio-panda1-windows.zip", + "android_studio_latest_recommended_download_address_of_zip": "https://edgedl.me.gvt1.com/android/studio/ide-zips/2025.3.1.7/android-studio-panda1-windows.zip", + "android_studio_latest_recommended_file_size_of_zip": "1.29 GiB", + "android_studio_latest_recommended_file_name_of_tar": "android-studio-panda1-linux.tar.gz", + "android_studio_latest_recommended_download_address_of_tar": "https://edgedl.me.gvt1.com/android/studio/ide-zips/2025.3.1.7/android-studio-panda1-linux.tar.gz", + "android_studio_latest_recommended_file_size_of_tar": "1.32 GiB", "var_date_contribution_table_data_updated": "2026/01/17", "latest_rhino_engine_name_with_github_lineno_address": "[v2.0.0-SNAPSHOT](http://rhino.autojs6.com/blob/master/gradle.properties#L3)", "var_date_rhino_engine_latest_committed": "2025/12/25", diff --git a/app/src/main/java/org/autojs/autojs/storage/history/VersionHistoryController.kt b/app/src/main/java/org/autojs/autojs/storage/history/VersionHistoryController.kt index b004e405..b2439340 100644 --- a/app/src/main/java/org/autojs/autojs/storage/history/VersionHistoryController.kt +++ b/app/src/main/java/org/autojs/autojs/storage/history/VersionHistoryController.kt @@ -6,14 +6,15 @@ import android.net.Uri import com.afollestad.materialdialogs.MaterialDialog import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.schedulers.Schedulers -import org.autojs.autojs.util.DialogUtils import org.autojs.autojs.model.explorer.ExplorerDirPage import org.autojs.autojs.model.explorer.Explorers import org.autojs.autojs.model.script.ScriptFile import org.autojs.autojs.model.script.Scripts import org.autojs.autojs.pio.PFiles +import org.autojs.autojs.storage.file.TmpScriptFiles import org.autojs.autojs.ui.common.NotAskAgainDialog import org.autojs.autojs.ui.edit.EditActivity +import org.autojs.autojs.util.DialogUtils import org.autojs.autojs.util.DialogUtils.choiceWidgetThemeColor import org.autojs.autojs.util.DialogUtils.widgetThemeColor import org.autojs.autojs.util.StringUtils @@ -225,7 +226,6 @@ class VersionHistoryController(private val context: Context) { Schedulers.io().scheduleDirect { runCatching { val bytes = HistoryRepository(appCtx).readRevisionBytes(rev) - val restored = decodeRevisionBytes(bytes, rev.encoding, rev.hadBom) val fmt = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault()) val timeText = fmt.format(Date(rev.createdAt)) @@ -234,6 +234,25 @@ class VersionHistoryController(private val context: Context) { AndroidSchedulers.mainThread().scheduleDirect { val newTask = context !is Activity + + // Avoid putting large content into Intent extras to prevent FAILED BINDER TRANSACTION. + // zh-CN: 避免将大文本放入 Intent extras, 防止 FAILED BINDER TRANSACTION. + if (bytes.size >= PREVIEW_INTENT_MAX_BYTES) { + val tmp = runCatching { + TmpScriptFiles.create(appCtx).also { f -> + f.outputStream().use { it.write(bytes) } + } + }.getOrElse { + it.printStackTrace() + ViewUtils.showToast(context, it.message, true) + return@scheduleDirect + } + + EditActivity.viewPath(context, name, tmp.absolutePath, newTask) + return@scheduleDirect + } + + val restored = decodeRevisionBytes(bytes, rev.encoding, rev.hadBom) EditActivity.viewContent(context, name, restored, newTask) } }.onFailure { @@ -455,5 +474,9 @@ class VersionHistoryController(private val context: Context) { private val DEFAULT_CHARSET: Charset = StandardCharsets.UTF_8 private const val HISTORY_DIALOG_MAX_ITEMS: Int = 20 private const val INTERNAL_STORAGE_ROOT: String = "/storage/emulated/0" + + // Keep Intent extras payload under a conservative threshold. + // zh-CN: 将 Intent extras 的载荷控制在一个保守阈值以内. + private const val PREVIEW_INTENT_MAX_BYTES: Int = 64 * 1024 } } diff --git a/app/src/main/java/org/autojs/autojs/ui/edit/EditActivity.kt b/app/src/main/java/org/autojs/autojs/ui/edit/EditActivity.kt index 7ab91aed..2c423cd8 100644 --- a/app/src/main/java/org/autojs/autojs/ui/edit/EditActivity.kt +++ b/app/src/main/java/org/autojs/autojs/ui/edit/EditActivity.kt @@ -495,6 +495,22 @@ open class EditActivity : BaseActivity(), DelegateHost, PermissionRequestProxyAc else -> false } + @JvmStatic + fun viewPath(context: Context, name: String?, path: String?, newTask: Boolean) = + when { + newIntent(context).apply { + putExtra(EditorView.EXTRA_PATH, path) + putExtra(EditorView.EXTRA_NAME, name) + putExtra(EditorView.EXTRA_READ_ONLY, true) + }.startSafely(context) -> true + newIntentFallback(context, newTask).apply { + putExtra(EditorView.EXTRA_PATH, path) + putExtra(EditorView.EXTRA_NAME, name) + putExtra(EditorView.EXTRA_READ_ONLY, true) + }.startSafely(context) -> true + else -> false + } + private fun newIntent(context: Context): Intent { // @Caution by SuperMonster003 on Sep 11, 2022. // ! FLAG_ACTIVITY_NEW_TASK makes screen flash when Activity started. diff --git a/app/src/main/java/org/autojs/autojs/ui/edit/editor/CodeEditText.kt b/app/src/main/java/org/autojs/autojs/ui/edit/editor/CodeEditText.kt index 086a7c7f..242f5331 100644 --- a/app/src/main/java/org/autojs/autojs/ui/edit/editor/CodeEditText.kt +++ b/app/src/main/java/org/autojs/autojs/ui/edit/editor/CodeEditText.kt @@ -146,7 +146,7 @@ class CodeEditText : AppCompatEditText { applyFixedGutterPaddingForLoading() } else { // Recompute gutter once after loading. - // zh-CN: 加载结束后重新计算 gutter(仅一次). + // zh-CN: 加载结束后重新计算 gutter (仅一次). requestLayout() invalidate() } diff --git a/app/src/main/java/org/autojs/autojs/ui/fragment/BaseViewBindingFragment.kt b/app/src/main/java/org/autojs/autojs/ui/fragment/BaseViewBindingFragment.kt index 16236cc6..1972a5e2 100644 --- a/app/src/main/java/org/autojs/autojs/ui/fragment/BaseViewBindingFragment.kt +++ b/app/src/main/java/org/autojs/autojs/ui/fragment/BaseViewBindingFragment.kt @@ -1,28 +1,32 @@ -package org.autojs.autojs.ui.fragment; +package org.autojs.autojs.ui.fragment -import android.os.Bundle; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.fragment.app.Fragment; +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.fragment.app.Fragment +import androidx.viewbinding.ViewBinding -public abstract class BaseViewBindingFragment extends Fragment { +abstract class BaseViewBindingFragment : Fragment() { - protected T binding; + @JvmField + protected var binding: T? = null - @Nullable - @Override - public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { - binding = createBinding(inflater, container); - return getRootView(binding); + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { + val binding = createBinding(inflater, container).also { + this.binding = it + } + return getRootView(binding) } - protected abstract T createBinding(@NonNull LayoutInflater inflater, @Nullable ViewGroup container); - - protected View getRootView(@NonNull T binding) { - return binding.getRoot(); + override fun onDestroyView() { + super.onDestroyView() + binding = null } + protected abstract fun createBinding(inflater: LayoutInflater, container: ViewGroup?): T + + protected fun getRootView(binding: T): View { + return binding!!.root + } } diff --git a/app/src/main/java/org/autojs/autojs/ui/storage/VersionHistoryActivity.kt b/app/src/main/java/org/autojs/autojs/ui/storage/VersionHistoryActivity.kt index 86088f4f..c16e98a6 100644 --- a/app/src/main/java/org/autojs/autojs/ui/storage/VersionHistoryActivity.kt +++ b/app/src/main/java/org/autojs/autojs/ui/storage/VersionHistoryActivity.kt @@ -357,7 +357,7 @@ class VersionHistoryActivity : BaseSearchSortListActivity + android:layout_weight="1"> - - diff --git a/app/src/main/res/layout/item_trash.xml b/app/src/main/res/layout/item_trash.xml index e80d8487..0ea0c98c 100644 --- a/app/src/main/res/layout/item_trash.xml +++ b/app/src/main/res/layout/item_trash.xml @@ -18,7 +18,7 @@ android:padding="2dp" android:layout_gravity="start|center_vertical" tools:src="@drawable/ic_simple_file" - app:tint="?android:attr/textColorSecondary" /> + app:tint="@color/day_night_alpha_60" /> + android:maxLines="1" + android:textColor="@color/day_night" + android:textSize="16sp" + tools:text="test-116_v1.0.5.apk" /> + tools:text="2026-02-06 21:45:55 | 21.93 MiB\n/storage/emulated/0/Scripts/test-116_v1.0.5.apk" /> \ No newline at end of file diff --git a/gradle/data/android-studio-agp-compat.properties b/gradle/data/android-studio-agp-compat.properties index 19b93acc..91fd4a4e 100644 --- a/gradle/data/android-studio-agp-compat.properties +++ b/gradle/data/android-studio-agp-compat.properties @@ -1,4 +1,5 @@ -#Fri Jan 16 15:48:25 GMT+8 2026 +#Thu Feb 12 11:04:59 GMT+8 2026 +2025.3.1=9.0 2025.2.3=9.0 2025.2.2=8.13 2025.2.1=8.13 diff --git a/version.properties b/version.properties index 2be29b15..d3268442 100644 --- a/version.properties +++ b/version.properties @@ -1,5 +1,5 @@ -#Thu Feb 12 19:57:00 CST 2026 -BUILD_TIME=1770897420318 +#Thu Feb 12 21:05:03 CST 2026 +BUILD_TIME=1770901503083 COMPILE_SDK_VERSION=36 IMAGE_QUANT_CMAKE_VERSION=3.22.1 IMAGE_QUANT_NDK_VERSION=26.1.10909125