refactor(module autojs): to support .auto record file
This commit is contained in:
@@ -19,7 +19,7 @@
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:name=".App"
|
||||
android:allowBackup="false"
|
||||
android:icon="@drawable/ic_android_eat_js"
|
||||
android:icon="@drawable/autojs_material"
|
||||
android:label="@string/_app_name"
|
||||
android:supportsRtl="true"
|
||||
android:theme="@style/AppTheme"
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package com.stardust.scriptdroid.autojs;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.app.Notification;
|
||||
import android.content.Context;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
@@ -12,7 +11,10 @@ import com.stardust.app.OnActivityResultDelegate;
|
||||
import com.stardust.app.SimpleActivityLifecycleCallbacks;
|
||||
import com.stardust.autojs.ScriptEngineService;
|
||||
import com.stardust.autojs.ScriptEngineServiceBuilder;
|
||||
import com.stardust.autojs.engine.RhinoJavaScriptEngineManager;
|
||||
import com.stardust.autojs.engine.LoopBasedJavaScriptEngine;
|
||||
import com.stardust.autojs.engine.RhinoJavaScriptEngine;
|
||||
import com.stardust.autojs.engine.RootAutomatorEngine;
|
||||
import com.stardust.autojs.engine.ScriptEngine;
|
||||
import com.stardust.autojs.engine.ScriptEngineManager;
|
||||
import com.stardust.autojs.runtime.AccessibilityBridge;
|
||||
import com.stardust.autojs.runtime.ScriptRuntime;
|
||||
@@ -21,6 +23,8 @@ import com.stardust.autojs.runtime.api.AbstractShell;
|
||||
import com.stardust.autojs.runtime.api.AppUtils;
|
||||
import com.stardust.autojs.runtime.api.Console;
|
||||
import com.stardust.autojs.runtime.api.image.ScreenCaptureRequester;
|
||||
import com.stardust.autojs.script.AutoFileSource;
|
||||
import com.stardust.autojs.script.JavaScriptSource;
|
||||
import com.stardust.scriptdroid.App;
|
||||
import com.stardust.scriptdroid.Pref;
|
||||
import com.stardust.scriptdroid.R;
|
||||
@@ -58,6 +62,7 @@ public class AutoJs {
|
||||
|
||||
private final AccessibilityActionRecorder mAccessibilityActionRecorder = new AccessibilityActionRecorder();
|
||||
private final NotificationListener.Observer mNotificationObserver;
|
||||
private ScriptEngineManager mScriptEngineManager;
|
||||
private final LayoutInspector mLayoutInspector = new LayoutInspector();
|
||||
private final Context mContext;
|
||||
private final UiHandler mUiHandler;
|
||||
@@ -65,12 +70,14 @@ public class AutoJs {
|
||||
private final AccessibilityInfoProvider mAccessibilityInfoProvider;
|
||||
private final ScreenCaptureRequester mScreenCaptureRequester = new ScreenCaptureRequesterImpl();
|
||||
private final ScriptEngineService mScriptEngineService;
|
||||
private final Console mGlobalConsole;
|
||||
|
||||
|
||||
private AutoJs(final Context context) {
|
||||
mContext = context;
|
||||
mUiHandler = new UiHandler(context);
|
||||
mAppUtils = new AppUtils(context);
|
||||
mGlobalConsole = new JraskaConsole();
|
||||
mNotificationObserver = new NotificationListener.Observer(context);
|
||||
mAccessibilityInfoProvider = new AccessibilityInfoProvider(context.getPackageManager());
|
||||
mScriptEngineService = buildScriptEngineService();
|
||||
@@ -80,33 +87,44 @@ public class AutoJs {
|
||||
}
|
||||
|
||||
private ScriptEngineService buildScriptEngineService() {
|
||||
ScriptEngineManager manager = createScriptEngineManager(mContext);
|
||||
final Console globalConsole = new JraskaConsole();
|
||||
initScriptEngineManager();
|
||||
return new ScriptEngineServiceBuilder()
|
||||
.uiHandler(mUiHandler)
|
||||
.globalConsole(globalConsole)
|
||||
.engineManger(manager)
|
||||
.runtime(new Supplier<com.stardust.autojs.runtime.ScriptRuntime>() {
|
||||
|
||||
@Override
|
||||
public com.stardust.autojs.runtime.ScriptRuntime get() {
|
||||
return new ScriptRuntime.Builder()
|
||||
.setConsole(new StardustConsole(mUiHandler, globalConsole))
|
||||
.setScreenCaptureRequester(mScreenCaptureRequester)
|
||||
.setAccessibilityBridge(new AccessibilityBridgeImpl())
|
||||
.setUiHandler(mUiHandler)
|
||||
.setAppUtils(mAppUtils)
|
||||
.setShellSupplier(new Supplier<AbstractShell>() {
|
||||
@Override
|
||||
public AbstractShell get() {
|
||||
return new Shell(mContext, true);
|
||||
}
|
||||
}).build();
|
||||
}
|
||||
})
|
||||
.globalConsole(mGlobalConsole)
|
||||
.engineManger(mScriptEngineManager)
|
||||
.build();
|
||||
}
|
||||
|
||||
private void initScriptEngineManager() {
|
||||
mScriptEngineManager = new ScriptEngineManager(mContext);
|
||||
mScriptEngineManager.registerEngine(JavaScriptSource.ENGINE, new Supplier<ScriptEngine>() {
|
||||
@Override
|
||||
public ScriptEngine get() {
|
||||
LoopBasedJavaScriptEngine engine = new LoopBasedJavaScriptEngine(mContext);
|
||||
engine.setRuntime(new ScriptRuntime.Builder()
|
||||
.setConsole(new StardustConsole(mUiHandler, mGlobalConsole))
|
||||
.setScreenCaptureRequester(mScreenCaptureRequester)
|
||||
.setAccessibilityBridge(new AccessibilityBridgeImpl())
|
||||
.setUiHandler(mUiHandler)
|
||||
.setAppUtils(mAppUtils)
|
||||
.setShellSupplier(new Supplier<AbstractShell>() {
|
||||
@Override
|
||||
public AbstractShell get() {
|
||||
return new Shell(mContext, true);
|
||||
}
|
||||
}).build());
|
||||
return engine;
|
||||
}
|
||||
});
|
||||
mScriptEngineManager.registerEngine(AutoFileSource.ENGINE, new Supplier<ScriptEngine>() {
|
||||
@Override
|
||||
public ScriptEngine get() {
|
||||
return new RootAutomatorEngine(mContext);
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
private void registerActivityLifecycleCallbacks() {
|
||||
App.getApp().registerActivityLifecycleCallbacks(new SimpleActivityLifecycleCallbacks() {
|
||||
|
||||
@@ -128,10 +146,6 @@ public class AutoJs {
|
||||
});
|
||||
}
|
||||
|
||||
private ScriptEngineManager createScriptEngineManager(Context context) {
|
||||
return new RhinoJavaScriptEngineManager(context);
|
||||
}
|
||||
|
||||
private void addAccessibilityServiceDelegates() {
|
||||
AccessibilityService.addDelegate(100, mAccessibilityInfoProvider);
|
||||
AccessibilityService.addDelegate(200, mNotificationObserver);
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.stardust.scriptdroid.autojs;
|
||||
|
||||
import com.stardust.autojs.engine.JavaScriptEngine;
|
||||
import com.stardust.autojs.execution.ScriptExecution;
|
||||
import com.stardust.autojs.execution.ScriptExecutionListener;
|
||||
import com.stardust.scriptdroid.App;
|
||||
@@ -29,7 +30,8 @@ public class ScriptExecutionGlobalListener implements ScriptExecutionListener {
|
||||
if (millis == null)
|
||||
return;
|
||||
double seconds = (System.currentTimeMillis() - millis) / 1000.0;
|
||||
execution.getRuntime().console.verbose(App.getApp().getString(R.string.text_execution_finished), execution.getSource().toString(), seconds);
|
||||
AutoJs.getInstance().getScriptEngineService().getGlobalConsole()
|
||||
.verbose(App.getApp().getString(R.string.text_execution_finished), execution.getSource().toString(), seconds);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -3,9 +3,8 @@ package com.stardust.scriptdroid.external;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.stardust.autojs.script.FileScriptSource;
|
||||
import com.stardust.autojs.script.JavaScriptFileSource;
|
||||
import com.stardust.autojs.script.ScriptSource;
|
||||
import com.stardust.autojs.script.SequenceScriptSource;
|
||||
import com.stardust.autojs.script.StringScriptSource;
|
||||
@@ -36,7 +35,7 @@ public class CommonUtils {
|
||||
if (path == null && script != null) {
|
||||
source = new StringScriptSource(script);
|
||||
} else if (path != null && new PathChecker(context).checkAndToastError(path)) {
|
||||
ScriptSource fileScriptSource = new FileScriptSource(path);
|
||||
JavaScriptFileSource fileScriptSource = new JavaScriptFileSource(path);
|
||||
if (script != null) {
|
||||
source = new SequenceScriptSource(fileScriptSource.getName(), new StringScriptSource(script), fileScriptSource);
|
||||
} else {
|
||||
|
||||
@@ -159,9 +159,10 @@ public class RecordNavigatorContent implements NavigatorContent, Recorder.OnStat
|
||||
mStopRecord.setVisibility(state == Recorder.STATE_STOPPED ? View.GONE : View.VISIBLE);
|
||||
mDiscardRecord.setVisibility(state == Recorder.STATE_STOPPED ? View.GONE : View.VISIBLE);
|
||||
mStartOrPauseRecordIcon.setImageResource(state == Recorder.STATE_RECORDING ? R.drawable.ic_pause_white_24dp : R.drawable.ic_play_arrow_white_48dp);
|
||||
//我知道这样写代码会被打 但我懒...
|
||||
mStartOrPauseRecordText.setText(state == Recorder.STATE_RECORDING ? R.string.text_pause_record :
|
||||
state == Recorder.STATE_PAUSED ? R.string.text_resume_record : R.string.text_start_record);
|
||||
mStartOrPauseRecordText.setText(
|
||||
state == Recorder.STATE_RECORDING ? R.string.text_pause_record :
|
||||
state == Recorder.STATE_PAUSED ? R.string.text_resume_record :
|
||||
R.string.text_start_record);
|
||||
|
||||
}
|
||||
|
||||
@@ -206,7 +207,11 @@ public class RecordNavigatorContent implements NavigatorContent, Recorder.OnStat
|
||||
@Override
|
||||
public void onStop() {
|
||||
if (!mDiscard) {
|
||||
MainActivity.onRecordStop(mContext, mRecorder.getCode());
|
||||
if (mRecorder instanceof TouchRecorder) {
|
||||
MainActivity.importScriptFile(mContext, mRecorder.getCode());
|
||||
} else {
|
||||
MainActivity.onRecordStop(mContext, mRecorder.getCode());
|
||||
}
|
||||
}
|
||||
mRecorder = null;
|
||||
}
|
||||
|
||||
@@ -1,21 +1,12 @@
|
||||
package com.stardust.scriptdroid.external.open;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.stardust.scriptdroid.script.PathChecker;
|
||||
import com.stardust.autojs.script.FileScriptSource;
|
||||
import com.stardust.autojs.script.SequenceScriptSource;
|
||||
import com.stardust.autojs.script.ScriptSource;
|
||||
import com.stardust.autojs.script.StringScriptSource;
|
||||
import com.stardust.scriptdroid.external.CommonUtils;
|
||||
import com.stardust.scriptdroid.R;
|
||||
import com.stardust.scriptdroid.script.Scripts;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
/**
|
||||
* Created by Stardust on 2017/2/22.
|
||||
|
||||
@@ -4,9 +4,7 @@ import android.app.Activity;
|
||||
import android.os.Bundle;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.stardust.scriptdroid.autojs.AutoJs;
|
||||
import com.stardust.scriptdroid.script.PathChecker;
|
||||
import com.stardust.autojs.script.FileScriptSource;
|
||||
import com.stardust.scriptdroid.external.CommonUtils;
|
||||
import com.stardust.scriptdroid.script.ScriptFile;
|
||||
import com.stardust.scriptdroid.script.Scripts;
|
||||
|
||||
@@ -1,7 +1,11 @@
|
||||
package com.stardust.scriptdroid.script;
|
||||
|
||||
import android.os.Environment;
|
||||
import android.renderscript.Script;
|
||||
|
||||
import com.stardust.autojs.script.AutoFileSource;
|
||||
import com.stardust.autojs.script.JavaScriptFileSource;
|
||||
import com.stardust.autojs.script.ScriptSource;
|
||||
import com.stardust.pio.PFile;
|
||||
|
||||
import java.io.File;
|
||||
@@ -15,9 +19,16 @@ import java.util.ArrayList;
|
||||
|
||||
public class ScriptFile extends File {
|
||||
|
||||
public static final int TYPE_UNKNOWN = 0;
|
||||
public static final int TYPE_AUTO = 1;
|
||||
public static final int TYPE_JAVA_SCRIPT = 2;
|
||||
|
||||
private int mType = -1;
|
||||
|
||||
private String mSimplifyPath;
|
||||
private String mSimplifiedName;
|
||||
|
||||
|
||||
public ScriptFile(String path) {
|
||||
super(path);
|
||||
init();
|
||||
@@ -51,6 +62,15 @@ public class ScriptFile extends File {
|
||||
return mSimplifyPath;
|
||||
}
|
||||
|
||||
public int getType() {
|
||||
if (mType == -1) {
|
||||
mType = getName().endsWith(".js") ? TYPE_JAVA_SCRIPT :
|
||||
getName().endsWith(".auto") ? TYPE_AUTO :
|
||||
TYPE_UNKNOWN;
|
||||
}
|
||||
return mType;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ScriptFile getParentFile() {
|
||||
String p = this.getParent();
|
||||
@@ -64,7 +84,8 @@ public class ScriptFile extends File {
|
||||
return listFiles(new FileFilter() {
|
||||
@Override
|
||||
public boolean accept(File file) {
|
||||
return (file.isDirectory() || file.getName().endsWith(".js")) && !file.getName().startsWith(".");
|
||||
return (file.getName().endsWith(".js") || file.getName().endsWith(".auto") ||
|
||||
file.isDirectory()) && !file.getName().startsWith(".");
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -101,4 +122,12 @@ public class ScriptFile extends File {
|
||||
public boolean moveTo(ScriptFile to) {
|
||||
return renameTo(new File(to, getName()));
|
||||
}
|
||||
|
||||
public ScriptSource toSource(){
|
||||
if(getType() == TYPE_JAVA_SCRIPT){
|
||||
return new JavaScriptFileSource(this);
|
||||
}else {
|
||||
return new AutoFileSource(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,7 +2,6 @@ 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;
|
||||
@@ -10,12 +9,10 @@ import com.stardust.autojs.execution.ScriptExecution;
|
||||
import com.stardust.autojs.execution.ScriptExecutionListener;
|
||||
import com.stardust.autojs.execution.SimpleScriptExecutionListener;
|
||||
import com.stardust.autojs.runtime.ScriptInterruptedException;
|
||||
import com.stardust.autojs.script.FileScriptSource;
|
||||
import com.stardust.autojs.script.JavaScriptFileSource;
|
||||
import com.stardust.autojs.script.ScriptSource;
|
||||
import com.stardust.autojs.script.SequenceScriptSource;
|
||||
import com.stardust.autojs.script.StringScriptSource;
|
||||
import com.stardust.scriptdroid.App;
|
||||
import com.stardust.scriptdroid.BuildConfig;
|
||||
import com.stardust.scriptdroid.R;
|
||||
import com.stardust.scriptdroid.autojs.AutoJs;
|
||||
import com.stardust.scriptdroid.external.CommonUtils;
|
||||
@@ -27,8 +24,6 @@ import com.stardust.util.AssetsCache;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
import javax.xml.parsers.DocumentBuilderFactory;
|
||||
|
||||
/**
|
||||
* Created by Stardust on 2017/5/3.
|
||||
*/
|
||||
@@ -85,7 +80,7 @@ public class Scripts {
|
||||
}
|
||||
|
||||
public static ScriptExecution run(ScriptFile file) {
|
||||
return run(new FileScriptSource(file), file.getParent());
|
||||
return run(file.toSource(), file.getParent());
|
||||
}
|
||||
|
||||
public static ScriptExecution run(ScriptSource source, String directoryPath) {
|
||||
@@ -114,7 +109,7 @@ public class Scripts {
|
||||
}
|
||||
|
||||
public static ScriptExecution runRepeatedly(ScriptFile scriptFile, int loopTimes, long delay, long interval) {
|
||||
ScriptSource source = new FileScriptSource(scriptFile);
|
||||
ScriptSource source = new JavaScriptFileSource(scriptFile);
|
||||
String directoryPath = scriptFile.getParent();
|
||||
return AutoJs.getInstance().getScriptEngineService().execute(source, new ExecutionConfig()
|
||||
.requirePath(directoryPath, StorageScriptProvider.DEFAULT_DIRECTORY_PATH)
|
||||
|
||||
@@ -2,6 +2,7 @@ package com.stardust.scriptdroid.ui.common;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.design.widget.Snackbar;
|
||||
import android.support.v4.widget.DrawerLayout;
|
||||
import android.text.InputType;
|
||||
@@ -64,11 +65,11 @@ public class ScriptOperations {
|
||||
}
|
||||
|
||||
public void newScriptFileForScript(final String script) {
|
||||
showFileNameInputDialog("")
|
||||
showFileNameInputDialog("", "js")
|
||||
.subscribe(new Consumer<String>() {
|
||||
@Override
|
||||
public void accept(@io.reactivex.annotations.NonNull String input) throws Exception {
|
||||
createScriptFile(getCurrentDirectoryPath() + input + ".js", script);
|
||||
createScriptFile(getCurrentDirectoryPath() + input + ".js", script, false);
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -81,7 +82,7 @@ public class ScriptOperations {
|
||||
return mCurrentDirectory;
|
||||
}
|
||||
|
||||
public void createScriptFile(String path, String script) {
|
||||
public void createScriptFile(String path, String script, boolean edit) {
|
||||
if (PFile.createIfNotExists(path)) {
|
||||
if (script != null) {
|
||||
try {
|
||||
@@ -91,7 +92,8 @@ public class ScriptOperations {
|
||||
}
|
||||
}
|
||||
notifyScriptFileChanged();
|
||||
Scripts.edit(path);
|
||||
if (edit)
|
||||
Scripts.edit(path);
|
||||
} else {
|
||||
Snackbar.make(mView, R.string.text_create_fail, Snackbar.LENGTH_LONG).show();
|
||||
}
|
||||
@@ -102,16 +104,25 @@ public class ScriptOperations {
|
||||
}
|
||||
|
||||
public Observable<String> importFile(final String pathFrom) {
|
||||
try {
|
||||
return importFile(PFile.getNameWithoutExtension(pathFrom), new FileInputStream(pathFrom));
|
||||
} catch (FileNotFoundException e) {
|
||||
showMessage(R.string.file_not_exists);
|
||||
return Observable.error(e);
|
||||
}
|
||||
return showFileNameInputDialog(PFile.getNameWithoutExtension(pathFrom), PFile.getExtension(pathFrom))
|
||||
.observeOn(Schedulers.io())
|
||||
.map(new Function<String, String>() {
|
||||
@Override
|
||||
public String apply(@io.reactivex.annotations.NonNull String s) throws Exception {
|
||||
final String pathTo = getCurrentDirectoryPath() + s + "." + PFile.getExtension(pathFrom);
|
||||
if (PFile.copy(pathFrom, pathTo)) {
|
||||
showMessage(R.string.text_import_succeed);
|
||||
} else {
|
||||
showMessage(R.string.text_import_fail);
|
||||
}
|
||||
notifyScriptFileChanged();
|
||||
return pathTo;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public Observable<String> importFile(String prefix, final InputStream inputStream) {
|
||||
return showFileNameInputDialog(PFile.getNameWithoutExtension(prefix))
|
||||
return showFileNameInputDialog(PFile.getNameWithoutExtension(prefix), "js")
|
||||
.observeOn(Schedulers.io())
|
||||
.map(new Function<String, String>() {
|
||||
@Override
|
||||
@@ -130,7 +141,7 @@ public class ScriptOperations {
|
||||
|
||||
|
||||
public void newDirectory() {
|
||||
showNameInputDialog("", new InputCallback(true))
|
||||
showNameInputDialog("", new InputCallback())
|
||||
.subscribe(new Consumer<String>() {
|
||||
@Override
|
||||
public void accept(@io.reactivex.annotations.NonNull String path) throws Exception {
|
||||
@@ -158,8 +169,8 @@ public class ScriptOperations {
|
||||
}
|
||||
|
||||
|
||||
private Observable<String> showFileNameInputDialog(String prefix) {
|
||||
return showNameInputDialog(prefix, new InputCallback(false));
|
||||
private Observable<String> showFileNameInputDialog(String prefix, String ext) {
|
||||
return showNameInputDialog(prefix, new InputCallback(ext));
|
||||
}
|
||||
|
||||
private Observable<String> showNameInputDialog(String prefix, MaterialDialog.InputCallback textWatcher) {
|
||||
@@ -196,7 +207,8 @@ public class ScriptOperations {
|
||||
|
||||
public Observable<Boolean> rename(final ScriptFile file) {
|
||||
String originalName = file.getSimplifiedName();
|
||||
return showNameInputDialog(originalName, new InputCallback(file.isDirectory(), originalName))
|
||||
return showNameInputDialog(originalName, new InputCallback(file.isDirectory() ? null : PFile.getExtension(file.getName()),
|
||||
originalName))
|
||||
.map(new Function<String, Boolean>() {
|
||||
@Override
|
||||
public Boolean apply(@io.reactivex.annotations.NonNull String newName) throws Exception {
|
||||
@@ -207,17 +219,21 @@ public class ScriptOperations {
|
||||
|
||||
private class InputCallback implements MaterialDialog.InputCallback {
|
||||
|
||||
private boolean mIsDirectory = false;
|
||||
private String mExcluded;
|
||||
private boolean mIsFirstTextChanged = true;
|
||||
private String mExtension;
|
||||
|
||||
InputCallback(boolean isDirectory, String excluded) {
|
||||
mIsDirectory = isDirectory;
|
||||
InputCallback(@Nullable String ext, String excluded) {
|
||||
mExtension = "." + ext;
|
||||
mExcluded = excluded;
|
||||
}
|
||||
|
||||
InputCallback(boolean isDirectory) {
|
||||
mIsDirectory = isDirectory;
|
||||
InputCallback(String ext) {
|
||||
this(ext, null);
|
||||
}
|
||||
|
||||
public InputCallback() {
|
||||
this(null);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -233,7 +249,7 @@ public class ScriptOperations {
|
||||
if (input == null || input.length() == 0) {
|
||||
errorResId = R.string.text_name_should_not_be_empty;
|
||||
} else if (!input.equals(mExcluded)) {
|
||||
if (new File(getCurrentDirectory(), mIsDirectory ? input.toString() : input.toString() + ".js").exists()) {
|
||||
if (new File(getCurrentDirectory(), mExtension == null ? input.toString() : input.toString() + mExtension).exists()) {
|
||||
errorResId = R.string.text_file_exists;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -22,8 +22,9 @@ 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.app.OnActivityResultDelegate;
|
||||
import com.stardust.autojs.engine.JavaScriptEngine;
|
||||
import com.stardust.autojs.execution.ScriptExecution;
|
||||
import com.stardust.autojs.script.FileScriptSource;
|
||||
import com.stardust.autojs.script.JavaScriptFileSource;
|
||||
import com.stardust.autojs.script.JsBeautifier;
|
||||
import com.stardust.scriptdroid.R;
|
||||
import com.stardust.scriptdroid.autojs.AutoJs;
|
||||
@@ -211,7 +212,7 @@ public class EditActivity extends Editor920Activity implements OnActivityResultD
|
||||
private void run() {
|
||||
Snackbar.make(mView, R.string.text_start_running, Snackbar.LENGTH_SHORT).show();
|
||||
setMenuStatus(R.id.run, MenuDef.STATUS_DISABLED);
|
||||
mScriptExecution = Scripts.runWithBroadcastSender(new FileScriptSource(mName, mFile), mFile.getParent());
|
||||
mScriptExecution = Scripts.runWithBroadcastSender(new JavaScriptFileSource(mName, mFile), mFile.getParent());
|
||||
}
|
||||
|
||||
|
||||
@@ -288,7 +289,7 @@ public class EditActivity extends Editor920Activity implements OnActivityResultD
|
||||
|
||||
private void showConsole() {
|
||||
if (mScriptExecution != null) {
|
||||
mScriptExecution.getRuntime().console.show();
|
||||
((JavaScriptEngine) mScriptExecution.getEngine()).getRuntime().console.show();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -16,6 +16,7 @@ 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.app.OnActivityResultDelegate;
|
||||
import com.stardust.autojs.engine.JavaScriptEngine;
|
||||
import com.stardust.autojs.execution.ScriptExecution;
|
||||
import com.stardust.autojs.script.StringScriptSource;
|
||||
import com.stardust.scriptdroid.R;
|
||||
@@ -27,7 +28,6 @@ import com.stardust.scriptdroid.ui.common.ScriptOperations;
|
||||
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.theme.ThemeColorManager;
|
||||
import com.stardust.util.AssetsCache;
|
||||
import com.stardust.util.SparseArrayEntries;
|
||||
@@ -182,7 +182,7 @@ public class ViewSampleActivity extends Editor920Activity implements OnActivityR
|
||||
|
||||
private void showConsole() {
|
||||
if (mScriptExecution != null) {
|
||||
mScriptExecution.getRuntime().console.show();
|
||||
((JavaScriptEngine) mScriptExecution.getEngine()).getRuntime().console.show();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -9,8 +9,6 @@ import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.design.widget.Snackbar;
|
||||
import android.support.design.widget.TabLayout;
|
||||
import android.support.v4.app.Fragment;
|
||||
import android.support.v4.view.ViewPager;
|
||||
@@ -36,10 +34,8 @@ import com.stardust.scriptdroid.Pref;
|
||||
import com.stardust.scriptdroid.R;
|
||||
import com.stardust.scriptdroid.autojs.AutoJs;
|
||||
import com.stardust.scriptdroid.external.floatingwindow.HoverMenuManger;
|
||||
import com.stardust.scriptdroid.external.open.ImportIntentActivity;
|
||||
import com.stardust.scriptdroid.script.ScriptFile;
|
||||
import com.stardust.scriptdroid.script.StorageScriptProvider;
|
||||
import com.stardust.scriptdroid.script.sample.Sample;
|
||||
import com.stardust.scriptdroid.ui.common.ScriptOperations;
|
||||
import com.stardust.scriptdroid.ui.main.task.TaskManagerFragment_;
|
||||
import com.stardust.util.IntentExtras;
|
||||
@@ -54,7 +50,6 @@ import com.stardust.scriptdroid.ui.settings.SettingsActivity_;
|
||||
import com.stardust.scriptdroid.ui.update.VersionGuard;
|
||||
import com.stardust.theme.dialog.ThemeColorMaterialDialogBuilder;
|
||||
import com.stardust.util.BackPressedHandler;
|
||||
import com.stardust.util.Callback;
|
||||
import com.stardust.util.MessageEvent;
|
||||
import com.stardust.view.DrawerAutoClose;
|
||||
import com.stardust.view.accessibility.AccessibilityServiceUtils;
|
||||
@@ -68,8 +63,6 @@ import org.androidannotations.annotations.ViewById;
|
||||
import org.greenrobot.eventbus.EventBus;
|
||||
import org.greenrobot.eventbus.Subscribe;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
|
||||
@EActivity(R.layout.activity_main)
|
||||
@@ -80,13 +73,14 @@ public class MainActivity extends BaseActivity implements OnActivityResultDelega
|
||||
private static final String LOG_TAG = "MainActivity";
|
||||
private static final String EXTRA_ACTION = "EXTRA_ACTION";
|
||||
|
||||
private static final String ACTION_ON_ACTION_RECORD_STOPPED = "ACTION_ON_ACTION_RECORD_STOPPED";
|
||||
private static final String ACTION_ON_RECORD_STOP = "ACTION_ON_RECORD_STOP";
|
||||
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 static final String ARGUMENT_INPUT_STREAM = "17.7.12, Hi...could we start all over again...";
|
||||
private static final String ACTION_ON_ROOT_RECORD_STOP = "ACTION_ON_ROOT_RECORD_STOP";
|
||||
|
||||
|
||||
@ViewById(R.id.drawer_layout)
|
||||
@@ -111,6 +105,7 @@ public class MainActivity extends BaseActivity implements OnActivityResultDelega
|
||||
mVersionGuard = new VersionGuard(this);
|
||||
showAnnunciationIfNeeded();
|
||||
//Stop download service of ad sdk
|
||||
// FIXME: 2017/8/1 Service not stopped!
|
||||
stopService(new Intent(this, DownloadService.class));
|
||||
}
|
||||
|
||||
@@ -305,7 +300,7 @@ public class MainActivity extends BaseActivity implements OnActivityResultDelega
|
||||
if (action == null)
|
||||
return;
|
||||
switch (action) {
|
||||
case ACTION_ON_ACTION_RECORD_STOPPED:
|
||||
case ACTION_ON_RECORD_STOP:
|
||||
IntentExtras extras = IntentExtras.fromIntent(intent);
|
||||
String script = extras.get(ARGUMENT_SCRIPT);
|
||||
extras.clear();
|
||||
@@ -321,12 +316,14 @@ public class MainActivity extends BaseActivity implements OnActivityResultDelega
|
||||
String path = intent.getStringExtra(ARGUMENT_PATH);
|
||||
if (path != null) {
|
||||
new ScriptOperations(MainActivity.this, mDrawerLayout)
|
||||
.importFile(intent.getStringExtra(ARGUMENT_PATH));
|
||||
.importFile(intent.getStringExtra(ARGUMENT_PATH))
|
||||
.subscribe();
|
||||
return;
|
||||
}
|
||||
InputStream inputStream = IntentExtras.fromIntent(intent).getAndClear(ARGUMENT_INPUT_STREAM);
|
||||
new ScriptOperations(MainActivity.this, mDrawerLayout)
|
||||
.importFile("", inputStream);
|
||||
.importFile("", inputStream)
|
||||
.subscribe();
|
||||
}
|
||||
|
||||
private void handleRecordedScript(final String script) {
|
||||
@@ -416,7 +413,7 @@ public class MainActivity extends BaseActivity implements OnActivityResultDelega
|
||||
public static void onRecordStop(Context context, String script) {
|
||||
Intent intent = new Intent(context, MainActivity_.class)
|
||||
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
|
||||
.putExtra(EXTRA_ACTION, ACTION_ON_ACTION_RECORD_STOPPED);
|
||||
.putExtra(EXTRA_ACTION, ACTION_ON_RECORD_STOP);
|
||||
IntentExtras.newExtras()
|
||||
.put(ARGUMENT_SCRIPT, script)
|
||||
.putInIntent(intent);
|
||||
@@ -424,4 +421,11 @@ public class MainActivity extends BaseActivity implements OnActivityResultDelega
|
||||
}
|
||||
|
||||
|
||||
public static void onRootRecordStop(Context context, String path) {
|
||||
Intent intent = new Intent(context, MainActivity_.class)
|
||||
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
|
||||
.putExtra(EXTRA_ACTION, ACTION_ON_ROOT_RECORD_STOP)
|
||||
.putExtra(ARGUMENT_PATH, path);
|
||||
context.startActivity(intent);
|
||||
}
|
||||
}
|
||||
@@ -94,7 +94,12 @@ public class MyScriptListFragment extends Fragment {
|
||||
mScriptListRecyclerView.setOnItemClickListener(new ScriptAndFolderListRecyclerView.OnScriptFileClickListener() {
|
||||
@Override
|
||||
public void onClick(ScriptFile file, int position) {
|
||||
EditActivity.editFile(getContext(), file);
|
||||
if (file.getType() == ScriptFile.TYPE_JAVA_SCRIPT) {
|
||||
Scripts.edit(file);
|
||||
} else {
|
||||
mSelectedScriptFile = file;
|
||||
mScriptFileOperationDialog.show();
|
||||
}
|
||||
}
|
||||
});
|
||||
mScriptListRecyclerView.setOnItemLongClickListener(new ScriptAndFolderListRecyclerView.OnScriptFileLongClickListener() {
|
||||
|
||||
@@ -11,6 +11,7 @@ import android.view.KeyEvent;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.RelativeLayout;
|
||||
import android.widget.TextView;
|
||||
import android.workground.WrapContentLinearLayoutManager;
|
||||
@@ -412,14 +413,24 @@ public class ScriptAndFolderListRecyclerView extends RecyclerView {
|
||||
|
||||
private class FileViewHolder extends DefaultViewHolder {
|
||||
|
||||
private ImageView mIcon;
|
||||
|
||||
FileViewHolder(View itemView) {
|
||||
super(itemView);
|
||||
mIcon = (ImageView) itemView.findViewById(R.id.icon);
|
||||
if (mScriptFileOperationEnabled) {
|
||||
itemView.findViewById(R.id.run).setOnClickListener(mOnRunClickListener);
|
||||
} else {
|
||||
itemView.findViewById(R.id.run).setVisibility(GONE);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void bind(ScriptFile file) {
|
||||
super.bind(file);
|
||||
mIcon.setImageResource(file.getType() == ScriptFile.TYPE_AUTO ? R.drawable.record_icon_18
|
||||
: R.drawable.ic_node_js_black);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package com.stardust.scriptdroid.ui.main.task;
|
||||
|
||||
import android.content.Context;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
import android.support.v7.widget.ThemeColorRecyclerView;
|
||||
@@ -12,14 +11,12 @@ import android.view.ViewGroup;
|
||||
import android.widget.TextView;
|
||||
import android.workground.WrapContentLinearLayoutManager;
|
||||
|
||||
import com.afollestad.materialdialogs.DialogAction;
|
||||
import com.afollestad.materialdialogs.MaterialDialog;
|
||||
import com.stardust.autojs.ScriptEngineService;
|
||||
import com.stardust.autojs.engine.ScriptEngineManager;
|
||||
import com.stardust.autojs.execution.ScriptExecution;
|
||||
import com.stardust.autojs.execution.ScriptExecutionListener;
|
||||
import com.stardust.autojs.execution.SimpleScriptExecutionListener;
|
||||
import com.stardust.autojs.engine.ScriptEngine;
|
||||
import com.stardust.autojs.engine.AbstractScriptEngineManager;
|
||||
import com.stardust.autojs.script.ScriptSource;
|
||||
import com.stardust.scriptdroid.R;
|
||||
import com.stardust.scriptdroid.autojs.AutoJs;
|
||||
@@ -32,7 +29,7 @@ import java.util.List;
|
||||
* Created by Stardust on 2017/3/24.
|
||||
*/
|
||||
|
||||
public class TaskListRecyclerView extends ThemeColorRecyclerView implements AbstractScriptEngineManager.EngineLifecycleCallback {
|
||||
public class TaskListRecyclerView extends ThemeColorRecyclerView implements ScriptEngineManager.EngineLifecycleCallback {
|
||||
|
||||
|
||||
private final OnClickListener mOnItemClickListenerProxy = new OnClickListener() {
|
||||
@@ -184,7 +181,7 @@ public class TaskListRecyclerView extends ThemeColorRecyclerView implements Abst
|
||||
|
||||
@Override
|
||||
public void onBindViewHolder(ViewHolder holder, int position) {
|
||||
holder.bind((ScriptSource) mScriptEngines.get(position).getTag("script"));
|
||||
holder.bind((ScriptSource) mScriptEngines.get(position).getTag(ScriptEngine.TAG_SOURCE));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
BIN
app/src/main/res/drawable/autojs_material.png
Normal file
BIN
app/src/main/res/drawable/autojs_material.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 89 KiB |
@@ -6,7 +6,7 @@
|
||||
|
||||
<item
|
||||
android:bottom="214dp"
|
||||
android:drawable="@drawable/ic_android_eat_js"
|
||||
android:drawable="@drawable/autojs_material"
|
||||
android:gravity="center"
|
||||
android:left="100dp"
|
||||
android:right="100dp"
|
||||
|
||||
BIN
app/src/main/res/drawable/record_icon_18.png
Normal file
BIN
app/src/main/res/drawable/record_icon_18.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 20 KiB |
@@ -47,7 +47,7 @@
|
||||
android:layout_width="90dp"
|
||||
android:layout_height="90dp"
|
||||
android:layout_centerInParent="true"
|
||||
android:src="@drawable/ic_android_eat_js"/>
|
||||
android:src="@drawable/autojs_material"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/version"
|
||||
|
||||
@@ -50,7 +50,7 @@
|
||||
android:layout_width="72dp"
|
||||
android:layout_height="72dp"
|
||||
android:layout_gravity="center"
|
||||
android:src="@drawable/ic_android_eat_js">
|
||||
android:src="@drawable/autojs_material">
|
||||
|
||||
</ImageView>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user