From c871b474f59e2498d9c7521c31f52fb033dea588 Mon Sep 17 00:00:00 2001 From: hyb1996 <946994919@qq.com> Date: Wed, 6 Dec 2017 13:58:49 +0800 Subject: [PATCH] add: console.setPosition, console.setSize --- .../sample/控制台/调整控制台大小位置.js | 8 +++ autojs/src/main/assets/modules/__console__.js | 2 + .../autojs/core/console/ConsoleFloaty.java | 54 ++++++++------- .../autojs/core/console/StardustConsole.java | 66 +++++++++++++++++-- .../res/layout/floating_console_expand.xml | 4 +- 5 files changed, 99 insertions(+), 35 deletions(-) create mode 100644 app/src/main/assets/sample/控制台/调整控制台大小位置.js diff --git a/app/src/main/assets/sample/控制台/调整控制台大小位置.js b/app/src/main/assets/sample/控制台/调整控制台大小位置.js new file mode 100644 index 00000000..56b1d06d --- /dev/null +++ b/app/src/main/assets/sample/控制台/调整控制台大小位置.js @@ -0,0 +1,8 @@ +console.show(); +console.log("调整大小..."); +console.setSize(1000, 1000); +sleep(2000); +console.log("调整位置..."); +console.setPosition(0, 500); +sleep(2000); +console.hide(); diff --git a/autojs/src/main/assets/modules/__console__.js b/autojs/src/main/assets/modules/__console__.js index 17ada9c4..e007c093 100644 --- a/autojs/src/main/assets/modules/__console__.js +++ b/autojs/src/main/assets/modules/__console__.js @@ -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); diff --git a/autojs/src/main/java/com/stardust/autojs/core/console/ConsoleFloaty.java b/autojs/src/main/java/com/stardust/autojs/core/console/ConsoleFloaty.java index e51cd311..fe393aa2 100644 --- a/autojs/src/main/java/com/stardust/autojs/core/console/ConsoleFloaty.java +++ b/autojs/src/main/java/com/stardust/autojs/core/console/ConsoleFloaty.java @@ -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 diff --git a/autojs/src/main/java/com/stardust/autojs/core/console/StardustConsole.java b/autojs/src/main/java/com/stardust/autojs/core/console/StardustConsole.java index a7ba8964..7a2583d9 100644 --- a/autojs/src/main/java/com/stardust/autojs/core/console/StardustConsole.java +++ b/autojs/src/main/java/com/stardust/autojs/core/console/StardustConsole.java @@ -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 mLogs = new ArrayList<>(); private AtomicInteger mIdCounter = new AtomicInteger(0); @@ -70,6 +73,9 @@ public class StardustConsole extends AbstractConsole { private BlockingQueue mInput = new ArrayBlockingQueue<>(1); private WeakReference 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 diff --git a/autojs/src/main/res/layout/floating_console_expand.xml b/autojs/src/main/res/layout/floating_console_expand.xml index 0a592b8c..fe6817b1 100644 --- a/autojs/src/main/res/layout/floating_console_expand.xml +++ b/autojs/src/main/res/layout/floating_console_expand.xml @@ -1,8 +1,8 @@ + android:layout_width="match_parent" + android:layout_height="match_parent">