add console.rawInput, app.intent
This commit is contained in:
@@ -6,7 +6,12 @@ import android.content.IntentFilter;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.Keep;
|
||||
import android.support.multidex.MultiDexApplication;
|
||||
import android.util.Log;
|
||||
|
||||
import com.iwebpp.node.NodeContext;
|
||||
import com.iwebpp.node.http.ClientRequest;
|
||||
import com.iwebpp.node.http.IncomingMessage;
|
||||
import com.iwebpp.node.http.http;
|
||||
import com.squareup.leakcanary.LeakCanary;
|
||||
import com.stardust.app.SimpleActivityLifecycleCallbacks;
|
||||
import com.stardust.app.VolumeChangeObserver;
|
||||
|
||||
@@ -2,6 +2,7 @@ package com.stardust.scriptdroid.autojs.api;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
import android.content.ContextWrapper;
|
||||
import android.content.DialogInterface;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
@@ -24,12 +25,23 @@ public class BlockedMaterialDialog extends MaterialDialog {
|
||||
|
||||
@Override
|
||||
public void show() {
|
||||
if (!(getContext() instanceof Activity)) {
|
||||
if (!isActivityContext(getContext())) {
|
||||
getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
|
||||
}
|
||||
super.show();
|
||||
}
|
||||
|
||||
private boolean isActivityContext(Context context) {
|
||||
if (context == null)
|
||||
return false;
|
||||
if (context instanceof Activity)
|
||||
return true;
|
||||
if (context instanceof ContextWrapper) {
|
||||
return isActivityContext(((ContextWrapper) context).getBaseContext());
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
public static class Builder extends MaterialDialog.Builder {
|
||||
|
||||
|
||||
@@ -11,6 +11,7 @@ import com.stardust.lang.ThreadCompat;
|
||||
import com.stardust.pio.UncheckedIOException;
|
||||
import com.stardust.scriptdroid.App;
|
||||
import com.stardust.scriptdroid.autojs.AutoJs;
|
||||
import com.stardust.scriptdroid.tool.UpdateChecker;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.IOException;
|
||||
@@ -30,13 +31,39 @@ import jackpal.androidterm.util.TermSettings;
|
||||
public class Shell extends AbstractShell implements AutoCloseable {
|
||||
|
||||
public interface Callback {
|
||||
void onNewLine(String str);
|
||||
|
||||
void onOutput(String str);
|
||||
|
||||
void onNewLine(String line);
|
||||
|
||||
void onInitialized();
|
||||
|
||||
void onInterrupted(InterruptedException e);
|
||||
}
|
||||
|
||||
public static class SimpleCallback implements Callback {
|
||||
|
||||
@Override
|
||||
public void onOutput(String str) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNewLine(String str) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onInitialized() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onInterrupted(InterruptedException e) {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
private static final String TAG = "Shell";
|
||||
|
||||
private TermSession mTermSession;
|
||||
@@ -191,20 +218,19 @@ public class Shell extends AbstractShell implements AutoCloseable {
|
||||
|
||||
private void onNewLine(String line) {
|
||||
Log.d(TAG, line);
|
||||
if (mInitialized) {
|
||||
if (mCallback != null) {
|
||||
mCallback.onNewLine(line);
|
||||
}
|
||||
} else {
|
||||
if (!mInitialized) {
|
||||
if (isRoot() && line.endsWith(" $ su")) {
|
||||
notifyInitialized();
|
||||
return;
|
||||
}
|
||||
if (!isRoot() && line.endsWith(" $ ")) {
|
||||
if (!isRoot() && line.endsWith(" $ sh")) {
|
||||
notifyInitialized();
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (mCallback != null) {
|
||||
mCallback.onNewLine(line);
|
||||
}
|
||||
if (mWaitingExit && line.endsWith(" exit")) {
|
||||
notifyExit();
|
||||
}
|
||||
@@ -214,7 +240,11 @@ public class Shell extends AbstractShell implements AutoCloseable {
|
||||
@Override
|
||||
protected void processInput(byte[] data, int offset, int count) {
|
||||
try {
|
||||
if (mCallback != null) {
|
||||
mCallback.onOutput(new String(data, offset, count));
|
||||
}
|
||||
mOutputStream.write(data, offset, count);
|
||||
|
||||
} catch (IOException e) {
|
||||
throw new UncheckedIOException(e);
|
||||
}
|
||||
|
||||
@@ -15,8 +15,11 @@ import java.util.concurrent.Executors;
|
||||
|
||||
/**
|
||||
* Created by Stardust on 2017/3/10.
|
||||
*
|
||||
*/
|
||||
|
||||
// TODO: 2017/5/8
|
||||
|
||||
public class LayoutInspector {
|
||||
|
||||
private volatile NodeInfo mCapture;
|
||||
|
||||
@@ -22,7 +22,7 @@ public class InputEventRecorder extends Recorder.AbstractRecorder {
|
||||
|
||||
public void listen() {
|
||||
mShell = new Shell(true);
|
||||
mShell.setCallback(new Shell.Callback() {
|
||||
mShell.setCallback(new Shell.SimpleCallback() {
|
||||
@Override
|
||||
public void onNewLine(String str) {
|
||||
if (mShell.isInitialized()) {
|
||||
|
||||
@@ -55,9 +55,8 @@ public class ConsoleFloaty extends ResizableExpandableFloaty.AbstractResizableEx
|
||||
public View inflateExpandedView(FloatyService service, ResizableExpandableFloatyWindow window) {
|
||||
ensureContextWrapper(service);
|
||||
View view = View.inflate(mContextWrapper, R.layout.floating_console_expand, null);
|
||||
((ConsoleView) view.findViewById(R.id.console)).setConsole(mConsole);
|
||||
setListeners(view, window);
|
||||
initConsoleTitle(view);
|
||||
setUpConsole(view, window);
|
||||
setInitialMeasure(view);
|
||||
return view;
|
||||
}
|
||||
@@ -79,6 +78,17 @@ public class ConsoleFloaty extends ResizableExpandableFloaty.AbstractResizableEx
|
||||
}
|
||||
|
||||
private void setListeners(final View view, final ResizableExpandableFloatyWindow window) {
|
||||
setWindowOperationIconListeners(view, window);
|
||||
}
|
||||
|
||||
private void setUpConsole(View view, ResizableExpandableFloatyWindow window) {
|
||||
ConsoleView consoleView = (ConsoleView) view.findViewById(R.id.console);
|
||||
consoleView.setConsole(mConsole);
|
||||
consoleView.setWindow(window);
|
||||
initConsoleTitle(view);
|
||||
}
|
||||
|
||||
private void setWindowOperationIconListeners(View view, final ResizableExpandableFloatyWindow window) {
|
||||
view.findViewById(R.id.close).setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
|
||||
@@ -1,9 +1,7 @@
|
||||
package com.stardust.scriptdroid.ui.console;
|
||||
|
||||
import android.content.Context;
|
||||
import android.support.annotation.IntDef;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.v7.widget.AppCompatTextView;
|
||||
import android.text.Spannable;
|
||||
import android.text.SpannableString;
|
||||
import android.text.Spanned;
|
||||
@@ -13,26 +11,22 @@ import android.util.AttributeSet;
|
||||
import android.util.Log;
|
||||
import android.util.SparseArray;
|
||||
import android.view.View;
|
||||
import android.view.WindowManager;
|
||||
import android.view.inputmethod.InputMethodManager;
|
||||
import android.widget.Button;
|
||||
import android.widget.EditText;
|
||||
import android.widget.FrameLayout;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.ScrollView;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.stardust.enhancedfloaty.ResizableExpandableFloatyWindow;
|
||||
import com.stardust.scriptdroid.R;
|
||||
import com.stardust.util.MapEntries;
|
||||
import com.stardust.util.SparseArrayEntries;
|
||||
|
||||
import java.io.Closeable;
|
||||
import java.io.InputStream;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* Created by Stardust on 2017/5/2.
|
||||
*/
|
||||
|
||||
public class ConsoleView extends LinearLayout implements StardustConsole.LogListener {
|
||||
public class ConsoleView extends FrameLayout implements StardustConsole.LogListener {
|
||||
|
||||
private static final SparseArray<Integer> COLORS = new SparseArrayEntries<Integer>()
|
||||
.entry(Log.VERBOSE, 0xdfc0c0c0)
|
||||
@@ -46,6 +40,9 @@ public class ConsoleView extends LinearLayout implements StardustConsole.LogList
|
||||
private StardustConsole mConsole;
|
||||
private TextView mTextView;
|
||||
private EditText mEditText;
|
||||
private ResizableExpandableFloatyWindow mWindow;
|
||||
private LinearLayout mInputContainer;
|
||||
private ScrollView mContentContainer;
|
||||
|
||||
public ConsoleView(Context context) {
|
||||
super(context);
|
||||
@@ -64,26 +61,43 @@ public class ConsoleView extends LinearLayout implements StardustConsole.LogList
|
||||
|
||||
private void init() {
|
||||
inflate(getContext(), R.layout.console_view, this);
|
||||
mTextView = (TextView) findViewById(R.id.textView);
|
||||
mTextView = (TextView) findViewById(R.id.content);
|
||||
mTextView.setMovementMethod(new ScrollingMovementMethod());
|
||||
mContentContainer = (ScrollView) findViewById(R.id.content_container);
|
||||
initEditText();
|
||||
initSubmitButton();
|
||||
}
|
||||
|
||||
private void initEditText() {
|
||||
//mEditText = (EditText) findViewById(R.id.ediText);
|
||||
mEditText.setFocusableInTouchMode(true);
|
||||
mTextView.setMovementMethod(new ScrollingMovementMethod());
|
||||
setOnClickListener(new OnClickListener() {
|
||||
private void initSubmitButton() {
|
||||
final Button submit = (Button) findViewById(R.id.submit);
|
||||
submit.setOnClickListener(new OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
mEditText.requestFocus();
|
||||
InputMethodManager imm = (InputMethodManager) getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
|
||||
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
|
||||
CharSequence input = mEditText.getText();
|
||||
submitInput(input);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void submitInput(CharSequence input) {
|
||||
if (android.text.TextUtils.isEmpty(input)) {
|
||||
return;
|
||||
}
|
||||
if (mConsole.submitInput(input)) {
|
||||
mEditText.setText("");
|
||||
mEditText.requestFocus();
|
||||
}
|
||||
}
|
||||
|
||||
private void initEditText() {
|
||||
mEditText = (EditText) findViewById(R.id.input);
|
||||
mEditText.setFocusableInTouchMode(true);
|
||||
mInputContainer = (LinearLayout) findViewById(R.id.input_container);
|
||||
}
|
||||
|
||||
public void setConsole(StardustConsole console) {
|
||||
mConsole = console;
|
||||
mConsole.setLogListener(this);
|
||||
mConsole.setConsoleView(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -99,20 +113,12 @@ public class ConsoleView extends LinearLayout implements StardustConsole.LogList
|
||||
@Override
|
||||
public void run() {
|
||||
mTextView.append(spannable);
|
||||
mContentContainer.fullScroll(View.FOCUS_DOWN);
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
private void scrollToBottom() {
|
||||
mTextView.post(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
mTextView.scrollTo(0, mTextView.getLayout().getLineTop(mTextView.getLineCount()));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private Spannable buildColorSpannable(CharSequence log, int color) {
|
||||
Spannable spannable = new SpannableString(log);
|
||||
spannable.setSpan(new ForegroundColorSpan(color), 0, log.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
|
||||
@@ -144,4 +150,19 @@ public class ConsoleView extends LinearLayout implements StardustConsole.LogList
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void setWindow(ResizableExpandableFloatyWindow window) {
|
||||
mWindow = window;
|
||||
}
|
||||
|
||||
public void showEditText() {
|
||||
post(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
mWindow.requestWindowFocus();
|
||||
mInputContainer.setVisibility(VISIBLE);
|
||||
mEditText.requestFocus();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -67,7 +67,7 @@ public class JraskaConsole extends AbstractConsole {
|
||||
|
||||
@Override
|
||||
public void show() {
|
||||
App.getApp().startActivity(new Intent(App.getApp(), ConsoleActivity.class)
|
||||
App.getApp().startActivity(new Intent(App.getApp(), LogActivity.class)
|
||||
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
|
||||
}
|
||||
|
||||
|
||||
@@ -17,7 +17,7 @@ import com.stardust.scriptdroid.R;
|
||||
* Created by Stardust on 2017/2/12.
|
||||
*/
|
||||
|
||||
public class ConsoleActivity extends BaseActivity {
|
||||
public class LogActivity extends BaseActivity {
|
||||
|
||||
@Override
|
||||
protected void onCreate(@Nullable Bundle savedInstanceState) {
|
||||
@@ -2,18 +2,24 @@ package com.stardust.scriptdroid.ui.console;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.view.WindowManager;
|
||||
|
||||
import com.stardust.autojs.runtime.ScriptInterface;
|
||||
import com.stardust.autojs.runtime.ScriptInterruptedException;
|
||||
import com.stardust.autojs.runtime.api.AbstractConsole;
|
||||
import com.stardust.autojs.runtime.api.Console;
|
||||
import com.stardust.enhancedfloaty.FloatyService;
|
||||
import com.stardust.enhancedfloaty.ResizableExpandableFloatyWindow;
|
||||
import com.stardust.scriptdroid.R;
|
||||
import com.stardust.scriptdroid.autojs.AutoJs;
|
||||
import com.stardust.scriptdroid.autojs.api.VolatileBox;
|
||||
import com.stardust.util.UiHandler;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.ArrayBlockingQueue;
|
||||
import java.util.concurrent.BlockingQueue;
|
||||
|
||||
/**
|
||||
* Created by Stardust on 2017/5/2.
|
||||
@@ -44,6 +50,10 @@ public class StardustConsole extends AbstractConsole {
|
||||
private ConsoleFloaty mConsoleFloaty;
|
||||
private LogListener mLogListener;
|
||||
private UiHandler mUiHandler;
|
||||
//private volatile VolatileBox<String> mInput = new VolatileBox<>("");
|
||||
private BlockingQueue<String> mInput = new ArrayBlockingQueue<>(1);
|
||||
private ConsoleView mConsoleView;
|
||||
private volatile boolean mShown = false;
|
||||
|
||||
public StardustConsole(UiHandler uiHandler) {
|
||||
mUiHandler = uiHandler;
|
||||
@@ -51,6 +61,14 @@ public class StardustConsole extends AbstractConsole {
|
||||
mFloatyWindow = new ResizableExpandableFloatyWindow(mConsoleFloaty);
|
||||
}
|
||||
|
||||
public void setConsoleView(ConsoleView consoleView) {
|
||||
mConsoleView = consoleView;
|
||||
setLogListener(consoleView);
|
||||
synchronized (this) {
|
||||
this.notify();
|
||||
}
|
||||
}
|
||||
|
||||
public void setLogListener(LogListener logListener) {
|
||||
mLogListener = logListener;
|
||||
}
|
||||
@@ -92,6 +110,7 @@ public class StardustConsole extends AbstractConsole {
|
||||
}
|
||||
}
|
||||
});
|
||||
mShown = true;
|
||||
}
|
||||
|
||||
private void startFloatyService() {
|
||||
@@ -106,6 +125,43 @@ public class StardustConsole extends AbstractConsole {
|
||||
} catch (IllegalArgumentException ignored) {
|
||||
|
||||
}
|
||||
mShown = false;
|
||||
}
|
||||
|
||||
@ScriptInterface
|
||||
public String rawInput() {
|
||||
if (mConsoleView == null) {
|
||||
if (!mShown) {
|
||||
show();
|
||||
}
|
||||
waitConsoleView();
|
||||
}
|
||||
mConsoleView.showEditText();
|
||||
try {
|
||||
return mInput.take();
|
||||
} catch (InterruptedException e) {
|
||||
throw new ScriptInterruptedException();
|
||||
}
|
||||
}
|
||||
|
||||
private void waitConsoleView() {
|
||||
synchronized (this) {
|
||||
try {
|
||||
this.wait();
|
||||
} catch (InterruptedException e) {
|
||||
throw new ScriptInterruptedException();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ScriptInterface
|
||||
public String rawInput(Object data, Object... param) {
|
||||
log(data, param);
|
||||
return rawInput();
|
||||
}
|
||||
|
||||
boolean submitInput(@NonNull CharSequence input) {
|
||||
return mInput.offer(input.toString());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -22,7 +22,6 @@ import com.stardust.scriptdroid.autojs.AutoJs;
|
||||
import com.stardust.scriptdroid.script.Scripts;
|
||||
import com.stardust.scriptdroid.script.sample.Sample;
|
||||
import com.stardust.scriptdroid.ui.BaseActivity;
|
||||
import com.stardust.scriptdroid.ui.console.ConsoleActivity;
|
||||
import com.stardust.scriptdroid.ui.edit.editor920.Editor920Activity;
|
||||
import com.stardust.scriptdroid.ui.edit.editor920.Editor920Utils;
|
||||
import com.stardust.scriptdroid.ui.help.HelpCatalogueActivity;
|
||||
|
||||
@@ -14,7 +14,7 @@ import com.stardust.scriptdroid.external.floating_window.FloatingWindowManger;
|
||||
import com.stardust.scriptdroid.external.floating_window.menu.HoverMenuService;
|
||||
import com.stardust.view.ViewBinding;
|
||||
import com.stardust.scriptdroid.R;
|
||||
import com.stardust.scriptdroid.ui.console.ConsoleActivity;
|
||||
import com.stardust.scriptdroid.ui.console.LogActivity;
|
||||
import com.stardust.scriptdroid.ui.help.HelpCatalogueActivity;
|
||||
import com.stardust.view.ViewBinder;
|
||||
|
||||
@@ -92,7 +92,7 @@ public class EditSideMenuFragment extends Fragment {
|
||||
|
||||
@ViewBinding.Click(R.id.console)
|
||||
private void startConsoleActivity() {
|
||||
startActivity(new Intent(getContext(), ConsoleActivity.class).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
|
||||
startActivity(new Intent(getContext(), LogActivity.class).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
|
||||
}
|
||||
|
||||
@ViewBinding.Check(R.id.sw_floating_window)
|
||||
|
||||
@@ -17,7 +17,7 @@ import com.stardust.scriptdroid.external.floating_window.FloatingWindowManger;
|
||||
import com.stardust.scriptdroid.external.floating_window.menu.HoverMenuService;
|
||||
import com.stardust.scriptdroid.service.AccessibilityWatchDogService;
|
||||
import com.stardust.scriptdroid.tool.AccessibilityServiceTool;
|
||||
import com.stardust.scriptdroid.ui.console.ConsoleActivity;
|
||||
import com.stardust.scriptdroid.ui.console.LogActivity;
|
||||
import com.stardust.scriptdroid.ui.help.HelpCatalogueActivity;
|
||||
import com.stardust.util.UnderuseExecutors;
|
||||
import com.stardust.view.ViewBinder;
|
||||
@@ -99,7 +99,7 @@ public class SlideMenuFragment extends Fragment {
|
||||
|
||||
@ViewBinding.Click(R.id.console)
|
||||
private void startConsoleActivity() {
|
||||
startActivity(new Intent(getContext(), ConsoleActivity.class).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
|
||||
startActivity(new Intent(getContext(), LogActivity.class).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
|
||||
}
|
||||
|
||||
@ViewBinding.Click(R.id.syntax_and_api)
|
||||
|
||||
Reference in New Issue
Block a user