diff --git a/app/build.gradle b/app/build.gradle
index 29cc33e8..869eabfb 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -9,8 +9,8 @@ android {
applicationId "com.stardust.scriptdroid"
minSdkVersion 17
targetSdkVersion 23
- versionCode 143
- versionName "2.0.13 Beta2"
+ versionCode 145
+ versionName "2.0.13 Beta3"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
multiDexEnabled true
ndk {
diff --git a/app/src/main/java/com/stardust/scriptdroid/Pref.java b/app/src/main/java/com/stardust/scriptdroid/Pref.java
index ec102dff..07f848d8 100644
--- a/app/src/main/java/com/stardust/scriptdroid/Pref.java
+++ b/app/src/main/java/com/stardust/scriptdroid/Pref.java
@@ -147,7 +147,12 @@ public class Pref {
def().edit().putLong(KEY_LAST_SHOW_AD_MILLIS, System.currentTimeMillis()).apply();
return true;
case "Off":
- return false;
+ lastShowMillis = def().getLong(KEY_LAST_SHOW_AD_MILLIS, 0);
+ if (System.currentTimeMillis() - lastShowMillis < TimeUnit.DAYS.toMillis(2)) {
+ return false;
+ }
+ def().edit().putLong(KEY_LAST_SHOW_AD_MILLIS, System.currentTimeMillis()).apply();
+ return true;
}
return true;
}
diff --git a/app/src/main/java/com/stardust/scriptdroid/external/shortcut/Shortcut.java b/app/src/main/java/com/stardust/scriptdroid/external/shortcut/Shortcut.java
index ce00f41a..9087b4aa 100644
--- a/app/src/main/java/com/stardust/scriptdroid/external/shortcut/Shortcut.java
+++ b/app/src/main/java/com/stardust/scriptdroid/external/shortcut/Shortcut.java
@@ -2,7 +2,7 @@ package com.stardust.scriptdroid.external.shortcut;
import android.content.Context;
import android.content.Intent;
-import android.content.pm.PackageManager;
+import android.graphics.Bitmap;
import android.os.Bundle;
/**
@@ -15,9 +15,10 @@ public class Shortcut {
private String mName;
private String mTargetClass;
private String mTargetPackage;
- private Intent.ShortcutIconResource mIcon;
+ private Intent.ShortcutIconResource mIconRes;
private boolean mDuplicate = false;
private Intent mLaunchIntent = new Intent();
+ private Bitmap mIcon;
public Shortcut(Context context) {
mContext = context;
@@ -50,16 +51,32 @@ public class Shortcut {
}
- public Shortcut icon(Intent.ShortcutIconResource icon) {
+ public Shortcut iconRes(Intent.ShortcutIconResource icon) {
+ if (mIcon != null) {
+ throw new IllegalStateException("Cannot set both iconRes and icon");
+ }
+ mIconRes = icon;
+ return this;
+ }
+
+ public Shortcut iconRes(int resId) {
+ return iconRes(Intent.ShortcutIconResource.fromContext(mContext, resId));
+ }
+
+
+ public Shortcut icon(Bitmap icon) {
+ if (mIconRes != null) {
+ throw new IllegalStateException("Cannot set both iconRes and icon");
+ }
mIcon = icon;
return this;
}
- public Shortcut icon(int resId) {
- mIcon = Intent.ShortcutIconResource.fromContext(mContext, resId);
- return this;
+ public Intent.ShortcutIconResource getIconRes() {
+ return mIconRes;
}
+
public Shortcut duplicate(boolean duplicate) {
mDuplicate = duplicate;
return this;
@@ -69,7 +86,7 @@ public class Shortcut {
return mName;
}
- public Intent.ShortcutIconResource getIcon() {
+ public Bitmap getIcon() {
return mIcon;
}
@@ -86,12 +103,18 @@ public class Shortcut {
}
public Intent getCreateIntent() {
- return new Intent(Intent.ACTION_CREATE_SHORTCUT)
+ Intent intent = new Intent(Intent.ACTION_CREATE_SHORTCUT)
.putExtra(Intent.EXTRA_SHORTCUT_NAME, getName())
- .putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, getIcon())
.putExtra(Intent.EXTRA_SHORTCUT_INTENT, getLaunchIntent())
.putExtra("duplicate", isDuplicate())
.setAction("com.android.launcher.action.INSTALL_SHORTCUT");
+ Bitmap icon = getIcon();
+ if (icon == null) {
+ intent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, getIconRes());
+ } else {
+ intent.putExtra(Intent.EXTRA_SHORTCUT_ICON, icon);
+ }
+ return intent;
}
public Intent getLaunchIntent() {
diff --git a/app/src/main/java/com/stardust/scriptdroid/external/tasker/FireSettingReceiver.java b/app/src/main/java/com/stardust/scriptdroid/external/tasker/FireSettingReceiver.java
index c811e59d..5a8acac9 100644
--- a/app/src/main/java/com/stardust/scriptdroid/external/tasker/FireSettingReceiver.java
+++ b/app/src/main/java/com/stardust/scriptdroid/external/tasker/FireSettingReceiver.java
@@ -32,7 +32,8 @@ public class FireSettingReceiver extends AbstractPluginSettingReceiver {
@Override
protected void firePluginSetting(@NonNull Context context, @NonNull Bundle bundle) {
context.startActivity(new Intent(context, RunIntentActivity.class)
- .putExtras(bundle));
+ .putExtras(bundle)
+ .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
}
}
diff --git a/app/src/main/java/com/stardust/scriptdroid/script/Scripts.java b/app/src/main/java/com/stardust/scriptdroid/script/Scripts.java
index 7f2a2173..7fb2075f 100644
--- a/app/src/main/java/com/stardust/scriptdroid/script/Scripts.java
+++ b/app/src/main/java/com/stardust/scriptdroid/script/Scripts.java
@@ -2,6 +2,7 @@ package com.stardust.scriptdroid.script;
import android.content.Context;
import android.content.Intent;
+import android.content.pm.PackageManager;
import android.net.Uri;
import com.stardust.autojs.execution.ExecutionConfig;
@@ -69,7 +70,7 @@ public class Scripts {
public static void createShortcut(ScriptFile scriptFile) {
new Shortcut(App.getApp()).name(scriptFile.getSimplifiedName())
.targetClass(ShortcutActivity.class)
- .icon(R.drawable.ic_node_js_black)
+ .iconRes(R.drawable.ic_node_js_black)
.extras(new Intent().putExtra(CommonUtils.EXTRA_KEY_PATH, scriptFile.getPath()))
.send();
}
diff --git a/app/src/main/java/com/stardust/scriptdroid/sublime/SublimePluginClient.java b/app/src/main/java/com/stardust/scriptdroid/sublime/SublimePluginClient.java
index 1a6a28e8..cbd18af5 100644
--- a/app/src/main/java/com/stardust/scriptdroid/sublime/SublimePluginClient.java
+++ b/app/src/main/java/com/stardust/scriptdroid/sublime/SublimePluginClient.java
@@ -35,7 +35,7 @@ public class SublimePluginClient {
}
}
- private Socket mSocket;
+ private volatile Socket mSocket;
private Handler mResponseHandler;
private String host;
private int port;
@@ -73,6 +73,10 @@ public class SublimePluginClient {
}).start();
}
+ public boolean isListening() {
+ return mSocket != null;
+ }
+
private void tryClose() {
try {
close();
diff --git a/app/src/main/java/com/stardust/scriptdroid/sublime/SublimePluginService.java b/app/src/main/java/com/stardust/scriptdroid/sublime/SublimePluginService.java
index 89c994ad..a7d37eba 100644
--- a/app/src/main/java/com/stardust/scriptdroid/sublime/SublimePluginService.java
+++ b/app/src/main/java/com/stardust/scriptdroid/sublime/SublimePluginService.java
@@ -13,7 +13,7 @@ public class SublimePluginService {
private static SublimePluginClient client;
public static boolean isConnected() {
- return client != null;
+ return client != null && client.isListening();
}
public static void disconnectIfNeeded() {
@@ -44,6 +44,10 @@ public class SublimePluginService {
JsonObject object = new JsonObject();
object.addProperty("type", "log");
object.addProperty("log", log);
- client.send(object);
+ try {
+ client.send(object);
+ } catch (IllegalStateException e) {
+ 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 a627887f..3973202c 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
@@ -25,6 +25,7 @@ import android.widget.Toast;
import com.afollestad.materialdialogs.DialogAction;
import com.afollestad.materialdialogs.MaterialDialog;
+import com.qq.e.comm.DownloadService;
import com.stardust.app.FragmentPagerAdapterBuilder;
import com.stardust.app.NotAskAgainDialog;
import com.stardust.app.OnActivityResultDelegate;
@@ -103,6 +104,8 @@ public class MainActivity extends BaseActivity implements OnActivityResultDelega
EventBus.getDefault().register(this);
mVersionGuard = new VersionGuard(this);
showAnnunciationIfNeeded();
+ //Stop download service of ad sdk
+ stopService(new Intent(this, DownloadService.class));
}
@AfterViews
diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/main/SideMenuFragment.java b/app/src/main/java/com/stardust/scriptdroid/ui/main/SideMenuFragment.java
index 967091e4..0991db51 100644
--- a/app/src/main/java/com/stardust/scriptdroid/ui/main/SideMenuFragment.java
+++ b/app/src/main/java/com/stardust/scriptdroid/ui/main/SideMenuFragment.java
@@ -78,10 +78,16 @@ public class SideMenuFragment extends android.support.v4.app.Fragment {
mExecutor.execute(new Runnable() {
@Override
public void run() {
+ if (mAccessibilityServiceSwitch == null) {
+ return;
+ }
final boolean checked = AccessibilityService.isEnabled(App.getApp());
mAccessibilityServiceSwitch.post(new Runnable() {
@Override
public void run() {
+ if (mAccessibilityServiceSwitch == null) {
+ return;
+ }
mAccessibilityServiceSwitch.setChecked(checked);
}
});
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index f587aa81..0847fbc5 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -224,7 +224,7 @@
- 默认
- 每天显示一次
- - 不显示
+ - 两天显示一次
diff --git a/autojs/src/main/assets/modules/__images__.js b/autojs/src/main/assets/modules/__images__.js
index 559dea5c..e46d4566 100644
--- a/autojs/src/main/assets/modules/__images__.js
+++ b/autojs/src/main/assets/modules/__images__.js
@@ -10,6 +10,10 @@ module.exports = function(__runtime__, scope){
images.saveImage = __runtime__.images.saveImage.bind(__runtime__.images);
+ images.pixel = __runtime__.images.pixel;
+
+ images.detectsColor = __runtime__.images.detectsColor.bind(__runtime__.images);
+
images.findColor = function(img, color, options){
if(typeof(color) == 'string'){
if(color.startsWith('#')){
diff --git a/autojs/src/main/java/com/stardust/autojs/execution/ScriptExecuteActivity.java b/autojs/src/main/java/com/stardust/autojs/execution/ScriptExecuteActivity.java
index 2f83c081..7ae23709 100644
--- a/autojs/src/main/java/com/stardust/autojs/execution/ScriptExecuteActivity.java
+++ b/autojs/src/main/java/com/stardust/autojs/execution/ScriptExecuteActivity.java
@@ -40,6 +40,10 @@ public class ScriptExecuteActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
+ if (execution == null) {
+ finish();
+ return;
+ }
mScriptSource = execution.getSource();
mScriptEngine = execution.getEngine();
mExecutionListener = execution.getListener();
diff --git a/autojs/src/main/java/com/stardust/autojs/runtime/api/image/Images.java b/autojs/src/main/java/com/stardust/autojs/runtime/api/image/Images.java
index 05b4cba5..9c51d107 100644
--- a/autojs/src/main/java/com/stardust/autojs/runtime/api/image/Images.java
+++ b/autojs/src/main/java/com/stardust/autojs/runtime/api/image/Images.java
@@ -5,15 +5,11 @@ import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
+import android.graphics.Color;
import android.graphics.Matrix;
import android.media.Image;
-import android.media.ImageReader;
-import android.media.ImageWriter;
-import android.media.MediaCodec;
import android.os.Build;
-import android.provider.ContactsContract;
import android.support.annotation.RequiresApi;
-import android.view.Surface;
import com.stardust.autojs.runtime.AbstractScriptRuntime;
import com.stardust.autojs.runtime.ScriptInterruptedException;
@@ -29,7 +25,7 @@ import java.nio.ByteBuffer;
/**
* Created by Stardust on 2017/5/20.
*/
-
+@RequiresApi(api = Build.VERSION_CODES.KITKAT)
public class Images {
private AbstractScriptRuntime mScriptRuntime;
@@ -109,13 +105,28 @@ public class Images {
public static int pixel(Image image, int x, int y) {
Image.Plane plane = image.getPlanes()[0];
int offset = y * plane.getRowStride() + x * plane.getPixelStride();
- return plane.getBuffer().getInt(offset);
+ int c = plane.getBuffer().getInt(offset);
+ return (c & 0xff000000) + ((c & 0xff) << 16) + (c & 0x00ff00) + ((c & 0xff0000) >> 16);
}
public static int pixel(Bitmap bitmap, int x, int y) {
return bitmap.getPixel(x, y);
}
+ public boolean detectsColor(Image image, int x, int y, int color) {
+ if (image == null)
+ return false;
+ int pixel = pixel(image, x, y);
+ return colorFinder.defaultColorDetector(color).detectsColor(Color.red(pixel), Color.green(pixel), Color.blue(pixel));
+ }
+
+ public boolean detectsColor(Image image, int x, int y, int color, int threshold) {
+ if (image == null)
+ return false;
+ int pixel = pixel(image, x, y);
+ return colorFinder.defaultColorDetector(color, threshold).detectsColor(Color.red(pixel), Color.green(pixel), Color.blue(pixel));
+ }
+
public static Bitmap read(String path) {
return BitmapFactory.decodeFile(path);
}
diff --git a/autojs/src/main/java/com/stardust/autojs/runtime/api/ui/BlockedMaterialDialog.java b/autojs/src/main/java/com/stardust/autojs/runtime/api/ui/BlockedMaterialDialog.java
index f86978bf..25004e3e 100644
--- a/autojs/src/main/java/com/stardust/autojs/runtime/api/ui/BlockedMaterialDialog.java
+++ b/autojs/src/main/java/com/stardust/autojs/runtime/api/ui/BlockedMaterialDialog.java
@@ -36,8 +36,9 @@ public class BlockedMaterialDialog extends MaterialDialog {
private boolean isActivityContext(Context context) {
if (context == null)
return false;
- if (context instanceof Activity)
- return true;
+ if (context instanceof Activity) {
+ return !((Activity) context).isFinishing();
+ }
if (context instanceof ContextWrapper) {
return isActivityContext(((ContextWrapper) context).getBaseContext());
}
diff --git a/autojs/src/main/java/com/stardust/autojs/runtime/api/ui/Dialogs.java b/autojs/src/main/java/com/stardust/autojs/runtime/api/ui/Dialogs.java
index 35d9a5ab..01f5c6bc 100644
--- a/autojs/src/main/java/com/stardust/autojs/runtime/api/ui/Dialogs.java
+++ b/autojs/src/main/java/com/stardust/autojs/runtime/api/ui/Dialogs.java
@@ -1,5 +1,6 @@
package com.stardust.autojs.runtime.api.ui;
+import android.app.Activity;
import android.content.Context;
import android.content.ContextWrapper;
import android.text.TextUtils;
@@ -73,7 +74,7 @@ public class Dialogs {
private Context getContext() {
if (mThemeWrapper != null)
return mThemeWrapper;
- mThemeWrapper = new ContextThemeWrapper(mUiHandler.getContext(), R.style.Theme_AppCompat_Light);
+ mThemeWrapper = new ContextThemeWrapper(mUiHandler.getContext().getApplicationContext(), R.style.Theme_AppCompat_Light);
return mThemeWrapper;
}
@@ -115,7 +116,7 @@ public class Dialogs {
private BlockedMaterialDialog.Builder dialogBuilder() {
Context context = mAppUtils.getCurrentActivity();
- if (context == null) {
+ if (context == null || ((Activity) context).isFinishing()) {
context = getContext();
}
return (BlockedMaterialDialog.Builder) new BlockedMaterialDialog.Builder(context, mUiHandler)
diff --git a/autojs/src/main/res/xml/accessibility_service_config.xml b/autojs/src/main/res/xml/accessibility_service_config.xml
index 11faefa4..28a7fdb7 100644
--- a/autojs/src/main/res/xml/accessibility_service_config.xml
+++ b/autojs/src/main/res/xml/accessibility_service_config.xml
@@ -2,7 +2,7 @@