Merge pull request #210 from hyb1996/new_ui

release 2.0.13 Beta3
This commit is contained in:
Stardust
2017-07-09 12:02:13 +08:00
committed by GitHub
18 changed files with 106 additions and 49 deletions

View File

@@ -9,8 +9,8 @@ android {
applicationId "com.stardust.scriptdroid" applicationId "com.stardust.scriptdroid"
minSdkVersion 17 minSdkVersion 17
targetSdkVersion 23 targetSdkVersion 23
versionCode 143 versionCode 145
versionName "2.0.13 Beta2" versionName "2.0.13 Beta3"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
multiDexEnabled true multiDexEnabled true
ndk { ndk {

View File

@@ -147,7 +147,12 @@ public class Pref {
def().edit().putLong(KEY_LAST_SHOW_AD_MILLIS, System.currentTimeMillis()).apply(); def().edit().putLong(KEY_LAST_SHOW_AD_MILLIS, System.currentTimeMillis()).apply();
return true; return true;
case "Off": 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; return true;
} }

View File

@@ -2,7 +2,7 @@ package com.stardust.scriptdroid.external.shortcut;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.pm.PackageManager; import android.graphics.Bitmap;
import android.os.Bundle; import android.os.Bundle;
/** /**
@@ -15,9 +15,10 @@ public class Shortcut {
private String mName; private String mName;
private String mTargetClass; private String mTargetClass;
private String mTargetPackage; private String mTargetPackage;
private Intent.ShortcutIconResource mIcon; private Intent.ShortcutIconResource mIconRes;
private boolean mDuplicate = false; private boolean mDuplicate = false;
private Intent mLaunchIntent = new Intent(); private Intent mLaunchIntent = new Intent();
private Bitmap mIcon;
public Shortcut(Context context) { public Shortcut(Context context) {
mContext = 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; mIcon = icon;
return this; return this;
} }
public Shortcut icon(int resId) { public Intent.ShortcutIconResource getIconRes() {
mIcon = Intent.ShortcutIconResource.fromContext(mContext, resId); return mIconRes;
return this;
} }
public Shortcut duplicate(boolean duplicate) { public Shortcut duplicate(boolean duplicate) {
mDuplicate = duplicate; mDuplicate = duplicate;
return this; return this;
@@ -69,7 +86,7 @@ public class Shortcut {
return mName; return mName;
} }
public Intent.ShortcutIconResource getIcon() { public Bitmap getIcon() {
return mIcon; return mIcon;
} }
@@ -86,12 +103,18 @@ public class Shortcut {
} }
public Intent getCreateIntent() { 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_NAME, getName())
.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, getIcon())
.putExtra(Intent.EXTRA_SHORTCUT_INTENT, getLaunchIntent()) .putExtra(Intent.EXTRA_SHORTCUT_INTENT, getLaunchIntent())
.putExtra("duplicate", isDuplicate()) .putExtra("duplicate", isDuplicate())
.setAction("com.android.launcher.action.INSTALL_SHORTCUT"); .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() { public Intent getLaunchIntent() {

View File

@@ -32,7 +32,8 @@ public class FireSettingReceiver extends AbstractPluginSettingReceiver {
@Override @Override
protected void firePluginSetting(@NonNull Context context, @NonNull Bundle bundle) { protected void firePluginSetting(@NonNull Context context, @NonNull Bundle bundle) {
context.startActivity(new Intent(context, RunIntentActivity.class) context.startActivity(new Intent(context, RunIntentActivity.class)
.putExtras(bundle)); .putExtras(bundle)
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
} }
} }

View File

@@ -2,6 +2,7 @@ package com.stardust.scriptdroid.script;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri; import android.net.Uri;
import com.stardust.autojs.execution.ExecutionConfig; import com.stardust.autojs.execution.ExecutionConfig;
@@ -69,7 +70,7 @@ public class Scripts {
public static void createShortcut(ScriptFile scriptFile) { public static void createShortcut(ScriptFile scriptFile) {
new Shortcut(App.getApp()).name(scriptFile.getSimplifiedName()) new Shortcut(App.getApp()).name(scriptFile.getSimplifiedName())
.targetClass(ShortcutActivity.class) .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())) .extras(new Intent().putExtra(CommonUtils.EXTRA_KEY_PATH, scriptFile.getPath()))
.send(); .send();
} }

View File

@@ -35,7 +35,7 @@ public class SublimePluginClient {
} }
} }
private Socket mSocket; private volatile Socket mSocket;
private Handler mResponseHandler; private Handler mResponseHandler;
private String host; private String host;
private int port; private int port;
@@ -73,6 +73,10 @@ public class SublimePluginClient {
}).start(); }).start();
} }
public boolean isListening() {
return mSocket != null;
}
private void tryClose() { private void tryClose() {
try { try {
close(); close();

View File

@@ -13,7 +13,7 @@ public class SublimePluginService {
private static SublimePluginClient client; private static SublimePluginClient client;
public static boolean isConnected() { public static boolean isConnected() {
return client != null; return client != null && client.isListening();
} }
public static void disconnectIfNeeded() { public static void disconnectIfNeeded() {
@@ -44,6 +44,10 @@ public class SublimePluginService {
JsonObject object = new JsonObject(); JsonObject object = new JsonObject();
object.addProperty("type", "log"); object.addProperty("type", "log");
object.addProperty("log", log); object.addProperty("log", log);
client.send(object); try {
client.send(object);
} catch (IllegalStateException e) {
e.printStackTrace();
}
} }
} }

View File

@@ -25,6 +25,7 @@ import android.widget.Toast;
import com.afollestad.materialdialogs.DialogAction; import com.afollestad.materialdialogs.DialogAction;
import com.afollestad.materialdialogs.MaterialDialog; import com.afollestad.materialdialogs.MaterialDialog;
import com.qq.e.comm.DownloadService;
import com.stardust.app.FragmentPagerAdapterBuilder; import com.stardust.app.FragmentPagerAdapterBuilder;
import com.stardust.app.NotAskAgainDialog; import com.stardust.app.NotAskAgainDialog;
import com.stardust.app.OnActivityResultDelegate; import com.stardust.app.OnActivityResultDelegate;
@@ -103,6 +104,8 @@ public class MainActivity extends BaseActivity implements OnActivityResultDelega
EventBus.getDefault().register(this); EventBus.getDefault().register(this);
mVersionGuard = new VersionGuard(this); mVersionGuard = new VersionGuard(this);
showAnnunciationIfNeeded(); showAnnunciationIfNeeded();
//Stop download service of ad sdk
stopService(new Intent(this, DownloadService.class));
} }
@AfterViews @AfterViews

View File

@@ -78,10 +78,16 @@ public class SideMenuFragment extends android.support.v4.app.Fragment {
mExecutor.execute(new Runnable() { mExecutor.execute(new Runnable() {
@Override @Override
public void run() { public void run() {
if (mAccessibilityServiceSwitch == null) {
return;
}
final boolean checked = AccessibilityService.isEnabled(App.getApp()); final boolean checked = AccessibilityService.isEnabled(App.getApp());
mAccessibilityServiceSwitch.post(new Runnable() { mAccessibilityServiceSwitch.post(new Runnable() {
@Override @Override
public void run() { public void run() {
if (mAccessibilityServiceSwitch == null) {
return;
}
mAccessibilityServiceSwitch.setChecked(checked); mAccessibilityServiceSwitch.setChecked(checked);
} }
}); });

View File

@@ -224,7 +224,7 @@
<string-array name="ad_showing_mode_keys"> <string-array name="ad_showing_mode_keys">
<item>默认</item> <item>默认</item>
<item>每天显示一次</item> <item>每天显示一次</item>
<item>不显示</item> <item>两天显示一次</item>
</string-array> </string-array>
<string-array name="ad_showing_mode_values"> <string-array name="ad_showing_mode_values">

View File

@@ -10,6 +10,10 @@ module.exports = function(__runtime__, scope){
images.saveImage = __runtime__.images.saveImage.bind(__runtime__.images); 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){ images.findColor = function(img, color, options){
if(typeof(color) == 'string'){ if(typeof(color) == 'string'){
if(color.startsWith('#')){ if(color.startsWith('#')){

View File

@@ -40,6 +40,10 @@ public class ScriptExecuteActivity extends AppCompatActivity {
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
if (execution == null) {
finish();
return;
}
mScriptSource = execution.getSource(); mScriptSource = execution.getSource();
mScriptEngine = execution.getEngine(); mScriptEngine = execution.getEngine();
mExecutionListener = execution.getListener(); mExecutionListener = execution.getListener();

View File

@@ -5,15 +5,11 @@ import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.graphics.Bitmap; import android.graphics.Bitmap;
import android.graphics.BitmapFactory; import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.graphics.Matrix; import android.graphics.Matrix;
import android.media.Image; import android.media.Image;
import android.media.ImageReader;
import android.media.ImageWriter;
import android.media.MediaCodec;
import android.os.Build; import android.os.Build;
import android.provider.ContactsContract;
import android.support.annotation.RequiresApi; import android.support.annotation.RequiresApi;
import android.view.Surface;
import com.stardust.autojs.runtime.AbstractScriptRuntime; import com.stardust.autojs.runtime.AbstractScriptRuntime;
import com.stardust.autojs.runtime.ScriptInterruptedException; import com.stardust.autojs.runtime.ScriptInterruptedException;
@@ -29,7 +25,7 @@ import java.nio.ByteBuffer;
/** /**
* Created by Stardust on 2017/5/20. * Created by Stardust on 2017/5/20.
*/ */
@RequiresApi(api = Build.VERSION_CODES.KITKAT)
public class Images { public class Images {
private AbstractScriptRuntime mScriptRuntime; private AbstractScriptRuntime mScriptRuntime;
@@ -109,13 +105,28 @@ public class Images {
public static int pixel(Image image, int x, int y) { public static int pixel(Image image, int x, int y) {
Image.Plane plane = image.getPlanes()[0]; Image.Plane plane = image.getPlanes()[0];
int offset = y * plane.getRowStride() + x * plane.getPixelStride(); 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) { public static int pixel(Bitmap bitmap, int x, int y) {
return bitmap.getPixel(x, 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) { public static Bitmap read(String path) {
return BitmapFactory.decodeFile(path); return BitmapFactory.decodeFile(path);
} }

View File

@@ -36,8 +36,9 @@ public class BlockedMaterialDialog extends MaterialDialog {
private boolean isActivityContext(Context context) { private boolean isActivityContext(Context context) {
if (context == null) if (context == null)
return false; return false;
if (context instanceof Activity) if (context instanceof Activity) {
return true; return !((Activity) context).isFinishing();
}
if (context instanceof ContextWrapper) { if (context instanceof ContextWrapper) {
return isActivityContext(((ContextWrapper) context).getBaseContext()); return isActivityContext(((ContextWrapper) context).getBaseContext());
} }

View File

@@ -1,5 +1,6 @@
package com.stardust.autojs.runtime.api.ui; package com.stardust.autojs.runtime.api.ui;
import android.app.Activity;
import android.content.Context; import android.content.Context;
import android.content.ContextWrapper; import android.content.ContextWrapper;
import android.text.TextUtils; import android.text.TextUtils;
@@ -73,7 +74,7 @@ public class Dialogs {
private Context getContext() { private Context getContext() {
if (mThemeWrapper != null) if (mThemeWrapper != null)
return mThemeWrapper; 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; return mThemeWrapper;
} }
@@ -115,7 +116,7 @@ public class Dialogs {
private BlockedMaterialDialog.Builder dialogBuilder() { private BlockedMaterialDialog.Builder dialogBuilder() {
Context context = mAppUtils.getCurrentActivity(); Context context = mAppUtils.getCurrentActivity();
if (context == null) { if (context == null || ((Activity) context).isFinishing()) {
context = getContext(); context = getContext();
} }
return (BlockedMaterialDialog.Builder) new BlockedMaterialDialog.Builder(context, mUiHandler) return (BlockedMaterialDialog.Builder) new BlockedMaterialDialog.Builder(context, mUiHandler)

View File

@@ -2,7 +2,7 @@
<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android" <accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
android:accessibilityEventTypes="typeAllMask" android:accessibilityEventTypes="typeAllMask"
android:accessibilityFeedbackType="feedbackGeneric" android:accessibilityFeedbackType="feedbackGeneric"
android:accessibilityFlags="flagRetrieveInteractiveWindows|flagIncludeNotImportantViews|flagReportViewIds|flagRequestEnhancedWebAccessibility|flagRequestFilterKeyEvents" android:accessibilityFlags="flagRetrieveInteractiveWindows|flagIncludeNotImportantViews|flagReportViewIds|flagRequestEnhancedWebAccessibility"
android:canPerformGestures="true" android:canPerformGestures="true"
android:canRequestEnhancedWebAccessibility="true" android:canRequestEnhancedWebAccessibility="true"
android:canRetrieveWindowContent="true" android:canRetrieveWindowContent="true"

View File

@@ -81,28 +81,17 @@ public class AccessibilityService extends android.accessibilityservice.Accessibi
} }
} }
@Override
public void onInterrupt() {
}
@Override @Override
public AccessibilityNodeInfo getRootInActiveWindow() { public AccessibilityNodeInfo getRootInActiveWindow() {
return mRootInActiveWindow; return mRootInActiveWindow;
} }
@Override
protected boolean onKeyEvent(KeyEvent event) {
Log.v(TAG, "onKeyEvent: " + event);
return super.onKeyEvent(event);
}
@Override
protected boolean onGesture(int gestureId) {
Log.v(TAG, "onGesture: " + gestureId);
return super.onGesture(gestureId);
}
@Override
public void onInterrupt() {
}
@Override @Override
public void onDestroy() { public void onDestroy() {
instance = null; instance = null;

View File

@@ -1,7 +1,7 @@
{ {
"versionCode": 137, "versionCode": 145,
"versionName": "2.0.12 Beta", "versionName": "2.0.13 Beta3",
"releaseNotes": "* 新增 安卓5.0以上免Root截图、保存与找色\n* 新增 电脑端Sublime Text 3插件支持\n* 新增 Android7.0及以上支持免root任意坐标点击、点按、手势\n* 新增 界面相关API\n* 修复 部分机型上转屏时手机重启的问题\n", "releaseNotes": "* 新增 脚本循环运行选项,可设置循环间隔、次数、延迟等(长按脚本)\n* 新增 兼容安卓4.2 (可能会崩溃\n* 新增 跳转悬浮窗权限适配\n* 新增 SublimeText插件支持保存脚本到手机\n* 增加 点赞群成员、名片顺序点赞、批量删除QQ好友脚本\n* 修复 一些bug",
"downloads" : [ "downloads" : [
{ {
"name": "酷安", "name": "酷安",