diff --git a/README.md b/README.md
index b9589c1f..7c39580b 100644
--- a/README.md
+++ b/README.md
@@ -103,6 +103,39 @@
[comment]: <> "Version history only shows last 3 versions"
+# v6.0.3
+
+###### 2022/03/19
+
+* `新增` 多语言切换功能 (尚不完善)
+* `新增` recorder 模块 (参阅 示例代码 > 计时器 > *.js × 4)
+* `新增` 使用 "修改安全设置权限" 自动启用无障碍服务及开关设置
+* `修复` 点击 "快速设置" 中相关图标后面板未自动收起的问题 (试修) _[`issue #7`](https://github.com/SuperMonster003/AutoJs6/issues/7)_
+* `修复` toast 使用强制显示参数时可能导致 AutoJs6 崩溃的问题
+* `修复` Socket 传输数据头部信息不完整时可能导致 AutoJs6 崩溃的问题
+* `优化` 启动或重启 AutoJs6 时根据选项设置自动开启无障碍服务
+* `优化` 开启悬浮窗显示时尝试自动开启无障碍服务
+* `优化` 所有资源文件补全元素对应的英文翻译
+* `优化` 微调主页抽屉布局 减小项目排列间距
+* `优化` 主页抽屉增加前台服务状态开关的同步
+* `优化` 主页抽屉展开时立即按需同步开关状态
+* `优化` 显示指针位置增加状态检测及结果提示
+* `优化` 支持 64 位操作系统 (Ref to TonyJiangWJ)
+* `优化` 悬浮窗初始化时同时应用透明度设置 (无需点击后再应用透明度)
+* `优化` 重置文件内容时增加是否为示例代码文件的检测并增加结果提示
+* `优化` 转移打包插件下载地址 GitHub -> JsDelivr
+* `优化` 附加 Zeugma Solutions LocaleHelper 版本 1.5.1
+* `优化` 降级 Android Material 版本 1.6.0-alpha02 -> 1.5.0
+* `优化` 升级 Kotlinx Coroutines 版本 1.6.0-native-mt -> 1.6.0
+* `优化` 升级 OpenCV 版本 3.4.3 -> 4.5.4 -> 4.5.5 (Ref to TonyJiangWJ)
+* `优化` 升级 Okhttp3 版本 3.10.0 -> 5.0.0-alpha.4 -> 5.0.0-alpha.6
+* `优化` 升级 Android Gradle 插件版本 7.2.0-beta01 -> 7.3.0-alpha06
+* `优化` 升级 Auto.js-ApkBuilder 版本 1.0.1 -> 1.0.3
+* `优化` 升级 Glide Compiler 版本 4.12.0 -> 4.13.1
+* `优化` 升级 Gradle 发行版本 7.4-rc-2 -> 7.4.1
+* `优化` 升级 Gradle Compile 版本 31 -> 32
+* `优化` 升级 Gson 版本 2.8.9 -> 2.9.0
+
# v6.0.2
###### 2022/02/05
@@ -112,7 +145,7 @@
* `修复` toast.dismiss() 可能无效的问题
* `修复` 客户端模式及服务端模式开关可能无法正常工作的问题
* `修复` 客户端模式及服务端模式开关状态不能正常刷新的问题
-* `修复` Android 7 解析 UI 模式 text 元素异常 (Ref to TonyJiangWJ) _[`issue #4`](https://github.com/SuperMonster003/AutoJs6/issues/4)_
+* `修复` Android 7 解析 UI 模式 text 元素异常 (Ref to TonyJiangWJ) _[`issue #4`](https://github.com/SuperMonster003/AutoJs6/issues/4)_ _[`#9`](https://github.com/SuperMonster003/AutoJs6/issues/9)_
* `优化` 忽略 sleep() 的 ScriptInterruptedException 异常
* `优化` 附加 Androidx AppCompat (Legacy) 版本 1.0.2
* `优化` 升级 Androidx AppCompat 版本 1.4.0 -> 1.4.1
@@ -140,69 +173,6 @@
* `优化` 升级 Kotlin Gradle 插件版本 1.6.0 -> 1.6.10
* `优化` 升级 Gradle 发行版本 7.3 -> 7.3.3
-# v6.0.0
-
-###### 2021/12/01
-
-* `新增` 主页抽屉底部增加重启应用按钮
-* `新增` 主页抽屉增加忽略电池优化/显示在其他应用上层等开关
-* `修复` 应用初始安装后部分区域主题颜色渲染异常的问题
-* `修复` sign.property 不存在时无法 build 的问题
-* `修复` 定时任务面板一次性任务的月份存取错误
-* `修复` 应用设置页面开关颜色不随主题变更的问题
-* `修复` 无法识别打包插件及打包插件下载地址无效的问题
-* `修复` 首页抽屉 "查看使用情况权限" 开关状态可能不同步的问题
-* `修复` TemplateMatching.fastTemplateMatching 潜在的 Mat 内存泄漏问题
-* `优化` 升级 Rhino 引擎版本 1.7.7.2 -> 1.7.13 -> 1.7.14-snapshot
-* `优化` 升级 OpenCV 版本 3.4.3 -> 4.5.4
-* `优化` ViewUtil.getStatusBarHeight 提升兼容性
-* `优化` 主页抽屉移除用户登录相关模块并移除布局占位
-* `优化` 主页移除社区及市场标签页面并优化布局对其方式
-* `优化` 修改一些设置选项的默认开关状态
-* `优化` 关于页面增加 SinceDate 并优化 Copyright 显示
-* `优化` 升级 JSON 模块至 2017-06-12 版本并整合 cycle.js
-* `优化` 移除 Activity 前置时的自动检查更新功能并移除检查更新相关按钮
-* `优化` AppOpsKt#isOpPermissionGranted 内部代码逻辑
-* `优化` ResourceMonitor 使用 ReentrantLock 增强安全性 (Ref to TonyJiangWJ)
-* `优化` 使用 Maven Central 等仓库替换 JCenter 仓库
-* `优化` 抽离并移除重复的本地库文件
-* `优化` 本地化 CrashReport 版本 2.6.6
-* `优化` 本地化 MutableTheme 版本 1.0.0
-* `优化` 附加 Androidx Preference 版本 1.1.1
-* `优化` 附加 SwipeRefreshLayout 版本 1.1.0
-* `优化` 升级 Android Analytics 版本 7.0.0 -> 13.1.0
-* `优化` 升级 Android Annotations 版本 4.5.2 -> 4.8.0
-* `优化` 升级 Android Gradle 插件版本 3.2.1 -> 4.1.0 -> 7.0.3 -> 7.2.0-alpha04
-* `优化` 升级 Android Job 版本 1.2.6 -> 1.4.2
-* `优化` 升级 Android Material 版本 1.1.0-alpha01 -> 1.5.0-beta01
-* `优化` 升级 Androidx MultiDex 版本 2.0.0 -> 2.0.1
-* `优化` 升级 Apache Commons Lang3 版本 3.6 -> 3.12.0
-* `优化` 升级 Appcompat 版本 1.0.2 -> 1.4.0
-* `优化` 升级 ButterKnife Gradle 插件版本 9.0.0-rc2 -> 10.2.1 -> 10.2.3
-* `优化` 升级 ColorPicker 版本 2.1.5 -> 2.1.7
-* `优化` 升级 Espresso Core 版本 3.1.1-alpha01 -> 3.5.0-alpha03
-* `优化` 升级 Eventbus 版本 3.0.0 -> 3.2.0
-* `优化` 升级 Glide Compiler 版本 4.8.0 -> 4.12.0 -> 4.12.0
-* `优化` 升级 Gradle Build Tool 版本 29.0.2 -> 30.0.2
-* `优化` 升级 Gradle Compile 版本 28 -> 30 -> 31
-* `优化` 升级 Gradle 发行版本 4.10.2 -> 6.5 -> 7.0.2 -> 7.3
-* `优化` 升级 Groovy-Json 插件版本 3.0.7 -> 3.0.8
-* `优化` 升级 Gson 版本 2.8.2 -> 2.8.9
-* `优化` 升级 JavaVersion 版本 1.8 -> 11 -> 16
-* `优化` 升级 Joda Time 版本 2.9.9 -> 2.10.13
-* `优化` 升级 Junit 版本 4.12 -> 4.13.2
-* `优化` 升级 Kotlin Gradle 插件版本 1.3.10 -> 1.4.10 -> 1.6.0
-* `优化` 升级 Kotlinx Coroutines 版本 1.0.1 -> 1.5.2-native-mt
-* `优化` 升级 Leakcanary 版本 1.6.1 -> 2.7
-* `优化` 升级 LicensesDialog 版本 1.8.1 -> 2.2.0
-* `优化` 升级 Material Dialogs 版本 0.9.2.3 -> 0.9.6.0
-* `优化` 升级 Okhttp3 版本 3.10.0 -> 5.0.0-alpha.2 -> 5.0.0-alpha.3
-* `优化` 升级 Reactivex RxJava2 RxAndroid 版本 2.0.1 -> 2.1.1
-* `优化` 升级 Reactivex RxJava2 版本 2.1.2 -> 2.2.21
-* `优化` 升级 Retrofit2 Converter Gson 版本 2.3.0 -> 2.9.0
-* `优化` 升级 Retrofit2 Retrofit 版本 2.3.0 -> 2.9.0
-* `优化` 升级 Zip4j 版本 1.3.2 -> 2.9.1
-
##### 更多版本历史可参阅
* [CHANGELOG.md](https://github.com/SuperMonster003/AutoJs6/blob/master/app/src/main/assets/doc/CHANGELOG.md)
@@ -213,11 +183,14 @@
******
-* [AutoJs6-VSCode-Extension](https://github.com/SuperMonster003/AutoJs6-VSCode-Extension) { author: [SuperMonster003](https://github.com/SuperMonster003) }
- - `适用于 VSCode 的桌面开发插件 (二次开发项目)`
-
+* [Auto.js](https://github.com/TonyJiangWJ/Auto.js) { author: [TonyJiangWJ](https://github.com/TonyJiangWJ) }
+ - `安卓平台 JavaScript 自动化工具 (二次开发项目)`
+
* [AutoX](https://github.com/kkevsekk1/AutoX) { author: [kkevsekk1](https://github.com/kkevsekk1) }
- `安卓平台 JavaScript 自动化工具 (二次开发项目)`
+* [AutoJs6-VSCode-Extension](https://github.com/SuperMonster003/AutoJs6-VSCode-Extension) { author: [SuperMonster003](https://github.com/SuperMonster003) }
+ - `适用于 VSCode 的桌面开发插件 (二次开发项目)`
+
[comment]: <> (* [Auto.js-TypeScript-Declarations](https://github.com/SuperMonster003/Auto.js-TypeScript-Declarations) { author: [SuperMonster003](https://github.com/SuperMonster003) })
[comment]: <> ( - `Auto.js 声明文件 (.d.ts)`)
diff --git a/app/build.gradle b/app/build.gradle
index 13fdffe5..3785fd0b 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -97,10 +97,10 @@ android {
reset()
// Specifies a list of ABIs that Gradle should create APKs for.
- include 'x86', 'armeabi-v7a'
+ include 'x86', 'armeabi-v7a', 'arm64-v8a', 'x86_64'
// Specifies that we do not want to also generate a universal APK that includes all ABIs.
- universalApk false
+ universalApk true
}
}
productFlavors {
@@ -110,6 +110,17 @@ android {
}
}
applicationVariants.all { variant ->
+ variant.outputs.all { output ->
+ def aj = "AutoJs6"
+ def ver = versionName.replaceAll(/\s/, "-")
+
+ // FIXME by SuperMonster003 as of Mar 19, 2022.
+ // ! Interface com.android.build.OutputFile is deprecated.
+ // ! Another way of getting ABI is needed.
+ def abi = getFilter(com.android.build.OutputFile.ABI)
+
+ output.outputFileName = "${aj}-v${ver}-${abi ? "${abi}" : "universal"}.apk".toLowerCase()
+ }
variant.mergeAssetsProvider.configure {
doLast {
delete(fileTree(dir: outputDir, includes: ['declarations/**']))
@@ -130,7 +141,7 @@ dependencies {
debugImplementation "com.squareup.leakcanary:leakcanary-android:${versions.leakcanary}"
// Kotlin
- implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.0-native-mt'
+ implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.0'
// Android Annotations
kapt "org.androidannotations:androidannotations:${versions.annotations}"
@@ -174,11 +185,7 @@ dependencies {
// Expandable RecyclerView
implementation 'com.thoughtbot:expandablerecyclerview:1.3'
- implementation 'com.github.hyb1996:Auto.js-ApkBuilder:1.0.1'
-
- // RxJava
- implementation 'io.reactivex.rxjava2:rxjava:2.2.21'
- implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'
+ implementation 'com.github.hyb1996:Auto.js-ApkBuilder:1.0.3'
// Retrofit
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 84c00630..78616f31 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -3,6 +3,7 @@
package="org.autojs.autojs">
+
@@ -29,7 +30,7 @@
@@ -56,13 +56,12 @@
@@ -84,41 +83,34 @@
-
+
-
+
-
+ android:name="org.autojs.autojs.external.tasker.TaskerScriptEditActivity_"
+ android:configChanges="orientation|screenSize|locale" />
+
+ android:name="org.autojs.autojs.ui.project.BuildActivity_"
+ android:configChanges="orientation|screenSize|locale" />
+
+
+
+
+
-
-
-
-
-
-
-
-
@@ -130,46 +122,46 @@
-
-
+
+
-
+
+ android:exported="true">
+ android:value="true" />
+ android:exported="true">
+ android:value="true" />
@@ -234,7 +226,7 @@
@@ -252,7 +244,7 @@
@@ -314,7 +306,7 @@
diff --git a/app/src/main/assets/doc/CHANGELOG.md b/app/src/main/assets/doc/CHANGELOG.md
index 17fb8a35..dc7b5044 100644
--- a/app/src/main/assets/doc/CHANGELOG.md
+++ b/app/src/main/assets/doc/CHANGELOG.md
@@ -4,6 +4,39 @@
******
+# v6.0.3
+
+###### 2022/03/19
+
+* `新增` 多语言切换功能 (尚不完善)
+* `新增` recorder 模块 (参阅 示例代码 > 计时器 > *.js × 4)
+* `新增` 使用 "修改安全设置权限" 自动启用无障碍服务及开关设置
+* `修复` 点击 "快速设置" 中相关图标后面板未自动收起的问题 (试修) _[`issue #7`](https://github.com/SuperMonster003/AutoJs6/issues/7)_
+* `修复` toast 使用强制显示参数时可能导致 AutoJs6 崩溃的问题
+* `修复` Socket 传输数据头部信息不完整时可能导致 AutoJs6 崩溃的问题
+* `优化` 启动或重启 AutoJs6 时根据选项设置自动开启无障碍服务
+* `优化` 开启悬浮窗显示时尝试自动开启无障碍服务
+* `优化` 所有资源文件补全元素对应的英文翻译
+* `优化` 微调主页抽屉布局 减小项目排列间距
+* `优化` 主页抽屉增加前台服务状态开关的同步
+* `优化` 主页抽屉展开时立即按需同步开关状态
+* `优化` 显示指针位置增加状态检测及结果提示
+* `优化` 支持 64 位操作系统 (Ref to TonyJiangWJ)
+* `优化` 悬浮窗初始化时同时应用透明度设置 (无需点击后再应用透明度)
+* `优化` 重置文件内容时增加是否为示例代码文件的检测并增加结果提示
+* `优化` 转移打包插件下载地址 GitHub -> JsDelivr
+* `优化` 附加 Zeugma Solutions LocaleHelper 版本 1.5.1
+* `优化` 降级 Android Material 版本 1.6.0-alpha02 -> 1.5.0
+* `优化` 升级 Kotlinx Coroutines 版本 1.6.0-native-mt -> 1.6.0
+* `优化` 升级 OpenCV 版本 3.4.3 -> 4.5.4 -> 4.5.5 (Ref to TonyJiangWJ)
+* `优化` 升级 Okhttp3 版本 3.10.0 -> 5.0.0-alpha.4 -> 5.0.0-alpha.6
+* `优化` 升级 Android Gradle 插件版本 7.2.0-beta01 -> 7.3.0-alpha06
+* `优化` 升级 Auto.js-ApkBuilder 版本 1.0.1 -> 1.0.3
+* `优化` 升级 Glide Compiler 版本 4.12.0 -> 4.13.1
+* `优化` 升级 Gradle 发行版本 7.4-rc-2 -> 7.4.1
+* `优化` 升级 Gradle Compile 版本 31 -> 32
+* `优化` 升级 Gson 版本 2.8.9 -> 2.9.0
+
# v6.0.2
###### 2022/02/05
@@ -13,7 +46,7 @@
* `修复` toast.dismiss() 可能无效的问题
* `修复` 客户端模式及服务端模式开关可能无法正常工作的问题
* `修复` 客户端模式及服务端模式开关状态不能正常刷新的问题
-* `修复` Android 7 解析 UI 模式 text 元素异常 (Ref to TonyJiangWJ) _[`issue #4`](https://github.com/SuperMonster003/AutoJs6/issues/4)_
+* `修复` Android 7 解析 UI 模式 text 元素异常 (Ref to TonyJiangWJ) _[`issue #4`](https://github.com/SuperMonster003/AutoJs6/issues/4)_ _[`#9`](https://github.com/SuperMonster003/AutoJs6/issues/9)_
* `优化` 忽略 sleep() 的 ScriptInterruptedException 异常
* `优化` 附加 Androidx AppCompat (Legacy) 版本 1.0.2
* `优化` 升级 Androidx AppCompat 版本 1.4.0 -> 1.4.1
diff --git a/app/src/main/java/com/stardust/theme/preference/ThemeColorPreferenceFragment.java b/app/src/main/java/com/stardust/theme/preference/ThemeColorPreferenceFragment.java
index d7488a8c..e5c9c55f 100644
--- a/app/src/main/java/com/stardust/theme/preference/ThemeColorPreferenceFragment.java
+++ b/app/src/main/java/com/stardust/theme/preference/ThemeColorPreferenceFragment.java
@@ -1,10 +1,13 @@
package com.stardust.theme.preference;
+import android.annotation.SuppressLint;
import android.annotation.TargetApi;
import android.os.Build;
import android.preference.PreferenceFragment;
import android.widget.ListView;
+import androidx.annotation.Nullable;
+
import com.stardust.theme.ThemeColor;
import com.stardust.theme.internal.ScrollingViewEdgeGlowColorHelper;
import com.stardust.theme.ThemeColorManager;
@@ -15,9 +18,12 @@ import java.lang.reflect.Field;
/**
* Created by Stardust on 2016/8/14.
*/
+@SuppressWarnings({"deprecation", "JavaReflectionMemberAccess"})
+@SuppressLint("SoonBlockedPrivateApi")
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
public class ThemeColorPreferenceFragment extends PreferenceFragment implements ThemeColorMutable {
+ @Nullable
private static Field LIST_VIEW;
private int mThemeColor;
private boolean hasAppliedThemeColor = false;
@@ -34,11 +40,13 @@ public class ThemeColorPreferenceFragment extends PreferenceFragment implements
private ListView getListView() {
try {
- return (ListView) LIST_VIEW.get(this);
+ if (LIST_VIEW != null) {
+ return (ListView) LIST_VIEW.get(this);
+ }
} catch (Exception e) {
e.printStackTrace();
- return null;
}
+ return null;
}
public void addPreferencesFromResource(int resId) {
diff --git a/app/src/main/java/org/autojs/autojs/Pref.java b/app/src/main/java/org/autojs/autojs/Pref.java
index 8b68d34a..87301ad1 100644
--- a/app/src/main/java/org/autojs/autojs/Pref.java
+++ b/app/src/main/java/org/autojs/autojs/Pref.java
@@ -3,6 +3,7 @@ package org.autojs.autojs;
import android.content.Context;
import android.content.SharedPreferences;
import android.os.Environment;
+
import androidx.preference.PreferenceManager;
import com.stardust.app.GlobalAppContext;
@@ -21,6 +22,7 @@ public class Pref {
private static final SharedPreferences DISPOSABLE_BOOLEAN = GlobalAppContext.get().getSharedPreferences("DISPOSABLE_BOOLEAN", Context.MODE_PRIVATE);
private static final String KEY_SERVER_ADDRESS = "KEY_SERVER_ADDRESS";
private static final String KEY_FLOATING_MENU_SHOWN = "KEY_FLOATING_MENU_SHOWN";
+ private static final String KEY_APP_LANG_INDEX = "KEY_APP_LANG_INDEX";
private static final String KEY_EDITOR_THEME = "editor.theme";
private static final String KEY_EDITOR_TEXT_SIZE = "editor.textSize";
@@ -62,7 +64,11 @@ public class Pref {
}
public static boolean shouldEnableAccessibilityServiceByRoot() {
- return def().getBoolean(getString(R.string.key_enable_accessibility_service_by_root), true);
+ return def().getBoolean(getString(R.string.key_enable_a11y_service_with_root_access), true);
+ }
+
+ public static boolean shouldEnableAccessibilityServiceBySecureSettings() {
+ return def().getBoolean(getString(R.string.key_enable_a11y_service_with_secure_settings), true);
}
private static String getString(int id) {
@@ -90,7 +96,7 @@ public class Pref {
}
public static boolean rootRecordGeneratesBinary() {
- return Objects.equals(def().getString(getString(R.string.key_root_record_out_file_type), "binary"), "binary");
+ return Objects.equals(def().getString(getString(R.string.key_root_record_out_file_type), getString(R.string.default_value_binary)), getString(R.string.value_root_record_out_file_type_binary));
}
public static boolean isStableModeEnabled() {
@@ -99,7 +105,7 @@ public class Pref {
public static String getDocumentationUrl() {
String docSource = def().getString(getString(R.string.key_documentation_source), null);
- if (docSource == null || docSource.equals("Local")) {
+ if (docSource == null || docSource.equals(getString(R.string.value_documentation_source_local))) {
return "file:///android_asset/docs/";
} else {
return "https://www.autojs.org/assets/autojs/docs/";
@@ -122,6 +128,10 @@ public class Pref {
def().edit().putString(KEY_EDITOR_THEME, theme).apply();
}
+ public static void setAppLanguageIndex(int index) {
+ def().edit().putInt(KEY_APP_LANG_INDEX, index).apply();
+ }
+
public static void setEditorTextSize(int value) {
def().edit().putInt(KEY_EDITOR_TEXT_SIZE, value).apply();
}
@@ -139,4 +149,8 @@ public class Pref {
public static boolean isForegroundServiceEnabled() {
return def().getBoolean(getString(R.string.key_foreground_service), false);
}
+
+ public static int getAppLanguageIndex() {
+ return def().getInt(KEY_APP_LANG_INDEX, 0);
+ }
}
diff --git a/app/src/main/java/org/autojs/autojs/accessibility/AccessibilityEventHelper.java b/app/src/main/java/org/autojs/autojs/accessibility/AccessibilityEventHelper.java
deleted file mode 100644
index 57d3e2e0..00000000
--- a/app/src/main/java/org/autojs/autojs/accessibility/AccessibilityEventHelper.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package org.autojs.autojs.accessibility;
-
-import android.util.SparseArray;
-import android.view.accessibility.AccessibilityEvent;
-import android.view.accessibility.AccessibilityNodeInfo;
-
-import org.autojs.autojs.R;
-import com.stardust.util.SparseArrayEntries;
-
-import static android.view.accessibility.AccessibilityEvent.TYPE_VIEW_CLICKED;
-import static android.view.accessibility.AccessibilityEvent.TYPE_VIEW_LONG_CLICKED;
-import static android.view.accessibility.AccessibilityEvent.TYPE_VIEW_SCROLLED;
-import static android.view.accessibility.AccessibilityEvent.TYPE_VIEW_TEXT_CHANGED;
-import static android.view.accessibility.AccessibilityNodeInfo.ACTION_SCROLL_BACKWARD;
-import static android.view.accessibility.AccessibilityNodeInfo.ACTION_SCROLL_FORWARD;
-
-/**
- * Created by Stardust on 2017/3/16.
- */
-
-public class AccessibilityEventHelper {
-
- private static final SparseArray EVENT_ACTION_RES_ID_MAP = new SparseArrayEntries()
- .entry(TYPE_VIEW_CLICKED, R.string.text_clicked)
- .entry(TYPE_VIEW_LONG_CLICKED, R.string.text_long_clicked)
- .entry(TYPE_VIEW_SCROLLED, R.string.text_scrolled)
- .entry(TYPE_VIEW_TEXT_CHANGED, R.string.text_text_changed)
- .sparseArray();
-
- public static int getEventTypeNameResId(AccessibilityEvent event) {
- return EVENT_ACTION_RES_ID_MAP.get(event.getEventType());
- }
-}
diff --git a/app/src/main/java/org/autojs/autojs/autojs/AutoJs.java b/app/src/main/java/org/autojs/autojs/autojs/AutoJs.java
index ea86c983..197a0e5b 100644
--- a/app/src/main/java/org/autojs/autojs/autojs/AutoJs.java
+++ b/app/src/main/java/org/autojs/autojs/autojs/AutoJs.java
@@ -7,9 +7,11 @@ import android.content.Intent;
import android.content.IntentFilter;
import android.os.Looper;
+import androidx.annotation.Nullable;
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
import com.stardust.app.GlobalAppContext;
+import com.stardust.autojs.core.accessibility.AccessibilityServiceTool;
import com.stardust.autojs.core.console.GlobalConsole;
import com.stardust.autojs.runtime.ScriptRuntime;
import com.stardust.autojs.runtime.accessibility.AccessibilityConfig;
@@ -20,11 +22,9 @@ import com.stardust.view.accessibility.AccessibilityService;
import com.stardust.view.accessibility.LayoutInspector;
import com.stardust.view.accessibility.NodeInfo;
-import org.autojs.autojs.Pref;
import org.autojs.autojs.R;
import org.autojs.autojs.external.fileprovider.AppFileProvider;
import org.autojs.autojs.pluginclient.DevPluginService;
-import org.autojs.autojs.tool.AccessibilityServiceTool;
import org.autojs.autojs.ui.floating.FloatyWindowManger;
import org.autojs.autojs.ui.floating.FullScreenFloatyWindow;
import org.autojs.autojs.ui.floating.layoutinspector.LayoutBoundsFloatyWindow;
@@ -44,6 +44,8 @@ public class AutoJs extends com.stardust.autojs.AutoJs {
private static AutoJs instance;
+ private final Application appContext;
+
// @Thank to Zen2H
private final ExecutorService printExecutor = Executors.newSingleThreadExecutor();
@@ -64,6 +66,7 @@ public class AutoJs extends com.stardust.autojs.AutoJs {
private AutoJs(final Application application) {
super(application);
+ appContext = application;
getScriptEngineService().registerGlobalScriptExecutionListener(new ScriptExecutionGlobalListener());
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(LayoutBoundsFloatyWindow.class.getName());
@@ -119,7 +122,7 @@ public class AutoJs extends com.stardust.autojs.AutoJs {
public String println(int level, CharSequence charSequence) {
String log = super.println(level, charSequence);
- // FIXME by SuperMonster003 on Feb 2, 2022
+ // FIXME by SuperMonster003 as of Feb 2, 2022.
// ! When running in 'ui' thread (`ui.run`, `ui.post`),
// ! android.os.NetworkOnMainThreadException may happen.
// ! Further more, dunno if a thread executor is a good idea.
@@ -134,20 +137,9 @@ public class AutoJs extends com.stardust.autojs.AutoJs {
if (AccessibilityService.Companion.getInstance() != null) {
return;
}
- String errorMessage = null;
- if (AccessibilityServiceTool.isAccessibilityServiceEnabled(GlobalAppContext.get())) {
- errorMessage = GlobalAppContext.getString(R.string.text_auto_operate_service_enabled_but_not_running);
- } else {
- if (Pref.shouldEnableAccessibilityServiceByRoot()) {
- if (!AccessibilityServiceTool.enableAccessibilityServiceByRootAndWaitFor(2000)) {
- errorMessage = GlobalAppContext.getString(R.string.text_enable_accessibility_service_by_root_timeout);
- }
- } else {
- errorMessage = GlobalAppContext.getString(R.string.text_no_accessibility_permission);
- }
- }
+ String errorMessage = tryEnableAccessibilityService();
if (errorMessage != null) {
- AccessibilityServiceTool.goToAccessibilitySetting();
+ getAccessibilityTool().goToAccessibilitySetting();
throw new ScriptException(errorMessage);
}
}
@@ -157,26 +149,26 @@ public class AutoJs extends com.stardust.autojs.AutoJs {
if (AccessibilityService.Companion.getInstance() != null) {
return;
}
- String errorMessage = null;
- if (AccessibilityServiceTool.isAccessibilityServiceEnabled(GlobalAppContext.get())) {
- errorMessage = GlobalAppContext.getString(R.string.text_auto_operate_service_enabled_but_not_running);
- } else {
- if (Pref.shouldEnableAccessibilityServiceByRoot()) {
- if (!AccessibilityServiceTool.enableAccessibilityServiceByRootAndWaitFor(2000)) {
- errorMessage = GlobalAppContext.getString(R.string.text_enable_accessibility_service_by_root_timeout);
- }
- } else {
- errorMessage = GlobalAppContext.getString(R.string.text_no_accessibility_permission);
- }
- }
+ String errorMessage = tryEnableAccessibilityService();
if (errorMessage != null) {
- AccessibilityServiceTool.goToAccessibilitySetting();
+ getAccessibilityTool().goToAccessibilitySetting();
if (!AccessibilityService.Companion.waitForEnabled(-1)) {
throw new ScriptInterruptedException();
}
}
}
+ @Nullable
+ private String tryEnableAccessibilityService() {
+ if (getAccessibilityTool().isAccessibilityServiceEnabled()) {
+ return GlobalAppContext.getString(R.string.text_auto_operate_service_enabled_but_not_working);
+ }
+ if (!getAccessibilityTool().enableAccessibilityServiceAutomaticallyIfNeededAndWaitFor(2000)) {
+ return GlobalAppContext.getString(R.string.text_no_accessibility_permission);
+ }
+ return null;
+ }
+
@Override
protected AccessibilityConfig createAccessibilityConfig() {
return super.createAccessibilityConfig();
@@ -192,4 +184,8 @@ public class AutoJs extends com.stardust.autojs.AutoJs {
return runtime;
}
+ private AccessibilityServiceTool getAccessibilityTool() {
+ return new AccessibilityServiceTool(appContext);
+ }
+
}
diff --git a/app/src/main/java/org/autojs/autojs/autojs/build/ApkBuilder.java b/app/src/main/java/org/autojs/autojs/autojs/build/ApkBuilder.java
index bd083751..87db41e3 100644
--- a/app/src/main/java/org/autojs/autojs/autojs/build/ApkBuilder.java
+++ b/app/src/main/java/org/autojs/autojs/autojs/build/ApkBuilder.java
@@ -26,7 +26,6 @@ import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.concurrent.Callable;
-import java.util.regex.Pattern;
import pxb.android.StringItem;
import pxb.android.axml.AxmlWriter;
@@ -189,8 +188,7 @@ public class ApkBuilder {
if (child.getName().endsWith(".js")) {
encrypt(toDir, child);
} else {
- StreamUtils.write(new FileInputStream(child),
- new FileOutputStream(new File(toDir, child.getName())));
+ StreamUtils.write(new FileInputStream(child), new FileOutputStream(new File(toDir, child.getName())));
}
} else {
if (!mAppConfig.ignoredDirs.contains(child)) {
diff --git a/app/src/main/java/org/autojs/autojs/build/TinySign.java b/app/src/main/java/org/autojs/autojs/build/TinySign.java
index 83ad992b..82e3cd88 100644
--- a/app/src/main/java/org/autojs/autojs/build/TinySign.java
+++ b/app/src/main/java/org/autojs/autojs/build/TinySign.java
@@ -2,6 +2,8 @@ package org.autojs.autojs.build;
import android.util.Base64;
+import com.stardust.autojs.apkbuilder.util.StreamUtils;
+
import java.io.File;
import java.io.FileInputStream;
import java.io.FilterOutputStream;
@@ -9,6 +11,7 @@ import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintStream;
import java.io.UnsupportedEncodingException;
+import java.nio.charset.StandardCharsets;
import java.security.DigestOutputStream;
import java.security.KeyFactory;
import java.security.MessageDigest;
@@ -17,36 +20,34 @@ import java.security.PrivateKey;
import java.security.Signature;
import java.security.SignatureException;
import java.security.spec.PKCS8EncodedKeySpec;
-import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
+import java.util.Objects;
import java.util.jar.Attributes;
import java.util.jar.Manifest;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
-import org.apache.commons.io.FileUtils;
-import org.apache.commons.io.IOUtils;
public class TinySign {
public TinySign() {
}
- private static byte[] dBase64(String data) throws UnsupportedEncodingException {
- return Base64.decode(data.getBytes("UTF-8"), Base64.NO_WRAP);
+ private static byte[] dBase64(String data) {
+ return Base64.decode(data.getBytes(StandardCharsets.UTF_8), Base64.NO_WRAP);
}
private static void doDir(String prefix, File dir, ZipOutputStream zos, DigestOutputStream dos, Manifest m) throws IOException {
zos.putNextEntry(new ZipEntry(prefix));
zos.closeEntry();
File[] arr$ = dir.listFiles();
- int len$ = arr$.length;
- for(int i$ = 0; i$ < len$; ++i$) {
- File f = arr$[i$];
- if (f.isFile()) {
- doFile(prefix + f.getName(), f, zos, dos, m);
- } else {
- doDir(prefix + f.getName() + "/", f, zos, dos, m);
+ if (arr$ != null) {
+ for (File f : arr$) {
+ if (f.isFile()) {
+ doFile(prefix + f.getName(), f, zos, dos, m);
+ } else {
+ doDir(prefix + f.getName() + "/", f, zos, dos, m);
+ }
}
}
@@ -54,13 +55,13 @@ public class TinySign {
private static void doFile(String name, File f, ZipOutputStream zos, DigestOutputStream dos, Manifest m) throws IOException {
zos.putNextEntry(new ZipEntry(name));
- FileInputStream fis = FileUtils.openInputStream(f);
- IOUtils.copy(fis, dos);
- IOUtils.closeQuietly(fis);
- byte[] digets = dos.getMessageDigest().digest();
+ FileInputStream fis = new FileInputStream(f);
+ StreamUtils.write(fis, dos);
+ fis.close();
+ byte[] digest = dos.getMessageDigest().digest();
zos.closeEntry();
Attributes attr = new Attributes();
- attr.putValue("SHA1-Digest", eBase64(digets));
+ attr.putValue("SHA1-Digest", eBase64(digest));
m.getEntries().put(name, attr);
}
@@ -82,15 +83,11 @@ public class TinySign {
}, md), true, "UTF-8");
Manifest sf = new Manifest();
Map entries = manifest.getEntries();
- Iterator> iterator = entries.entrySet().iterator();
- while(iterator.hasNext()) {
- Entry entry = iterator.next();
+ for (Entry entry : entries.entrySet()) {
print.print("Name: " + entry.getKey() + "\r\n");
- Iterator> iter = entry.getValue().entrySet().iterator();
- while(iter.hasNext()) {
- Entry