diff --git a/app/build.gradle b/app/build.gradle
index 8a6d71b3..7bc80ffe 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -76,6 +76,7 @@ dependencies {
compile group:'com.twofortyfouram', name:'android-plugin-client-sdk-for-locale', version:'[4.0.2, 5.0['
compile 'com.android.volley:volley:1.0.0'
compile 'com.github.hyb1996:EnhancedFloaty:0.11'
+ compile 'com.android.support:multidex:1.0.1'
compile(name: 'libtermexec-release', ext: 'aar')
compile(name: 'emulatorview-release', ext: 'aar')
compile(name: 'term-debug', ext: 'aar')
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 19671223..b69ce066 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -77,13 +77,13 @@
+
-
diff --git a/app/src/main/assets/numbers/0.png b/app/src/main/assets/numbers/0.png
deleted file mode 100644
index 782245b3..00000000
Binary files a/app/src/main/assets/numbers/0.png and /dev/null differ
diff --git a/app/src/main/assets/numbers/1.png b/app/src/main/assets/numbers/1.png
deleted file mode 100644
index ea3d3542..00000000
Binary files a/app/src/main/assets/numbers/1.png and /dev/null differ
diff --git a/app/src/main/assets/numbers/2.png b/app/src/main/assets/numbers/2.png
deleted file mode 100644
index 8c343784..00000000
Binary files a/app/src/main/assets/numbers/2.png and /dev/null differ
diff --git a/app/src/main/assets/numbers/3.png b/app/src/main/assets/numbers/3.png
deleted file mode 100644
index 43b73e6b..00000000
Binary files a/app/src/main/assets/numbers/3.png and /dev/null differ
diff --git a/app/src/main/assets/numbers/4.png b/app/src/main/assets/numbers/4.png
deleted file mode 100644
index c6a089ff..00000000
Binary files a/app/src/main/assets/numbers/4.png and /dev/null differ
diff --git a/app/src/main/assets/numbers/5.png b/app/src/main/assets/numbers/5.png
deleted file mode 100644
index 32d78e3b..00000000
Binary files a/app/src/main/assets/numbers/5.png and /dev/null differ
diff --git a/app/src/main/assets/numbers/6.png b/app/src/main/assets/numbers/6.png
deleted file mode 100644
index d5a756a3..00000000
Binary files a/app/src/main/assets/numbers/6.png and /dev/null differ
diff --git a/app/src/main/assets/numbers/7.png b/app/src/main/assets/numbers/7.png
deleted file mode 100644
index dc46da63..00000000
Binary files a/app/src/main/assets/numbers/7.png and /dev/null differ
diff --git a/app/src/main/assets/numbers/8.png b/app/src/main/assets/numbers/8.png
deleted file mode 100644
index 4e1d4e8b..00000000
Binary files a/app/src/main/assets/numbers/8.png and /dev/null differ
diff --git a/app/src/main/assets/numbers/9.png b/app/src/main/assets/numbers/9.png
deleted file mode 100644
index a17fa212..00000000
Binary files a/app/src/main/assets/numbers/9.png and /dev/null differ
diff --git a/app/src/main/assets/sample/Shell命令/小米6666脚本.js b/app/src/main/assets/sample/Shell命令/小米6666脚本.js
deleted file mode 100644
index 9327b560..00000000
--- a/app/src/main/assets/sample/Shell命令/小米6666脚本.js
+++ /dev/null
@@ -1,29 +0,0 @@
-importClass(com.stardust.mi666.Cracker);
-var cracker = new Cracker();
-const path = "/sdcard/666.png";
-var count = 1;
-sleep(2000);
-while(notStopped()){
- Screencap(path);
- sleep(2000);
- toast("你已经被耍了" + count + "次");
- var coords = cracker.crack(path);
- for each(var coord in coords){
- Tap(coord[0], coord[1]);
- }
- sleep(9000);
- 关闭();
- sleep(2000);
- console.log(++count);
- 再玩一次();
- sleep(10000);
-}
-
-
-function 关闭(){
- Tap(933, 660);
-}
-
-function 再玩一次(){
- Tap(521, 1615);
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/stardust/app/FragmentPagerAdapterBuilder.java b/app/src/main/java/com/stardust/app/FragmentPagerAdapterBuilder.java
index 954a48aa..a1199590 100644
--- a/app/src/main/java/com/stardust/app/FragmentPagerAdapterBuilder.java
+++ b/app/src/main/java/com/stardust/app/FragmentPagerAdapterBuilder.java
@@ -16,6 +16,10 @@ import java.util.List;
public class FragmentPagerAdapterBuilder {
+ public interface OnFragmentInstantiateListener {
+ void OnInstantiate(Fragment fragment);
+ }
+
private List mFragments = new ArrayList<>();
private List mTitles = new ArrayList<>();
private FragmentActivity mActivity;
@@ -56,6 +60,7 @@ public class FragmentPagerAdapterBuilder {
public abstract static class StoredFragmentPagerAdapter extends FragmentPagerAdapter {
private SparseArray mStoredFragments = new SparseArray<>();
+ private OnFragmentInstantiateListener mOnFragmentInstantiateListener;
public StoredFragmentPagerAdapter(FragmentManager fm) {
super(fm);
@@ -65,9 +70,13 @@ public class FragmentPagerAdapterBuilder {
public Object instantiateItem(ViewGroup container, int position) {
Fragment fragment = (Fragment) super.instantiateItem(container, position);
mStoredFragments.put(position, fragment);
+ if(mOnFragmentInstantiateListener != null){
+ mOnFragmentInstantiateListener.OnInstantiate(fragment);
+ }
return fragment;
}
+
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
mStoredFragments.remove(position);
@@ -77,5 +86,9 @@ public class FragmentPagerAdapterBuilder {
public Fragment getStoredFragment(int position) {
return mStoredFragments.get(position);
}
+
+ public void setOnFragmentInstantiateListener(OnFragmentInstantiateListener onFragmentInstantiateListener) {
+ mOnFragmentInstantiateListener = onFragmentInstantiateListener;
+ }
}
}
diff --git a/app/src/main/java/com/stardust/mi666/Cracker.java b/app/src/main/java/com/stardust/mi666/Cracker.java
deleted file mode 100644
index e2dc1f90..00000000
--- a/app/src/main/java/com/stardust/mi666/Cracker.java
+++ /dev/null
@@ -1,68 +0,0 @@
-package com.stardust.mi666;
-
-import com.stardust.util.ScreenMetrics;
-
-import java.util.List;
-
-/**
- * Created by Stardust on 2017/4/24.
- */
-
-public class Cracker {
-
- private OCR mOCR;
- private Solver mSolver;
- private int mX, mY, mIntervalX, mIntervalY, mWidth, mHeight;
-
- private void init(int x, int y, int intervalX, int intervalY, int w, int h) {
- mOCR = new OCR(x, y, intervalX, intervalY, w, h);
- mSolver = new Solver();
- mX = x;
- mY = y;
- mIntervalY = intervalY;
- mIntervalX = intervalX;
- mWidth = w;
- mHeight = h;
- }
-
- public Cracker() {
- if (ScreenMetrics.getScreenWidth() == 1080 && ScreenMetrics.getScreenHeight() == 1920) {
- init(68, 724, 238, 236, 228, 68);
- } else {
- double scaleX = 1080 / ScreenMetrics.getScreenWidth();
- double scaleY = 1920 / ScreenMetrics.getScreenHeight();
- init((int) (68 * scaleX), (int) (724 * scaleY), (int) (238 * scaleX), (int) (236 * scaleY), (int) (228 * scaleX), (int) (68 * scaleY));
- }
- }
-
- public int[][] crack(String path) {
- List numbers = mOCR.detect(path);
- mSolver.solve(numbers);
- if (!mSolver.isSolved()) {
- return new int[0][];
- }
- List result = mSolver.getResult();
- boolean[] used = new boolean[numbers.size()];
- int[][] coordinates = new int[result.size()][2];
- for (int i = 0; i < coordinates.length; i++) {
- int index = indexOf(numbers, used, result.get(i));
- int row = index / 4;
- int col = index % 4;
- int x = mX + mIntervalX * col + mWidth / 2;
- int y = mY + mIntervalY * row + mHeight / 2;
- coordinates[i][0] = x;
- coordinates[i][1] = y;
- }
- return coordinates;
- }
-
- private int indexOf(List numbers, boolean[] used, int integer) {
- for (int i = 0; i < numbers.size(); i++) {
- if (numbers.get(i) == integer && !used[i]) {
- used[i] = true;
- return i;
- }
- }
- return -1;
- }
-}
diff --git a/app/src/main/java/com/stardust/mi666/OCR.java b/app/src/main/java/com/stardust/mi666/OCR.java
deleted file mode 100644
index 3d29edc7..00000000
--- a/app/src/main/java/com/stardust/mi666/OCR.java
+++ /dev/null
@@ -1,81 +0,0 @@
-package com.stardust.mi666;
-
-import android.content.Context;
-import android.graphics.Bitmap;
-import android.graphics.BitmapFactory;
-import android.util.Log;
-
-import com.stardust.mi666.ocr.ColorDetector;
-import com.stardust.mi666.ocr.SimpleTextSplitter;
-import com.stardust.mi666.ocr.TemplateMatching;
-import com.stardust.pio.UncheckedIOException;
-import com.stardust.util.ViewUtil;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Created by Stardust on 2017/4/24.
- */
-
-public class OCR {
-
- private static com.stardust.mi666.ocr.OCR ocr;
- private static SimpleTextSplitter textSplitter;
-
- static {
- ColorDetector colorDetector = new ColorDetector.SimpleColorDetector(0xff9f826f);
- ocr = new TemplateMatching.TemplateMatchingOCR(1, colorDetector);
- textSplitter = new SimpleTextSplitter(colorDetector);
- }
-
- private int mX, mY, mIntervalX, mIntervalY, mWidth, mHeight;
-
- public OCR(int x, int y, int intervalX, int intervalY, int w, int h) {
- mX = x;
- mY = y;
- mIntervalY = intervalY;
- mIntervalX = intervalX;
- mWidth = w;
- mHeight = h;
- }
-
- public static void init(Context context) {
- try {
- for (int i = 0; i < 10; i++) {
- Bitmap number = BitmapFactory.decodeStream(context.getAssets().open("numbers/" + i + ".png"));
- ocr.addChar((char) ('0' + i), number);
- }
- } catch (IOException e) {
- throw new UncheckedIOException(e);
- }
- }
-
- public List detect(String path) {
- Bitmap screenshot = BitmapFactory.decodeFile(path);
- try {
- List numbers = new ArrayList<>(16);
- for (int i = 0; i < 4; i++) {
- for (int j = 0; j < 4; j++) {
- Bitmap block = getBlockAt(screenshot, i, j);
- List bitmaps = textSplitter.split(block);
- StringBuilder sb = new StringBuilder();
- for (Bitmap num : bitmaps) {
- sb.append(ocr.detect(num));
- }
- numbers.add(Integer.parseInt(sb.toString()));
- Log.i("TestOCR", "result = " + sb);
- }
- }
- return numbers;
- } catch (Exception e) {
- e.printStackTrace();
- }
- return null;
- }
-
- private Bitmap getBlockAt(Bitmap bitmap, int row, int col) {
- return Bitmap.createBitmap(bitmap, mX + col * mIntervalX, mY + row * mIntervalY, mWidth, mHeight);
- }
-}
diff --git a/app/src/main/java/com/stardust/mi666/Solver.java b/app/src/main/java/com/stardust/mi666/Solver.java
deleted file mode 100644
index 58897f29..00000000
--- a/app/src/main/java/com/stardust/mi666/Solver.java
+++ /dev/null
@@ -1,55 +0,0 @@
-package com.stardust.mi666;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Created by Stardust on 2017/4/24.
- */
-
-public class Solver {
-
- private boolean mSolved = false;
- private List mResult = new ArrayList<>();
- private List mTmpList = new ArrayList<>();
- private int[] value;
-
-
- void solve(int sum, int index) {
- if (mSolved || index < 0) return;
- if (sum == value[index] && mTmpList.size() == 5) {
- mSolved = true;
- mTmpList.add(value[index]);
- mResult.addAll(mTmpList);
- return;
- }
- mTmpList.add(value[index]);
- solve(sum - value[index], index - 1);
- mTmpList.remove(mTmpList.size() - 1);
- solve(sum, index - 1);
- }
-
- public void solve(int[] num) {
- mResult.clear();
- mTmpList.clear();
- mSolved = false;
- value = num;
- solve(6666, 15);
- }
-
- public boolean isSolved() {
- return mSolved;
- }
-
- public List getResult() {
- return mResult;
- }
-
- public void solve(List numbers) {
- int[] num = new int[numbers.size()];
- for (int i = 0; i < num.length; i++) {
- num[i] = numbers.get(i);
- }
- solve(num);
- }
-}
diff --git a/app/src/main/java/com/stardust/mi666/ocr/ColorDetector.java b/app/src/main/java/com/stardust/mi666/ocr/ColorDetector.java
deleted file mode 100644
index 9472b374..00000000
--- a/app/src/main/java/com/stardust/mi666/ocr/ColorDetector.java
+++ /dev/null
@@ -1,53 +0,0 @@
-package com.stardust.mi666.ocr;
-
-import android.graphics.Color;
-
-/**
- * Created by Stardust on 2017/4/23.
- */
-
-public interface ColorDetector {
-
- boolean isCharPixel(int color);
-
- class ColorDistanceDetector implements ColorDetector {
-
- private int mColor;
- private double mThreshold;
-
- public ColorDistanceDetector(int color, double threshold) {
- mColor = color;
- mThreshold = threshold;
- }
-
- public static double distance(int c1, int c2) {
- double meanR = (Color.red(c1) + Color.red(c2)) / 2;
- int r = Color.red(c1) - Color.red(c2);
- int g = Color.green(c1) - Color.green(c2);
- int b = Color.blue(c1) - Color.blue(c2);
- double weightR = 2 + meanR / 256;
- double weightG = 4.0;
- double weightB = 2 + (255 - meanR) / 256;
- return Math.sqrt(weightR * r * r + weightG * g * g + weightB * b * b);
- }
-
- @Override
- public boolean isCharPixel(int color) {
- return distance(color, mColor) < mThreshold;
- }
- }
-
- class SimpleColorDetector implements ColorDetector {
-
- private int mColor;
-
- public SimpleColorDetector(int color) {
- mColor = color;
- }
-
- @Override
- public boolean isCharPixel(int color) {
- return mColor == color;
- }
- }
-}
diff --git a/app/src/main/java/com/stardust/mi666/ocr/OCR.java b/app/src/main/java/com/stardust/mi666/ocr/OCR.java
deleted file mode 100644
index 81757171..00000000
--- a/app/src/main/java/com/stardust/mi666/ocr/OCR.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package com.stardust.mi666.ocr;
-
-import android.graphics.Bitmap;
-
-/**
- * Created by Stardust on 2017/4/23.
- */
-
-public interface OCR {
-
- void addChar(char ch, Bitmap bitmap);
-
- char detect(Bitmap bitmap);
-
-}
diff --git a/app/src/main/java/com/stardust/mi666/ocr/SimpleOCR.java b/app/src/main/java/com/stardust/mi666/ocr/SimpleOCR.java
deleted file mode 100644
index 8f6e8cf9..00000000
--- a/app/src/main/java/com/stardust/mi666/ocr/SimpleOCR.java
+++ /dev/null
@@ -1,142 +0,0 @@
-package com.stardust.mi666.ocr;
-
-import android.graphics.Bitmap;
-import android.util.Log;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * Created by Stardust on 2017/4/23.
- */
-
-public class SimpleOCR implements OCR {
-
- private static class PixelLine {
- int start;
- int end;
-
- PixelLine(int start, int end) {
- this.start = start;
- this.end = end;
- }
- }
-
- private static class PixelLines {
- int start = -1;
- List lines = new ArrayList<>();
-
-
- void addLine(PixelLine line) {
- lines.add(line);
- if (start == -1 || start > line.start) {
- start = line.start;
- }
- }
-
- int distanceTo(PixelLines another) {
- if (lines.size() != another.lines.size()) {
- return lineWidthSum() + another.lineWidthSum();
- }
- int offset = another.start - start;
- int sum = 0;
- for (int i = 0; i < lines.size(); i++) {
- sum += Math.abs(lines.get(i).start + offset - another.lines.get(i).start);
- sum += Math.abs(lines.get(i).end + offset - another.lines.get(i).end);
- }
- return sum;
- }
-
- private int lineWidthSum() {
- int sum = 0;
- for (PixelLine line : lines) {
- sum += line.end - line.start;
- }
- return sum;
- }
- }
-
-
- public static class CharFeature {
-
- private List mPixelLinesPerRow;
-
- public CharFeature(int rowNumber) {
- mPixelLinesPerRow = new ArrayList<>(rowNumber);
- for (int i = 0; i < rowNumber; i++) {
- mPixelLinesPerRow.add(new PixelLines());
- }
- }
-
- void addLine(int row, PixelLine line) {
- mPixelLinesPerRow.get(row).addLine(line);
- }
-
- int distanceTo(CharFeature feature) {
- int sum = 0;
- if (feature.mPixelLinesPerRow.size() != mPixelLinesPerRow.size()) {
- for (PixelLines lines : mPixelLinesPerRow) {
- sum += lines.lines.size();
- }
- return sum;
- }
- for (int i = 0; i < mPixelLinesPerRow.size(); i++) {
- sum += mPixelLinesPerRow.get(i).distanceTo(feature.mPixelLinesPerRow.get(i));
- }
- return sum;
- }
-
- }
-
- private static final String TAG = "SimpleOCR";
- private Map mChars = new HashMap<>();
- private ColorDetector mColorDetector;
-
- public SimpleOCR(ColorDetector colorDetector) {
- mColorDetector = colorDetector;
- }
-
- public void addChar(char c, Bitmap ch) {
- mChars.put(c, getCharFeature(ch));
- }
-
- public CharFeature getCharFeature(Bitmap bitmap) {
- CharFeature feature = new CharFeature(bitmap.getHeight());
- for (int y = 0; y < bitmap.getHeight(); y++) {
- int mPixelStart = -1;
- for (int x = 0; x < bitmap.getWidth(); x++) {
- if (mColorDetector.isCharPixel(bitmap.getPixel(x, y))) {
- if (mPixelStart == -1) {
- mPixelStart = x;
- }
- } else if (mPixelStart >= 0) {
- feature.addLine(y, new PixelLine(mPixelStart, x));
- mPixelStart = -1;
- }
- }
- if (mPixelStart >= 0) {
- feature.addLine(y, new PixelLine(mPixelStart, bitmap.getWidth()));
- }
- }
- return feature;
- }
-
- public char detect(Bitmap bitmap) {
- CharFeature feature = getCharFeature(bitmap);
- int min = Integer.MAX_VALUE;
- char detectedChar = ' ';
- for (Map.Entry ch : mChars.entrySet()) {
- int distance = ch.getValue().distanceTo(feature);
- Log.d(TAG, "ch=" + ch.getKey() + " distance=" + distance);
- if (distance < min) {
- min = distance;
- detectedChar = ch.getKey();
- }
- }
- return detectedChar;
- }
-
-
-}
diff --git a/app/src/main/java/com/stardust/mi666/ocr/SimpleTextDetector.java b/app/src/main/java/com/stardust/mi666/ocr/SimpleTextDetector.java
deleted file mode 100644
index 05641ddd..00000000
--- a/app/src/main/java/com/stardust/mi666/ocr/SimpleTextDetector.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package com.stardust.mi666.ocr;
-
-import android.graphics.Bitmap;
-
-/**
- * Created by Stardust on 2017/4/23.
- */
-
-public class SimpleTextDetector {
-
- private ColorDetector mColorDetector;
-
- public SimpleTextDetector(ColorDetector colorDetector) {
- mColorDetector = colorDetector;
- }
-
- public Bitmap detect(Bitmap bitmap) {
- int minX = bitmap.getWidth();
- int minY = bitmap.getHeight();
- int maxX = 0;
- int maxY = 0;
- for (int i = 0; i < bitmap.getWidth(); i++) {
- for (int j = 0; j < bitmap.getHeight(); j++) {
- if (mColorDetector.isCharPixel(bitmap.getPixel(i, j))) {
- minX = Math.min(minX, i);
- minY = Math.min(minY, j);
- maxX = Math.max(maxX, i);
- maxY = Math.max(maxY, j);
- }
- }
- }
- return Bitmap.createBitmap(bitmap, minX, minY, maxX - minX, maxY - minY);
- }
-}
diff --git a/app/src/main/java/com/stardust/mi666/ocr/SimpleTextSplitter.java b/app/src/main/java/com/stardust/mi666/ocr/SimpleTextSplitter.java
deleted file mode 100644
index 54258087..00000000
--- a/app/src/main/java/com/stardust/mi666/ocr/SimpleTextSplitter.java
+++ /dev/null
@@ -1,52 +0,0 @@
-package com.stardust.mi666.ocr;
-
-import android.graphics.Bitmap;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Created by Stardust on 2017/4/24.
- */
-
-public class SimpleTextSplitter {
-
- private ColorDetector mColorDetector;
- private SimpleTextDetector mSimpleTextDetector;
-
- public SimpleTextSplitter(ColorDetector colorDetector) {
- mColorDetector = colorDetector;
- mSimpleTextDetector = new SimpleTextDetector(colorDetector);
- }
-
- public List split(Bitmap bitmap) {
- Bitmap text = mSimpleTextDetector.detect(bitmap);
- int[] projection = new int[text.getWidth()];
- for (int i = 0; i < text.getWidth(); i++) {
- for (int j = 0; j < text.getHeight(); j++) {
- if (mColorDetector.isCharPixel(text.getPixel(i, j))) {
- projection[i]++;
- }
- }
- }
- int start = -1;
- List numbers = new ArrayList<>();
- for (int i = 0; i < text.getWidth(); i++) {
- if (projection[i] > 0) {
- if (start == -1) {
- start = i;
- }
- } else {
- if (start >= 0) {
- numbers.add(Bitmap.createBitmap(text, start, 0, i - start, text.getHeight()));
- start = -1;
- }
- }
- }
- if (start >= 0) {
- numbers.add(Bitmap.createBitmap(text, start, 0, text.getWidth() - start, text.getHeight()));
- }
- return numbers;
- }
-
-}
diff --git a/app/src/main/java/com/stardust/mi666/ocr/TemplateMatching.java b/app/src/main/java/com/stardust/mi666/ocr/TemplateMatching.java
deleted file mode 100644
index 97f7c7ee..00000000
--- a/app/src/main/java/com/stardust/mi666/ocr/TemplateMatching.java
+++ /dev/null
@@ -1,109 +0,0 @@
-package com.stardust.mi666.ocr;
-
-import android.graphics.Bitmap;
-import android.util.Log;
-
-import com.stardust.scriptdroid.tool.BitmapTool;
-
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * Created by Stardust on 2017/4/23.
- */
-
-public class TemplateMatching {
-
- private static final String LOG_TAG = "TemplateMatching";
-
- private int mBlockSize;
- private ColorDetector mColorDetector;
-
-
- public TemplateMatching(int blockSize, ColorDetector colorDetector) {
- mBlockSize = blockSize;
- mColorDetector = colorDetector;
- }
-
- public int[][] getFeature(Bitmap bitmap) {
- int w = bitmap.getWidth() / mBlockSize;
- int h = bitmap.getHeight() / mBlockSize;
- int[][] mat = new int[w][h];
- for (int i = 0; i < bitmap.getWidth(); i++) {
- for (int j = 0; j < bitmap.getHeight(); j++) {
- if (mColorDetector.isCharPixel(bitmap.getPixel(i, j))) {
- mat[i * w / bitmap.getWidth()][j * h / bitmap.getHeight()]++;
- }
- }
- }
- return mat;
- }
-
- public int distance(int[][] f, int[][] template, int offsetX, int offsetY) {
- int sum = 0;
- for (int i = 0; i < template.length; i++) {
- for (int j = 0; j < template[i].length; j++) {
- if (i >= f.length || j >= f[i].length) {
- sum += template[i].length - j;
- break;
- }
- sum += Math.abs(template[i][j] - f[i + offsetX][j + offsetY]);
-
- }
- }
- return sum;
- }
-
- public int minDistance(int[][] f, int[][] template) {
- int min = Integer.MAX_VALUE;
- int i = 0;
- while (i < template.length && i + template.length - 1 < f.length) {
- int j = 0;
- while (j < template[i].length && j + template[i].length - 1 < f[i].length) {
- int d = distance(f, template, i, j);
- if (d < min) {
- min = d;
- }
- j++;
- }
- i++;
- }
- return min;
- }
-
- public static class TemplateMatchingOCR implements OCR {
-
- private Map mChars = new HashMap<>();
- private TemplateMatching mTemplateMatching;
- private SimpleTextDetector mSimpleTextDetector;
-
- public TemplateMatchingOCR(int blockSize, ColorDetector colorDetector) {
- mTemplateMatching = new TemplateMatching(blockSize, colorDetector);
- mSimpleTextDetector = new SimpleTextDetector(colorDetector);
- }
-
- @Override
- public void addChar(char ch, Bitmap bitmap) {
- mChars.put(ch, mTemplateMatching.getFeature(mSimpleTextDetector.detect(bitmap)));
- }
-
- @Override
- public char detect(Bitmap bitmap) {
- int min = Integer.MAX_VALUE;
- char ch = ' ';
- for (Map.Entry entry : mChars.entrySet()) {
- int[][] f = mTemplateMatching.getFeature(BitmapTool.scaleBitmap(bitmap, entry.getValue().length, entry.getValue()[0].length));
- int d = mTemplateMatching.distance(f, entry.getValue(), 0, 0);
- Log.d(LOG_TAG, "char: " + entry.getKey() + " distance: " + d);
- if (d < min) {
- if (entry.getKey() == '1' && d > 30) {
- continue;
- }
- min = d;
- ch = entry.getKey();
- }
- }
- return ch;
- }
- }
-}
diff --git a/app/src/main/java/com/stardust/scriptdroid/App.java b/app/src/main/java/com/stardust/scriptdroid/App.java
index d6b43dcb..97383bcc 100644
--- a/app/src/main/java/com/stardust/scriptdroid/App.java
+++ b/app/src/main/java/com/stardust/scriptdroid/App.java
@@ -1,16 +1,14 @@
package com.stardust.scriptdroid;
import android.app.Activity;
-import android.app.Application;
import android.content.Intent;
import android.content.IntentFilter;
-import android.os.Bundle;
import android.support.annotation.Keep;
+import android.support.multidex.MultiDexApplication;
import com.squareup.leakcanary.LeakCanary;
import com.stardust.app.SimpleActivityLifecycleCallbacks;
import com.stardust.app.VolumeChangeObserver;
-import com.stardust.mi666.OCR;
import com.stardust.scriptdroid.autojs.AutoJs;
import com.stardust.scriptdroid.service.AccessibilityWatchDogService;
import com.stardust.scriptdroid.tool.CrashHandler;
@@ -26,7 +24,7 @@ import java.lang.ref.WeakReference;
* Created by Stardust on 2017/1/27.
*/
-public class App extends Application {
+public class App extends MultiDexApplication {
private static final String TAG = "App";
@@ -65,7 +63,6 @@ public class App extends Application {
JsBeautifierFactory.initJsBeautify(this, "js/jsbeautify.js");
initVolumeChangeObserver();
startService(new Intent(this, AccessibilityWatchDogService.class));
- OCR.init(this);
}
private void initVolumeChangeObserver() {
@@ -94,7 +91,6 @@ public class App extends Application {
currentActivity = new WeakReference<>(activity);
}
-
});
}
diff --git a/app/src/main/java/com/stardust/scriptdroid/Pref.java b/app/src/main/java/com/stardust/scriptdroid/Pref.java
index f443edb6..4a470d05 100644
--- a/app/src/main/java/com/stardust/scriptdroid/Pref.java
+++ b/app/src/main/java/com/stardust/scriptdroid/Pref.java
@@ -4,6 +4,7 @@ import android.content.Context;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
+import com.stardust.autojs.runtime.api.AutomatorConfig;
import com.stardust.automator.AccessibilityEventCommandHost;
import com.stardust.scriptdroid.autojs.AutoJs;
@@ -18,11 +19,19 @@ public class Pref {
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
if (key.equals(getString(R.string.key_run_mode))) {
AutoJs.getInstance().getCommandHost().setRunMode(getRunModeFromValue(sharedPreferences.getString(key, null)));
+ } else if (key.equals(getString(R.string.key_guard_mode))) {
+ AutomatorConfig.setIsUnintendedGuardEnabled(sharedPreferences.getBoolean(getString(R.string.key_guard_mode), false));
}
}
};
+ static {
+ AutomatorConfig.setIsUnintendedGuardEnabled(def().getBoolean(getString(R.string.key_guard_mode), false));
+ }
+
private static int getRunModeFromValue(String value) {
+ if (value == null)
+ return AccessibilityEventCommandHost.RUN_MODE_THREAD_POOL;
switch (value) {
case "KEY_THREAD_POOL":
return AccessibilityEventCommandHost.RUN_MODE_THREAD_POOL;
diff --git a/app/src/main/java/com/stardust/scriptdroid/external/floating_window/content/ScriptListNavigatorContent.java b/app/src/main/java/com/stardust/scriptdroid/external/floating_window/content/ScriptListNavigatorContent.java
index 5f7032a6..0e74d55c 100644
--- a/app/src/main/java/com/stardust/scriptdroid/external/floating_window/content/ScriptListNavigatorContent.java
+++ b/app/src/main/java/com/stardust/scriptdroid/external/floating_window/content/ScriptListNavigatorContent.java
@@ -15,7 +15,6 @@ import com.stardust.scriptdroid.scripts.ScriptFile;
import com.stardust.scriptdroid.scripts.StorageScriptProvider;
import com.stardust.scriptdroid.ui.edit.EditActivity;
import com.stardust.scriptdroid.ui.main.script_list.ScriptAndFolderListRecyclerView;
-import com.stardust.scriptdroid.ui.main.script_list.ScriptListRecyclerView;
import com.stardust.scriptdroid.ui.main.script_list.ScriptListWithProgressBarView;
import com.stardust.util.MessageEvent;
import com.stardust.widget.ViewHolderSupplier;
diff --git a/app/src/main/java/com/stardust/scriptdroid/external/floating_window/view/FloatingLayoutBoundsView.java b/app/src/main/java/com/stardust/scriptdroid/external/floating_window/view/FloatingLayoutBoundsView.java
index a8b18d63..36a6f02b 100644
--- a/app/src/main/java/com/stardust/scriptdroid/external/floating_window/view/FloatingLayoutBoundsView.java
+++ b/app/src/main/java/com/stardust/scriptdroid/external/floating_window/view/FloatingLayoutBoundsView.java
@@ -37,7 +37,6 @@ public class FloatingLayoutBoundsView extends LayoutBoundsView {
showNodeInfo(info);
}
});
- setBackgroundColor(0x66000000);
setVisibility(GONE);
getPaint().setColor(0xFF222222);
getPaint().setStrokeWidth(2f);
diff --git a/app/src/main/java/com/stardust/scriptdroid/external/floating_window/view/FloatingScriptFileListView.java b/app/src/main/java/com/stardust/scriptdroid/external/floating_window/view/FloatingScriptFileListView.java
deleted file mode 100644
index 5dadcd6c..00000000
--- a/app/src/main/java/com/stardust/scriptdroid/external/floating_window/view/FloatingScriptFileListView.java
+++ /dev/null
@@ -1,205 +0,0 @@
-package com.stardust.scriptdroid.external.floating_window.view;
-
-import android.content.Context;
-import android.support.annotation.NonNull;
-import android.support.v7.widget.DividerItemDecoration;
-import android.support.v7.widget.RecyclerView;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.view.WindowManager;
-import android.widget.TextView;
-import android.widget.Toast;
-import android.workground.WrapContentLinearLayoutManager;
-
-import com.afollestad.materialdialogs.MaterialDialog;
-import com.stardust.scriptdroid.scripts.ScriptFile;
-import com.stardust.scriptdroid.scripts.ScriptFileList;
-import com.stardust.scriptdroid.App;
-import com.stardust.scriptdroid.R;
-import com.stardust.scriptdroid.external.floating_window.HoverMenuService;
-import com.stardust.util.ViewUtil;
-import com.stardust.scriptdroid.ui.main.operation.ScriptFileOperation;
-import com.stardust.scriptdroid.ui.main.operation.ScriptFileOperationPopupMenu;
-import com.stardust.theme.dialog.ThemeColorMaterialDialogBuilder;
-import com.stardust.util.MessageEvent;
-
-import org.greenrobot.eventbus.EventBus;
-import org.greenrobot.eventbus.Subscribe;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Created by Stardust on 2017/3/12.
- */
-
-public class FloatingScriptFileListView extends RecyclerView {
-
-
- private ScriptFileList mScriptFileList;
-
- private final OnClickListener mOnItemClickListener = new OnClickListener() {
- @Override
- public void onClick(View v) {
- int position = getChildViewHolder(v).getAdapterPosition();
- onItemClicked(v, position);
- }
- };
-
- private final OnClickListener mOnEditIconClickListener = new OnClickListener() {
- @Override
- public void onClick(View v) {
- int position = getChildViewHolder((View) v.getParent()).getAdapterPosition();
- onEditIconClick(v, position);
- }
- };
-
- private final OnClickListener mOnMoreIconClickListener = new OnClickListener() {
- @Override
- public void onClick(View v) {
- mOperateFileIndex = getChildViewHolder((View) v.getParent()).getAdapterPosition();
- showOrDismissOperationPopupMenu(v);
- }
-
- };
-
- private ScriptFileOperationPopupMenu mScriptFileOperationPopupMenu;
- private int mOperateFileIndex;
-
- public FloatingScriptFileListView(Context context) {
- super(context);
- init();
- }
-
- private void init() {
- setAdapter(new Adapter());
- setLayoutManager(new WrapContentLinearLayoutManager(getContext()));
- addItemDecoration(new DividerItemDecoration(getContext(), DividerItemDecoration.VERTICAL));
- initScriptFileOperationPopupMenu();
- }
-
- @Subscribe
- public void showMessage(ScriptFileOperation.ShowMessageEvent event) {
- Toast.makeText(getContext(), event.messageResId, Toast.LENGTH_SHORT).show();
- }
-
- private void initScriptFileOperationPopupMenu() {
- mScriptFileOperationPopupMenu = new ScriptFileOperationPopupMenu(getContext(), getScriptFileOperations());
- mScriptFileOperationPopupMenu.setOnItemClickListener(new ScriptFileOperationPopupMenu.OnItemClickListener() {
- @Override
- public void onClick(View view, int position, ScriptFileOperation operation) {
- operation.operate(FloatingScriptFileListView.this, mScriptFileList, mOperateFileIndex);
- mScriptFileOperationPopupMenu.dismiss();
- if (!(operation instanceof ScriptFileOperation.Rename))
- EventBus.getDefault().post(new MessageEvent(HoverMenuService.MESSAGE_COLLAPSE_MENU));
- }
- });
- }
-
- protected List getScriptFileOperations() {
- List scriptFileOperations = new ArrayList<>();
- scriptFileOperations.add(new ScriptFileOperation.Run());
- scriptFileOperations.add(new ScriptFileOperation.Rename() {
- @Override
- public void operate(final RecyclerView recyclerView, final ScriptFileList scriptFileList, final int position) {
- String oldName = scriptFileList.get(position).getSimplifiedName();
- MaterialDialog dialog = new ThemeColorMaterialDialogBuilder(recyclerView.getContext())
- .title(R.string.text_rename)
- .checkBoxPrompt(App.getApp().getString(R.string.text_rename_file_meanwhile), false, null)
- .input(App.getApp().getString(R.string.text_please_input_new_name), oldName, new MaterialDialog.InputCallback() {
- @Override
- public void onInput(@NonNull MaterialDialog dialog, CharSequence input) {
- scriptFileList.rename(position, input.toString(), dialog.isPromptCheckBoxChecked());
- recyclerView.getAdapter().notifyItemChanged(position);
- }
- })
- .build();
- dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
- dialog.show();
- }
- });
- scriptFileOperations.add(new ScriptFileOperation.OpenByOtherApp());
- scriptFileOperations.add(new ScriptFileOperation.CreateShortcut());
- scriptFileOperations.add(new ScriptFileOperation.Remove());
- scriptFileOperations.add(new ScriptFileOperation.Delete());
- return scriptFileOperations;
- }
-
- protected void onItemClicked(View v, int position) {
- new ScriptFileOperation.Run().operate(this, mScriptFileList, position);
- EventBus.getDefault().post(new MessageEvent(HoverMenuService.MESSAGE_COLLAPSE_MENU));
- }
-
- protected void onEditIconClick(View v, int position) {
- new ScriptFileOperation.Edit().operate(this, mScriptFileList, position);
- EventBus.getDefault().post(new MessageEvent(HoverMenuService.MESSAGE_COLLAPSE_MENU));
- }
-
- public void setScriptFileList(ScriptFileList scriptFileList) {
- mScriptFileList = scriptFileList;
- getAdapter().notifyDataSetChanged();
- }
-
- private void showOrDismissOperationPopupMenu(View v) {
- if (mScriptFileOperationPopupMenu.isShowing()) {
- mScriptFileOperationPopupMenu.dismiss();
- } else {
- mScriptFileOperationPopupMenu.show(v);
- }
- }
-
- @Override
- protected void onAttachedToWindow() {
- super.onAttachedToWindow();
- EventBus.getDefault().register(this);
- }
-
- @Override
- protected void onDetachedFromWindow() {
- super.onDetachedFromWindow();
- EventBus.getDefault().unregister(this);
- }
-
- @Subscribe
- public void onMenuCollapsing(MessageEvent event) {
- if (event.message.equals(HoverMenuService.MESSAGE_MENU_COLLAPSING) && mScriptFileOperationPopupMenu.isShowing()) {
- mScriptFileOperationPopupMenu.dismiss();
- }
- }
-
- private class Adapter extends RecyclerView.Adapter {
-
- @Override
- public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
- View itemView = LayoutInflater.from(getContext()).inflate(R.layout.floating_script_list_recycler_view_file, parent, false);
- return new ViewHolder(itemView);
- }
-
- @Override
- public void onBindViewHolder(ViewHolder holder, int position) {
- ScriptFile scriptFile = mScriptFileList.get(position);
- holder.name.setText(scriptFile.getSimplifiedName());
- holder.path.setText(scriptFile.getSimplifiedPath());
- }
-
- @Override
- public int getItemCount() {
- return mScriptFileList.size();
- }
- }
-
- private class ViewHolder extends RecyclerView.ViewHolder {
-
- TextView name, path;
-
- ViewHolder(View itemView) {
- super(itemView);
- name = (TextView) itemView.findViewById(R.id.name);
- path = (TextView) itemView.findViewById(R.id.path);
- ViewUtil.$(itemView, R.id.edit).setOnClickListener(mOnEditIconClickListener);
- //ViewUtil.$(itemView, R.id.more).setOnClickListener(mOnMoreIconClickListener);
- itemView.setOnClickListener(mOnItemClickListener);
- }
- }
-}
diff --git a/app/src/main/java/com/stardust/scriptdroid/external/open/ImportIntentActivity.java b/app/src/main/java/com/stardust/scriptdroid/external/open/ImportIntentActivity.java
index 3b2b9984..17ed14af 100644
--- a/app/src/main/java/com/stardust/scriptdroid/external/open/ImportIntentActivity.java
+++ b/app/src/main/java/com/stardust/scriptdroid/external/open/ImportIntentActivity.java
@@ -20,7 +20,7 @@ public class ImportIntentActivity extends BaseActivity {
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
try {
- handleIntent();
+ handleIntent(getIntent());
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(this, R.string.edit_and_run_handle_intent_error, Toast.LENGTH_LONG).show();
@@ -28,8 +28,12 @@ public class ImportIntentActivity extends BaseActivity {
}
}
- private void handleIntent() {
- Intent intent = getIntent();
+ @Override
+ protected void onNewIntent(Intent intent) {
+ handleIntent(intent);
+ }
+
+ private void handleIntent(Intent intent) {
final String path = intent.getData().getPath();
if (!TextUtils.isEmpty(path))
MainActivity.importScriptFile(this, path);
diff --git a/app/src/main/java/com/stardust/scriptdroid/layout_inspector/view/LayoutBoundsView.java b/app/src/main/java/com/stardust/scriptdroid/layout_inspector/view/LayoutBoundsView.java
index ab988050..94f08d07 100644
--- a/app/src/main/java/com/stardust/scriptdroid/layout_inspector/view/LayoutBoundsView.java
+++ b/app/src/main/java/com/stardust/scriptdroid/layout_inspector/view/LayoutBoundsView.java
@@ -15,6 +15,9 @@ import android.view.View;
import com.stardust.scriptdroid.layout_inspector.NodeInfo;
import com.stardust.util.ViewUtil;
+import java.util.ArrayList;
+import java.util.List;
+
/**
* Created by Stardust on 2017/3/10.
*/
@@ -109,13 +112,20 @@ public class LayoutBoundsView extends View {
}
}
- private NodeInfo findNodeAt(NodeInfo node, int x, int y) {
+ private List findNodeAt(NodeInfo node, int x, int y) {
+ List list = null;
for (NodeInfo child : node.getChildren()) {
if (child != null && child.getBoundsInScreen().contains(x, y)) {
- return findNodeAt(child, x, y);
+ if (list == null)
+ list = findNodeAt(child, x, y);
+ else
+ list.addAll(findNodeAt(child, x, y));
}
}
- return node;
+ if (list == null)
+ list = new ArrayList<>();
+ list.add(node);
+ return list;
}
}
diff --git a/app/src/main/java/com/stardust/scriptdroid/scripts/sample/Sample.java b/app/src/main/java/com/stardust/scriptdroid/scripts/sample/Sample.java
index 2c5ab4f0..d7381e4a 100644
--- a/app/src/main/java/com/stardust/scriptdroid/scripts/sample/Sample.java
+++ b/app/src/main/java/com/stardust/scriptdroid/scripts/sample/Sample.java
@@ -1,10 +1,12 @@
package com.stardust.scriptdroid.scripts.sample;
+import java.io.Serializable;
+
/**
* Created by Stardust on 2017/3/13.
*/
-public class Sample {
+public class Sample implements Serializable {
public String name;
public String path;
@@ -12,4 +14,5 @@ public class Sample {
this.name = name;
this.path = path;
}
+
}
diff --git a/app/src/main/java/com/stardust/scriptdroid/tool/ImagePHash.java b/app/src/main/java/com/stardust/scriptdroid/tool/ImagePHash.java
deleted file mode 100644
index e0781249..00000000
--- a/app/src/main/java/com/stardust/scriptdroid/tool/ImagePHash.java
+++ /dev/null
@@ -1,162 +0,0 @@
-package com.stardust.scriptdroid.tool;
-
-/**
- * Created by Stardust on 2017/4/23.
- */
-
-import android.graphics.Bitmap;
-
-import com.stardust.mi666.ocr.ColorDetector;
-import com.stardust.mi666.ocr.SimpleTextDetector;
-
-import java.util.HashMap;
-import java.util.Map;
-
-public class ImagePHash {
-
- private static final String LOG_TAG = "ImagePHash";
-
- private int width = 32;
- private int height;
- private int smallerWidth = 8;
- private int smallerHeight;
-
- public ImagePHash() {
- this(32, 8);
- }
-
- public ImagePHash(int width, int smallerWidth) {
- this(width, width, smallerWidth, smallerWidth);
- }
-
- public ImagePHash(int width, int height, int smallerWidth, int smallerHeight) {
- this.width = width;
- this.height = height;
- this.smallerWidth = smallerWidth;
- this.smallerHeight = smallerHeight;
- initCoefficients();
- }
-
- public int distance(boolean[] s1, boolean[] s2) {
- int counter = 0;
- for (int k = 0; k < s1.length; k++) {
- if (s1[k] != s2[k]) {
- counter++;
- }
- }
- return counter;
- }
-
-
- public boolean[] getHash(Bitmap img) {
- double[][] vals = new double[width][height];
- img = BitmapTool.scaleBitmap(img, width, height);
-
- for (int x = 0; x < img.getWidth(); x++) {
- for (int y = 0; y < img.getHeight(); y++) {
- vals[x][y] = getBlue(img, x, y);
- }
- }
-
- double[][] dctVals = applyDCT(vals);
-
- double total = 0;
-
- for (int x = 0; x < smallerWidth; x++) {
- for (int y = 0; y < smallerHeight; y++) {
- total += dctVals[x][y];
- }
- }
- total -= dctVals[0][0];
-
- double avg = total / (double) ((smallerWidth * smallerHeight) - 1);
- boolean[] hash = new boolean[smallerWidth * smallerHeight];
- int i = 0;
- for (int x = 0; x < smallerWidth; x++) {
- for (int y = 0; y < smallerHeight; y++) {
- if (x != 0 && y != 0) {
- hash[i++] = dctVals[x][y] > avg;
- }
- }
- }
- return hash;
- }
-
-
- private static int getBlue(Bitmap img, int x, int y) {
- return img.getPixel(x, y) & 0xff;
- }
-
- private double[] c;
- private double[] c2;
-
- private void initCoefficients() {
- c = new double[width];
- c2 = new double[height];
- for (int i = 1; i < width; i++) {
- c[i] = 1;
- }
- for (int i = 1; i < height; i++) {
- c2[i] = 1;
- }
- c[0] = 1 / Math.sqrt(2.0);
- c2[0] = 1 / Math.sqrt(2.0);
- }
-
- private double[][] applyDCT(double[][] f) {
- double[][] F = new double[width][height];
- for (int u = 0; u < width; u++) {
- for (int v = 0; v < height; v++) {
- double sum = 0.0;
- for (int i = 0; i < width; i++) {
- for (int j = 0; j < height; j++) {
- sum += Math.cos(((2 * i + 1) / (2.0 * width)) * u * Math.PI) * Math.cos(((2 * j + 1) / (2.0 * height)) * v * Math.PI) * (f[i][j]);
- }
- }
- sum *= ((c[u] * c2[v]) / 4.0);
- F[u][v] = sum;
- }
- }
- return F;
- }
-
- public static class OCR implements com.stardust.mi666.ocr.OCR {
-
- private SimpleTextDetector mSimpleTextDetector;
- private Map mChars = new HashMap<>();
- private ImagePHash mImagePHash;
-
- public OCR(ColorDetector colorDetector, int size, int smallerSize) {
- mSimpleTextDetector = new SimpleTextDetector(colorDetector);
- mImagePHash = new ImagePHash(size, smallerSize);
- }
-
- public OCR(ColorDetector colorDetector, ImagePHash pHash) {
- mSimpleTextDetector = new SimpleTextDetector(colorDetector);
- mImagePHash = pHash;
- }
-
- @Override
- public void addChar(char ch, Bitmap bitmap) {
- mChars.put(ch, mImagePHash.getHash(mSimpleTextDetector.detect(bitmap)));
- }
-
- @Override
- public char detect(Bitmap bitmap) {
- bitmap = mSimpleTextDetector.detect(bitmap);
- int min = Integer.MAX_VALUE;
- boolean[] h = mImagePHash.getHash(bitmap);
- char ch = ' ';
- for (Map.Entry entry : mChars.entrySet()) {
- int d = mImagePHash.distance(h, entry.getValue());
- //Log.i(LOG_TAG, "char: " + entry.getKey() + " distance: " + d);
- if (d < min) {
- min = d;
- ch = entry.getKey();
- }
- }
- return ch;
- }
- }
-
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/console/TimberConsole.java b/app/src/main/java/com/stardust/scriptdroid/ui/console/TimberConsole.java
index 0343c6c0..f232e355 100644
--- a/app/src/main/java/com/stardust/scriptdroid/ui/console/TimberConsole.java
+++ b/app/src/main/java/com/stardust/scriptdroid/ui/console/TimberConsole.java
@@ -22,19 +22,15 @@ import timber.log.Timber;
public class TimberConsole implements Console {
static {
- try {
- Timber.plant(new ConsoleTree.Builder()
- .minPriority(Log.VERBOSE)
- .verboseColor(0xff909090)
- .debugColor(0xffc88b48)
- .infoColor(0xffc9c9c9)
- .warnColor(0xffa97db6)
- .errorColor(0xffff534e)
- .assertColor(0xffff5540)
- .build());
- } catch (Exception e) {
- // FIXME: 2017/4/26 java.lang.NoClassDefFoundError: com.jraska.console.timber.ConsoleTree at android4.4
- }
+ Timber.plant(new ConsoleTree.Builder()
+ .minPriority(Log.VERBOSE)
+ .verboseColor(0xff909090)
+ .debugColor(0xffc88b48)
+ .infoColor(0xffc9c9c9)
+ .warnColor(0xffa97db6)
+ .errorColor(0xffff534e)
+ .assertColor(0xffff5540)
+ .build());
}
@Override
diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/edit/EditActivity.java b/app/src/main/java/com/stardust/scriptdroid/ui/edit/EditActivity.java
index 9fb52656..7d6f32a1 100644
--- a/app/src/main/java/com/stardust/scriptdroid/ui/edit/EditActivity.java
+++ b/app/src/main/java/com/stardust/scriptdroid/ui/edit/EditActivity.java
@@ -1,6 +1,5 @@
package com.stardust.scriptdroid.ui.edit;
-import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
@@ -14,51 +13,49 @@ import android.util.SparseArray;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
-import android.view.inputmethod.InputMethod;
import com.afollestad.materialdialogs.DialogAction;
import com.afollestad.materialdialogs.MaterialDialog;
-import com.stardust.autojs.engine.JavaScriptEngine;
-import com.stardust.autojs.ScriptExecutionListener;
-import com.stardust.autojs.script.FileScriptSource;
-import com.stardust.autojs.script.JsBeautifier;
-import com.stardust.autojs.script.ScriptSource;
-import com.stardust.autojs.script.StringScriptSource;
-import com.stardust.enhancedfloaty.ResizableFloatyService;
-import com.stardust.pio.PFile;
-import com.stardust.scriptdroid.Pref;
-import com.stardust.scriptdroid.autojs.AutoJs;
-import com.stardust.scriptdroid.external.floating_window.FloatingConsole;
-import com.stardust.scriptdroid.scripts.ScriptFile;
-import com.stardust.scriptdroid.tool.JsBeautifierFactory;
-import com.stardust.scriptdroid.tool.MaterialDialogFactory;
-import com.stardust.scriptdroid.ui.BaseActivity;
-import com.stardust.scriptdroid.ui.console.ConsoleActivity;
-import com.stardust.scriptdroid.ui.edit.editor920.Editor920Activity;
-import com.stardust.scriptdroid.ui.edit.editor920.Editor920Utils;
-import com.stardust.scriptdroid.ui.edit.sidemenu.EditSideMenuFragment;
-import com.stardust.scriptdroid.ui.edit.sidemenu.FunctionListRecyclerView;
-import com.stardust.scriptdroid.ui.help.HelpCatalogueActivity;
-import com.stardust.theme.dialog.ThemeColorMaterialDialogBuilder;
-import com.stardust.util.SparseArrayEntries;
-import com.stardust.view.ViewBinding;
-import com.stardust.widget.ToolbarMenuItem;
import com.jecelyin.editor.v2.common.Command;
import com.jecelyin.editor.v2.common.SaveListener;
import com.jecelyin.editor.v2.core.widget.TextView;
import com.jecelyin.editor.v2.ui.EditorDelegate;
import com.jecelyin.editor.v2.view.EditorView;
import com.jecelyin.editor.v2.view.menu.MenuDef;
+import com.stardust.autojs.ScriptExecutionListener;
+import com.stardust.autojs.engine.JavaScriptEngine;
+import com.stardust.autojs.script.FileScriptSource;
+import com.stardust.autojs.script.JsBeautifier;
+import com.stardust.autojs.script.ScriptSource;
+import com.stardust.autojs.script.StringScriptSource;
import com.stardust.scriptdroid.App;
+import com.stardust.scriptdroid.Pref;
import com.stardust.scriptdroid.R;
+import com.stardust.scriptdroid.autojs.AutoJs;
+import com.stardust.scriptdroid.scripts.ScriptFile;
+import com.stardust.scriptdroid.tool.JsBeautifierFactory;
+import com.stardust.scriptdroid.tool.MaterialDialogFactory;
+import com.stardust.scriptdroid.ui.BaseActivity;
+import com.stardust.scriptdroid.ui.console.ConsoleActivity;
import com.stardust.scriptdroid.ui.edit.completion.InputMethodEnhanceBar;
+import com.stardust.scriptdroid.ui.edit.editor920.Editor920Activity;
+import com.stardust.scriptdroid.ui.edit.editor920.Editor920Utils;
+import com.stardust.scriptdroid.ui.help.HelpCatalogueActivity;
+import com.stardust.scriptdroid.ui.main.operation.ScriptFileOperation;
import com.stardust.theme.ThemeColorManager;
+import com.stardust.theme.dialog.ThemeColorMaterialDialogBuilder;
+import com.stardust.util.SparseArrayEntries;
import com.stardust.view.ViewBinder;
+import com.stardust.view.ViewBinding;
+import com.stardust.widget.ToolbarMenuItem;
import java.io.File;
import timber.log.Timber;
+import static com.stardust.scriptdroid.ui.main.operation.ScriptFileOperation.ACTION_ON_RUN_FINISHED;
+import static com.stardust.scriptdroid.ui.main.operation.ScriptFileOperation.EXTRA_EXCEPTION_MESSAGE;
+
/**
* Created by Stardust on 2017/1/29.
*/
@@ -94,43 +91,10 @@ public class EditActivity extends Editor920Activity {
public static final String EXTRA_CONTENT = "Still Love Eating 17.4.5";
- private static final String ACTION_ON_RUN_FINISHED = "ACTION_ON_RUN_FINISHED";
- private static final String EXTRA_EXCEPTION_MESSAGE = "EXTRA_EXCEPTION_MESSAGE";
-
-
- private static final ScriptExecutionListener SCRIPT_EXECUTION_LISTENER = new ScriptExecutionListener() {
-
- @Override
- public void onStart(JavaScriptEngine engine, ScriptSource source) {
- AutoJs.getInstance().getScriptEngineService().getDefaultListener().onStart(engine, source);
- }
-
- @Override
- public void onSuccess(JavaScriptEngine engine, ScriptSource source, Object result) {
- App.getApp().sendBroadcast(new Intent(ACTION_ON_RUN_FINISHED));
- }
-
- @Override
- public void onException(JavaScriptEngine engine, ScriptSource source, Exception e) {
- App.getApp().sendBroadcast(new Intent(ACTION_ON_RUN_FINISHED)
- .putExtra(EXTRA_EXCEPTION_MESSAGE, e.getMessage()));
- e.printStackTrace();
- }
-
- };
-
public static void editFile(Context context, String path) {
editFile(context, null, path);
}
- public static void view(Context context, String name, String content) {
- context.startActivity(new Intent(context, EditActivity.class)
- .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
- .putExtra("readOnly", true)
- .putExtra("content", content)
- .putExtra("name", name));
- }
-
public static void editFile(Context context, String name, String path) {
context.startActivity(new Intent(context, EditActivity.class)
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
@@ -145,7 +109,6 @@ public class EditActivity extends Editor920Activity {
private String mName;
private File mFile;
private View mView;
- private DrawerLayout mDrawerLayout;
private EditorDelegate mEditorDelegate;
private SparseArray mMenuMap;
private boolean mReadOnly = false;
@@ -175,23 +138,6 @@ public class EditActivity extends Editor920Activity {
registerReceiver(mOnRunFinishedReceiver, new IntentFilter(ACTION_ON_RUN_FINISHED));
}
- @Override
- protected void onStart() {
- super.onStart();
- openDrawerIfFirstUse();
- }
-
- private void openDrawerIfFirstUse() {
- if (Pref.isEditActivityFirstUsing()) {
- mDrawerLayout.postDelayed(new Runnable() {
- @Override
- public void run() {
- mDrawerLayout.openDrawer(GravityCompat.END);
- }
- }, 1000);
- }
- }
-
private void handleIntent(Intent intent) {
String path = intent.getStringExtra("path");
mName = intent.getStringExtra("name");
@@ -214,25 +160,11 @@ public class EditActivity extends Editor920Activity {
private void setUpUI() {
ThemeColorManager.addActivityStatusBar(this);
- mDrawerLayout = (DrawerLayout) mView.findViewById(R.id.drawer_layout);
- initSideMenuFragment();
setUpToolbar();
initMenuItem();
ViewBinder.bind(this);
}
- private void initSideMenuFragment() {
- EditSideMenuFragment.setFragment(EditActivity.this, R.id.fragment_edit_side_menu)
- .setOnFunctionClickListener(new FunctionListRecyclerView.OnFunctionClickListener() {
- @Override
- public void onClick(FunctionListRecyclerView.Function function, int position) {
- if (!mReadOnly)
- insertText(function.name);
- mDrawerLayout.closeDrawer(GravityCompat.END);
- }
- });
- }
-
private void setUpEditor() {
final EditorView editorView = (EditorView) findViewById(R.id.editor);
mEditorDelegate.setEditorView(editorView);
@@ -284,9 +216,9 @@ public class EditActivity extends Editor920Activity {
Snackbar.make(mView, R.string.text_start_running, Snackbar.LENGTH_SHORT).show();
setMenuStatus(R.id.run, MenuDef.STATUS_DISABLED);
if (mFile != null) {
- AutoJs.getInstance().getScriptEngineService().execute(new FileScriptSource(mName, mFile), SCRIPT_EXECUTION_LISTENER);
+ ScriptFileOperation.runOnEditView(new FileScriptSource(mName, mFile));
} else {
- AutoJs.getInstance().getScriptEngineService().execute(new StringScriptSource(mName, mEditorDelegate.getText()), SCRIPT_EXECUTION_LISTENER);
+ ScriptFileOperation.runOnEditView(new StringScriptSource(mName, mEditorDelegate.getText()));
}
}
@@ -344,11 +276,19 @@ public class EditActivity extends Editor920Activity {
case R.id.action_beautify:
beautifyCode();
return true;
-
+ case R.id.action_open_by_other_apps:
+ openByOtherApps();
+ return true;
}
return super.onOptionsItemSelected(item);
}
+ private void openByOtherApps() {
+ if (mFile != null)
+ ScriptFileOperation.openByOtherApps(mFile.getPath());
+
+ }
+
private void beautifyCode() {
final MaterialDialog dialog = MaterialDialogFactory.showProgress(this);
mJsBeautifier.beautify(mEditorDelegate.getText(), new JsBeautifier.Callback() {
@@ -365,6 +305,7 @@ public class EditActivity extends Editor920Activity {
@Override
public void onException(Exception e) {
+ dialog.dismiss();
e.printStackTrace();
}
});
diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/edit/ViewSampleActivity.java b/app/src/main/java/com/stardust/scriptdroid/ui/edit/ViewSampleActivity.java
new file mode 100644
index 00000000..c7c93619
--- /dev/null
+++ b/app/src/main/java/com/stardust/scriptdroid/ui/edit/ViewSampleActivity.java
@@ -0,0 +1,171 @@
+package com.stardust.scriptdroid.ui.edit;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.os.Bundle;
+import android.support.design.widget.Snackbar;
+import android.util.SparseArray;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.View;
+
+import com.jecelyin.editor.v2.common.Command;
+import com.jecelyin.editor.v2.ui.EditorDelegate;
+import com.jecelyin.editor.v2.view.EditorView;
+import com.jecelyin.editor.v2.view.menu.MenuDef;
+import com.stardust.autojs.script.StringScriptSource;
+import com.stardust.scriptdroid.R;
+import com.stardust.scriptdroid.scripts.sample.Sample;
+import com.stardust.scriptdroid.ui.BaseActivity;
+import com.stardust.scriptdroid.ui.console.ConsoleActivity;
+import com.stardust.scriptdroid.ui.edit.editor920.Editor920Activity;
+import com.stardust.scriptdroid.ui.edit.editor920.Editor920Utils;
+import com.stardust.scriptdroid.ui.help.HelpCatalogueActivity;
+import com.stardust.scriptdroid.ui.main.MainActivity;
+import com.stardust.scriptdroid.ui.main.operation.ScriptFileOperation;
+import com.stardust.theme.ThemeColorManager;
+import com.stardust.util.AssetsCache;
+import com.stardust.util.SparseArrayEntries;
+import com.stardust.view.ViewBinder;
+import com.stardust.view.ViewBinding;
+import com.stardust.widget.ToolbarMenuItem;
+
+import timber.log.Timber;
+
+import static com.stardust.scriptdroid.ui.main.operation.ScriptFileOperation.ACTION_ON_RUN_FINISHED;
+import static com.stardust.scriptdroid.ui.main.operation.ScriptFileOperation.EXTRA_EXCEPTION_MESSAGE;
+
+/**
+ * Created by Stardust on 2017/4/29.
+ */
+
+public class ViewSampleActivity extends Editor920Activity {
+
+ public static void view(Context context, Sample sample) {
+ context.startActivity(new Intent(context, ViewSampleActivity.class)
+ .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
+ .putExtra("sample", sample));
+ }
+
+ private View mView;
+ private Sample mSample;
+ private EditorDelegate mEditorDelegate;
+ private SparseArray mMenuMap;
+ private BroadcastReceiver mOnRunFinishedReceiver = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ if (intent.getAction().equals(ACTION_ON_RUN_FINISHED)) {
+ setMenuStatus(R.id.run, MenuDef.STATUS_NORMAL);
+ String msg = intent.getStringExtra(EXTRA_EXCEPTION_MESSAGE);
+ if (msg != null) {
+ Snackbar.make(mView, getString(R.string.text_error) + ": " + msg, Snackbar.LENGTH_LONG).show();
+ Timber.e(msg);
+ }
+ }
+ }
+ };
+
+ public void onCreate(Bundle b) {
+ super.onCreate(b);
+ setTheme(R.style.EditorTheme);
+ mView = View.inflate(this, R.layout.activity_view_sample, null);
+ setContentView(mView);
+ handleIntent(getIntent());
+ setUpUI();
+ setUpEditor();
+ registerReceiver(mOnRunFinishedReceiver, new IntentFilter(ACTION_ON_RUN_FINISHED));
+ }
+
+ private void handleIntent(Intent intent) {
+ mSample = (Sample) intent.getSerializableExtra("sample");
+ String content = AssetsCache.get(this, mSample.path);
+ mEditorDelegate = new EditorDelegate(0, mSample.name, content);
+ }
+
+ private void setUpUI() {
+ ThemeColorManager.addActivityStatusBar(this);
+ setUpToolbar();
+ initMenuItem();
+ ViewBinder.bind(this);
+ }
+
+ private void setUpEditor() {
+ final EditorView editorView = (EditorView) findViewById(R.id.editor);
+ mEditorDelegate.setEditorView(editorView);
+ Editor920Utils.setLang(mEditorDelegate, "JavaScript");
+ editorView.getEditText().setReadOnly(true);
+ editorView.getEditText().setHorizontallyScrolling(true);
+ }
+
+ private void setUpToolbar() {
+ BaseActivity.setToolbarAsBack(this, R.id.toolbar, mSample.name);
+ }
+
+ @ViewBinding.Click(R.id.run)
+ private void run() {
+ Snackbar.make(mView, R.string.text_start_running, Snackbar.LENGTH_SHORT).show();
+ setMenuStatus(R.id.run, MenuDef.STATUS_DISABLED);
+ ScriptFileOperation.runOnEditView(new StringScriptSource(mSample.name, mEditorDelegate.getText()));
+ }
+
+ private void initMenuItem() {
+ mMenuMap = new SparseArrayEntries()
+ .entry(R.id.run, (ToolbarMenuItem) findViewById(R.id.run))
+ .sparseArray();
+ }
+
+ public void setMenuStatus(int menuResId, int status) {
+ ToolbarMenuItem menuItem = mMenuMap.get(menuResId);
+ if (menuItem == null)
+ return;
+ boolean disabled = status == MenuDef.STATUS_DISABLED;
+ menuItem.setEnabled(!disabled);
+ }
+
+
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ getMenuInflater().inflate(R.menu.menu_view_sample, menu);
+ return true;
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ switch (item.getItemId()) {
+ case R.id.action_console:
+ startActivity(new Intent(getContext(), ConsoleActivity.class).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
+ return true;
+ case R.id.action_help:
+ HelpCatalogueActivity.showMainCatalogue(this);
+ return true;
+ case R.id.action_import:
+ MainActivity.importSample(this, mSample);
+ return true;
+ }
+ return super.onOptionsItemSelected(item);
+ }
+
+ @Override
+ public void doCommand(Command command) {
+ mEditorDelegate.doCommand(command);
+ }
+
+ @Override
+ protected void onDestroy() {
+ super.onDestroy();
+ unregisterReceiver(mOnRunFinishedReceiver);
+ }
+
+ @Override
+ protected void onRestoreInstanceState(Bundle savedInstanceState) {
+ try {
+ super.onRestoreInstanceState(savedInstanceState);
+ } catch (RuntimeException e) {
+ // FIXME: 2017/3/20
+ e.printStackTrace();
+ }
+ }
+
+}
diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/main/MainActivity.java b/app/src/main/java/com/stardust/scriptdroid/ui/main/MainActivity.java
index b46cb8f7..e6a9e03a 100644
--- a/app/src/main/java/com/stardust/scriptdroid/ui/main/MainActivity.java
+++ b/app/src/main/java/com/stardust/scriptdroid/ui/main/MainActivity.java
@@ -9,7 +9,9 @@ import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.NonNull;
+import android.support.design.widget.Snackbar;
import android.support.design.widget.TabLayout;
+import android.support.v4.app.Fragment;
import android.support.v4.view.ViewPager;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
@@ -29,6 +31,7 @@ import com.stardust.scriptdroid.BuildConfig;
import com.stardust.scriptdroid.R;
import com.stardust.scriptdroid.scripts.ScriptFile;
import com.stardust.scriptdroid.scripts.StorageScriptProvider;
+import com.stardust.scriptdroid.scripts.sample.Sample;
import com.stardust.scriptdroid.service.AccessibilityWatchDogService;
import com.stardust.scriptdroid.tool.AccessibilityServiceTool;
import com.stardust.scriptdroid.tool.DrawableSaver;
@@ -50,6 +53,8 @@ import com.stardust.widget.SlidingUpPanel;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
+import java.io.IOException;
+
public class MainActivity extends BaseActivity {
@@ -61,6 +66,9 @@ public class MainActivity extends BaseActivity {
private static final String ACTION_IMPORT_SCRIPT = "ACTION_IMPORT_SCRIPT";
private static final String ARGUMENT_SCRIPT = "ARGUMENT_SCRIPT";
private static final String ARGUMENT_PATH = "ARGUMENT_PATH";
+ private static final String ACTION_IMPORT_SAMPLE = "I cannot find the way back to you...Eating...17.4.29";
+ private static final String ARGUMENT_SAMPLE = "Take a chance on me...ok...?";
+
private DrawerLayout mDrawerLayout;
@ViewBinding.Id(R.id.bottom_menu)
@@ -70,6 +78,7 @@ public class MainActivity extends BaseActivity {
private OnActivityResultDelegate.Intermediary mActivityResultIntermediary = new OnActivityResultDelegate.Intermediary();
private DrawableSaver mDrawerHeaderBackgroundSaver, mAppbarBackgroundSaver;
private VersionGuard mVersionGuard;
+ private Intent mIntentToHandle;
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -77,13 +86,12 @@ public class MainActivity extends BaseActivity {
setUpUI();
checkPermissions();
registerBackPressHandlers();
- handleIntent(getIntent());
+ mIntentToHandle = getIntent();
EventBus.getDefault().register(this);
mVersionGuard = new VersionGuard(this);
}
-
private void registerBackPressHandlers() {
registerBackPressedHandler(new BackPressedHandler() {
@Override
@@ -164,6 +172,15 @@ public class MainActivity extends BaseActivity {
viewPager.setAdapter(mPagerAdapter);
viewPager.setOffscreenPageLimit(mPagerAdapter.getCount());
tabLayout.setupWithViewPager(viewPager);
+ mPagerAdapter.setOnFragmentInstantiateListener(new FragmentPagerAdapterBuilder.OnFragmentInstantiateListener() {
+ @Override
+ public void OnInstantiate(Fragment fragment) {
+ if (fragment instanceof MyScriptListFragment && mIntentToHandle != null) {
+ handleIntent(mIntentToHandle);
+ mIntentToHandle = null;
+ }
+ }
+ });
}
@ViewBinding.Click(R.id.add)
@@ -183,13 +200,14 @@ public class MainActivity extends BaseActivity {
@ViewBinding.Click(R.id.import_from_file)
private void showFileChooser() {
+ final StorageScriptProvider provider = StorageScriptProvider.getExternalStorageProvider();
new ScriptFileChooserDialogBuilder(this)
- .scriptProvider(StorageScriptProvider.getExternalStorageProvider())
+ .scriptProvider(provider)
.fileCallback(new ScriptFileChooserDialogBuilder.FileCallback() {
@Override
public void onFileSelection(MaterialDialog dialog, ScriptFile file) {
dialog.dismiss();
- StorageScriptProvider.getExternalStorageProvider().clearCacheExceptInitialDirectory();
+ provider.clearCacheExceptInitialDirectory();
getMyScriptListFragment().importFile(file.getPath());
}
})
@@ -203,7 +221,7 @@ public class MainActivity extends BaseActivity {
if (which == DialogAction.POSITIVE) {
dialog.dismiss();
} else {
- StorageScriptProvider.getExternalStorageProvider().refreshAll();
+ provider.refreshAll();
}
}
})
@@ -225,6 +243,12 @@ public class MainActivity extends BaseActivity {
mDrawerHeaderBackgroundSaver.select(this, mActivityResultIntermediary);
}
+ @Override
+ protected void onResume() {
+ super.onResume();
+ mVersionGuard.checkDeprecateAndUpdate();
+ }
+
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
@@ -242,9 +266,22 @@ public class MainActivity extends BaseActivity {
case ACTION_IMPORT_SCRIPT:
getMyScriptListFragment().importFile(intent.getStringExtra(ARGUMENT_PATH));
break;
+ case ACTION_IMPORT_SAMPLE:
+ importSample((Sample) intent.getSerializableExtra(ARGUMENT_SAMPLE));
+ break;
}
}
+ private void importSample(Sample sample) {
+ try {
+ getMyScriptListFragment().importFile(sample.name, getAssets().open(sample.path));
+ } catch (IOException e) {
+ e.printStackTrace();
+ Snackbar.make(mDrawerLayout, R.string.text_import_fail, Snackbar.LENGTH_SHORT).show();
+ }
+
+ }
+
private void handleRecordedScript(final String script) {
new ThemeColorMaterialDialogBuilder(this)
.title(R.string.text_recorded)
@@ -280,6 +317,13 @@ public class MainActivity extends BaseActivity {
.putExtra(ARGUMENT_PATH, path));
}
+ public static void importSample(Context context, Sample sample) {
+ context.startActivity(new Intent(context, MainActivity.class)
+ .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP)
+ .putExtra(EXTRA_ACTION, ACTION_IMPORT_SAMPLE)
+ .putExtra(ARGUMENT_SAMPLE, sample));
+ }
+
public MyScriptListFragment getMyScriptListFragment() {
return ((MyScriptListFragment) mPagerAdapter.getStoredFragment(0));
}
@@ -308,12 +352,6 @@ public class MainActivity extends BaseActivity {
}
- @Override
- protected void onResume() {
- super.onResume();
- mVersionGuard.checkDeprecateAndUpdate();
- }
-
@Override
protected void onDestroy() {
super.onDestroy();
diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/main/operation/ScriptFileOperation.java b/app/src/main/java/com/stardust/scriptdroid/ui/main/operation/ScriptFileOperation.java
index b2ae830f..2d5b9986 100644
--- a/app/src/main/java/com/stardust/scriptdroid/ui/main/operation/ScriptFileOperation.java
+++ b/app/src/main/java/com/stardust/scriptdroid/ui/main/operation/ScriptFileOperation.java
@@ -2,23 +2,26 @@ package com.stardust.scriptdroid.ui.main.operation;
import android.content.Intent;
import android.net.Uri;
-import android.support.annotation.NonNull;
-import android.support.v7.widget.RecyclerView;
+import android.support.design.widget.Snackbar;
-import com.afollestad.materialdialogs.MaterialDialog;
+import com.squareup.haha.perflib.Main;
+import com.stardust.autojs.ScriptExecutionListener;
+import com.stardust.autojs.engine.JavaScriptEngine;
import com.stardust.autojs.script.FileScriptSource;
+import com.stardust.autojs.script.ScriptSource;
+import com.stardust.autojs.script.StringScriptSource;
+import com.stardust.scriptdroid.App;
+import com.stardust.scriptdroid.R;
import com.stardust.scriptdroid.autojs.AutoJs;
-import com.stardust.scriptdroid.scripts.ScriptFile;
-import com.stardust.scriptdroid.scripts.ScriptFileList;
import com.stardust.scriptdroid.external.CommonUtils;
import com.stardust.scriptdroid.external.shortcut.Shortcut;
import com.stardust.scriptdroid.external.shortcut.ShortcutActivity;
+import com.stardust.scriptdroid.scripts.ScriptFile;
+import com.stardust.scriptdroid.scripts.sample.Sample;
import com.stardust.scriptdroid.ui.edit.EditActivity;
-import com.stardust.theme.dialog.ThemeColorMaterialDialogBuilder;
-import com.stardust.scriptdroid.App;
-import com.stardust.scriptdroid.R;
+import com.stardust.scriptdroid.ui.main.MainActivity;
-import org.greenrobot.eventbus.EventBus;
+import java.io.IOException;
/**
* Created by Stardust on 2017/1/23.
@@ -26,17 +29,34 @@ import org.greenrobot.eventbus.EventBus;
public abstract class ScriptFileOperation {
+ public static final String ACTION_ON_RUN_FINISHED = "ACTION_ON_RUN_FINISHED";
+ public static final String EXTRA_EXCEPTION_MESSAGE = "EXTRA_EXCEPTION_MESSAGE";
- public static class ShowMessageEvent {
- public int messageResId;
- public ShowMessageEvent(int message) {
- this.messageResId = message;
+ private static final ScriptExecutionListener SCRIPT_EXECUTION_LISTENER = new ScriptExecutionListener() {
+
+ @Override
+ public void onStart(JavaScriptEngine engine, ScriptSource source) {
+ AutoJs.getInstance().getScriptEngineService().getDefaultListener().onStart(engine, source);
}
- }
- public static void openByOtherApps(ScriptFile scriptFile) {
- Uri uri = Uri.parse("file://" + scriptFile.getPath());
+ @Override
+ public void onSuccess(JavaScriptEngine engine, ScriptSource source, Object result) {
+ App.getApp().sendBroadcast(new Intent(ACTION_ON_RUN_FINISHED));
+ }
+
+ @Override
+ public void onException(JavaScriptEngine engine, ScriptSource source, Exception e) {
+ App.getApp().sendBroadcast(new Intent(ACTION_ON_RUN_FINISHED)
+ .putExtra(EXTRA_EXCEPTION_MESSAGE, e.getMessage()));
+ e.printStackTrace();
+ }
+
+ };
+
+
+ public static void openByOtherApps(String path) {
+ Uri uri = Uri.parse("file://" + path);
App.getApp().startActivity(new Intent(Intent.ACTION_VIEW).setDataAndType(uri, "text/plain").addFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
}
@@ -53,149 +73,12 @@ public abstract class ScriptFileOperation {
EditActivity.editFile(App.getApp(), file.getSimplifiedName(), file.getPath());
}
-
- public abstract void operate(RecyclerView recyclerView, ScriptFileList scriptFileList, int position);
-
- private String mName;
-
- public ScriptFileOperation(String name, int iconResId) {
- mName = name;
- mIconResId = iconResId;
+ public static void run(ScriptFile file) {
+ AutoJs.getInstance().getScriptEngineService().execute(new FileScriptSource(file));
}
- private int mIconResId;
-
- public String getName() {
- return mName;
+ public static void runOnEditView(ScriptSource scriptSource) {
+ AutoJs.getInstance().getScriptEngineService().execute(scriptSource, SCRIPT_EXECUTION_LISTENER);
}
- public int getIconResId() {
- return mIconResId;
- }
-
- public static class Run extends ScriptFileOperation {
-
- public Run() {
- super(App.getApp().getString(R.string.text_run), R.drawable.ic_play_green);
- }
-
- @Override
- public void operate(RecyclerView recyclerView, ScriptFileList scriptFileList, int position) {
- EventBus.getDefault().post(new ShowMessageEvent(R.string.text_start_running));
- ScriptFile scriptFile = scriptFileList.get(position);
- AutoJs.getInstance().getScriptEngineService().execute(new FileScriptSource(scriptFile));
- }
- }
-
- public static class Edit extends ScriptFileOperation {
-
- private static Edit instance = new Edit();
-
- public Edit() {
- super(App.getApp().getString(R.string.text_edit), R.drawable.ic_edit_green_48dp);
- }
-
- public static Edit getInstance() {
- return instance;
- }
-
- public static void setInstance(Edit instance) {
- Edit.instance = instance;
- }
-
- @Override
- public void operate(RecyclerView recyclerView, ScriptFileList scriptFileList, int position) {
- ScriptFile scriptFile = scriptFileList.get(position);
- EditActivity.editFile(App.getApp(), scriptFile.getSimplifiedName(), scriptFile.getPath());
- //脚本
- //任务&控制台
- //教程
- //
- }
- }
-
- public static class OpenByOtherApp extends ScriptFileOperation {
-
- public OpenByOtherApp() {
- super(App.getApp().getString(R.string.text_open_by_other_apps), R.drawable.ic_open_in_new_green_48dp);
- }
-
- @Override
- public void operate(RecyclerView recyclerView, ScriptFileList scriptFileList, int position) {
- ScriptFile scriptFile = scriptFileList.get(position);
- Uri uri = Uri.parse("file://" + scriptFile.getPath());
- App.getApp().startActivity(new Intent(Intent.ACTION_VIEW).setDataAndType(uri, "text/plain").addFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
- }
- }
-
- public static class Rename extends ScriptFileOperation {
-
- public Rename() {
- super(App.getApp().getString(R.string.text_rename), R.drawable.ic_rename_green);
- }
-
- @Override
- public void operate(final RecyclerView recyclerView, final ScriptFileList scriptFileList, final int position) {
- String oldName = scriptFileList.get(position).getSimplifiedName();
- new ThemeColorMaterialDialogBuilder(recyclerView.getContext())
- .title(R.string.text_rename)
- .checkBoxPrompt(App.getApp().getString(R.string.text_rename_file_meanwhile), false, null)
- .input(App.getApp().getString(R.string.text_please_input_new_name), oldName, new MaterialDialog.InputCallback() {
- @Override
- public void onInput(@NonNull MaterialDialog dialog, CharSequence input) {
- scriptFileList.rename(position, input.toString(), dialog.isPromptCheckBoxChecked());
- recyclerView.getAdapter().notifyItemChanged(position);
- }
- })
- .show();
- }
- }
-
- public static class CreateShortcut extends ScriptFileOperation {
-
- public CreateShortcut() {
- super(App.getApp().getString(R.string.text_send_shortcut), R.drawable.ic_shortcut_green);
- }
-
- @Override
- public void operate(RecyclerView recyclerView, ScriptFileList scriptFileList, int position) {
- ScriptFile scriptFile = scriptFileList.get(position);
- new Shortcut(App.getApp()).name(scriptFile.getSimplifiedName())
- .targetClass(ShortcutActivity.class)
- .icon(R.drawable.ic_robot_green)
- .extras(new Intent().putExtra("path", scriptFile.getPath()))
- .send();
- EventBus.getDefault().post(R.string.text_already_create);
- }
- }
-
- public static class Remove extends ScriptFileOperation {
-
- public Remove() {
- super(App.getApp().getString(R.string.text_delete), R.drawable.ic_delete_green_48dp);
- }
-
- @Override
- public void operate(RecyclerView recyclerView, ScriptFileList scriptFileList, int position) {
- scriptFileList.remove(position);
- recyclerView.getAdapter().notifyItemRemoved(position);
- }
- }
-
- public static class Delete extends ScriptFileOperation {
-
- public Delete() {
- super(App.getApp().getString(R.string.text_delete_absolutly), R.drawable.ic_delete_forever_green_48dp);
- }
-
- @Override
- public void operate(RecyclerView recyclerView, ScriptFileList scriptFileList, int position) {
- boolean succeed = scriptFileList.deleteFromFileSystem(position);
- EventBus.getDefault().post(new ShowMessageEvent(succeed ? R.string.text_already_delete : R.string.text_delete_failed));
- if (succeed)
- recyclerView.getAdapter().notifyItemRemoved(position);
- }
- }
-
-
-}
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/main/operation/ScriptFileOperationPopupMenu.java b/app/src/main/java/com/stardust/scriptdroid/ui/main/operation/ScriptFileOperationPopupMenu.java
deleted file mode 100644
index 035f2255..00000000
--- a/app/src/main/java/com/stardust/scriptdroid/ui/main/operation/ScriptFileOperationPopupMenu.java
+++ /dev/null
@@ -1,174 +0,0 @@
-package com.stardust.scriptdroid.ui.main.operation;
-
-import android.content.Context;
-import android.graphics.drawable.ColorDrawable;
-import android.support.annotation.Nullable;
-import android.support.v4.widget.PopupWindowCompat;
-import android.support.v7.widget.LinearLayoutManager;
-import android.support.v7.widget.RecyclerView;
-import android.util.AttributeSet;
-import android.util.DisplayMetrics;
-import android.view.Gravity;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.view.WindowManager;
-import android.widget.ImageView;
-import android.widget.PopupWindow;
-import android.widget.TextView;
-import android.workground.WrapContentLinearLayoutManager;
-
-import com.stardust.util.ViewUtil;
-import com.stardust.scriptdroid.R;
-
-import java.util.List;
-
-/**
- * Created by Stardust on 2017/1/24.
- */
-
-public class ScriptFileOperationPopupMenu extends PopupWindow {
-
-
- public interface OnItemClickListener {
- void onClick(View view, int position, ScriptFileOperation operation);
- }
-
- private Context mContext;
- private ScriptFileOperationListRecyclerView mOperationListRecyclerView;
- private OnItemClickListener mOnItemClickListener;
-
-
- private List mScriptFileOperationList;
-
- private final View.OnClickListener mOnItemClickRealListener = new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- if (mOnItemClickListener != null) {
- int position = mOperationListRecyclerView.getChildViewHolder(v).getAdapterPosition();
- mOnItemClickListener.onClick(v, position, mScriptFileOperationList.get(position));
- }
- }
- };
-
-
- public ScriptFileOperationPopupMenu(Context context, List scriptFileOperationList) {
- super(context);
- mContext = context;
- mScriptFileOperationList = scriptFileOperationList;
- init();
- }
-
- public void setOnItemClickListener(OnItemClickListener onItemClickListener) {
- mOnItemClickListener = onItemClickListener;
- }
-
- public void show(View anchor) {
- int y = (int) (getScreenHeight() - anchor.getHeight() - getYInScreen(anchor) - getContentHeight());
- y = Math.min(y, -anchor.getHeight());
- PopupWindowCompat.showAsDropDown(this, anchor, 0, y, Gravity.LEFT | Gravity.BOTTOM);
- }
-
- private int getContentHeight() {
- getContentView().measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED);
- return getContentView().getMeasuredHeight();
- }
-
- private int getYInScreen(View anchor) {
- int[] location = new int[2];
- anchor.getLocationInWindow(location);
- return location[1];
- }
-
-
- private float getScreenHeight() {
- DisplayMetrics displaymetrics = new DisplayMetrics();
- ((WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay().getMetrics(displaymetrics);
- return displaymetrics.heightPixels;
- }
-
- private void init() {
- setWidth(WindowManager.LayoutParams.WRAP_CONTENT);
- setHeight(WindowManager.LayoutParams.WRAP_CONTENT);
- setBackgroundDrawable(new ColorDrawable());
- setOutsideTouchable(true);
- setAnimationStyle(-1);
- initContentView();
- }
-
- private void initContentView() {
- View contentView = View.inflate(mContext, R.layout.script_file_operation_popup_menu_content, null);
- setContentView(contentView);
- mOperationListRecyclerView = ViewUtil.$(contentView, R.id.operation_list);
- mOperationListRecyclerView.setOnItemClickListener(mOnItemClickRealListener);
- mOperationListRecyclerView.setScriptFileOperationList(mScriptFileOperationList);
- }
-
-
- public static class ScriptFileOperationListRecyclerView extends RecyclerView {
-
- private OnClickListener mOnItemClickListener;
-
- private List mScriptFileOperationList;
-
- public ScriptFileOperationListRecyclerView(Context context) {
- super(context);
- init();
- }
-
- public ScriptFileOperationListRecyclerView(Context context, @Nullable AttributeSet attrs) {
- super(context, attrs);
- init();
- }
-
- public ScriptFileOperationListRecyclerView(Context context, @Nullable AttributeSet attrs, int defStyle) {
- super(context, attrs, defStyle);
- init();
- }
-
- public void setScriptFileOperationList(List scriptFileOperationList) {
- mScriptFileOperationList = scriptFileOperationList;
- }
-
- private void init() {
- setLayoutManager(new WrapContentLinearLayoutManager(getContext()));
- setAdapter(new Adapter() {
- @Override
- public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
- View itemView = LayoutInflater.from(getContext()).inflate(R.layout.script_file_operation_popup_menu_item, parent, false);
- return new ViewHolder(itemView);
- }
-
- @Override
- public void onBindViewHolder(ViewHolder holder, int position) {
- ScriptFileOperation operation = mScriptFileOperationList.get(position);
- holder.operationName.setText(operation.getName());
- holder.icon.setImageResource(operation.getIconResId());
- }
-
- @Override
- public int getItemCount() {
- return mScriptFileOperationList.size();
- }
- });
- }
-
- public void setOnItemClickListener(OnClickListener onItemClickListener) {
- mOnItemClickListener = onItemClickListener;
- }
-
- private class ViewHolder extends RecyclerView.ViewHolder {
-
- TextView operationName;
- ImageView icon;
-
- ViewHolder(View itemView) {
- super(itemView);
- itemView.setOnClickListener(mOnItemClickListener);
- operationName = ViewUtil.$(itemView, R.id.name);
- icon = ViewUtil.$(itemView, R.id.icon);
- }
- }
- }
-
-}
diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/main/sample_list/SampleScriptListFragment.java b/app/src/main/java/com/stardust/scriptdroid/ui/main/sample_list/SampleScriptListFragment.java
index 184bc780..f750c9b1 100644
--- a/app/src/main/java/com/stardust/scriptdroid/ui/main/sample_list/SampleScriptListFragment.java
+++ b/app/src/main/java/com/stardust/scriptdroid/ui/main/sample_list/SampleScriptListFragment.java
@@ -9,13 +9,11 @@ import android.view.ViewGroup;
import com.afollestad.materialdialogs.MaterialDialog;
import com.stardust.app.Fragment;
-import com.stardust.pio.PFile;
import com.stardust.scriptdroid.R;
import com.stardust.scriptdroid.scripts.sample.Sample;
import com.stardust.scriptdroid.scripts.sample.SampleFileManager;
-import com.stardust.scriptdroid.ui.edit.EditActivity;
+import com.stardust.scriptdroid.ui.edit.ViewSampleActivity;
import com.stardust.scriptdroid.ui.main.MainActivity;
-import com.stardust.util.AssetsCache;
import java.io.IOException;
@@ -67,6 +65,7 @@ public class SampleScriptListFragment extends Fragment {
}
private void copySampleToMyScripts(Sample sample) {
+ MainActivity.importSample(getActivity(), sample);
try {
((MainActivity) getActivity()).getMyScriptListFragment().
importFile(sample.name, getActivity().getAssets().open(sample.path));
@@ -77,7 +76,7 @@ public class SampleScriptListFragment extends Fragment {
}
private void viewSample(Sample sample) {
- EditActivity.view(getContext(), sample.name, AssetsCache.get(getActivity(), sample.path));
+ ViewSampleActivity.view(getContext(), sample);
}
}
diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/main/script_list/MyScriptListFragment.java b/app/src/main/java/com/stardust/scriptdroid/ui/main/script_list/MyScriptListFragment.java
index bb92c851..1f7a479f 100644
--- a/app/src/main/java/com/stardust/scriptdroid/ui/main/script_list/MyScriptListFragment.java
+++ b/app/src/main/java/com/stardust/scriptdroid/ui/main/script_list/MyScriptListFragment.java
@@ -5,6 +5,7 @@ import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.design.widget.Snackbar;
import android.text.InputType;
+import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -37,6 +38,8 @@ public class MyScriptListFragment extends Fragment {
public static final String MESSAGE_SCRIPT_FILE_ADDED = "MESSAGE_SCRIPT_FILE_ADDED";
+ private static final String TAG = "MyScriptListFragment";
+
private ScriptAndFolderListRecyclerView mScriptListRecyclerView;
private ScriptListWithProgressBarView mScriptListWithProgressBarView;
private View mNoScriptHint;
@@ -45,7 +48,7 @@ public class MyScriptListFragment extends Fragment {
private ScriptFile mSelectedScriptFile;
private MaterialDialog.InputCallback mFileNameInputCallback = new InputCallback(false);
private MaterialDialog.InputCallback mDirectoryNameInputCallback = new InputCallback(true);
- private int mSelectedPosition;
+ private String mFilePathToImport;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
@@ -67,6 +70,10 @@ public class MyScriptListFragment extends Fragment {
mNoScriptHint = $(R.id.hint_no_script);
initScriptListRecyclerView();
initDialogs();
+ if (mFilePathToImport != null) {
+ importFile(mFilePathToImport);
+ mFilePathToImport = null;
+ }
}
private void initScriptListRecyclerView() {
@@ -91,7 +98,6 @@ public class MyScriptListFragment extends Fragment {
@Override
public void onLongClick(ScriptFile file, int position) {
mSelectedScriptFile = file;
- mSelectedPosition = position;
if (file.isDirectory()) {
mDirectoryOperationDialog.show();
} else {
@@ -147,6 +153,10 @@ public class MyScriptListFragment extends Fragment {
}
public void importFile(final String pathFrom) {
+ if (getActivity() == null) {
+ mFilePathToImport = pathFrom;
+ return;
+ }
try {
importFile(PFile.getNameWithoutExtension(pathFrom), new FileInputStream(pathFrom));
} catch (FileNotFoundException e) {
@@ -245,7 +255,7 @@ public class MyScriptListFragment extends Fragment {
@ViewBinding.Click(R.id.open_by_other_apps)
private void openByOtherApps() {
dismissDialogs();
- ScriptFileOperation.openByOtherApps(mSelectedScriptFile);
+ ScriptFileOperation.openByOtherApps(mSelectedScriptFile.getPath());
onScriptFileOperated();
}
diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/main/script_list/ScriptAndFolderListRecyclerView.java b/app/src/main/java/com/stardust/scriptdroid/ui/main/script_list/ScriptAndFolderListRecyclerView.java
index 090b783d..ca00dafe 100644
--- a/app/src/main/java/com/stardust/scriptdroid/ui/main/script_list/ScriptAndFolderListRecyclerView.java
+++ b/app/src/main/java/com/stardust/scriptdroid/ui/main/script_list/ScriptAndFolderListRecyclerView.java
@@ -20,6 +20,7 @@ import com.stardust.scriptdroid.autojs.AutoJs;
import com.stardust.scriptdroid.scripts.ScriptFile;
import com.stardust.scriptdroid.R;
import com.stardust.scriptdroid.scripts.StorageScriptProvider;
+import com.stardust.scriptdroid.ui.main.operation.ScriptFileOperation;
import com.stardust.widget.ViewHolderMutableAdapter;
import com.stardust.widget.ViewHolderSupplier;
import com.yqritc.recyclerviewflexibledivider.HorizontalDividerItemDecoration;
@@ -107,7 +108,7 @@ public class ScriptAndFolderListRecyclerView extends RecyclerView {
public void onClick(View v) {
int position = getChildViewHolder((View) v.getParent()).getAdapterPosition();
ScriptFile file = mAdapter.getScriptFileAt(position);
- AutoJs.getInstance().getScriptEngineService().execute(new FileScriptSource(file));
+ ScriptFileOperation.run(file);
}
};
private final ViewHolderSupplier mDefaultViewHolderSupplier = new ViewHolderSupplier() {
@@ -188,6 +189,10 @@ public class ScriptAndFolderListRecyclerView extends RecyclerView {
setRootDirectory(mStorageScriptProvider.getInitialDirectory());
}
+ public StorageScriptProvider getStorageScriptProvider() {
+ return mStorageScriptProvider;
+ }
+
public void setOnItemClickListener(OnScriptFileClickListener onItemClickListener) {
mOnItemClickListener = onItemClickListener;
}
diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/main/script_list/ScriptListRecyclerView.java b/app/src/main/java/com/stardust/scriptdroid/ui/main/script_list/ScriptListRecyclerView.java
deleted file mode 100644
index ad96b5fd..00000000
--- a/app/src/main/java/com/stardust/scriptdroid/ui/main/script_list/ScriptListRecyclerView.java
+++ /dev/null
@@ -1,151 +0,0 @@
-package com.stardust.scriptdroid.ui.main.script_list;
-
-import android.content.Context;
-import android.support.annotation.Nullable;
-import android.support.design.widget.Snackbar;
-import android.support.v7.widget.DividerItemDecoration;
-import android.support.v7.widget.LinearLayoutManager;
-import android.support.v7.widget.RecyclerView;
-import android.support.v7.widget.ThemeColorRecyclerView;
-import android.util.AttributeSet;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.TextView;
-import android.workground.WrapContentLinearLayoutManager;
-
-import com.stardust.scriptdroid.scripts.ScriptFile;
-import com.stardust.scriptdroid.scripts.ScriptFileList;
-import com.stardust.util.ViewUtil;
-import com.stardust.scriptdroid.R;
-import com.stardust.scriptdroid.ui.main.operation.ScriptFileOperation;
-
-import org.greenrobot.eventbus.Subscribe;
-
-/**
- * Created by Stardust on 2017/1/23.
- */
-
-public class ScriptListRecyclerView extends ThemeColorRecyclerView {
-
- public interface OnItemClickListener {
-
- void OnItemClick(View v, int position);
-
- }
-
- private ScriptFileList mScriptFileList;
-
- private OnItemClickListener mOnItemClickListener;
-
- private final OnClickListener mOnItemClickListenerProxy = new OnClickListener() {
- @Override
- public void onClick(View v) {
- int position = getChildViewHolder(v).getAdapterPosition();
- if (mOnItemClickListener != null) {
- mOnItemClickListener.OnItemClick(v, position);
- }
- }
- };
-
- private final OnClickListener mOnEditIconClickListener = new OnClickListener() {
- @Override
- public void onClick(View v) {
- int position = getChildViewHolder((View) v.getParent()).getAdapterPosition();
- onEditIconClick(v, position);
- }
- };
-
- private final OnClickListener mOnRunIconClickListener = new OnClickListener() {
- @Override
- public void onClick(View v) {
- int position = getChildViewHolder((View) v.getParent()).getAdapterPosition();
- //onRunIconClick(v, position);
- }
-
- };
-
-
- public ScriptListRecyclerView(Context context) {
- super(context);
- init();
- }
-
-
- public ScriptListRecyclerView(Context context, @Nullable AttributeSet attrs) {
- super(context, attrs);
- init();
- }
-
- public ScriptListRecyclerView(Context context, @Nullable AttributeSet attrs, int defStyle) {
- super(context, attrs, defStyle);
- init();
- }
-
- public void setOnItemClickListener(OnItemClickListener onItemClickListener) {
- mOnItemClickListener = onItemClickListener;
- }
-
- private void init() {
- setAdapter(new Adapter());
- setLayoutManager(new WrapContentLinearLayoutManager(getContext()));
- addItemDecoration(new DividerItemDecoration(getContext(), DividerItemDecoration.VERTICAL));
- }
-
-
- protected void onEditIconClick(View v, int position) {
- ScriptFileOperation.Edit.getInstance().operate(ScriptListRecyclerView.this, mScriptFileList, position);
- }
-
- public void setScriptFileList(ScriptFileList scriptFileList) {
- mScriptFileList = scriptFileList;
- getAdapter().notifyDataSetChanged();
- }
-
- @Subscribe
- public void showMessage(ScriptFileOperation.ShowMessageEvent event) {
- Snackbar.make(this, event.messageResId, Snackbar.LENGTH_SHORT).show();
- }
-
- private class Adapter extends RecyclerView.Adapter {
-
- @Override
- public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
- View itemView = LayoutInflater.from(getContext()).inflate(R.layout.script_list_recycler_view_item, parent, false);
- return new ViewHolder(itemView);
- }
-
- @Override
- public void onBindViewHolder(ViewHolder holder, int position) {
- ScriptFile scriptFile = mScriptFileList.get(position);
- holder.name.setText(scriptFile.getSimplifiedName());
- holder.path.setText(scriptFile.getSimplifiedPath());
- }
-
-
- @Override
- public int getItemCount() {
- return mScriptFileList.size();
- }
-
- @Override
- public void registerAdapterDataObserver(AdapterDataObserver observer) {
- super.registerAdapterDataObserver(observer);
- }
- }
-
- private class ViewHolder extends RecyclerView.ViewHolder {
-
- TextView name, path;
-
- ViewHolder(View itemView) {
- super(itemView);
- name = (TextView) itemView.findViewById(R.id.name);
- path = (TextView) itemView.findViewById(R.id.path);
- ViewUtil.$(itemView, R.id.edit).setOnClickListener(mOnEditIconClickListener);
- ViewUtil.$(itemView, R.id.run).setOnClickListener(mOnRunIconClickListener);
- itemView.setOnClickListener(mOnItemClickListenerProxy);
- }
- }
-
-}
diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/main/script_list/ScriptListWithProgressBarView.java b/app/src/main/java/com/stardust/scriptdroid/ui/main/script_list/ScriptListWithProgressBarView.java
index 0c200f45..f06d997b 100644
--- a/app/src/main/java/com/stardust/scriptdroid/ui/main/script_list/ScriptListWithProgressBarView.java
+++ b/app/src/main/java/com/stardust/scriptdroid/ui/main/script_list/ScriptListWithProgressBarView.java
@@ -7,6 +7,7 @@ import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.annotation.RequiresApi;
import android.support.annotation.StyleRes;
+import android.support.v4.widget.SwipeRefreshLayout;
import android.util.AttributeSet;
import android.view.View;
import android.widget.FrameLayout;
@@ -23,6 +24,7 @@ public class ScriptListWithProgressBarView extends FrameLayout {
private View mProgressBar;
private ScriptAndFolderListRecyclerView mScriptAndFolderListRecyclerView;
+ private SwipeRefreshLayout mSwipeRefreshLayout;
public ScriptListWithProgressBarView(@NonNull Context context) {
super(context);
@@ -47,6 +49,7 @@ public class ScriptListWithProgressBarView extends FrameLayout {
private void init() {
inflate(getContext(), R.layout.script_and_folder_list_view, this);
+ mSwipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.swipe_refresh_layout);
mProgressBar = findViewById(R.id.progressBar);
mScriptAndFolderListRecyclerView = (ScriptAndFolderListRecyclerView) findViewById(R.id.script_list_recycler_view);
mScriptAndFolderListRecyclerView.setFileProcessListener(new ScriptAndFolderListRecyclerView.FileProcessListener() {
@@ -60,6 +63,12 @@ public class ScriptListWithProgressBarView extends FrameLayout {
hideProgressBar();
}
});
+ mSwipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
+ @Override
+ public void onRefresh() {
+ mScriptAndFolderListRecyclerView.getStorageScriptProvider().refreshAll();
+ }
+ });
}
@@ -82,11 +91,13 @@ public class ScriptListWithProgressBarView extends FrameLayout {
public void showProgressBar() {
- mProgressBar.setVisibility(VISIBLE);
+ mSwipeRefreshLayout.setRefreshing(true);
+ mScriptAndFolderListRecyclerView.setEnabled(false);
}
public void hideProgressBar() {
- mProgressBar.setVisibility(GONE);
+ mSwipeRefreshLayout.setRefreshing(false);
+ mScriptAndFolderListRecyclerView.setEnabled(true);
}
diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/settings/SettingsActivity.java b/app/src/main/java/com/stardust/scriptdroid/ui/settings/SettingsActivity.java
index e5d7292a..568a0335 100644
--- a/app/src/main/java/com/stardust/scriptdroid/ui/settings/SettingsActivity.java
+++ b/app/src/main/java/com/stardust/scriptdroid/ui/settings/SettingsActivity.java
@@ -115,6 +115,7 @@ public class SettingsActivity extends BaseActivity {
@Override
public void run() {
EventBus.getDefault().post(new MessageEvent(MainActivity.MESSAGE_CLEAR_BACKGROUND_SETTINGS));
+ Toast.makeText(getActivity(), R.string.text_already_reset, Toast.LENGTH_SHORT).show();
}
})
.entry(getString(R.string.text_check_update), new Runnable() {
diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/update/VersionGuard.java b/app/src/main/java/com/stardust/scriptdroid/ui/update/VersionGuard.java
index 5eb90324..b4845da4 100644
--- a/app/src/main/java/com/stardust/scriptdroid/ui/update/VersionGuard.java
+++ b/app/src/main/java/com/stardust/scriptdroid/ui/update/VersionGuard.java
@@ -6,6 +6,7 @@ import android.support.annotation.NonNull;
import com.afollestad.materialdialogs.DialogAction;
import com.afollestad.materialdialogs.MaterialDialog;
+import com.stardust.scriptdroid.BuildConfig;
import com.stardust.scriptdroid.R;
import com.stardust.scriptdroid.tool.UpdateChecker;
import com.stardust.scriptdroid.tool.VersionInfo;
@@ -43,7 +44,7 @@ public class VersionGuard {
if (isCurrentVersionDeprecated) {
showDeprecatedDialogIfNeeded();
} else {
- showUpdateInfo(info);
+ showUpdateInfoIfNeeded(info);
}
}
});
@@ -51,10 +52,12 @@ public class VersionGuard {
}
}
- private void showUpdateInfo(UpdateChecker.UpdateInfo info) {
- new UpdateInfoDialogBuilder(mActivity, info)
- .showDoNotAskAgain()
- .show();
+ private void showUpdateInfoIfNeeded(UpdateChecker.UpdateInfo info) {
+ if (BuildConfig.VERSION_CODE < info.versionCode) {
+ new UpdateInfoDialogBuilder(mActivity, info)
+ .showDoNotAskAgain()
+ .show();
+ }
}
private void showDeprecatedDialogIfNeeded() {
diff --git a/app/src/main/java/com/stardust/widget/SlidingUpPanel.java b/app/src/main/java/com/stardust/widget/SlidingUpPanel.java
index 366efac0..a3ba7e84 100644
--- a/app/src/main/java/com/stardust/widget/SlidingUpPanel.java
+++ b/app/src/main/java/com/stardust/widget/SlidingUpPanel.java
@@ -50,6 +50,7 @@ public class SlidingUpPanel extends FrameLayout {
public void show() {
setVisibility(VISIBLE);
+ setClickable(true);
mContentContainer.startAnimation(mSlideUpAnimation);
mShowing = true;
}
diff --git a/app/src/main/res/layout/activity_edit.xml b/app/src/main/res/layout/activity_edit.xml
index f7a86271..0208b4f0 100644
--- a/app/src/main/res/layout/activity_edit.xml
+++ b/app/src/main/res/layout/activity_edit.xml
@@ -63,20 +63,6 @@
-
-
-
-
-
-
+
diff --git a/app/src/main/res/layout/activity_view_sample.xml b/app/src/main/res/layout/activity_view_sample.xml
new file mode 100644
index 00000000..612c8ac7
--- /dev/null
+++ b/app/src/main/res/layout/activity_view_sample.xml
@@ -0,0 +1,86 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/air_activity_issue_reporter.xml b/app/src/main/res/layout/air_activity_issue_reporter.xml
index 26e0bfc6..c1a3ec88 100644
--- a/app/src/main/res/layout/air_activity_issue_reporter.xml
+++ b/app/src/main/res/layout/air_activity_issue_reporter.xml
@@ -36,7 +36,7 @@
+ android:layout_height="wrap_content"/>
@@ -52,12 +52,12 @@
+ android:padding="@dimen/air_baseline_card">
@@ -82,8 +82,7 @@
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
android:layout_margin="@dimen/air_baseline"
- app:srcCompat="@drawable/air_ic_send_light"
- app:backgroundTint="?colorAccent"/>
+ app:srcCompat="@drawable/air_ic_send_light"/>
diff --git a/app/src/main/res/layout/air_card_report_compat.xml b/app/src/main/res/layout/air_card_report_compat.xml
new file mode 100644
index 00000000..37b6f5c4
--- /dev/null
+++ b/app/src/main/res/layout/air_card_report_compat.xml
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/script_and_folder_list_view.xml b/app/src/main/res/layout/script_and_folder_list_view.xml
index 9b18cbf5..3c535c47 100644
--- a/app/src/main/res/layout/script_and_folder_list_view.xml
+++ b/app/src/main/res/layout/script_and_folder_list_view.xml
@@ -4,10 +4,17 @@
android:layout_height="match_parent"
android:background="#fefefe">
-
+ android:layout_height="match_parent">
+
+
+
+
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/script_file_operation_popup_menu_item.xml b/app/src/main/res/layout/script_file_operation_popup_menu_item.xml
deleted file mode 100644
index a1c418da..00000000
--- a/app/src/main/res/layout/script_file_operation_popup_menu_item.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/menu/menu_editor.xml b/app/src/main/res/menu/menu_editor.xml
index c7ab25e3..11d167a2 100644
--- a/app/src/main/res/menu/menu_editor.xml
+++ b/app/src/main/res/menu/menu_editor.xml
@@ -9,15 +9,21 @@
app:showAsAction="never"/>
+
+
\ No newline at end of file
diff --git a/app/src/main/res/menu/menu_view_sample.xml b/app/src/main/res/menu/menu_view_sample.xml
new file mode 100644
index 00000000..a1985cc9
--- /dev/null
+++ b/app/src/main/res/menu/menu_view_sample.xml
@@ -0,0 +1,23 @@
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values-en/strings.xml b/app/src/main/res/values-en/strings.xml
index 0a34356a..29ec5ef5 100644
--- a/app/src/main/res/values-en/strings.xml
+++ b/app/src/main/res/values-en/strings.xml
@@ -1,5 +1,5 @@
- UiAutomator
+ AutoJs
Settings
Disable Service
Required by the script automatic operation (click, long press, slide, etc.).
@@ -38,8 +38,6 @@
Don\'t show again
Copyright©2016 All right reserves.
Stardust
- 946994919
- hybbbb1996@gmail.com
Source Code
Copied
Donate
@@ -122,7 +120,7 @@
View layout hierarchy
View layout bounds
Accessibility service is not activated
- Sample Scripts
+ Samples
My Scripts
Click ADD to create your first script~(。・・)ノ
Reset background settings
@@ -155,15 +153,15 @@
If the app responses slowly when running script, choose Thread Pool or Create Thread. But it may causes rebooting of the device
ON
OFF
- 请选择要导入的脚本
- 刷新
- ω<*)]]>
- 正在检查更新
- 新版本
- 已经是最新版本
- 版本过低
- 这个版本已经不能再使用了哦
- 更新日志
+ Select script file to import
+ Refresh
+ ω<*)]]>
+ Checking for updates
+ New Version
+ No newer version found
+ Version too old
+ This version is deprecated
+ Release Notes
- None
- Volume Up
@@ -176,5 +174,15 @@
- Create New Thread Every Time
- Thread Pool
+ Update
+ Tasks
+ Script
+
+ Processing
+
+ Pre-execute script
+ Check for updates
+ New Directory
+ 已重置
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index bc1ad476..cdc35180 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -1,5 +1,5 @@
- 免Root脚本精灵
+ AutoJs
设置
关闭服务
使脚本自动操作(点击、长按、滑动等)所需,若关闭则只能执行不涉及自动操作的脚本。
@@ -12,7 +12,7 @@
请输入名称
名称
去设置
- 软件需要打开\"自动操作服务\"才能运行,请在随后的设置中选择\"免Root脚本精灵\"并开启服务。\n您也可以稍后在侧拉菜单中设置。
+ 软件需要打开\"自动操作服务\"才能运行,请在随后的设置中选择\"AutoJs\"并开启服务。\n您也可以稍后在侧拉菜单中设置。
取消
路径为空
文件不存在
@@ -42,14 +42,14 @@
示例:简单计算器
Copyright©2016 All right reserves.
星尘幻影
- 946994919
+ 2732014414
hybbbb1996@gmail.com
软件源代码
已复制到剪贴板
打赏作者
邮箱
https://github.com/hyb1996/NoRootScriptDroid
- [免Root脚本精灵]下载地址:http://www.coolapk.com/apk/com.stardust.scriptdroid
+ [AutoJs]下载地址:http://www.coolapk.com/apk/com.stardust.scriptdroid
悬浮窗
通知栏点击区域辅助开关
其他
@@ -165,7 +165,7 @@
key_stop_record_trigger
当前活动:
当前应用包名:
- 无障碍服务->免Root脚本精灵并开启]]>
+ 无障碍服务->AutoJs并开启]]>
脚本运行
key_use_volume_control_running
每次音量键变化停止所有脚本
@@ -210,6 +210,10 @@
此版本不再提示
格式化代码
处理中
+ 已重置
+ 保护模式
+ 在本软件界面无法运行自动操作命令以免误触
+ key_guard_mode
- 无
diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml
index c0f15410..0ac2da10 100644
--- a/app/src/main/res/xml/preferences.xml
+++ b/app/src/main/res/xml/preferences.xml
@@ -35,6 +35,12 @@
android:defaultValue="false"
android:key="@string/key_use_volume_control_running"
android:title="@string/text_use_volume_to_stop_running"/>
+
+
@@ -60,26 +66,12 @@
-
-
-
-
-
-
-
diff --git a/autojs/src/main/java/com/stardust/autojs/engine/JavaScriptEngineManager.java b/autojs/src/main/java/com/stardust/autojs/engine/JavaScriptEngineManager.java
index aea66bee..3ddc6ade 100644
--- a/autojs/src/main/java/com/stardust/autojs/engine/JavaScriptEngineManager.java
+++ b/autojs/src/main/java/com/stardust/autojs/engine/JavaScriptEngineManager.java
@@ -85,8 +85,7 @@ public abstract class JavaScriptEngineManager {
void removeEngine(JavaScriptEngine engine) {
synchronized (mEngines) {
- mEngines.remove(engine);
- if (mEngineLifecycleCallback != null) {
+ if (mEngines.remove(engine) && mEngineLifecycleCallback != null) {
mEngineLifecycleCallback.onEngineRemove(engine);
}
}
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 860a4f46..cc730d8a 100644
--- a/autojs/src/main/java/com/stardust/autojs/engine/RhinoJavaScriptEngine.java
+++ b/autojs/src/main/java/com/stardust/autojs/engine/RhinoJavaScriptEngine.java
@@ -1,10 +1,10 @@
package com.stardust.autojs.engine;
+import android.os.Looper;
import android.util.Log;
import com.stardust.autojs.rhino_android.AndroidContextFactory;
import com.stardust.autojs.rhino_android.RhinoAndroidHelper;
-import com.stardust.autojs.runtime.ScriptRuntime;
import com.stardust.autojs.runtime.ScriptStopException;
import com.stardust.autojs.script.ScriptSource;
import com.stardust.view.accessibility.AccessibilityNodeInfoAllocator;
@@ -17,7 +17,6 @@ import org.mozilla.javascript.ScriptableObject;
import java.io.File;
import java.util.Arrays;
-import java.util.HashMap;
import java.util.Hashtable;
import java.util.Map;
import java.util.Timer;
@@ -36,6 +35,7 @@ public class RhinoJavaScriptEngine implements JavaScriptEngine {
private Thread mThread;
private RhinoJavaScriptEngineManager mEngineManager;
private Map mTags = new Hashtable<>();
+ private boolean mDestroyed = false;
public RhinoJavaScriptEngine(RhinoJavaScriptEngineManager engineManager) {
mEngineManager = engineManager;
@@ -67,7 +67,7 @@ public class RhinoJavaScriptEngine implements JavaScriptEngine {
}
@Override
- public void destroy() {
+ public synchronized void destroy() {
Context.exit();
// TODO: 2017/4/6 XXX :在这里回收内存池并不好
final AccessibilityNodeInfoAllocator allocator = (AccessibilityNodeInfoAllocator) getTag("allocator");
@@ -75,6 +75,7 @@ public class RhinoJavaScriptEngine implements JavaScriptEngine {
new Timer().schedule(new TimerTask() {
@Override
public void run() {
+ // FIXME: 2017/4/28
//allocator.recycleAll();
}
}, 1000);
@@ -136,14 +137,13 @@ public class RhinoJavaScriptEngine implements JavaScriptEngine {
@Override
protected void observeInstructionCount(Context cx, int instructionCount) {
if (Thread.currentThread().isInterrupted()) {
-
+ Context.exit();
throw new ScriptStopException(new InterruptedException());
}
}
@Override
protected Context makeContext() {
-
Context cx = super.makeContext();
cx.setInstructionObserverThreshold(10000);
return cx;
diff --git a/autojs/src/main/java/com/stardust/autojs/runtime/api/AutomatorConfig.java b/autojs/src/main/java/com/stardust/autojs/runtime/api/AutomatorConfig.java
new file mode 100644
index 00000000..9a1f2335
--- /dev/null
+++ b/autojs/src/main/java/com/stardust/autojs/runtime/api/AutomatorConfig.java
@@ -0,0 +1,19 @@
+package com.stardust.autojs.runtime.api;
+
+/**
+ * Created by Stardust on 2017/4/29.
+ */
+
+public class AutomatorConfig {
+
+ private static boolean isUnintendedGuardEnabled = false;
+
+
+ public static boolean isUnintendedGuardEnabled() {
+ return isUnintendedGuardEnabled;
+ }
+
+ public static void setIsUnintendedGuardEnabled(boolean isUnintendedGuardEnabled) {
+ AutomatorConfig.isUnintendedGuardEnabled = isUnintendedGuardEnabled;
+ }
+}
diff --git a/autojs/src/main/java/com/stardust/autojs/runtime/api/UiSelector.java b/autojs/src/main/java/com/stardust/autojs/runtime/api/UiSelector.java
index 99a6b7a5..2f8c7ae3 100644
--- a/autojs/src/main/java/com/stardust/autojs/runtime/api/UiSelector.java
+++ b/autojs/src/main/java/com/stardust/autojs/runtime/api/UiSelector.java
@@ -2,6 +2,7 @@ package com.stardust.autojs.runtime.api;
import android.accessibilityservice.AccessibilityService;
import android.support.annotation.NonNull;
+import android.util.Log;
import android.view.accessibility.AccessibilityEvent;
import android.view.accessibility.AccessibilityNodeInfo;
@@ -87,7 +88,8 @@ public class UiSelector extends UiGlobalSelector {
@JavascriptInterface
public UiObjectCollection find() {
ensureAccessibilityServiceEnabled();
- if (isRunningPackageSelf()) {
+ if (AutomatorConfig.isUnintendedGuardEnabled() && isRunningPackageSelf()) {
+ Log.d(TAG, "isSelfPackage return null");
return null;
}
AccessibilityService service = mAccessibilityBridge.getService();
@@ -105,7 +107,7 @@ public class UiSelector extends UiGlobalSelector {
}
private boolean isRunningPackageSelf() {
- return DeveloperUtils.isRunningPackageSelf(mAccessibilityBridge.getInfoProvider().getLatestPackage());
+ return DeveloperUtils.isSelfPackage(mAccessibilityBridge.getInfoProvider().getLatestPackage());
}
@@ -115,6 +117,7 @@ public class UiSelector extends UiGlobalSelector {
UiObjectCollection uiObjectCollection;
do {
if (Thread.currentThread().isInterrupted()) {
+ Log.d(TAG, "Thread isInterrupted");
throw new ScriptStopException(new InterruptedException());
}
uiObjectCollection = find();
diff --git a/autojs/src/main/java/com/stardust/autojs/runtime/simple_action/SimpleActionAutomator.java b/autojs/src/main/java/com/stardust/autojs/runtime/simple_action/SimpleActionAutomator.java
index 5b6f8ebb..086b09d6 100644
--- a/autojs/src/main/java/com/stardust/autojs/runtime/simple_action/SimpleActionAutomator.java
+++ b/autojs/src/main/java/com/stardust/autojs/runtime/simple_action/SimpleActionAutomator.java
@@ -11,6 +11,7 @@ import android.view.accessibility.AccessibilityNodeInfo;
import com.stardust.autojs.runtime.AccessibilityBridge;
import com.stardust.autojs.runtime.JavascriptInterface;
import com.stardust.autojs.runtime.ScriptRuntime;
+import com.stardust.autojs.runtime.api.AutomatorConfig;
import com.stardust.automator.AccessibilityEventCommandHost;
import com.stardust.automator.simple_action.SimpleAction;
import com.stardust.automator.simple_action.ActionFactory;
@@ -24,6 +25,8 @@ import com.stardust.view.accessibility.AccessibilityNodeInfoAllocator;
public class SimpleActionAutomator {
+ private static final String TAG = "SimpleActionAutomator";
+
@Deprecated
private static class PerformGlobalActionCommand extends AccessibilityEventCommandHost.AbstractCommand {
@@ -185,7 +188,8 @@ public class SimpleActionAutomator {
@SuppressWarnings("unchecked")
private boolean performAction(SimpleAction simpleAction) {
ensureAccessibilityServiceEnabled();
- if (isRunningPackageSelf()) {
+ if (AutomatorConfig.isUnintendedGuardEnabled() && isRunningPackageSelf()) {
+ Log.i(TAG, "performAction: running package is self. return false");
return false;
}
AccessibilityService service = mAccessibilityBridge.getService();
@@ -203,6 +207,6 @@ public class SimpleActionAutomator {
}
private boolean isRunningPackageSelf() {
- return DeveloperUtils.isRunningPackageSelf(mAccessibilityBridge.getInfoProvider().getLatestPackage());
+ return DeveloperUtils.isSelfPackage(mAccessibilityBridge.getInfoProvider().getLatestPackage());
}
}
diff --git a/common/src/main/java/com/stardust/pio/PRandomAccessBinaryFile.java b/common/src/main/java/com/stardust/pio/PRandomAccessBinaryFile.java
new file mode 100644
index 00000000..09007503
--- /dev/null
+++ b/common/src/main/java/com/stardust/pio/PRandomAccessBinaryFile.java
@@ -0,0 +1,29 @@
+package com.stardust.pio;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.RandomAccessFile;
+
+/**
+ * Created by Stardust on 2017/4/29.
+ */
+
+public class PRandomAccessBinaryFile extends RandomAccessFile {
+
+
+ private RandomAccessFile mRandomAccessFile;
+
+ public PRandomAccessBinaryFile(String name, String mode) throws FileNotFoundException {
+ super(name, mode);
+ }
+
+ public PRandomAccessBinaryFile(File file, String mode) throws FileNotFoundException {
+ super(file, mode);
+ }
+
+ public String readline() throws IOException {
+ return super.readLine();
+ }
+
+}
diff --git a/common/src/main/java/com/stardust/util/DeveloperUtils.java b/common/src/main/java/com/stardust/util/DeveloperUtils.java
index 5a9b7c7b..66add949 100644
--- a/common/src/main/java/com/stardust/util/DeveloperUtils.java
+++ b/common/src/main/java/com/stardust/util/DeveloperUtils.java
@@ -16,7 +16,7 @@ public class DeveloperUtils {
}
}
- public static boolean isRunningPackageSelf(@Nullable String runningPackage) {
+ public static boolean isSelfPackage(@Nullable String runningPackage) {
return PACKAGE_NAME.equals(runningPackage);
}
}