Dying again
This commit is contained in:
@@ -84,7 +84,7 @@
|
||||
android:theme="@style/IssueReporterTheme"/>
|
||||
|
||||
<service android:name="com.stardust.view.Floaty$FloatHeadService"/>
|
||||
<service android:name="com.stardust.scriptdroid.external.floating_window.HoverMenuService"/>
|
||||
<service android:name="com.stardust.scriptdroid.external.floating_window.menu.HoverMenuService"/>
|
||||
|
||||
<activity android:name=".external.tasker.TaskPrefEditActivity"/>
|
||||
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
"path":"documentation"
|
||||
},
|
||||
{
|
||||
"title": "驻留模式与无障碍服务委托",
|
||||
"title": "模块与第三方jar",
|
||||
"type": "markdown",
|
||||
"path":"documentation"
|
||||
},
|
||||
|
||||
23
app/src/main/assets/help/documentation/模块与第三方jar.md
Normal file
23
app/src/main/assets/help/documentation/模块与第三方jar.md
Normal file
@@ -0,0 +1,23 @@
|
||||
### loadJar(path)
|
||||
* path \<String\> jar文件路径
|
||||
|
||||
载入jar文件。之后改文件的所有类均可直接使用。这在使用第三方库时十分方便。
|
||||
|
||||
### require(path)
|
||||
* path \<String\> js文件的相对路径
|
||||
|
||||
载入js文件并返回该模块。模块文件应该有module.exports语句指定模块的输出对象。
|
||||
|
||||
例如test.js:
|
||||
```
|
||||
function sayHello(name){
|
||||
print("Hello, " + name);
|
||||
}
|
||||
module.exports = sayHello;
|
||||
```
|
||||
同一个目录下的test_module.js:
|
||||
```
|
||||
var sayHello = require("test");
|
||||
sayHello("AutoJs");
|
||||
```
|
||||
运行这个脚本将在控制台输出"Hello, AutoJs"
|
||||
@@ -14,20 +14,34 @@ gravity
|
||||
weight
|
||||
|
||||
|
||||
var ui = {
|
||||
|
||||
};
|
||||
|
||||
ui.layout = function(xml){
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
ui.layout(
|
||||
<linear orientation="vertical" w="fill" h="300" bg="#ff0000" gravity="center">
|
||||
<text text="测试" size="18" color="#000000"/>
|
||||
<linear orientation="vertical" w="fill" h="300" bg="#ff0000" gravity="center" layout_gravity="center">
|
||||
<text text="测试" size="18" color="#000000" id="adasd"/>
|
||||
<button id="btn" text="按钮"/>
|
||||
</linear>
|
||||
);
|
||||
|
||||
|
||||
|
||||
vat text = ui.asadsad;
|
||||
|
||||
<relative>
|
||||
|
||||
</relative>
|
||||
|
||||
<horizon>
|
||||
|
||||
</horiz>
|
||||
</horizon>
|
||||
|
||||
<vertical>
|
||||
|
||||
|
||||
@@ -1,2 +1,3 @@
|
||||
log("Hello world!!!");
|
||||
toast("Hello, AutoJs!");
|
||||
openConsole();
|
||||
10
app/src/main/assets/sample/文件读写/写入文本文件.js
Normal file
10
app/src/main/assets/sample/文件读写/写入文本文件.js
Normal file
@@ -0,0 +1,10 @@
|
||||
//文件路径
|
||||
var path = "/sdcard/1.txt";
|
||||
//要写入的文件内容
|
||||
var text = "Hello, AutoJs";
|
||||
//以写入模式打开文件
|
||||
var file = open(path, "w");
|
||||
//写入文件
|
||||
file.write(text);
|
||||
//关闭文件
|
||||
file.close();
|
||||
20
app/src/main/assets/sample/文件读写/文件编码转换(高级).js
Normal file
20
app/src/main/assets/sample/文件读写/文件编码转换(高级).js
Normal file
@@ -0,0 +1,20 @@
|
||||
|
||||
|
||||
convert("/sdcard/1.txt", "utf-8", "/sdcard/2.txt", "gbk");
|
||||
|
||||
/**
|
||||
* fromFile: 源文件路径
|
||||
* fromEncoding: 源文件编码
|
||||
* toFile: 输出文件路径
|
||||
* toEncoding: 输出文件编码
|
||||
*/
|
||||
function convert(fromFile, fromEncoding, toFile, toEncoding){
|
||||
fromFile = open(fromFile, "r", fromEncoding);
|
||||
toFile = open(toFile, "w", toEncoding);
|
||||
while(true){
|
||||
var line = fromFile.readline();
|
||||
if(!line)
|
||||
break;
|
||||
toFile.writeline(line);
|
||||
}
|
||||
}
|
||||
13
app/src/main/assets/sample/文件读写/文件编码转换.js
Normal file
13
app/src/main/assets/sample/文件读写/文件编码转换.js
Normal file
@@ -0,0 +1,13 @@
|
||||
//以UTF-8编码打开SD卡上的1.txt文件
|
||||
var in = open("/sdcard/1.txt", "r", "utf-8");
|
||||
//读取文件所有内容
|
||||
var text = in.read();
|
||||
//关闭文件
|
||||
in.close();
|
||||
//以gbk编码打开SD卡上的2.txt文件
|
||||
var out = open("/sdcard/2.txt", "w", "gbk");
|
||||
//写入内容
|
||||
out.write(text);
|
||||
//关闭文件
|
||||
out.close();
|
||||
|
||||
37
app/src/main/assets/sample/文件读写/读写文本文件.js
Normal file
37
app/src/main/assets/sample/文件读写/读写文本文件.js
Normal file
@@ -0,0 +1,37 @@
|
||||
//以写入模式打开SD卡根目录文件1.txt
|
||||
var file = open("/sdcard/1.txt", "w")
|
||||
//写入aaaa
|
||||
file.write("aaaa");
|
||||
//写入bbbbb后换行
|
||||
file.writeline("bbbbb");
|
||||
//写入ccc与ddd两行
|
||||
file.writelines(["ccc", "ddd"]);
|
||||
//关闭文件
|
||||
file.close();
|
||||
|
||||
//以附加模式打开文件
|
||||
file = open("/sdcard/1.txt", "a");
|
||||
//附加一行"啦啦啦啦"
|
||||
file.writeline("啦啦啦啦");
|
||||
//附加一行"哈哈哈哈"
|
||||
file.writeline("哈哈哈哈");
|
||||
//附加两行ccc, ddd
|
||||
file.writelines(["ccc", "ddd"]);
|
||||
//输出缓冲区
|
||||
file.flush();
|
||||
//关闭文件
|
||||
file.close();
|
||||
|
||||
|
||||
//以读取模式打开文件
|
||||
file = open("/sdcard/test.txt", "r")
|
||||
//读取一行并打印
|
||||
print(file.readline());
|
||||
//读取剩余所有行并打印
|
||||
for each(line in file.readlines()){
|
||||
print(line)
|
||||
}
|
||||
file.close()
|
||||
|
||||
//显示控制台
|
||||
console.show()
|
||||
11
app/src/main/assets/sample/文件读写/读取文本文件.js
Normal file
11
app/src/main/assets/sample/文件读写/读取文本文件.js
Normal file
@@ -0,0 +1,11 @@
|
||||
//文件路径
|
||||
var path = "/sdcard/1.txt";
|
||||
//打开文件
|
||||
var file = open(path);
|
||||
//读取文件的所有内容
|
||||
var text = file.read();
|
||||
//打印到控制台
|
||||
print(text);
|
||||
//关闭文件
|
||||
file.close();
|
||||
console.show();
|
||||
49
app/src/main/assets/sample/选择器/QQ空间点赞(不完美).js
Normal file
49
app/src/main/assets/sample/选择器/QQ空间点赞(不完美).js
Normal file
@@ -0,0 +1,49 @@
|
||||
"auto";
|
||||
|
||||
var 延迟 = 0;
|
||||
|
||||
function 点赞(){
|
||||
className("AbsListView").findOne()
|
||||
.children().each(function(ss){
|
||||
try{
|
||||
var 一行 = 找到图标那一行(ss);
|
||||
if(一行){
|
||||
一行.child(1).click();
|
||||
if(延迟 > 0){
|
||||
sleep(延迟);
|
||||
}
|
||||
}
|
||||
}catch(e){}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
function 找到图标那一行(s){
|
||||
for(let i = 0; i < s.getChildCount(); i++){
|
||||
var child = s.child(i);
|
||||
if(child && child.className()
|
||||
.endsWith("RelativeLayout") &&
|
||||
child.getChildCount() >= 4){
|
||||
if(是图片(child.child(1)) &&
|
||||
是图片(child.child(2)) &&
|
||||
是图片(child.child(3))){
|
||||
return child;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function 是图片(item){
|
||||
return item &&
|
||||
item.className().endsWith("ImageView");
|
||||
}
|
||||
|
||||
function 下滑(){
|
||||
className("AbsListView").findOne()
|
||||
.scrollForward();
|
||||
}
|
||||
|
||||
while(true){
|
||||
点赞();
|
||||
下滑();
|
||||
}
|
||||
25
app/src/main/assets/sample/选择器/清空酷安动态.js
Normal file
25
app/src/main/assets/sample/选择器/清空酷安动态.js
Normal file
@@ -0,0 +1,25 @@
|
||||
"auto";
|
||||
|
||||
//清空酷安动态
|
||||
//需要酷安客户端支持
|
||||
//务必谨慎使用!!!
|
||||
//by dazhang32552732
|
||||
toast("正在启动酷安");
|
||||
launch("com.coolapk.market");
|
||||
sleep(2000);
|
||||
while(!click("酷市场"));
|
||||
while(!click("我"));
|
||||
while(!click("动态"));
|
||||
toast("请注意,即将开始删除酷安动态,这将不可恢复,请谨慎操作!");
|
||||
sleep(3000);
|
||||
toast("操作将在十秒后自动进行,请谨慎操作!");
|
||||
sleep(5000);
|
||||
toast("操作将在五秒后自动进行,请谨慎操作!");
|
||||
sleep(5000);
|
||||
toast("操作开始!");
|
||||
while(true){
|
||||
id("more_view").click();
|
||||
while(!click("删除"));
|
||||
while(!click("确定"));
|
||||
sleep(1000);
|
||||
}
|
||||
@@ -6,6 +6,7 @@ import android.os.Build;
|
||||
import android.provider.Settings;
|
||||
|
||||
import com.stardust.scriptdroid.App;
|
||||
import com.stardust.scriptdroid.external.floating_window.menu.HoverMenuService;
|
||||
import com.stardust.util.IntentUtil;
|
||||
|
||||
/**
|
||||
@@ -14,7 +15,7 @@ import com.stardust.util.IntentUtil;
|
||||
|
||||
public class FloatingWindowManger {
|
||||
|
||||
public static void showFloatingWindow() {
|
||||
public static void showHoverMenu() {
|
||||
if (!HoverMenuService.isServiceRunning()) {
|
||||
if (!hasFloatingWindowPermission()) {
|
||||
goToFloatingWindowPermissionSetting();
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.stardust.scriptdroid.external.floating_window;
|
||||
package com.stardust.scriptdroid.external.floating_window.console;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.ContextWrapper;
|
||||
@@ -6,21 +6,28 @@ import android.support.annotation.Nullable;
|
||||
import android.view.ContextThemeWrapper;
|
||||
import android.view.View;
|
||||
|
||||
import com.stardust.enhancedfloaty.ResizableExpandableFloaty;
|
||||
import com.stardust.enhancedfloaty.ResizableExpandableFloatyService;
|
||||
import com.stardust.enhancedfloaty.ResizableFloaty;
|
||||
import com.stardust.enhancedfloaty.ResizableFloatyService;
|
||||
|
||||
import com.stardust.scriptdroid.R;
|
||||
|
||||
/**
|
||||
* Created by Stardust on 2017/4/20.
|
||||
*/
|
||||
|
||||
public class ConsoleFloaty extends ResizableFloaty {
|
||||
public class ConsoleFloaty extends ResizableExpandableFloaty {
|
||||
|
||||
private ContextWrapper mContextWrapper;
|
||||
private View mResizer, mMoveCursor;
|
||||
|
||||
public ConsoleFloaty() {
|
||||
setShouldRequestFocusWhenExpand(false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public View inflateCollapsedView(ResizableFloatyService service) {
|
||||
public View inflateCollapsedView(ResizableExpandableFloatyService service) {
|
||||
ensureContextWrapper(service);
|
||||
return View.inflate(mContextWrapper, R.layout.floating_window_collapse, null);
|
||||
}
|
||||
@@ -32,28 +39,27 @@ public class ConsoleFloaty extends ResizableFloaty {
|
||||
}
|
||||
|
||||
@Override
|
||||
public View inflateExpandedView(ResizableFloatyService service) {
|
||||
public View inflateExpandedView(ResizableExpandableFloatyService service) {
|
||||
ensureContextWrapper(service);
|
||||
View view = View.inflate(mContextWrapper, R.layout.floating_console_expand, null);
|
||||
setListeners(view, service);
|
||||
return view;
|
||||
}
|
||||
|
||||
private void setListeners(final View view, final ResizableFloatyService service) {
|
||||
private void setListeners(final View view, final ResizableExpandableFloatyService service) {
|
||||
view.findViewById(R.id.close).setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
service.stopSelf();
|
||||
service.stopForeground(true);
|
||||
}
|
||||
});
|
||||
view.findViewById(R.id.move_or_resize).setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
if(mMoveCursor.getVisibility() == View.VISIBLE){
|
||||
if (mMoveCursor.getVisibility() == View.VISIBLE) {
|
||||
mMoveCursor.setVisibility(View.GONE);
|
||||
mResizer.setVisibility(View.GONE);
|
||||
}else {
|
||||
} else {
|
||||
mMoveCursor.setVisibility(View.VISIBLE);
|
||||
mResizer.setVisibility(View.VISIBLE);
|
||||
}
|
||||
@@ -1,7 +1,8 @@
|
||||
package com.stardust.scriptdroid.external.floating_window;
|
||||
package com.stardust.scriptdroid.external.floating_window.console;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
import com.stardust.enhancedfloaty.ResizableExpandableFloatyService;
|
||||
import com.stardust.enhancedfloaty.ResizableFloatyService;
|
||||
|
||||
/**
|
||||
@@ -11,6 +12,6 @@ import com.stardust.enhancedfloaty.ResizableFloatyService;
|
||||
public class FloatingConsole {
|
||||
|
||||
public static void startFloatingService(Context context) {
|
||||
ResizableFloatyService.startService(context, new ConsoleFloaty());
|
||||
ResizableExpandableFloatyService.startService(context, new ConsoleFloaty());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
package com.stardust.scriptdroid.external.floating_window.console;
|
||||
|
||||
/**
|
||||
* Created by Stardust on 2017/4/30.
|
||||
*/
|
||||
|
||||
public class FloatingConsoleService {
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
package com.stardust.scriptdroid.external.floating_window.console;
|
||||
|
||||
import android.content.Context;
|
||||
import android.graphics.Color;
|
||||
import android.util.AttributeSet;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.jraska.console.Console;
|
||||
import com.stardust.scriptdroid.R;
|
||||
|
||||
/**
|
||||
* Created by Stardust on 2017/4/30.
|
||||
*/
|
||||
|
||||
public class FloatingConsoleView extends Console {
|
||||
public FloatingConsoleView(Context context) {
|
||||
super(context);
|
||||
init();
|
||||
}
|
||||
|
||||
public FloatingConsoleView(Context context, AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
init();
|
||||
}
|
||||
|
||||
public FloatingConsoleView(Context context, AttributeSet attrs, int defStyleAttr) {
|
||||
super(context, attrs, defStyleAttr);
|
||||
init();
|
||||
}
|
||||
|
||||
public FloatingConsoleView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
|
||||
super(context, attrs, defStyleAttr, defStyleRes);
|
||||
init();
|
||||
}
|
||||
|
||||
private void init() {
|
||||
findViewById(R.id.console_scroll_view).setBackground(getBackground());
|
||||
((TextView) findViewById(R.id.console_text)).setTextIsSelectable(true);
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.stardust.scriptdroid.external.floating_window;
|
||||
package com.stardust.scriptdroid.external.floating_window.menu;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.res.Resources;
|
||||
@@ -16,9 +16,9 @@ import android.util.TypedValue;
|
||||
import android.view.View;
|
||||
|
||||
import com.stardust.scriptdroid.R;
|
||||
import com.stardust.scriptdroid.external.floating_window.content.MainMenuNavigatorContent;
|
||||
import com.stardust.scriptdroid.external.floating_window.content.RecordNavigatorContent;
|
||||
import com.stardust.scriptdroid.external.floating_window.content.ScriptListNavigatorContent;
|
||||
import com.stardust.scriptdroid.external.floating_window.menu.content.MainMenuNavigatorContent;
|
||||
import com.stardust.scriptdroid.external.floating_window.menu.content.RecordNavigatorContent;
|
||||
import com.stardust.scriptdroid.external.floating_window.menu.content.ScriptListNavigatorContent;
|
||||
import com.stardust.theme.ThemeColorManagerCompat;
|
||||
|
||||
import java.util.ArrayList;
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.stardust.scriptdroid.external.floating_window;
|
||||
package com.stardust.scriptdroid.external.floating_window.menu;
|
||||
|
||||
|
||||
import android.app.Service;
|
||||
@@ -17,9 +17,9 @@ import com.stardust.hover.SimpleHoverMenuTransitionListener;
|
||||
import com.stardust.hover.WindowHoverMenu;
|
||||
import com.stardust.scriptdroid.R;
|
||||
import com.stardust.scriptdroid.autojs.AutoJs;
|
||||
import com.stardust.scriptdroid.external.floating_window.view.FloatingLayoutBoundsView;
|
||||
import com.stardust.scriptdroid.external.floating_window.view.FloatingLayoutHierarchyView;
|
||||
import com.stardust.scriptdroid.layout_inspector.LayoutInspector;
|
||||
import com.stardust.scriptdroid.external.floating_window.FloatingWindowManger;
|
||||
import com.stardust.scriptdroid.external.floating_window.menu.view.FloatingLayoutBoundsView;
|
||||
import com.stardust.scriptdroid.external.floating_window.menu.view.FloatingLayoutHierarchyView;
|
||||
import com.stardust.scriptdroid.layout_inspector.NodeInfo;
|
||||
import com.stardust.scriptdroid.tool.AccessibilityServiceTool;
|
||||
import com.stardust.theme.ThemeColorManagerCompat;
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.stardust.scriptdroid.external.floating_window.content;
|
||||
package com.stardust.scriptdroid.external.floating_window.menu.content;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.content.Context;
|
||||
@@ -11,9 +11,7 @@ import android.widget.Toast;
|
||||
import com.stardust.scriptdroid.App;
|
||||
import com.stardust.scriptdroid.R;
|
||||
import com.stardust.scriptdroid.autojs.AutoJs;
|
||||
import com.stardust.view.accessibility.AccessibilityInfoProvider;
|
||||
import com.stardust.scriptdroid.external.floating_window.HoverMenuService;
|
||||
import com.stardust.scriptdroid.layout_inspector.LayoutInspector;
|
||||
import com.stardust.scriptdroid.external.floating_window.menu.HoverMenuService;
|
||||
import com.stardust.util.ClipboardUtil;
|
||||
import com.stardust.scriptdroid.ui.main.MainActivity;
|
||||
import com.stardust.util.MessageEvent;
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.stardust.scriptdroid.external.floating_window.content;
|
||||
package com.stardust.scriptdroid.external.floating_window.menu.content;
|
||||
|
||||
import android.content.Context;
|
||||
import android.support.annotation.NonNull;
|
||||
@@ -14,7 +14,7 @@ import com.stardust.scriptdroid.Pref;
|
||||
import com.stardust.scriptdroid.R;
|
||||
import com.stardust.scriptdroid.accessibility.AccessibilityEventHelper;
|
||||
import com.stardust.scriptdroid.autojs.AutoJs;
|
||||
import com.stardust.scriptdroid.external.floating_window.HoverMenuService;
|
||||
import com.stardust.scriptdroid.external.floating_window.menu.HoverMenuService;
|
||||
import com.stardust.scriptdroid.record.Recorder;
|
||||
import com.stardust.scriptdroid.record.accessibility.AccessibilityActionRecorder;
|
||||
import com.stardust.scriptdroid.record.inputevent.InputEventConverter;
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.stardust.scriptdroid.external.floating_window.content;
|
||||
package com.stardust.scriptdroid.external.floating_window.menu.content;
|
||||
|
||||
import android.content.Context;
|
||||
import android.support.annotation.NonNull;
|
||||
@@ -10,7 +10,7 @@ import android.view.ViewGroup;
|
||||
import com.stardust.autojs.script.FileScriptSource;
|
||||
import com.stardust.scriptdroid.R;
|
||||
import com.stardust.scriptdroid.autojs.AutoJs;
|
||||
import com.stardust.scriptdroid.external.floating_window.HoverMenuService;
|
||||
import com.stardust.scriptdroid.external.floating_window.menu.HoverMenuService;
|
||||
import com.stardust.scriptdroid.scripts.ScriptFile;
|
||||
import com.stardust.scriptdroid.scripts.StorageScriptProvider;
|
||||
import com.stardust.scriptdroid.ui.edit.EditActivity;
|
||||
@@ -1,21 +1,18 @@
|
||||
package com.stardust.scriptdroid.external.floating_window.view;
|
||||
package com.stardust.scriptdroid.external.floating_window.menu.view;
|
||||
|
||||
import android.content.Context;
|
||||
import android.graphics.Color;
|
||||
import android.view.KeyEvent;
|
||||
import android.view.WindowManager;
|
||||
|
||||
import com.afollestad.materialdialogs.MaterialDialog;
|
||||
import com.afollestad.materialdialogs.Theme;
|
||||
import com.stardust.scriptdroid.external.floating_window.HoverMenuService;
|
||||
import com.stardust.scriptdroid.external.floating_window.menu.HoverMenuService;
|
||||
import com.stardust.scriptdroid.layout_inspector.NodeInfo;
|
||||
import com.stardust.scriptdroid.layout_inspector.view.LayoutBoundsView;
|
||||
import com.stardust.scriptdroid.layout_inspector.view.NodeInfoView;
|
||||
import com.stardust.scriptdroid.layout_inspector.view.OnNodeInfoSelectListener;
|
||||
import com.stardust.util.MessageEvent;
|
||||
|
||||
import org.greenrobot.eventbus.EventBus;
|
||||
|
||||
/**
|
||||
* Created by Stardust on 2017/3/12.
|
||||
*/
|
||||
@@ -1,24 +1,18 @@
|
||||
package com.stardust.scriptdroid.external.floating_window.view;
|
||||
package com.stardust.scriptdroid.external.floating_window.menu.view;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.DialogInterface;
|
||||
import android.util.Log;
|
||||
import android.view.KeyEvent;
|
||||
import android.view.View;
|
||||
import android.view.WindowManager;
|
||||
|
||||
import com.afollestad.materialdialogs.MaterialDialog;
|
||||
import com.afollestad.materialdialogs.Theme;
|
||||
import com.stardust.scriptdroid.R;
|
||||
import com.stardust.scriptdroid.external.floating_window.HoverMenuService;
|
||||
import com.stardust.scriptdroid.external.floating_window.menu.HoverMenuService;
|
||||
import com.stardust.scriptdroid.layout_inspector.NodeInfo;
|
||||
import com.stardust.scriptdroid.layout_inspector.view.LayoutHierarchyView;
|
||||
import com.stardust.scriptdroid.layout_inspector.view.NodeInfoView;
|
||||
import com.stardust.scriptdroid.layout_inspector.view.OnNodeInfoSelectListener;
|
||||
import com.stardust.util.MessageEvent;
|
||||
|
||||
import org.greenrobot.eventbus.EventBus;
|
||||
|
||||
/**
|
||||
* Created by Stardust on 2017/3/12.
|
||||
*/
|
||||
@@ -16,6 +16,8 @@ import com.stardust.scriptdroid.layout_inspector.NodeInfo;
|
||||
import com.stardust.util.ViewUtil;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
@@ -99,33 +101,31 @@ public class LayoutBoundsView extends View {
|
||||
@Override
|
||||
public boolean onTouchEvent(MotionEvent event) {
|
||||
if (event.getAction() == MotionEvent.ACTION_DOWN && mRootNode != null) {
|
||||
NodeInfo nodeInfo = findNodeAt(mRootNode, (int) event.getRawX(), (int) event.getRawY());
|
||||
onNodeInfoClick(nodeInfo);
|
||||
ArrayList<NodeInfo> list = new ArrayList<>();
|
||||
findNodeAt(mRootNode, (int) event.getRawX(), (int) event.getRawY(), list);
|
||||
showNodeInfoList(list);
|
||||
}
|
||||
return super.onTouchEvent(event);
|
||||
|
||||
}
|
||||
|
||||
private void showNodeInfoList(ArrayList<NodeInfo> list) {
|
||||
onNodeInfoClick(list.get(list.size() - 1));
|
||||
}
|
||||
|
||||
private void onNodeInfoClick(NodeInfo nodeInfo) {
|
||||
if (mOnNodeInfoSelectListener != null) {
|
||||
mOnNodeInfoSelectListener.onNodeSelect(nodeInfo);
|
||||
}
|
||||
}
|
||||
|
||||
private List<NodeInfo> findNodeAt(NodeInfo node, int x, int y) {
|
||||
List<NodeInfo> list = null;
|
||||
private void findNodeAt(NodeInfo node, int x, int y, List<NodeInfo> list) {
|
||||
for (NodeInfo child : node.getChildren()) {
|
||||
if (child != null && child.getBoundsInScreen().contains(x, y)) {
|
||||
if (list == null)
|
||||
list = findNodeAt(child, x, y);
|
||||
else
|
||||
list.addAll(findNodeAt(child, x, y));
|
||||
list.add(child);
|
||||
findNodeAt(child, x, y, list);
|
||||
}
|
||||
}
|
||||
if (list == null)
|
||||
list = new ArrayList<>();
|
||||
list.add(node);
|
||||
return list;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -7,8 +7,6 @@ import android.content.IntentFilter;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.design.widget.Snackbar;
|
||||
import android.support.v4.view.GravityCompat;
|
||||
import android.support.v4.widget.DrawerLayout;
|
||||
import android.util.SparseArray;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuItem;
|
||||
@@ -22,16 +20,11 @@ import com.jecelyin.editor.v2.core.widget.TextView;
|
||||
import com.jecelyin.editor.v2.ui.EditorDelegate;
|
||||
import com.jecelyin.editor.v2.view.EditorView;
|
||||
import com.jecelyin.editor.v2.view.menu.MenuDef;
|
||||
import com.stardust.autojs.ScriptExecutionListener;
|
||||
import com.stardust.autojs.engine.JavaScriptEngine;
|
||||
import com.stardust.autojs.script.FileScriptSource;
|
||||
import com.stardust.autojs.script.JsBeautifier;
|
||||
import com.stardust.autojs.script.ScriptSource;
|
||||
import com.stardust.autojs.script.StringScriptSource;
|
||||
import com.stardust.scriptdroid.App;
|
||||
import com.stardust.scriptdroid.Pref;
|
||||
import com.stardust.scriptdroid.R;
|
||||
import com.stardust.scriptdroid.autojs.AutoJs;
|
||||
import com.stardust.scriptdroid.external.floating_window.console.FloatingConsole;
|
||||
import com.stardust.scriptdroid.scripts.ScriptFile;
|
||||
import com.stardust.scriptdroid.tool.JsBeautifierFactory;
|
||||
import com.stardust.scriptdroid.tool.MaterialDialogFactory;
|
||||
|
||||
@@ -11,7 +11,7 @@ import android.view.ViewGroup;
|
||||
|
||||
import com.stardust.app.Fragment;
|
||||
import com.stardust.scriptdroid.external.floating_window.FloatingWindowManger;
|
||||
import com.stardust.scriptdroid.external.floating_window.HoverMenuService;
|
||||
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;
|
||||
@@ -98,7 +98,7 @@ public class EditSideMenuFragment extends Fragment {
|
||||
@ViewBinding.Check(R.id.sw_floating_window)
|
||||
private void setFloatingWindowEnable(boolean enable) {
|
||||
if (enable && !FloatingWindowManger.isFloatingWindowShowing()) {
|
||||
FloatingWindowManger.showFloatingWindow();
|
||||
FloatingWindowManger.showHoverMenu();
|
||||
} else if (!enable && FloatingWindowManger.isFloatingWindowShowing()) {
|
||||
FloatingWindowManger.hideFloatingWindow();
|
||||
}
|
||||
|
||||
@@ -11,11 +11,10 @@ import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import com.stardust.app.Fragment;
|
||||
import com.stardust.scriptdroid.App;
|
||||
import com.stardust.scriptdroid.R;
|
||||
import com.stardust.scriptdroid.autojs.AutoJs;
|
||||
import com.stardust.scriptdroid.external.floating_window.FloatingWindowManger;
|
||||
import com.stardust.scriptdroid.external.floating_window.HoverMenuService;
|
||||
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;
|
||||
@@ -110,7 +109,7 @@ public class SlideMenuFragment extends Fragment {
|
||||
@ViewBinding.Check(R.id.sw_floating_window)
|
||||
private void setFloatingWindowEnable(boolean enable) {
|
||||
if (enable && !FloatingWindowManger.isFloatingWindowShowing()) {
|
||||
FloatingWindowManger.showFloatingWindow();
|
||||
FloatingWindowManger.showHoverMenu();
|
||||
} else if (!enable && FloatingWindowManger.isFloatingWindowShowing()) {
|
||||
FloatingWindowManger.hideFloatingWindow();
|
||||
}
|
||||
|
||||
@@ -1,10 +1,9 @@
|
||||
package com.stardust.scriptdroid.ui.main.operation;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.net.Uri;
|
||||
import android.support.design.widget.Snackbar;
|
||||
|
||||
import com.squareup.haha.perflib.Main;
|
||||
import com.stardust.autojs.ScriptExecutionListener;
|
||||
import com.stardust.autojs.engine.JavaScriptEngine;
|
||||
import com.stardust.autojs.script.FileScriptSource;
|
||||
@@ -19,9 +18,7 @@ import com.stardust.scriptdroid.external.shortcut.ShortcutActivity;
|
||||
import com.stardust.scriptdroid.scripts.ScriptFile;
|
||||
import com.stardust.scriptdroid.scripts.sample.Sample;
|
||||
import com.stardust.scriptdroid.ui.edit.EditActivity;
|
||||
import com.stardust.scriptdroid.ui.main.MainActivity;
|
||||
|
||||
import java.io.IOException;
|
||||
import com.stardust.util.AssetsCache;
|
||||
|
||||
/**
|
||||
* Created by Stardust on 2017/1/23.
|
||||
@@ -77,6 +74,10 @@ public abstract class ScriptFileOperation {
|
||||
AutoJs.getInstance().getScriptEngineService().execute(new FileScriptSource(file));
|
||||
}
|
||||
|
||||
public static void run(Context context, Sample file) {
|
||||
AutoJs.getInstance().getScriptEngineService().execute(new StringScriptSource(file.name, AssetsCache.get(context.getAssets(), file.path)));
|
||||
}
|
||||
|
||||
public static void runOnEditView(ScriptSource scriptSource) {
|
||||
AutoJs.getInstance().getScriptEngineService().execute(scriptSource, SCRIPT_EXECUTION_LISTENER);
|
||||
}
|
||||
|
||||
@@ -14,6 +14,7 @@ import com.stardust.scriptdroid.scripts.sample.Sample;
|
||||
import com.stardust.scriptdroid.scripts.sample.SampleFileManager;
|
||||
import com.stardust.scriptdroid.ui.edit.ViewSampleActivity;
|
||||
import com.stardust.scriptdroid.ui.main.MainActivity;
|
||||
import com.stardust.scriptdroid.ui.main.operation.ScriptFileOperation;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
@@ -53,11 +54,15 @@ public class SampleScriptListFragment extends Fragment {
|
||||
private void showMenuDialog(final Sample sample) {
|
||||
new MaterialDialog.Builder(getActivity())
|
||||
.title(sample.name)
|
||||
.items(getString(R.string.text_copy_to_my_scripts))
|
||||
.items(getString(R.string.text_run), getString(R.string.text_copy_to_my_scripts))
|
||||
.itemsCallback(new MaterialDialog.ListCallback() {
|
||||
@Override
|
||||
public void onSelection(MaterialDialog dialog, View itemView, int position, CharSequence text) {
|
||||
copySampleToMyScripts(sample);
|
||||
if (position == 0) {
|
||||
ScriptFileOperation.run(getActivity(), sample);
|
||||
} else {
|
||||
copySampleToMyScripts(sample);
|
||||
}
|
||||
}
|
||||
|
||||
})
|
||||
@@ -66,13 +71,6 @@ public class SampleScriptListFragment extends Fragment {
|
||||
|
||||
private void copySampleToMyScripts(Sample sample) {
|
||||
MainActivity.importSample(getActivity(), sample);
|
||||
try {
|
||||
((MainActivity) getActivity()).getMyScriptListFragment().
|
||||
importFile(sample.name, getActivity().getAssets().open(sample.path));
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
Snackbar.make(mSampleScriptListRecyclerView, R.string.text_import_fail, Snackbar.LENGTH_SHORT).show();
|
||||
}
|
||||
}
|
||||
|
||||
private void viewSample(Sample sample) {
|
||||
|
||||
@@ -28,6 +28,9 @@ import com.yqritc.recyclerviewflexibledivider.HorizontalDividerItemDecoration;
|
||||
|
||||
import org.greenrobot.eventbus.Subscribe;
|
||||
|
||||
import java.util.concurrent.Executor;
|
||||
import java.util.concurrent.Executors;
|
||||
|
||||
/**
|
||||
* Created by Stardust on 2017/3/27.
|
||||
*/
|
||||
@@ -131,6 +134,7 @@ public class ScriptAndFolderListRecyclerView extends RecyclerView {
|
||||
private StorageScriptProvider mStorageScriptProvider;
|
||||
private FileProcessListener mFileProcessListener;
|
||||
private boolean mScriptFileOperationEnabled = true;
|
||||
private Executor mFileListingExecutor = Executors.newSingleThreadExecutor();
|
||||
|
||||
public ScriptAndFolderListRecyclerView(Context context) {
|
||||
super(context);
|
||||
@@ -153,7 +157,7 @@ public class ScriptAndFolderListRecyclerView extends RecyclerView {
|
||||
if (mFileProcessListener != null) {
|
||||
mFileProcessListener.onFilesListing();
|
||||
}
|
||||
new Thread(new Runnable() {
|
||||
mFileListingExecutor.execute(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
final ScriptFile[] scriptFiles = mStorageScriptProvider.getDirectoryScriptFiles(directory);
|
||||
@@ -163,10 +167,11 @@ public class ScriptAndFolderListRecyclerView extends RecyclerView {
|
||||
mAdapter.setScripts(scriptFiles);
|
||||
if (mFileProcessListener != null)
|
||||
mFileProcessListener.onFileListed();
|
||||
smoothScrollToPosition(0);
|
||||
}
|
||||
});
|
||||
}
|
||||
}).start();
|
||||
});
|
||||
}
|
||||
|
||||
public void setCurrentDirectory(final ScriptFile directory) {
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package com.stardust.scriptdroid.ui.main.task;
|
||||
|
||||
import android.content.Context;
|
||||
import android.support.annotation.IntDef;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.v7.widget.LinearLayoutManager;
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
@@ -75,19 +76,24 @@ public class TaskListRecyclerView extends ThemeColorRecyclerView implements Java
|
||||
setAdapter(mAdapter);
|
||||
}
|
||||
|
||||
private void updateEngineList() {
|
||||
public void updateEngineList() {
|
||||
mScriptEngines.clear();
|
||||
mScriptEngines.addAll(ScriptEngineService.getInstance().getEngines());
|
||||
mAdapter.notifyDataSetChanged();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onAttachedToWindow() {
|
||||
super.onAttachedToWindow();
|
||||
updateEngineList();
|
||||
mAdapter.notifyDataSetChanged();
|
||||
ScriptEngineService.getInstance().registerEngineLifecycleCallback(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onWindowVisibilityChanged(int visibility) {
|
||||
super.onWindowVisibilityChanged(visibility);
|
||||
updateEngineList();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onDetachedFromWindow() {
|
||||
super.onDetachedFromWindow();
|
||||
|
||||
@@ -2,6 +2,7 @@ package com.stardust.scriptdroid.ui.main.task;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.v4.widget.SwipeRefreshLayout;
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
@@ -56,6 +57,19 @@ public class TaskManagerFragment extends Fragment {
|
||||
}
|
||||
|
||||
});
|
||||
final SwipeRefreshLayout swipeRefreshLayout = $(R.id.swipe_refresh_layout);
|
||||
swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
|
||||
@Override
|
||||
public void onRefresh() {
|
||||
mTaskListRecyclerView.updateEngineList();
|
||||
mTaskListRecyclerView.postDelayed(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
swipeRefreshLayout.setRefreshing(false);
|
||||
}
|
||||
}, 800);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@ViewBinding.Click(R.id.close_all)
|
||||
|
||||
BIN
app/src/main/res/drawable/ic_remove_white_24dp.png
Normal file
BIN
app/src/main/res/drawable/ic_remove_white_24dp.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 90 B |
@@ -8,12 +8,12 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_margin="12dp"
|
||||
android:background="@drawable/floating_console_bg_bottom"
|
||||
android:orientation="vertical">
|
||||
|
||||
<android.support.design.widget.AppBarLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@drawable/floating_console_bg_top"
|
||||
android:theme="@style/AppTheme.AppBarOverlay">
|
||||
|
||||
<android.support.v7.widget.Toolbar
|
||||
@@ -22,13 +22,25 @@
|
||||
android:layout_height="40dp"
|
||||
android:background="?attr/colorPrimary"
|
||||
app:popupTheme="@style/AppTheme.PopupOverlay"
|
||||
app:title="@string/_app_name">
|
||||
app:title="@string/text_console">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_gravity="right">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/minimize"
|
||||
android:layout_width="40dp"
|
||||
android:layout_height="40dp"
|
||||
android:background="?selectableItemBackgroundBorderless"
|
||||
android:paddingBottom="10dp"
|
||||
android:paddingLeft="8dp"
|
||||
android:paddingRight="10dp"
|
||||
android:paddingTop="26dp"
|
||||
android:scaleType="centerInside"
|
||||
android:src="@drawable/ic_remove_white_24dp"/>
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/move_or_resize"
|
||||
android:layout_width="40dp"
|
||||
@@ -52,11 +64,11 @@
|
||||
|
||||
</android.support.design.widget.AppBarLayout>
|
||||
|
||||
<view
|
||||
<com.stardust.scriptdroid.external.floating_window.console.FloatingConsoleView
|
||||
android:id="@+id/console"
|
||||
class="com.stardust.scriptdroid.ui.console.ConsoleActivity$ConsoleView"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="@drawable/floating_console_bg_bottom"
|
||||
android:minHeight="200dp"/>
|
||||
</LinearLayout>
|
||||
|
||||
|
||||
@@ -36,10 +36,18 @@
|
||||
android:textSize="16sp"/>
|
||||
</LinearLayout>
|
||||
|
||||
<com.stardust.scriptdroid.ui.main.task.TaskListRecyclerView
|
||||
android:id="@+id/task_list"
|
||||
<android.support.v4.widget.SwipeRefreshLayout
|
||||
android:id="@+id/swipe_refresh_layout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"/>
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<com.stardust.scriptdroid.ui.main.task.TaskListRecyclerView
|
||||
android:id="@+id/task_list"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"/>
|
||||
|
||||
</android.support.v4.widget.SwipeRefreshLayout>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<TextView
|
||||
|
||||
@@ -214,6 +214,7 @@
|
||||
<string name="text_guard_mode">保护模式</string>
|
||||
<string name="summary_guard_mode">在本软件界面无法运行自动操作命令以免误触</string>
|
||||
<string name="key_guard_mode">key_guard_mode</string>
|
||||
<string name="text_console_floating_window">控制台悬浮窗</string>
|
||||
|
||||
<string-array name="record_control_keys">
|
||||
<item>无</item>
|
||||
|
||||
Reference in New Issue
Block a user