add: console.setPosition, console.setSize

This commit is contained in:
hyb1996
2017-12-06 13:58:49 +08:00
parent e33ce733d5
commit c871b474f5
5 changed files with 99 additions and 35 deletions

View File

@@ -0,0 +1,8 @@
console.show();
console.log("调整大小...");
console.setSize(1000, 1000);
sleep(2000);
console.log("调整位置...");
console.setPosition(0, 500);
sleep(2000);
console.hide();

View File

@@ -41,6 +41,8 @@ module.exports = function(__runtime__, scope){
console.show = rtConsole.show.bind(rtConsole); console.show = rtConsole.show.bind(rtConsole);
console.hide = rtConsole.hide.bind(rtConsole); console.hide = rtConsole.hide.bind(rtConsole);
console.clear = rtConsole.clear.bind(rtConsole); console.clear = rtConsole.clear.bind(rtConsole);
console.setSize = rtConsole.setSize.bind(rtConsole);
console.setPosition = rtConsole.setPosition.bind(rtConsole);
console.setTitle = rtConsole.setTitle.bind(rtConsole); console.setTitle = rtConsole.setTitle.bind(rtConsole);
scope.print = console.print.bind(console); scope.print = console.print.bind(console);

View File

@@ -25,6 +25,7 @@ public class ConsoleFloaty extends ResizableExpandableFloaty.AbstractResizableEx
private TextView mTitleView; private TextView mTitleView;
private StardustConsole mConsole; private StardustConsole mConsole;
private CharSequence mTitle; private CharSequence mTitle;
private View mExpandedView;
public ConsoleFloaty(StardustConsole console) { public ConsoleFloaty(StardustConsole console) {
mConsole = console; mConsole = console;
@@ -34,6 +35,16 @@ public class ConsoleFloaty extends ResizableExpandableFloaty.AbstractResizableEx
setCollapsedViewUnpressedAlpha(1.0f); setCollapsedViewUnpressedAlpha(1.0f);
} }
@Override
public int getInitialWidth() {
return ScreenMetrics.getDeviceScreenWidth() * 2 / 3;
}
@Override
public int getInitialHeight() {
return ScreenMetrics.getDeviceScreenHeight() / 3;
}
@Override @Override
public View inflateCollapsedView(FloatyService service, final ResizableExpandableFloatyWindow window) { public View inflateCollapsedView(FloatyService service, final ResizableExpandableFloatyWindow window) {
ensureContextWrapper(service); ensureContextWrapper(service);
@@ -53,16 +64,16 @@ public class ConsoleFloaty extends ResizableExpandableFloaty.AbstractResizableEx
setListeners(view, window); setListeners(view, window);
setUpConsole(view, window); setUpConsole(view, window);
setInitialMeasure(view); setInitialMeasure(view);
mExpandedView = view;
return view; return view;
} }
public View getExpandedView() {
return mExpandedView;
}
private void setInitialMeasure(final View view) { private void setInitialMeasure(final View view) {
view.post(new Runnable() { view.post(() -> ViewUtil.setViewMeasure(view, getInitialWidth(), getInitialHeight()));
@Override
public void run() {
ViewUtil.setViewMeasure(view, ScreenMetrics.getDeviceScreenWidth() * 2 / 3, ScreenMetrics.getDeviceScreenHeight() / 3);
}
});
} }
private void initConsoleTitle(View view) { private void initConsoleTitle(View view) {
@@ -84,30 +95,17 @@ public class ConsoleFloaty extends ResizableExpandableFloaty.AbstractResizableEx
} }
private void setWindowOperationIconListeners(View view, final ResizableExpandableFloatyWindow window) { private void setWindowOperationIconListeners(View view, final ResizableExpandableFloatyWindow window) {
view.findViewById(R.id.close).setOnClickListener(new View.OnClickListener() { view.findViewById(R.id.close).setOnClickListener(v -> window.close());
@Override view.findViewById(R.id.move_or_resize).setOnClickListener(v -> {
public void onClick(View v) { if (mMoveCursor.getVisibility() == View.VISIBLE) {
window.close(); mMoveCursor.setVisibility(View.GONE);
} mResizer.setVisibility(View.GONE);
}); } else {
view.findViewById(R.id.move_or_resize).setOnClickListener(new View.OnClickListener() { mMoveCursor.setVisibility(View.VISIBLE);
@Override mResizer.setVisibility(View.VISIBLE);
public void onClick(View v) {
if (mMoveCursor.getVisibility() == View.VISIBLE) {
mMoveCursor.setVisibility(View.GONE);
mResizer.setVisibility(View.GONE);
} else {
mMoveCursor.setVisibility(View.VISIBLE);
mResizer.setVisibility(View.VISIBLE);
}
}
});
view.findViewById(R.id.minimize).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
window.collapse();
} }
}); });
view.findViewById(R.id.minimize).setOnClickListener(v -> window.collapse());
} }
@Nullable @Nullable

View File

@@ -2,6 +2,7 @@ package com.stardust.autojs.core.console;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.os.Looper;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import android.view.WindowManager; import android.view.WindowManager;
@@ -13,6 +14,7 @@ import com.stardust.autojs.runtime.exception.ScriptInterruptedException;
import com.stardust.enhancedfloaty.FloatyService; import com.stardust.enhancedfloaty.FloatyService;
import com.stardust.enhancedfloaty.ResizableExpandableFloatyWindow; import com.stardust.enhancedfloaty.ResizableExpandableFloatyWindow;
import com.stardust.util.UiHandler; import com.stardust.util.UiHandler;
import com.stardust.util.ViewUtil;
import java.lang.ref.WeakReference; import java.lang.ref.WeakReference;
import java.util.ArrayList; import java.util.ArrayList;
@@ -60,6 +62,7 @@ public class StardustConsole extends AbstractConsole {
void onLogClear(); void onLogClear();
} }
private final Object WINDOW_SHOW_LOCK = new Object();
private final Console mGlobalConsole; private final Console mGlobalConsole;
private final ArrayList<Log> mLogs = new ArrayList<>(); private final ArrayList<Log> mLogs = new ArrayList<>();
private AtomicInteger mIdCounter = new AtomicInteger(0); private AtomicInteger mIdCounter = new AtomicInteger(0);
@@ -70,6 +73,9 @@ public class StardustConsole extends AbstractConsole {
private BlockingQueue<String> mInput = new ArrayBlockingQueue<>(1); private BlockingQueue<String> mInput = new ArrayBlockingQueue<>(1);
private WeakReference<ConsoleView> mConsoleView; private WeakReference<ConsoleView> mConsoleView;
private volatile boolean mShown = false; private volatile boolean mShown = false;
private int mWidth;
private int mHeight;
private int mX, mY;
public StardustConsole(UiHandler uiHandler) { public StardustConsole(UiHandler uiHandler) {
this(uiHandler, null); this(uiHandler, null);
@@ -79,11 +85,19 @@ public class StardustConsole extends AbstractConsole {
mUiHandler = uiHandler; mUiHandler = uiHandler;
mConsoleFloaty = new ConsoleFloaty(this); mConsoleFloaty = new ConsoleFloaty(this);
mGlobalConsole = globalConsole; mGlobalConsole = globalConsole;
mWidth = mConsoleFloaty.getInitialWidth();
mHeight = mConsoleFloaty.getInitialHeight();
mFloatyWindow = new ResizableExpandableFloatyWindow(mConsoleFloaty) { mFloatyWindow = new ResizableExpandableFloatyWindow(mConsoleFloaty) {
@Override @Override
public void onCreate(FloatyService service, WindowManager manager) { public void onCreate(FloatyService service, WindowManager manager) {
super.onCreate(service, manager); super.onCreate(service, manager);
expand(); expand();
mFloatyWindow.getWindowBridge().updateMeasure(mWidth, mHeight);
mFloatyWindow.getWindowBridge().updatePosition(mX, mY);
synchronized (WINDOW_SHOW_LOCK) {
mShown = true;
WINDOW_SHOW_LOCK.notifyAll();
}
} }
}; };
} }
@@ -142,6 +156,9 @@ public class StardustConsole extends AbstractConsole {
@Override @Override
public void show() { public void show() {
if (mShown) {
return;
}
if (!SettingsCompat.canDrawOverlays(mUiHandler.getContext())) { if (!SettingsCompat.canDrawOverlays(mUiHandler.getContext())) {
SettingsCompat.manageDrawOverlays(mUiHandler.getContext()); SettingsCompat.manageDrawOverlays(mUiHandler.getContext());
mUiHandler.toast(R.string.text_no_floating_window_permission); mUiHandler.toast(R.string.text_no_floating_window_permission);
@@ -157,7 +174,16 @@ public class StardustConsole extends AbstractConsole {
mUiHandler.toast(R.string.text_no_floating_window_permission); mUiHandler.toast(R.string.text_no_floating_window_permission);
} }
}); });
mShown = true; synchronized (WINDOW_SHOW_LOCK) {
if (mShown) {
return;
}
try {
WINDOW_SHOW_LOCK.wait();
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
} }
private void startFloatyService() { private void startFloatyService() {
@@ -167,12 +193,42 @@ public class StardustConsole extends AbstractConsole {
@Override @Override
public void hide() { public void hide() {
try { mUiHandler.post(() -> {
mFloatyWindow.close(); synchronized (WINDOW_SHOW_LOCK) {
} catch (IllegalArgumentException ignored) { if (!mShown)
return;
try {
mFloatyWindow.close();
} catch (IllegalArgumentException ignored) {
}
mShown = false;
}
});
}
public void setSize(int w, int h) {
mWidth = w;
mHeight = h;
if (mShown) {
mUiHandler.post(() -> {
if (mShown) {
ViewUtil.setViewMeasure(mConsoleFloaty.getExpandedView(), w, h);
mFloatyWindow.getWindowBridge().updateMeasure(w, h);
}
});
}
}
public void setPosition(int x, int y) {
mX = x;
mY = y;
if (mShown) {
mUiHandler.post(() -> {
if (mShown)
mFloatyWindow.getWindowBridge().updatePosition(x, y);
});
} }
mShown = false;
} }
@ScriptInterface @ScriptInterface

View File

@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="wrap_content" android:layout_width="match_parent"
android:layout_height="wrap_content"> android:layout_height="match_parent">
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"