refactor(ui): toolbar menu design;

This commit is contained in:
hyb1996
2018-09-07 12:36:13 +08:00
parent 457141d6c0
commit e5e1b567e7
19 changed files with 528 additions and 192 deletions

View File

@@ -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<>();

View File

@@ -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();
}
}
}

View File

@@ -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);
}
}

View File

@@ -29,6 +29,7 @@ public class RunnableScriptExecution extends ScriptExecution.AbstractScriptExecu
public Object execute() {
mScriptEngine = mScriptEngineManager.createEngineOfSourceOrThrow(getSource());
mScriptEngine.setId(getId());
return execute(mScriptEngine);
}

View File

@@ -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;
}
}
}

View File

@@ -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);
}