6.7.0 - Alpha13 - Fine tuning
This commit is contained in:
@@ -62,7 +62,7 @@
|
|||||||
"打包应用无法正常使用 Paddle OCR 与 Rapid OCR 功能的问题",
|
"打包应用无法正常使用 Paddle OCR 与 Rapid OCR 功能的问题",
|
||||||
"版本历史页面部分系统因字体差别导致统计数据显示不完整的问题",
|
"版本历史页面部分系统因字体差别导致统计数据显示不完整的问题",
|
||||||
"部分设备无法正常初始化 MLKit Google OCR 的问题 (试修) _[`issue #8`](http://issues.autojs6.com/8#issuecomment-3117061768)_",
|
"部分设备无法正常初始化 MLKit Google OCR 的问题 (试修) _[`issue #8`](http://issues.autojs6.com/8#issuecomment-3117061768)_",
|
||||||
"ErrorDialogActivity 可能无法正常启动或短时间自动消失的问题 _[`issue #414`](http://issues.autojs6.com/414)_ _[`issue #340`](http://issues.autojs6.com/340#issuecomment-2973485826)_",
|
"ErrorDialogActivity 可能无法正常启动或短时间自动消失的问题 _[`issue #471`](http://issues.autojs6.com/471)_ _[`issue #414`](http://issues.autojs6.com/414)_ _[`issue #340`](http://issues.autojs6.com/340#issuecomment-2973485826)_",
|
||||||
"崩溃报告页面复制详细信息功能失效的问题",
|
"崩溃报告页面复制详细信息功能失效的问题",
|
||||||
"文件管理器删除项目文件夹后 UI 未能自动刷新的问题",
|
"文件管理器删除项目文件夹后 UI 未能自动刷新的问题",
|
||||||
"APK 文件类型信息对话框可能无法获取应用名称及 SDK 信息的问题",
|
"APK 文件类型信息对话框可能无法获取应用名称及 SDK 信息的问题",
|
||||||
|
|||||||
@@ -1,14 +1,14 @@
|
|||||||
{
|
{
|
||||||
"android_studio_latest_recommended_version_name": "Android Studio Otter 2 Feature Drop | 2025.2.2",
|
"android_studio_latest_recommended_version_name": "Android Studio Otter 2 Feature Drop | 2025.2.2 Patch 1",
|
||||||
"var_date_android_studio_latest_recommended_version_name": "2025/12/04",
|
"var_date_android_studio_latest_recommended_version_name": "2025/12/23",
|
||||||
"android_studio_latest_recommended_file_name_of_exe": "android-studio-2025.2.2.7-windows.exe",
|
"android_studio_latest_recommended_file_name_of_exe": "android-studio-2025.2.2.8-windows.exe",
|
||||||
"android_studio_latest_recommended_download_address_of_exe": "https://edgedl.me.gvt1.com/edgedl/android/studio/install/2025.2.2.7/android-studio-2025.2.2.7-windows.exe",
|
"android_studio_latest_recommended_download_address_of_exe": "https://redirector.gvt1.com/edgedl/android/studio/install/2025.2.2.8/android-studio-2025.2.2.8-windows.exe",
|
||||||
"android_studio_latest_recommended_file_size_of_exe": "1.34 GiB",
|
"android_studio_latest_recommended_file_size_of_exe": "1.34 GiB",
|
||||||
"android_studio_latest_recommended_file_name_of_zip": "android-studio-2025.2.2.7-windows.zip",
|
"android_studio_latest_recommended_file_name_of_zip": "android-studio-2025.2.2.8-windows.zip",
|
||||||
"android_studio_latest_recommended_download_address_of_zip": "https://edgedl.me.gvt1.com/edgedl/android/studio/ide-zips/2025.2.2.7/android-studio-2025.2.2.7-windows.zip",
|
"android_studio_latest_recommended_download_address_of_zip": "https://redirector.gvt1.com/edgedl/android/studio/ide-zips/2025.2.2.8/android-studio-2025.2.2.8-windows.zip",
|
||||||
"android_studio_latest_recommended_file_size_of_zip": "1.35 GiB",
|
"android_studio_latest_recommended_file_size_of_zip": "1.35 GiB",
|
||||||
"android_studio_latest_recommended_file_name_of_tar": "android-studio-2025.2.2.7-linux.tar.gz",
|
"android_studio_latest_recommended_file_name_of_tar": "android-studio-2025.2.2.8-linux.tar.gz",
|
||||||
"android_studio_latest_recommended_download_address_of_tar": "https://edgedl.me.gvt1.com/edgedl/android/studio/ide-zips/2025.2.2.7/android-studio-2025.2.2.7-linux.tar.gz",
|
"android_studio_latest_recommended_download_address_of_tar": "https://redirector.gvt1.com/edgedl/android/studio/ide-zips/2025.2.2.8/android-studio-2025.2.2.8-linux.tar.gz",
|
||||||
"android_studio_latest_recommended_file_size_of_tar": "1.38 GiB",
|
"android_studio_latest_recommended_file_size_of_tar": "1.38 GiB",
|
||||||
"var_date_contribution_table_data_updated": "2025/09/06",
|
"var_date_contribution_table_data_updated": "2025/09/06",
|
||||||
"latest_rhino_engine_name_with_github_lineno_address": "[v2.0.0-SNAPSHOT](http://rhino.autojs6.com/blob/master/gradle.properties#L3)",
|
"latest_rhino_engine_name_with_github_lineno_address": "[v2.0.0-SNAPSHOT](http://rhino.autojs6.com/blob/master/gradle.properties#L3)",
|
||||||
|
|||||||
@@ -29,7 +29,6 @@ import org.autojs.autojs.runtime.api.Shell
|
|||||||
import org.autojs.autojs.runtime.api.WrappedShizuku
|
import org.autojs.autojs.runtime.api.WrappedShizuku
|
||||||
import org.autojs.autojs.script.AutoFileSource
|
import org.autojs.autojs.script.AutoFileSource
|
||||||
import org.autojs.autojs.script.JavaScriptSource
|
import org.autojs.autojs.script.JavaScriptSource
|
||||||
import org.autojs.autojs.theme.ThemeColorManager
|
|
||||||
import org.autojs.autojs.tool.UiHandler
|
import org.autojs.autojs.tool.UiHandler
|
||||||
import org.autojs.autojs.util.StringUtils
|
import org.autojs.autojs.util.StringUtils
|
||||||
import org.autojs.autojs.util.ViewUtils
|
import org.autojs.autojs.util.ViewUtils
|
||||||
|
|||||||
@@ -57,10 +57,9 @@ public class GlobalActionRecorder implements Recorder.OnStateChangedListener {
|
|||||||
return new TouchRecorder(mContext) {
|
return new TouchRecorder(mContext) {
|
||||||
@Override
|
@Override
|
||||||
protected InputEventRecorder createInputEventRecorder() {
|
protected InputEventRecorder createInputEventRecorder() {
|
||||||
if (Pref.rootRecordGeneratesBinary())
|
return Pref.rootRecordGeneratesBinary()
|
||||||
return new InputEventToAutoFileRecorder(mContext);
|
? new InputEventToAutoFileRecorder(mContext)
|
||||||
else
|
: new InputEventToRootAutomatorRecorder();
|
||||||
return new InputEventToRootAutomatorRecorder();
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@@ -86,8 +85,9 @@ public class GlobalActionRecorder implements Recorder.OnStateChangedListener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public int getState() {
|
public int getState() {
|
||||||
if (mTouchRecorder == null)
|
if (mTouchRecorder == null) {
|
||||||
return Recorder.STATE_NOT_START;
|
return Recorder.STATE_NOT_START;
|
||||||
|
}
|
||||||
return mTouchRecorder.getState();
|
return mTouchRecorder.getState();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -116,10 +116,11 @@ public class GlobalActionRecorder implements Recorder.OnStateChangedListener {
|
|||||||
}
|
}
|
||||||
if (!mDiscard) {
|
if (!mDiscard) {
|
||||||
String code = getCode();
|
String code = getCode();
|
||||||
if (code != null)
|
if (code != null) {
|
||||||
handleRecordedScript(code);
|
handleRecordedScript(code);
|
||||||
else
|
} else {
|
||||||
handleRecordedFile(getPath());
|
handleRecordedFile(getPath());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
for (Recorder.OnStateChangedListener listener : mOnStateChangedListeners) {
|
for (Recorder.OnStateChangedListener listener : mOnStateChangedListeners) {
|
||||||
listener.onStop();
|
listener.onStop();
|
||||||
@@ -154,14 +155,13 @@ public class GlobalActionRecorder implements Recorder.OnStateChangedListener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void handleRecordedFile(final String path) {
|
private void handleRecordedFile(final String path) {
|
||||||
if (isBackgroundThread()) {
|
if (isMainThread()) {
|
||||||
|
new ScriptOperations(mContext, null)
|
||||||
|
.importFile(path)
|
||||||
|
.subscribe();
|
||||||
|
} else {
|
||||||
GlobalAppContext.post(() -> handleRecordedFile(path));
|
GlobalAppContext.post(() -> handleRecordedFile(path));
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
new ScriptOperations(mContext, null)
|
|
||||||
.importFile(path)
|
|
||||||
.subscribe();
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void showRecordHandleDialog(final String script) {
|
private void showRecordHandleDialog(final String script) {
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ import kotlin.math.roundToLong
|
|||||||
*/
|
*/
|
||||||
class VersionInfo : ExtendedVersionInfo {
|
class VersionInfo : ExtendedVersionInfo {
|
||||||
|
|
||||||
var versionName: String = ""
|
var versionName = ""
|
||||||
private set
|
private set
|
||||||
|
|
||||||
var versionCode = 0L
|
var versionCode = 0L
|
||||||
@@ -43,7 +43,7 @@ class VersionInfo : ExtendedVersionInfo {
|
|||||||
Log.d(TAG, "versionName: $versionName")
|
Log.d(TAG, "versionName: $versionName")
|
||||||
}
|
}
|
||||||
if (versionCode <= 0 && line.contains(regexVersionCode)) {
|
if (versionCode <= 0 && line.contains(regexVersionCode)) {
|
||||||
versionCode = regexVersionCode.find(line)?.groupValues?.get(1)?.toDouble()?.roundToLong() ?: -1L
|
versionCode = regexVersionCode.find(line)?.groupValues?.get(1)?.toDoubleOrNull()?.roundToLong() ?: -1L
|
||||||
Log.d(TAG, "versionCode: $versionCode")
|
Log.d(TAG, "versionCode: $versionCode")
|
||||||
}
|
}
|
||||||
if (versionName.isNotBlank() && versionCode > 0) {
|
if (versionName.isNotBlank() && versionCode > 0) {
|
||||||
|
|||||||
@@ -66,13 +66,13 @@ class DocumentationActivity : BaseActivity() {
|
|||||||
(function() {
|
(function() {
|
||||||
let mainElements = document.querySelectorAll('main > *');
|
let mainElements = document.querySelectorAll('main > *');
|
||||||
if (mainElements.length > 0) {
|
if (mainElements.length > 0) {
|
||||||
// Online docs (zh-CN: 在线文档)
|
// Online docs. (zh-CN: 在线文档.)
|
||||||
mainElements.forEach(ele => {
|
mainElements.forEach(ele => {
|
||||||
let basePaddingBottom = ele.className === 'sidebar-toggle' ? 10 : 0;
|
let basePaddingBottom = ele.className === 'sidebar-toggle' ? 10 : 0;
|
||||||
ele.style.paddingBottom = (basePaddingBottom + ${systemBarInsetsBottom}) / window.devicePixelRatio + 'px';
|
ele.style.paddingBottom = (basePaddingBottom + ${systemBarInsetsBottom}) / window.devicePixelRatio + 'px';
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
// Local docs (zh-CN: 本地文档)
|
// Local docs. (zh-CN: 本地文档.)
|
||||||
document.body.style.paddingBottom = '${systemBarInsetsBottom}px';
|
document.body.style.paddingBottom = '${systemBarInsetsBottom}px';
|
||||||
}
|
}
|
||||||
})();
|
})();
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ import java.text.MessageFormat;
|
|||||||
/**
|
/**
|
||||||
* Created by Stardust on Oct 18, 2017.
|
* Created by Stardust on Oct 18, 2017.
|
||||||
*/
|
*/
|
||||||
public class CircularMenu implements Recorder.OnStateChangedListener, LayoutInspector.CaptureAvailableListener {
|
public class CircularMenu implements LayoutInspector.CaptureAvailableListener {
|
||||||
|
|
||||||
public record StateChangeEvent(int currentState, int previousState) {
|
public record StateChangeEvent(int currentState, int previousState) {
|
||||||
/* Empty record body. */
|
/* Empty record body. */
|
||||||
@@ -67,6 +67,7 @@ public class CircularMenu implements Recorder.OnStateChangedListener, LayoutInsp
|
|||||||
private RoundedImageView mActionViewIcon;
|
private RoundedImageView mActionViewIcon;
|
||||||
private Context mContext;
|
private Context mContext;
|
||||||
private final GlobalActionRecorder mRecorder;
|
private final GlobalActionRecorder mRecorder;
|
||||||
|
private final Recorder.OnStateChangedListener mRecorderStateListener;
|
||||||
private CircularActionMenuBinding binding;
|
private CircularActionMenuBinding binding;
|
||||||
private MaterialDialog mSettingsDialog;
|
private MaterialDialog mSettingsDialog;
|
||||||
private MaterialDialog mLayoutInspectDialog;
|
private MaterialDialog mLayoutInspectDialog;
|
||||||
@@ -90,7 +91,28 @@ public class CircularMenu implements Recorder.OnStateChangedListener, LayoutInsp
|
|||||||
initFloaty();
|
initFloaty();
|
||||||
setupWindowListeners();
|
setupWindowListeners();
|
||||||
mRecorder = GlobalActionRecorder.getSingleton(context);
|
mRecorder = GlobalActionRecorder.getSingleton(context);
|
||||||
mRecorder.addOnStateChangedListener(this);
|
mRecorderStateListener = new Recorder.OnStateChangedListener() {
|
||||||
|
@Override
|
||||||
|
public void onStart() {
|
||||||
|
setState(STATE_RECORDING);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onStop() {
|
||||||
|
setState(STATE_NORMAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onPause() {
|
||||||
|
/* Empty body. */
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onResume() {
|
||||||
|
/* Empty body. */
|
||||||
|
}
|
||||||
|
};
|
||||||
|
mRecorder.addOnStateChangedListener(mRecorderStateListener);
|
||||||
AutoJs.getInstance().getLayoutInspector().addCaptureAvailableListener(this);
|
AutoJs.getInstance().getLayoutInspector().addCaptureAvailableListener(this);
|
||||||
mA11yTool = new AccessibilityTool(mContext);
|
mA11yTool = new AccessibilityTool(mContext);
|
||||||
}
|
}
|
||||||
@@ -373,28 +395,8 @@ public class CircularMenu implements Recorder.OnStateChangedListener, LayoutInsp
|
|||||||
EventBus.getDefault().post(new StateChangeEvent(STATE_CLOSED, mState));
|
EventBus.getDefault().post(new StateChangeEvent(STATE_CLOSED, mState));
|
||||||
mState = STATE_CLOSED;
|
mState = STATE_CLOSED;
|
||||||
}
|
}
|
||||||
mRecorder.removeOnStateChangedListener(this);
|
mRecorder.removeOnStateChangedListener(mRecorderStateListener);
|
||||||
AutoJs.getInstance().getLayoutInspector().removeCaptureAvailableListener(this);
|
AutoJs.getInstance().getLayoutInspector().removeCaptureAvailableListener(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onStart() {
|
|
||||||
setState(STATE_RECORDING);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onStop() {
|
|
||||||
setState(STATE_NORMAL);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onPause() {
|
|
||||||
/* Empty body. */
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onResume() {
|
|
||||||
/* Empty body. */
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,51 +1,21 @@
|
|||||||
package org.autojs.autojs.util;
|
package org.autojs.autojs.util;
|
||||||
|
|
||||||
|
import org.autojs.autojs.runtime.api.augment.util.VersionCodesInfoGenerated;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by Stardust on Apr 3, 2017.
|
* Created by Stardust on Apr 3, 2017.
|
||||||
* Modified by SuperMonster003 as of Feb 5, 2022.
|
* Modified by SuperMonster003 as of Feb 5, 2022.
|
||||||
*/
|
*/
|
||||||
public class SdkVersionUtils {
|
public class SdkVersionUtils {
|
||||||
|
|
||||||
private static final String[] SDK_VERSIONS = {
|
|
||||||
/* placeholder */ null,
|
|
||||||
/* api: 1 */ "1.0",
|
|
||||||
/* api: 2 */ "1.1",
|
|
||||||
/* api: 3 */ "1.5",
|
|
||||||
/* api: 4 */ "1.6",
|
|
||||||
/* api: 5 */ "2.0",
|
|
||||||
/* api: 6 */ "2.0.1",
|
|
||||||
/* api: 7 */ "2.1.x",
|
|
||||||
/* api: 8 */ "2.2.x",
|
|
||||||
/* api: 9 */ "2.3",
|
|
||||||
/* api: 10 */ "2.3.3",
|
|
||||||
/* api: 11 */ "3.0.x",
|
|
||||||
/* api: 12 */ "3.1.x",
|
|
||||||
/* api: 13 */ "3.2",
|
|
||||||
/* api: 14 */ "4.0",
|
|
||||||
/* api: 15 */ "4.0.3",
|
|
||||||
/* api: 16 */ "4.1",
|
|
||||||
/* api: 17 */ "4.2",
|
|
||||||
/* api: 18 */ "4.3",
|
|
||||||
/* api: 19 */ "4.4.2",
|
|
||||||
/* api: 20 */ "4.4W",
|
|
||||||
/* api: 21 */ "5.0",
|
|
||||||
/* api: 22 */ "5.1",
|
|
||||||
/* api: 23 */ "6.0",
|
|
||||||
/* api: 24 */ "7.0",
|
|
||||||
/* api: 25 */ "7.1",
|
|
||||||
/* api: 26 */ "8.0",
|
|
||||||
/* api: 27 */ "8.1",
|
|
||||||
/* api: 28 */ "9",
|
|
||||||
/* api: 29 */ "10",
|
|
||||||
/* api: 30 */ "11",
|
|
||||||
/* api: 31 */ "12",
|
|
||||||
/* api: 32 */ "12.1",
|
|
||||||
/* api: 33 */ "13",
|
|
||||||
/* api: 34 */ "14"
|
|
||||||
};
|
|
||||||
|
|
||||||
public static String sdkIntToString(int i) {
|
public static String sdkIntToString(int i) {
|
||||||
return i >= 1 && i <= SDK_VERSIONS.length ? SDK_VERSIONS[i] : "Unknown";
|
for (int j = 0; j < VersionCodesInfoGenerated.list.size(); j++) {
|
||||||
|
var versionCodesInfo = VersionCodesInfoGenerated.list.get(j);
|
||||||
|
if (versionCodesInfo.getApiLevel().equals(String.valueOf(i))) {
|
||||||
|
return versionCodesInfo.getPlatformVersion();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return "Unknown";
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#Sun Dec 21 20:52:44 GMT+8 2025
|
#Wed Dec 24 13:29:17 GMT+8 2025
|
||||||
253.28294.334.2531.14612490=2025.3.1.1
|
253.28294.334.2531.14612490=2025.3.1.1
|
||||||
252.28238.7.2523.14608894=2025.2.3.6
|
252.28238.7.2523.14608894=2025.2.3.6
|
||||||
252.28238.7.2523.14575018=2025.2.3.5
|
252.28238.7.2523.14575018=2025.2.3.5
|
||||||
@@ -6,6 +6,7 @@
|
|||||||
252.28238.7.2523.14499447=2025.2.3.3
|
252.28238.7.2523.14499447=2025.2.3.3
|
||||||
252.27397.103.2523.14473358=2025.2.3.2
|
252.27397.103.2523.14473358=2025.2.3.2
|
||||||
252.27397.103.2523.14431943=2025.2.3.1
|
252.27397.103.2523.14431943=2025.2.3.1
|
||||||
|
252.27397.103.2522.14617522=2025.2.2.8
|
||||||
252.27397.103.2522.14514259=2025.2.2.7
|
252.27397.103.2522.14514259=2025.2.2.7
|
||||||
252.27397.103.2522.14468004=2025.2.2.6
|
252.27397.103.2522.14468004=2025.2.2.6
|
||||||
252.27397.103.2522.14425743=2025.2.2.5
|
252.27397.103.2522.14425743=2025.2.2.5
|
||||||
|
|||||||
@@ -55,7 +55,7 @@ public class Type {
|
|||||||
if (lang != null) {
|
if (lang != null) {
|
||||||
// At least keep valid language.
|
// At least keep valid language.
|
||||||
// zh-CN: 至少保留合法 language.
|
// zh-CN: 至少保留合法 language.
|
||||||
tmpLocale = new Locale(lang);
|
tmpLocale = Locale.forLanguageTag(lang);
|
||||||
} else {
|
} else {
|
||||||
tmpLocale = Locale.ROOT;
|
tmpLocale = Locale.ROOT;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user