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.hide = rtConsole.hide.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);
scope.print = console.print.bind(console);

View File

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

View File

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

View File

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