From e56682162e35a0429bc1f86fe390a78960c60a93 Mon Sep 17 00:00:00 2001 From: hyb1996 <946994919@qq.com> Date: Thu, 11 Oct 2018 12:00:50 +0800 Subject: [PATCH] fix some bugs --- .idea/caches/build_file_checksums.ser | Bin 733 -> 733 bytes .../java/org/autojs/autojs/autojs/AutoJs.java | 2 +- .../autojs/autojs/external/ScriptIntents.java | 1 + .../autojs/autojs/model/script/Scripts.java | 6 +- .../ui/floating/FullScreenFloatyWindow.java | 2 +- .../LayoutBoundsFloatyWindow.java | 3 +- .../LayoutHierarchyFloatyWindow.java | 3 +- .../autojs/ui/project/BuildActivity.java | 24 ++++++-- .../ui/project/ProjectConfigActivity.java | 22 +++++++- .../ui/timing/TimedTaskSettingActivity.java | 10 +++- app/src/main/res/values/strings.xml | 1 + .../main/java/com/stardust/autojs/AutoJs.java | 6 +- .../autojs/core/console/StardustConsole.java | 10 ++++ .../floaty/BaseResizableFloatyWindow.java | 10 +++- .../autojs/core/image/ColorFinder.java | 3 +- .../autojs/core/image/ImageWrapper.java | 4 ++ .../core/ui/dialog/BlockedMaterialDialog.java | 10 +++- .../autojs/core/ui/dialog/JsDialog.java | 11 +++- .../autojs/engine/RhinoJavaScriptEngine.java | 1 + .../rhino/NativeJavaClassWithPrototype.java | 2 +- .../rhino/NativeJavaObjectWithPrototype.java | 8 +++ .../java/com/stardust/automator/UiObject.java | 1 + .../main/java/com/stardust/pio/PFiles.java | 52 ++++++++++-------- .../stardust/auojs/inrt/SplashActivity.java | 18 ++++-- .../inrt/launch/AssetsProjectLauncher.java | 10 +++- 25 files changed, 168 insertions(+), 52 deletions(-) diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser index 85995d5c628d86e1bb64e4c5aa80f5d52bb10222..3d62b90f9716cee1284d9668941e3f1c1ef809e9 100644 GIT binary patch delta 15 Xcmcc1dY5&=43@Y_^_&~$I5GhMG%^MG delta 15 Xcmcc1dY5&=43?OJ@ saveProjectConfig(), e -> { @@ -209,10 +212,25 @@ public class ProjectConfigActivity extends BaseActivity { inputValid &= checkNotEmpty(mAppName); inputValid &= checkNotEmpty(mVersionCode); inputValid &= checkNotEmpty(mVersionName); - inputValid &= checkNotEmpty(mPackageName); + inputValid &= checkPackageNameValid(mPackageName); return inputValid; } + private boolean checkPackageNameValid(TextInputEditText editText) { + Editable text = editText.getText(); + String hint = ((TextInputLayout) editText.getParent().getParent()).getHint().toString(); + if(TextUtils.isEmpty(text)){ + editText.setError(hint + getString(R.string.text_should_not_be_empty)); + return false; + } + if(!REGEX_PACKAGE_NAME.matcher(text).matches()){ + editText.setError(getString(R.string.text_invalid_package_name)); + return false; + } + return true; + + } + private boolean checkNotEmpty(TextInputEditText editText) { if (!TextUtils.isEmpty(editText.getText())) return true; diff --git a/app/src/main/java/org/autojs/autojs/ui/timing/TimedTaskSettingActivity.java b/app/src/main/java/org/autojs/autojs/ui/timing/TimedTaskSettingActivity.java index a4d4ce31..5c963612 100644 --- a/app/src/main/java/org/autojs/autojs/ui/timing/TimedTaskSettingActivity.java +++ b/app/src/main/java/org/autojs/autojs/ui/timing/TimedTaskSettingActivity.java @@ -2,6 +2,7 @@ package org.autojs.autojs.ui.timing; import android.app.DatePickerDialog; import android.app.TimePickerDialog; +import android.content.ActivityNotFoundException; import android.content.Intent; import android.graphics.ColorFilter; import android.net.ConnectivityManager; @@ -346,8 +347,13 @@ public class TimedTaskSettingActivity extends BaseActivity { public boolean onOptionsItemSelected(MenuItem item) { if (item.getItemId() == R.id.action_done) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && !((PowerManager) getSystemService(POWER_SERVICE)).isIgnoringBatteryOptimizations(getPackageName())) { - startActivityForResult(new Intent().setAction(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS) - .setData(Uri.parse("package:" + getPackageName())), REQUEST_CODE_IGNORE_BATTERY); + try{ + startActivityForResult(new Intent().setAction(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS) + .setData(Uri.parse("package:" + getPackageName())), REQUEST_CODE_IGNORE_BATTERY); + }catch(ActivityNotFoundException e){ + e.printStackTrace(); + createOrUpdateTask(); + } } else { createOrUpdateTask(); } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 0b17927a..53c5f5d7 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -422,4 +422,5 @@ 每分钟一次 某些设置(屏幕方向,地区等)更改时 正则表达式错误 + 非法包名 diff --git a/autojs/src/main/java/com/stardust/autojs/AutoJs.java b/autojs/src/main/java/com/stardust/autojs/AutoJs.java index 3ed9b9ac..f6de2cbe 100644 --- a/autojs/src/main/java/com/stardust/autojs/AutoJs.java +++ b/autojs/src/main/java/com/stardust/autojs/AutoJs.java @@ -54,7 +54,7 @@ public abstract class AutoJs { private final AccessibilityInfoProvider mAccessibilityInfoProvider; private final ScreenCaptureRequester mScreenCaptureRequester = new ScreenCaptureRequesterImpl(); private final ScriptEngineService mScriptEngineService; - private final Console mGlobalConsole; + private final GlobalStardustConsole mGlobalConsole; protected AutoJs(final Application application) { @@ -70,7 +70,7 @@ public abstract class AutoJs { init(); } - protected Console createGlobalConsole() { + protected GlobalStardustConsole createGlobalConsole() { return new GlobalStardustConsole(mUiHandler); } @@ -161,7 +161,7 @@ public abstract class AutoJs { return mLayoutInspector; } - public Console getGlobalConsole() { + public GlobalStardustConsole getGlobalConsole() { return mGlobalConsole; } diff --git a/autojs/src/main/java/com/stardust/autojs/core/console/StardustConsole.java b/autojs/src/main/java/com/stardust/autojs/core/console/StardustConsole.java index 0ed26141..69be948b 100644 --- a/autojs/src/main/java/com/stardust/autojs/core/console/StardustConsole.java +++ b/autojs/src/main/java/com/stardust/autojs/core/console/StardustConsole.java @@ -3,6 +3,7 @@ package com.stardust.autojs.core.console; import android.content.Context; import android.content.Intent; import android.support.annotation.NonNull; +import android.util.Log; import android.view.WindowManager; import com.stardust.autojs.R; @@ -17,6 +18,8 @@ import com.stardust.enhancedfloaty.ResizableExpandableFloatyWindow; import com.stardust.util.UiHandler; import com.stardust.util.ViewUtil; +import java.io.PrintWriter; +import java.io.StringWriter; import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.concurrent.ArrayBlockingQueue; @@ -115,6 +118,13 @@ public class StardustConsole extends AbstractConsole { return mLogs; } + public void printStackTrace(Throwable t) { + StringWriter out = new StringWriter(); + PrintWriter printWriter = new PrintWriter(out); + t.printStackTrace(printWriter); + println(android.util.Log.ERROR, t.toString()); + } + @Override public String println(int level, CharSequence charSequence) { Log log = new Log(mIdCounter.getAndIncrement(), level, charSequence, true); diff --git a/autojs/src/main/java/com/stardust/autojs/core/floaty/BaseResizableFloatyWindow.java b/autojs/src/main/java/com/stardust/autojs/core/floaty/BaseResizableFloatyWindow.java index 8ad0dde7..70c5de05 100644 --- a/autojs/src/main/java/com/stardust/autojs/core/floaty/BaseResizableFloatyWindow.java +++ b/autojs/src/main/java/com/stardust/autojs/core/floaty/BaseResizableFloatyWindow.java @@ -2,10 +2,12 @@ package com.stardust.autojs.core.floaty; import android.content.Context; import android.graphics.PixelFormat; +import android.os.Build; import android.support.annotation.Nullable; import android.view.Gravity; import android.view.View; import android.view.ViewGroup; +import android.view.Window; import android.view.WindowManager; import android.widget.FrameLayout; @@ -115,10 +117,16 @@ public class BaseResizableFloatyWindow extends ResizableFloatyWindow { } private WindowManager.LayoutParams createWindowLayoutParams() { + int type; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY; + } else { + type = WindowManager.LayoutParams.TYPE_PHONE; + } WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams( WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.WRAP_CONTENT, - WindowManager.LayoutParams.TYPE_PHONE, + type, WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL | WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, PixelFormat.TRANSLUCENT); layoutParams.gravity = Gravity.TOP | Gravity.START; diff --git a/autojs/src/main/java/com/stardust/autojs/core/image/ColorFinder.java b/autojs/src/main/java/com/stardust/autojs/core/image/ColorFinder.java index 6392b5f0..38eb8f6d 100644 --- a/autojs/src/main/java/com/stardust/autojs/core/image/ColorFinder.java +++ b/autojs/src/main/java/com/stardust/autojs/core/image/ColorFinder.java @@ -112,7 +112,8 @@ public class ColorFinder { ColorDetector colorDetector = new ColorDetector.DifferenceDetector(color, threshold); x += startingPoint.x; y += startingPoint.y; - if (x >= image.getWidth() || y >= image.getHeight()) { + if (x >= image.getWidth() || y >= image.getHeight() + || x < 0 || y < 0) { return false; } int c = image.pixel(x, y); diff --git a/autojs/src/main/java/com/stardust/autojs/core/image/ImageWrapper.java b/autojs/src/main/java/com/stardust/autojs/core/image/ImageWrapper.java index 6a328ce6..75afd7dd 100644 --- a/autojs/src/main/java/com/stardust/autojs/core/image/ImageWrapper.java +++ b/autojs/src/main/java/com/stardust/autojs/core/image/ImageWrapper.java @@ -81,14 +81,17 @@ public class ImageWrapper { } public int getWidth() { + ensureNotRecycled(); return mWidth; } public int getHeight() { + ensureNotRecycled(); return mHeight; } public Mat getMat() { + ensureNotRecycled(); if (mMat == null && mBitmap != null) { mMat = new Mat(); Utils.bitmapToMat(mBitmap, mMat); @@ -119,6 +122,7 @@ public class ImageWrapper { } public Bitmap getBitmap() { + ensureNotRecycled(); return mBitmap; } diff --git a/autojs/src/main/java/com/stardust/autojs/core/ui/dialog/BlockedMaterialDialog.java b/autojs/src/main/java/com/stardust/autojs/core/ui/dialog/BlockedMaterialDialog.java index b84f30df..57cc2951 100644 --- a/autojs/src/main/java/com/stardust/autojs/core/ui/dialog/BlockedMaterialDialog.java +++ b/autojs/src/main/java/com/stardust/autojs/core/ui/dialog/BlockedMaterialDialog.java @@ -3,8 +3,10 @@ package com.stardust.autojs.core.ui.dialog; import android.app.Activity; import android.content.Context; import android.content.ContextWrapper; +import android.os.Build; import android.os.Looper; import android.support.annotation.Nullable; +import android.view.Window; import android.view.WindowManager; import com.afollestad.materialdialogs.DialogAction; @@ -29,7 +31,13 @@ public class BlockedMaterialDialog extends MaterialDialog { @Override public void show() { if (!isActivityContext(getContext())) { - getWindow().setType(WindowManager.LayoutParams.TYPE_PHONE); + int type; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY; + } else { + type = WindowManager.LayoutParams.TYPE_PHONE; + } + getWindow().setType(type); } super.show(); } diff --git a/autojs/src/main/java/com/stardust/autojs/core/ui/dialog/JsDialog.java b/autojs/src/main/java/com/stardust/autojs/core/ui/dialog/JsDialog.java index b3b7da89..15b94c4d 100644 --- a/autojs/src/main/java/com/stardust/autojs/core/ui/dialog/JsDialog.java +++ b/autojs/src/main/java/com/stardust/autojs/core/ui/dialog/JsDialog.java @@ -79,8 +79,15 @@ public class JsDialog { Context context = mDialog.getContext(); if (!DialogUtils.isActivityContext(context)) { Window window = mDialog.getWindow(); - if (window != null) - window.setType(WindowManager.LayoutParams.TYPE_PHONE); + if (window != null){ + int type; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY; + } else { + type = WindowManager.LayoutParams.TYPE_PHONE; + } + window.setType(type); + } } } diff --git a/autojs/src/main/java/com/stardust/autojs/engine/RhinoJavaScriptEngine.java b/autojs/src/main/java/com/stardust/autojs/engine/RhinoJavaScriptEngine.java index 9f491a38..1457471d 100644 --- a/autojs/src/main/java/com/stardust/autojs/engine/RhinoJavaScriptEngine.java +++ b/autojs/src/main/java/com/stardust/autojs/engine/RhinoJavaScriptEngine.java @@ -193,6 +193,7 @@ public class RhinoJavaScriptEngine extends JavaScriptEngine { } return super.wrap(cx, scope, obj, staticType); } + } private static class InterruptibleAndroidContextFactory extends AndroidContextFactory { diff --git a/autojs/src/main/java/com/stardust/autojs/rhino/NativeJavaClassWithPrototype.java b/autojs/src/main/java/com/stardust/autojs/rhino/NativeJavaClassWithPrototype.java index 8541f020..e8c15cb9 100644 --- a/autojs/src/main/java/com/stardust/autojs/rhino/NativeJavaClassWithPrototype.java +++ b/autojs/src/main/java/com/stardust/autojs/rhino/NativeJavaClassWithPrototype.java @@ -14,7 +14,7 @@ import java.util.concurrent.ConcurrentHashMap; public class NativeJavaClassWithPrototype extends NativeJavaClass { private static final Object NULL = new Object(); - private ConcurrentHashMap mProperties = new ConcurrentHashMap(); + private ConcurrentHashMap mProperties = new ConcurrentHashMap<>(); public NativeJavaClassWithPrototype(Scriptable scope, Class javaClass) { super(scope, javaClass); diff --git a/autojs/src/main/java/com/stardust/autojs/rhino/NativeJavaObjectWithPrototype.java b/autojs/src/main/java/com/stardust/autojs/rhino/NativeJavaObjectWithPrototype.java index 0a5ae184..40970374 100644 --- a/autojs/src/main/java/com/stardust/autojs/rhino/NativeJavaObjectWithPrototype.java +++ b/autojs/src/main/java/com/stardust/autojs/rhino/NativeJavaObjectWithPrototype.java @@ -14,6 +14,14 @@ public class NativeJavaObjectWithPrototype extends NativeJavaObject { super(scope, javaObject, staticType); } + public NativeJavaObjectWithPrototype(Scriptable scope, Object javaObject, Class staticType, boolean isAdapter) { + super(scope, javaObject, staticType, isAdapter); + } + + public NativeJavaObjectWithPrototype() { + } + + @Override public boolean has(String name, Scriptable start) { return super.has(name, start) || (prototype != null && prototype.has(name, start)) diff --git a/automator/src/main/java/com/stardust/automator/UiObject.java b/automator/src/main/java/com/stardust/automator/UiObject.java index 477fb2a8..e3703366 100644 --- a/automator/src/main/java/com/stardust/automator/UiObject.java +++ b/automator/src/main/java/com/stardust/automator/UiObject.java @@ -63,6 +63,7 @@ public class UiObject extends AccessibilityNodeInfoCompat { mIndexInParent = indexInParent; if (DEBUG) mStackTrace = Arrays.toString(Thread.currentThread().getStackTrace()); + } diff --git a/common/src/main/java/com/stardust/pio/PFiles.java b/common/src/main/java/com/stardust/pio/PFiles.java index b304b98a..d61825c6 100644 --- a/common/src/main/java/com/stardust/pio/PFiles.java +++ b/common/src/main/java/com/stardust/pio/PFiles.java @@ -4,6 +4,8 @@ import android.app.NativeActivity; import android.content.Context; import android.content.res.AssetManager; import android.os.Environment; +import android.text.TextUtils; +import android.util.Log; import com.stardust.util.Func1; @@ -18,6 +20,7 @@ import java.io.InputStream; import java.io.OutputStream; import java.io.RandomAccessFile; import java.nio.charset.Charset; +import java.util.Arrays; import java.util.Locale; /** @@ -284,31 +287,36 @@ public class PFiles { } - public static boolean copyAssetDir(Context context, String assetsDir, String toDir) { + public static void copyAssetDir(Context context, String assetsDir, String toDir, String[] list) throws IOException { new File(toDir).mkdirs(); AssetManager manager = context.getAssets(); - try { - String[] list = manager.list(assetsDir); - if (list == null) - return false; - for (String file : list) { - InputStream stream; - try { - stream = manager.open(join(assetsDir, file)); - } catch (IOException e) { - if (!copyAssetDir(context, join(assetsDir, file), join(toDir, file))) { - return false; - } - continue; - } - copyStream(stream, join(toDir, file)); - } - } catch (IOException e) { - e.printStackTrace(); - return false; + if (list == null) { + list = manager.list(assetsDir); + } + if (list == null) + throw new IOException("not a directory: " + assetsDir); + for (String file : list) { + if(TextUtils.isEmpty(file)){ + continue; + } + String fullAssetsPath = join(assetsDir, file); + String[] children = manager.list(fullAssetsPath); + if (children == null || children.length == 0) { + InputStream stream = null; + try { + stream = manager.open(fullAssetsPath); + copyStream(stream, join(toDir, file)); + } catch (IOException e) { + throw e; + } finally { + if (stream != null) { + stream.close(); + } + } + } else { + copyAssetDir(context, fullAssetsPath, join(toDir, file), children); + } } - return true; - } public static String renameWithoutExtensionAndReturnNewPath(String path, String newName) { diff --git a/inrt/src/main/java/com/stardust/auojs/inrt/SplashActivity.java b/inrt/src/main/java/com/stardust/auojs/inrt/SplashActivity.java index 63080711..6b35b91e 100644 --- a/inrt/src/main/java/com/stardust/auojs/inrt/SplashActivity.java +++ b/inrt/src/main/java/com/stardust/auojs/inrt/SplashActivity.java @@ -12,17 +12,16 @@ import android.support.annotation.Nullable; import android.support.annotation.RequiresApi; import android.support.v7.app.AppCompatActivity; import android.widget.TextView; +import android.widget.Toast; -import com.stardust.auojs.inrt.launch.AssetsProjectLauncher; +import com.stardust.auojs.inrt.autojs.AutoJs; import com.stardust.auojs.inrt.launch.GlobalProjectLauncher; import com.stardust.autojs.core.image.OpenCVHelper; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; import static android.content.pm.PackageManager.PERMISSION_DENIED; -import static android.content.pm.PackageManager.PERMISSION_GRANTED; /** * Created by Stardust on 2018/2/2. @@ -58,7 +57,18 @@ public class SplashActivity extends AppCompatActivity { private void runScript() { - new Thread(() -> GlobalProjectLauncher.getInstance().launch(this)).start(); + new Thread(() -> { + try { + GlobalProjectLauncher.getInstance().launch(this); + } catch (Exception e) { + e.printStackTrace(); + runOnUiThread(() -> { + Toast.makeText(SplashActivity.this, e.getMessage(), Toast.LENGTH_LONG).show(); + startActivity(new Intent(SplashActivity.this, LogActivity.class)); + AutoJs.getInstance().getGlobalConsole().printStackTrace(e); + }); + } + }).start(); } @Override diff --git a/inrt/src/main/java/com/stardust/auojs/inrt/launch/AssetsProjectLauncher.java b/inrt/src/main/java/com/stardust/auojs/inrt/launch/AssetsProjectLauncher.java index e8845c27..2c63012e 100644 --- a/inrt/src/main/java/com/stardust/auojs/inrt/launch/AssetsProjectLauncher.java +++ b/inrt/src/main/java/com/stardust/auojs/inrt/launch/AssetsProjectLauncher.java @@ -17,8 +17,10 @@ import com.stardust.autojs.execution.ScriptExecution; import com.stardust.autojs.project.ProjectConfig; import com.stardust.autojs.script.JavaScriptFileSource; import com.stardust.pio.PFiles; +import com.stardust.pio.UncheckedIOException; import java.io.File; +import java.io.IOException; /** * Created by Stardust on 2018/1/24. @@ -86,8 +88,12 @@ public class AssetsProjectLauncher { TextUtils.equals(projectConfig.getBuildInfo().getBuildId(), mProjectConfig.getBuildInfo().getBuildId())) { return; } - PFiles.deleteRecursively(new File(mAssetsProjectDir)); - PFiles.copyAssetDir(mActivity, mAssetsProjectDir, mProjectDir); + PFiles.deleteRecursively(new File(mProjectDir)); + try { + PFiles.copyAssetDir(mActivity, mAssetsProjectDir, mProjectDir, null); + } catch (IOException e) { + throw new UncheckedIOException(e); + } } }