新增 app.sendBroadcast("inspect_layout_hierarchy"),app.sendBroadcast("inspect_layout_bounds");
This commit is contained in:
@@ -1,7 +1,12 @@
|
||||
package org.autojs.autojs.autojs;
|
||||
|
||||
import android.app.Application;
|
||||
import android.content.BroadcastReceiver;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.IntentFilter;
|
||||
import android.os.Looper;
|
||||
import android.support.v4.content.LocalBroadcastManager;
|
||||
|
||||
import com.stardust.app.GlobalAppContext;
|
||||
import com.stardust.autojs.core.console.GlobalStardustConsole;
|
||||
@@ -10,15 +15,25 @@ import com.stardust.autojs.runtime.accessibility.AccessibilityConfig;
|
||||
import com.stardust.autojs.runtime.exception.ScriptException;
|
||||
import com.stardust.autojs.runtime.api.Console;
|
||||
import com.stardust.autojs.runtime.exception.ScriptInterruptedException;
|
||||
|
||||
import org.autojs.autojs.App;
|
||||
import org.autojs.autojs.BuildConfig;
|
||||
import org.autojs.autojs.Pref;
|
||||
import org.autojs.autojs.R;
|
||||
import org.autojs.autojs.pluginclient.DevPluginService;
|
||||
import org.autojs.autojs.ui.floating.FloatyWindowManger;
|
||||
import org.autojs.autojs.ui.floating.FullScreenFloatyWindow;
|
||||
import org.autojs.autojs.ui.floating.layoutinspector.LayoutBoundsFloatyWindow;
|
||||
import org.autojs.autojs.ui.floating.layoutinspector.LayoutHierarchyFloatyWindow;
|
||||
import org.autojs.autojs.ui.log.LogActivity_;
|
||||
import org.autojs.autojs.ui.settings.SettingsActivity;
|
||||
import org.autojs.autojs.ui.settings.SettingsActivity_;
|
||||
|
||||
import com.stardust.concurrent.VolatileBox;
|
||||
import com.stardust.view.accessibility.AccessibilityService;
|
||||
import com.stardust.view.accessibility.LayoutInspector;
|
||||
import com.stardust.view.accessibility.NodeInfo;
|
||||
|
||||
import org.autojs.autojs.tool.AccessibilityServiceTool;
|
||||
|
||||
|
||||
@@ -34,14 +49,52 @@ public class AutoJs extends com.stardust.autojs.AutoJs {
|
||||
return instance;
|
||||
}
|
||||
|
||||
|
||||
public static void initInstance(Application application) {
|
||||
instance = new AutoJs(application);
|
||||
}
|
||||
|
||||
private interface LayoutInspectFloatyWindow {
|
||||
FullScreenFloatyWindow create(NodeInfo nodeInfo);
|
||||
}
|
||||
|
||||
private BroadcastReceiver mLayoutInspectBroadcastReceiver = new BroadcastReceiver() {
|
||||
@Override
|
||||
public void onReceive(Context context, Intent intent) {
|
||||
ensureAccessibilityServiceEnabled();
|
||||
String action = intent.getAction();
|
||||
if (LayoutBoundsFloatyWindow.class.getName().equals(action)) {
|
||||
capture(LayoutBoundsFloatyWindow::new);
|
||||
} else if (LayoutHierarchyFloatyWindow.class.getName().equals(action)) {
|
||||
capture(LayoutHierarchyFloatyWindow::new);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
private AutoJs(final Application application) {
|
||||
super(application);
|
||||
getScriptEngineService().registerGlobalScriptExecutionListener(new ScriptExecutionGlobalListener());
|
||||
IntentFilter intentFilter = new IntentFilter();
|
||||
intentFilter.addAction(LayoutBoundsFloatyWindow.class.getName());
|
||||
intentFilter.addAction(LayoutHierarchyFloatyWindow.class.getName());
|
||||
LocalBroadcastManager.getInstance(application).registerReceiver(mLayoutInspectBroadcastReceiver, intentFilter);
|
||||
}
|
||||
|
||||
private void capture(LayoutInspectFloatyWindow window) {
|
||||
LayoutInspector inspector = getLayoutInspector();
|
||||
LayoutInspector.CaptureAvailableListener listener = new LayoutInspector.CaptureAvailableListener() {
|
||||
@Override
|
||||
public void onCaptureAvailable(NodeInfo capture) {
|
||||
inspector.removeCaptureAvailableListener(this);
|
||||
getUiHandler().post(() ->
|
||||
FloatyWindowManger.addWindow(getApplication().getApplicationContext(), window.create(capture))
|
||||
);
|
||||
}
|
||||
};
|
||||
inspector.addCaptureAvailableListener(listener);
|
||||
if (!inspector.captureCurrentWindow()) {
|
||||
inspector.removeCaptureAvailableListener(listener);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -117,6 +170,8 @@ public class AutoJs extends com.stardust.autojs.AutoJs {
|
||||
ScriptRuntime runtime = super.createRuntime();
|
||||
runtime.putProperty("class.settings", SettingsActivity_.class);
|
||||
runtime.putProperty("class.console", LogActivity_.class);
|
||||
runtime.putProperty("broadcast.inspect_layout_bounds", LayoutBoundsFloatyWindow.class.getName());
|
||||
runtime.putProperty("broadcast.inspect_layout_hierarchy", LayoutHierarchyFloatyWindow.class.getName());
|
||||
return runtime;
|
||||
}
|
||||
|
||||
|
||||
@@ -43,7 +43,7 @@ public class FloatyWindowManger {
|
||||
e.printStackTrace();
|
||||
if(hasPermission){
|
||||
manageDrawOverlays(context);
|
||||
Toast.makeText(context, R.string.text_no_floating_window_permission, Toast.LENGTH_SHORT).show();
|
||||
GlobalAppContext.toast(R.string.text_no_floating_window_permission);
|
||||
}
|
||||
}
|
||||
return false;
|
||||
|
||||
@@ -17,6 +17,7 @@ import org.autojs.autojs.ui.codegeneration.CodeGenerateDialog;
|
||||
import org.autojs.autojs.ui.floating.FloatyWindowManger;
|
||||
import org.autojs.autojs.ui.floating.FullScreenFloatyWindow;
|
||||
|
||||
import com.stardust.view.accessibility.LayoutInspector;
|
||||
import com.stardust.view.accessibility.NodeInfo;
|
||||
|
||||
import org.autojs.autojs.ui.widget.BubblePopupMenu;
|
||||
@@ -41,6 +42,21 @@ public class LayoutBoundsFloatyWindow extends FullScreenFloatyWindow {
|
||||
mRootNode = rootNode;
|
||||
}
|
||||
|
||||
public static void capture(LayoutInspector inspector, Context context) {
|
||||
LayoutInspector.CaptureAvailableListener listener = new LayoutInspector.CaptureAvailableListener() {
|
||||
@Override
|
||||
public void onCaptureAvailable(NodeInfo capture) {
|
||||
inspector.removeCaptureAvailableListener(this);
|
||||
LayoutBoundsFloatyWindow window = new LayoutBoundsFloatyWindow(capture);
|
||||
FloatyWindowManger.addWindow(context, window);
|
||||
}
|
||||
};
|
||||
inspector.addCaptureAvailableListener(listener);
|
||||
if (!inspector.captureCurrentWindow()) {
|
||||
inspector.removeCaptureAvailableListener(listener);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected View onCreateView(FloatyService floatyService) {
|
||||
mContext = new ContextThemeWrapper(floatyService, R.style.AppTheme);
|
||||
|
||||
@@ -11,11 +11,14 @@ import android.view.WindowManager;
|
||||
import com.afollestad.materialdialogs.MaterialDialog;
|
||||
import com.afollestad.materialdialogs.Theme;
|
||||
import com.stardust.app.DialogUtils;
|
||||
import com.stardust.app.GlobalAppContext;
|
||||
import com.stardust.enhancedfloaty.FloatyService;
|
||||
import org.autojs.autojs.R;
|
||||
import org.autojs.autojs.ui.codegeneration.CodeGenerateDialog;
|
||||
import org.autojs.autojs.ui.floating.FloatyWindowManger;
|
||||
import org.autojs.autojs.ui.floating.FullScreenFloatyWindow;
|
||||
|
||||
import com.stardust.view.accessibility.LayoutInspector;
|
||||
import com.stardust.view.accessibility.NodeInfo;
|
||||
import org.autojs.autojs.ui.widget.BubblePopupMenu;
|
||||
|
||||
@@ -42,7 +45,6 @@ public class LayoutHierarchyFloatyWindow extends FullScreenFloatyWindow {
|
||||
mRootNode = rootNode;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected View onCreateView(FloatyService floatyService) {
|
||||
mContext = new ContextThemeWrapper(floatyService, R.style.AppTheme);
|
||||
|
||||
Reference in New Issue
Block a user