UI改进;迁移至AutoJs6
This commit is contained in:
parent
7511a92db5
commit
5d1321724a
2 changed files with 240 additions and 179 deletions
305
main.js
305
main.js
|
@ -1,25 +1,157 @@
|
||||||
|
"ui";
|
||||||
|
|
||||||
storage = storages.create("mower-ng helper");
|
storage = storages.create("mower-ng helper");
|
||||||
|
|
||||||
wx = storage.get("wx", 10);
|
wx = storage.get("wx", 10);
|
||||||
wy = storage.get("wy", 10);
|
wy = storage.get("wy", 10);
|
||||||
http_proto = storage.get("http_proto", "http");
|
http_proto = storage.get("http_proto", "http");
|
||||||
host = storage.get("host", "127.0.0.1:58000");
|
host = storage.get("host", "127.0.0.1");
|
||||||
|
port = storage.get("port", "58000");
|
||||||
|
|
||||||
rawInput(
|
function save_config() {
|
||||||
"连接地址(要写http://或https://,不写token)",
|
http_proto = ui.proto.getText();
|
||||||
`${http_proto}://${host}`,
|
host = ui.host.getText();
|
||||||
(url) => {
|
port = ui.port.getText();
|
||||||
[http_proto, host] = url.split("://");
|
|
||||||
storage.put("http_proto", http_proto);
|
storage.put("http_proto", http_proto);
|
||||||
storage.put("host", host);
|
storage.put("host", host);
|
||||||
}
|
storage.put("port", port);
|
||||||
|
}
|
||||||
|
|
||||||
|
w = null;
|
||||||
|
|
||||||
|
ui.layout(
|
||||||
|
<vertical gravity="center">
|
||||||
|
<horizontal gravity="center" margin="0 0 0 6">
|
||||||
|
<img id="logo" w="64" h="64" src="file://logo.png" />
|
||||||
|
<vertical marginLeft="8">
|
||||||
|
<text text="mower-ng helper" textColor="black" textSize="22sp" />
|
||||||
|
<text text="v1.1.0" />
|
||||||
|
</vertical>
|
||||||
|
</horizontal>
|
||||||
|
<horizontal gravity="center">
|
||||||
|
<text text="proto" w="40" />
|
||||||
|
<input id="proto" text="http" w="200" />
|
||||||
|
</horizontal>
|
||||||
|
<horizontal gravity="center">
|
||||||
|
<text text="host" w="40" />
|
||||||
|
<input id="host" text="127.0.0.1" w="200" />
|
||||||
|
</horizontal>
|
||||||
|
<horizontal gravity="center">
|
||||||
|
<text text="port" w="40" />
|
||||||
|
<input id="port" text="58000" w="200" />
|
||||||
|
</horizontal>
|
||||||
|
<horizontal gravity="center" margin="0 6 0 0">
|
||||||
|
<button w="130" id="start" text="开启悬浮窗" />
|
||||||
|
<button w="130" id="stop" text="关闭悬浮窗" />
|
||||||
|
</horizontal>
|
||||||
|
</vertical>
|
||||||
);
|
);
|
||||||
|
|
||||||
w = floaty.rawWindow(
|
ui.proto.setText(http_proto);
|
||||||
<vertical id="container" bg="#000000" padding="8 6 8 6" alpha="0.6">
|
ui.host.setText(host);
|
||||||
|
ui.port.setText(port);
|
||||||
|
|
||||||
|
function toggle_ui(running) {
|
||||||
|
group_waiting = [ui.proto, ui.host, ui.port, ui.start];
|
||||||
|
group_running = [ui.stop];
|
||||||
|
if (running) {
|
||||||
|
to_enable = group_running;
|
||||||
|
to_disable = group_waiting;
|
||||||
|
} else {
|
||||||
|
to_enable = group_waiting;
|
||||||
|
to_disable = group_running;
|
||||||
|
}
|
||||||
|
for (i of to_enable) {
|
||||||
|
i.setEnabled(true);
|
||||||
|
}
|
||||||
|
for (i of to_disable) {
|
||||||
|
i.setEnabled(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
toggle_ui(false);
|
||||||
|
|
||||||
|
ws = null;
|
||||||
|
ws_proto = http_proto == "https" ? "wss" : "ws";
|
||||||
|
reg = /^[0-9].*/;
|
||||||
|
log = [];
|
||||||
|
|
||||||
|
no_time = "--:--:--";
|
||||||
|
scheduler = { idle: false, next_time: null };
|
||||||
|
|
||||||
|
client = new OkHttpClient.Builder().build();
|
||||||
|
|
||||||
|
function pad_num(n) {
|
||||||
|
return String(n).padStart(2, "0");
|
||||||
|
}
|
||||||
|
|
||||||
|
function format_time(d) {
|
||||||
|
hh = pad_num(d.getHours());
|
||||||
|
mm = pad_num(d.getMinutes());
|
||||||
|
ss = pad_num(d.getSeconds());
|
||||||
|
return `${hh}:${mm}:${ss}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
function time_diff(diff) {
|
||||||
|
if (diff < 0) {
|
||||||
|
return no_time;
|
||||||
|
}
|
||||||
|
hh = Math.floor(diff / (3600 * 1000));
|
||||||
|
diff %= 3600 * 1000;
|
||||||
|
mm = Math.floor(diff / (60 * 1000));
|
||||||
|
diff %= 60 * 1000;
|
||||||
|
ss = Math.floor(diff / 1000);
|
||||||
|
hh = pad_num(hh);
|
||||||
|
mm = pad_num(mm);
|
||||||
|
ss = pad_num(ss);
|
||||||
|
return `${hh}:${mm}:${ss}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
function update_tasks() {
|
||||||
|
if (w) {
|
||||||
|
request = new Request.Builder()
|
||||||
|
.url(`${http_proto}://${host}:${port}/scheduler`)
|
||||||
|
.build();
|
||||||
|
response = client.newCall(request).execute();
|
||||||
|
scheduler = JSON.parse(response.body().string());
|
||||||
|
setTimeout(update_tasks, 5000);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function stop_ws() {
|
||||||
|
if (ws) {
|
||||||
|
ws.cancel();
|
||||||
|
ws = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function stop_floaty() {
|
||||||
|
if (w) {
|
||||||
|
w.close();
|
||||||
|
w = null;
|
||||||
|
}
|
||||||
|
stop_ws();
|
||||||
|
clearInterval(w_timer);
|
||||||
|
toggle_ui(false);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ui.stop.click(() => {
|
||||||
|
if (w) {
|
||||||
|
stop_floaty();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
ui.start.click(() => {
|
||||||
|
toggle_ui(true);
|
||||||
|
|
||||||
|
save_config();
|
||||||
|
|
||||||
|
w = floaty.rawWindow(
|
||||||
|
<vertical id="container" bg="#000000" padding="8 6 8 6" alpha="0.8">
|
||||||
<horizontal gravity="center_vertical">
|
<horizontal gravity="center_vertical">
|
||||||
<img id="logo" w="36" h="36" src="file://./logo.png" />
|
<img id="logo" w="36" h="36" src="file://logo.png" />
|
||||||
<vertical margin="8 0 8 0">
|
<vertical margin="6 0 6 0">
|
||||||
<text
|
<text
|
||||||
textColor="#FFFFFF"
|
textColor="#FFFFFF"
|
||||||
id="next"
|
id="next"
|
||||||
|
@ -37,30 +169,30 @@ w = floaty.rawWindow(
|
||||||
w="24"
|
w="24"
|
||||||
h="24"
|
h="24"
|
||||||
id="exit"
|
id="exit"
|
||||||
marginLeft="4"
|
margin="0 0 2 0"
|
||||||
src="file://./stop.png"
|
src="file://stop.png"
|
||||||
tint="#FFFFFF"
|
tint="#FFFFFF"
|
||||||
/>
|
/>
|
||||||
</horizontal>
|
</horizontal>
|
||||||
<text
|
<text
|
||||||
id="log"
|
id="log"
|
||||||
gravity="bottom"
|
gravity="bottom"
|
||||||
h="120"
|
line="5"
|
||||||
|
maxLines="8"
|
||||||
|
ems="10"
|
||||||
textColor="#FFFFFF"
|
textColor="#FFFFFF"
|
||||||
typeface="monospace"
|
typeface="monospace"
|
||||||
ems="10"
|
|
||||||
marginTop="6"
|
marginTop="6"
|
||||||
textSize="12"
|
textSize="12"
|
||||||
visibility="gone"
|
visibility="gone"
|
||||||
/>
|
/>
|
||||||
</vertical>
|
</vertical>
|
||||||
);
|
);
|
||||||
w.setSize(-2, -2);
|
|
||||||
w.exitOnClose();
|
|
||||||
|
|
||||||
w.setPosition(wx, wy);
|
w.setSize(-2, -2);
|
||||||
|
w.setPosition(wx, wy);
|
||||||
|
|
||||||
w.container.setOnTouchListener((view, event) => {
|
w.container.setOnTouchListener((view, event) => {
|
||||||
switch (event.getAction()) {
|
switch (event.getAction()) {
|
||||||
case event.ACTION_DOWN:
|
case event.ACTION_DOWN:
|
||||||
X = event.getRawX();
|
X = event.getRawX();
|
||||||
|
@ -78,100 +210,22 @@ w.container.setOnTouchListener((view, event) => {
|
||||||
storage.put("wy", wy);
|
storage.put("wy", wy);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
w.exit.click(() => {
|
w.logo.click(() => {
|
||||||
exit();
|
|
||||||
});
|
|
||||||
|
|
||||||
w.logo.click(() => {
|
|
||||||
ui.run(() => {
|
ui.run(() => {
|
||||||
visibility = w.log.visibility == 8 ? 0 : 8;
|
visibility = ws ? 8 : 0;
|
||||||
w.log.visibility = visibility;
|
w.log.visibility = visibility;
|
||||||
w.container.alpha = w.log.visibility == 8 ? 0.6 : 0.8;
|
if (ws) {
|
||||||
});
|
stop_ws();
|
||||||
});
|
return;
|
||||||
|
|
||||||
function pad_num(n) {
|
|
||||||
return String(n).padStart(2, "0");
|
|
||||||
}
|
|
||||||
|
|
||||||
function format_time(d) {
|
|
||||||
hh = pad_num(d.getUTCHours());
|
|
||||||
mm = pad_num(d.getUTCMinutes());
|
|
||||||
ss = pad_num(d.getUTCSeconds());
|
|
||||||
return `${hh}:${mm}:${ss}`;
|
|
||||||
}
|
|
||||||
|
|
||||||
axios = require("axios");
|
|
||||||
|
|
||||||
no_time = "--:--:--";
|
|
||||||
calculate_remain = false;
|
|
||||||
|
|
||||||
function update_tasks() {
|
|
||||||
Promise.all([
|
|
||||||
axios.get(`${http_proto}://${host}/idle`),
|
|
||||||
axios.get(`${http_proto}://${host}/scheduler`),
|
|
||||||
]).then(([resp1, resp2]) => {
|
|
||||||
idle = resp1.data;
|
|
||||||
task_list = resp2.data;
|
|
||||||
if (idle == "True" && task_list.length > 0) {
|
|
||||||
task_time = new Date(task_list[0].time.substring(0, 19));
|
|
||||||
display_time = format_time(task_time);
|
|
||||||
calculate_remain = true;
|
|
||||||
} else {
|
|
||||||
display_time = no_time;
|
|
||||||
calculate_remain = false;
|
|
||||||
}
|
}
|
||||||
ui.run(() => {
|
request = new Request.Builder()
|
||||||
w.next.setText(`下次任务:${display_time}`);
|
.url(`${ws_proto}://${host}:${port}/ws`)
|
||||||
});
|
.build();
|
||||||
});
|
ws = client.newWebSocket(
|
||||||
setTimeout(update_tasks, 5000);
|
|
||||||
}
|
|
||||||
update_tasks();
|
|
||||||
|
|
||||||
function time_diff(diff) {
|
|
||||||
if (diff < 0) {
|
|
||||||
return no_time;
|
|
||||||
}
|
|
||||||
hh = Math.floor(diff / (3600 * 1000));
|
|
||||||
diff %= 3600 * 1000;
|
|
||||||
mm = Math.floor(diff / (60 * 1000));
|
|
||||||
diff %= 60 * 1000;
|
|
||||||
ss = Math.floor(diff / 1000);
|
|
||||||
hh = pad_num(hh);
|
|
||||||
mm = pad_num(mm);
|
|
||||||
ss = pad_num(ss);
|
|
||||||
return `${hh}:${mm}:${ss}`;
|
|
||||||
}
|
|
||||||
|
|
||||||
setInterval(() => {
|
|
||||||
ui.run(() => {
|
|
||||||
display_time = calculate_remain
|
|
||||||
? time_diff(
|
|
||||||
task_time.getTime() +
|
|
||||||
task_time.getTimezoneOffset() * 60000 -
|
|
||||||
Date.now()
|
|
||||||
)
|
|
||||||
: no_time;
|
|
||||||
w.remain.setText(`剩余时间:${display_time}`);
|
|
||||||
});
|
|
||||||
}, 1000);
|
|
||||||
|
|
||||||
ws_proto = http_proto == "https" ? "wss" : "ws";
|
|
||||||
log = [];
|
|
||||||
|
|
||||||
importPackage(Packages["okhttp3"]);
|
|
||||||
client = new OkHttpClient.Builder().retryOnConnectionFailure(true).build();
|
|
||||||
request = new Request.Builder().url(`${ws_proto}://${host}/ws`).build();
|
|
||||||
client.dispatcher().cancelAll();
|
|
||||||
|
|
||||||
reg = /^[0-9].*/;
|
|
||||||
|
|
||||||
client.newWebSocket(
|
|
||||||
request,
|
request,
|
||||||
new WebSocketListener({
|
new okhttp3.WebSocketListener({
|
||||||
onMessage: function (ws, data) {
|
onMessage: function (ws, data) {
|
||||||
data = JSON.parse(data);
|
data = JSON.parse(data);
|
||||||
if (data.type == "log") {
|
if (data.type == "log") {
|
||||||
|
@ -189,4 +243,35 @@ client.newWebSocket(
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
w.exit.click(() => {
|
||||||
|
stop_floaty();
|
||||||
|
});
|
||||||
|
|
||||||
|
w_timer = setInterval(() => {
|
||||||
|
if (scheduler.idle && scheduler.next_time) {
|
||||||
|
task_time = new Date(scheduler.next_time.substring(0, 19));
|
||||||
|
next_time = format_time(task_time);
|
||||||
|
remain_time = time_diff(task_time.getTime() - Date.now());
|
||||||
|
} else {
|
||||||
|
next_time = no_time;
|
||||||
|
remain_time = no_time;
|
||||||
|
}
|
||||||
|
ui.run(() => {
|
||||||
|
w.next.setText(`下次任务:${next_time}`);
|
||||||
|
w.remain.setText(`剩余时间:${remain_time}`);
|
||||||
|
});
|
||||||
|
}, 1000);
|
||||||
|
|
||||||
|
threads.start(() => {
|
||||||
|
update_tasks();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
events.on("exit", () => {
|
||||||
|
save_config();
|
||||||
|
stop_floaty();
|
||||||
|
});
|
||||||
|
|
36
project.json
36
project.json
|
@ -1,44 +1,20 @@
|
||||||
{
|
{
|
||||||
"abis": ["arm64-v8a", "armeabi-v7a", "x86", "x86_64"],
|
"abis": [],
|
||||||
"assets": [
|
"assets": [],
|
||||||
{
|
|
||||||
"form": "/storage/emulated/0/脚本/helper_script",
|
|
||||||
"to": "/project"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"buildDir": "build",
|
|
||||||
"build": {
|
"build": {
|
||||||
"build_id": null,
|
|
||||||
"build_number": 0,
|
"build_number": 0,
|
||||||
"build_time": 0
|
"build_time": 0
|
||||||
},
|
},
|
||||||
"useFeatures": [],
|
"useFeatures": [],
|
||||||
"icon": "logo.png",
|
"icon": "logo.png",
|
||||||
"ignoredDirs": ["build"],
|
|
||||||
"launchConfig": {
|
"launchConfig": {
|
||||||
"displaySplash": false,
|
"hideLogs": false
|
||||||
"hideAccessibilityServices": false,
|
|
||||||
"hideLauncher": false,
|
|
||||||
"hideLogs": true,
|
|
||||||
"stableMode": false,
|
|
||||||
"volumeUpcontrol": false,
|
|
||||||
"permissions": ["draw_overlay"],
|
|
||||||
"serviceDesc": "使脚本自动操作(点击、长按、滑动等)所需,若关闭则只能执行不涉及自动操作的脚本。",
|
|
||||||
"splashIcon": "logo.png",
|
|
||||||
"splashText": "mower-ng helper"
|
|
||||||
},
|
},
|
||||||
"libs": ["libjackpal-androidterm5.so", "libjackpal-termexec2.so"],
|
"libs": [],
|
||||||
"main": "main.js",
|
"main": "main.js",
|
||||||
"name": "mower-ng helper",
|
"name": "mower-ng helper",
|
||||||
"outputPath": "/storage/emulated/0/脚本/helper_script/build",
|
|
||||||
"packageName": "vip.zhaozuohong.mowernghelper",
|
"packageName": "vip.zhaozuohong.mowernghelper",
|
||||||
"projectDirectory": "/storage/emulated/0/脚本/helper_script",
|
|
||||||
"scripts": {},
|
"scripts": {},
|
||||||
"signingConfig": {
|
"versionCode": 2,
|
||||||
"alias": "autoxjs6",
|
"versionName": "1.1.0"
|
||||||
"keystore": "/storage/emulated/0/脚本/.keyStore/AutoX.keystore"
|
|
||||||
},
|
|
||||||
"sourcePath": "/storage/emulated/0/脚本/helper_script/main.js",
|
|
||||||
"versionCode": 1,
|
|
||||||
"versionName": "1.0.0"
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue