refactor(ui): toolbar menu design;
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
package com.stardust.autojs;
|
||||
|
||||
import android.content.Context;
|
||||
import android.support.annotation.Nullable;
|
||||
|
||||
import com.stardust.autojs.engine.JavaScriptEngine;
|
||||
import com.stardust.autojs.engine.ScriptEngine;
|
||||
@@ -30,6 +31,9 @@ import java.io.IOException;
|
||||
import java.io.PipedReader;
|
||||
import java.io.PipedWriter;
|
||||
import java.io.PrintWriter;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.Set;
|
||||
|
||||
@@ -83,8 +87,16 @@ public class ScriptEngineService {
|
||||
private UiHandler mUiHandler;
|
||||
private final Console mGlobalConsole;
|
||||
private final ScriptEngineManager mScriptEngineManager;
|
||||
private final EngineLifecycleObserver mEngineLifecycleObserver = new EngineLifecycleObserver();
|
||||
private final EngineLifecycleObserver mEngineLifecycleObserver = new EngineLifecycleObserver() {
|
||||
|
||||
@Override
|
||||
public void onEngineRemove(ScriptEngine engine) {
|
||||
mScriptExecutions.remove(engine.getId());
|
||||
super.onEngineRemove(engine);
|
||||
}
|
||||
};
|
||||
private ScriptExecutionObserver mScriptExecutionObserver = new ScriptExecutionObserver();
|
||||
private LinkedHashMap<Integer, ScriptExecution> mScriptExecutions = new LinkedHashMap<>();
|
||||
|
||||
ScriptEngineService(ScriptEngineServiceBuilder builder) {
|
||||
mUiHandler = builder.mUiHandler;
|
||||
@@ -119,6 +131,12 @@ public class ScriptEngineService {
|
||||
}
|
||||
|
||||
public ScriptExecution execute(ScriptExecutionTask task) {
|
||||
ScriptExecution execution = executeInternal(task);
|
||||
mScriptExecutions.put(execution.getId(), execution);
|
||||
return execution;
|
||||
}
|
||||
|
||||
private ScriptExecution executeInternal(ScriptExecutionTask task) {
|
||||
if (task.getListener() != null) {
|
||||
task.setExecutionListener(new ScriptExecutionObserver.Wrapper(mScriptExecutionObserver, task.getListener()));
|
||||
} else {
|
||||
@@ -185,6 +203,18 @@ public class ScriptEngineService {
|
||||
return mScriptEngineManager.getEngines();
|
||||
}
|
||||
|
||||
public Collection<ScriptExecution> getScriptExecutions() {
|
||||
return mScriptExecutions.values();
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public ScriptExecution getScriptExecution(int id) {
|
||||
if(id == ScriptExecution.NO_ID){
|
||||
return null;
|
||||
}
|
||||
return mScriptExecutions.get(id);
|
||||
}
|
||||
|
||||
private static class EngineLifecycleObserver implements ScriptEngineManager.EngineLifecycleCallback {
|
||||
|
||||
private final Set<ScriptEngineManager.EngineLifecycleCallback> mEngineLifecycleCallbacks = new LinkedHashSet<>();
|
||||
|
||||
@@ -2,11 +2,13 @@ package com.stardust.autojs.engine;
|
||||
|
||||
import android.support.annotation.CallSuper;
|
||||
|
||||
import com.stardust.autojs.execution.ScriptExecution;
|
||||
import com.stardust.autojs.runtime.exception.ScriptException;
|
||||
import com.stardust.autojs.script.ScriptSource;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
|
||||
/**
|
||||
* Created by Stardust on 2017/4/2.
|
||||
@@ -46,6 +48,9 @@ public interface ScriptEngine<S extends ScriptSource> {
|
||||
|
||||
Exception getUncaughtException();
|
||||
|
||||
void setId(int id);
|
||||
|
||||
int getId();
|
||||
|
||||
/**
|
||||
* @hide
|
||||
@@ -68,7 +73,7 @@ public interface ScriptEngine<S extends ScriptSource> {
|
||||
private OnDestroyListener mOnDestroyListener;
|
||||
private boolean mDestroyed = false;
|
||||
private Exception mUncaughtException;
|
||||
|
||||
private volatile AtomicInteger mId = new AtomicInteger(ScriptExecution.NO_ID);
|
||||
|
||||
@Override
|
||||
public synchronized void setTag(String key, Object value) {
|
||||
@@ -116,5 +121,15 @@ public interface ScriptEngine<S extends ScriptSource> {
|
||||
public Exception getUncaughtException() {
|
||||
return mUncaughtException;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setId(int id) {
|
||||
mId.compareAndSet(ScriptExecution.NO_ID, id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getId() {
|
||||
return mId.get();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -77,4 +77,14 @@ public class ScriptEngineProxy<S extends ScriptSource> implements ScriptEngine<S
|
||||
public void init() {
|
||||
mScriptEngine.init();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getId() {
|
||||
return mScriptEngine.getId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setId(int id) {
|
||||
mScriptEngine.setId(id);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -29,6 +29,7 @@ public class RunnableScriptExecution extends ScriptExecution.AbstractScriptExecu
|
||||
|
||||
public Object execute() {
|
||||
mScriptEngine = mScriptEngineManager.createEngineOfSourceOrThrow(getSource());
|
||||
mScriptEngine.setId(getId());
|
||||
return execute(mScriptEngine);
|
||||
}
|
||||
|
||||
|
||||
@@ -4,12 +4,17 @@ import com.stardust.autojs.engine.ScriptEngine;
|
||||
import com.stardust.autojs.runtime.ScriptRuntime;
|
||||
import com.stardust.autojs.script.ScriptSource;
|
||||
|
||||
import java.util.Objects;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
|
||||
/**
|
||||
* Created by Stardust on 2017/4/3.
|
||||
*/
|
||||
|
||||
public interface ScriptExecution {
|
||||
|
||||
int NO_ID = -1;
|
||||
|
||||
ScriptEngine getEngine();
|
||||
|
||||
ScriptSource getSource();
|
||||
@@ -18,12 +23,18 @@ public interface ScriptExecution {
|
||||
|
||||
ExecutionConfig getConfig();
|
||||
|
||||
int getId();
|
||||
|
||||
abstract class AbstractScriptExecution implements ScriptExecution {
|
||||
|
||||
private static AtomicInteger sMaxId = new AtomicInteger(0);
|
||||
|
||||
protected ScriptExecutionTask mScriptExecutionTask;
|
||||
protected int mId;
|
||||
|
||||
public AbstractScriptExecution(ScriptExecutionTask task) {
|
||||
mScriptExecutionTask = task;
|
||||
mId = sMaxId.getAndIncrement();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -43,5 +54,23 @@ public interface ScriptExecution {
|
||||
public ExecutionConfig getConfig() {
|
||||
return mScriptExecutionTask.getConfig();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getId() {
|
||||
return mId;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) return true;
|
||||
if (o == null || getClass() != o.getClass()) return false;
|
||||
AbstractScriptExecution that = (AbstractScriptExecution) o;
|
||||
return mId == that.mId;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return mId;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,11 +3,14 @@ package com.stardust.autojs.runtime.exception;
|
||||
import org.mozilla.javascript.EvaluatorException;
|
||||
import org.mozilla.javascript.RhinoException;
|
||||
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
|
||||
/**
|
||||
* Created by Stardust on 2017/1/29.
|
||||
*/
|
||||
public class ScriptException extends RuntimeException {
|
||||
|
||||
|
||||
public ScriptException(String message, Throwable cause) {
|
||||
super(message, cause);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user