This commit is contained in:
Gangphon 2026-01-13 15:29:09 +08:00
parent 7af8c10ba5
commit a1fca9a833
4 changed files with 132 additions and 48 deletions

View File

@ -11,7 +11,7 @@ android {
minSdk 21
targetSdk 34
versionCode 1
versionName "2.2.18-Y"
versionName "2.2.18-Y-lora"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}

View File

@ -638,10 +638,12 @@ public class MainActivity extends Activity implements Choreographer.FrameCallbac
}
if(insView!=null || progView!=null) {
state = 5;
Util.println(" Init Sync");
var ms = System.currentTimeMillis();
if(demand==0 || progView==null) syncProg(ms, 0);
else {
if(demand==0 || progView==null) {
Util.println(" Init Sync");
syncProg(ms, 0);
} else {
Util.println(" demand "+demand);
avas.clear();
var page = progView.pages.get(demand-1);
avas.add(page);

View File

@ -11,10 +11,15 @@ import net.lingala.zip4j.ZipFile;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import gnph.util.IOs;
import gnph.util.JSList;
import gnph.util.JSMap;
public class MainService extends Service {
@ -50,55 +55,132 @@ public class MainService extends Service {
Util.makeText(MainService.this, "MEDIA_MOUNTED path: "+path+"\nImporting 正在导入 ...").show();
new Thread(()->{
try {
var zip = new ZipFile(path+"/program.zip");
if(zip.isEncrypted()) zip.setPassword(pass);
long size = 0;
ByteArrayOutputStream jsonOut = null;
var headers = zip.getFileHeaders();
for(var header : headers) {
size += header.getUncompressedSize();
if("program".equals(header.getFileName())) IOs.writeClose(jsonOut = new ByteArrayOutputStream(), zip.getInputStream(header));
}
if(jsonOut==null) {
Util.println("No program File");
if(acti!=null) acti.runOnUiThread(() -> Util.makeText(acti, "No program File").show());
return;
}
if(size==0) {
Util.println("zip size is 0");
if(acti!=null) acti.runOnUiThread(() -> Util.makeText(acti, "zip size is 0").show());
return;
}
Util.deleteFiles(size, null);
for(var header : headers) if(! "program".equals(header.getFileName())) {
Util.println(" name: " + header.getFileName());
var fOut = new FileOutputStream(Util.programDir + "/" + header.getFileName());
IOs.writeCloseIn(fOut, zip.getInputStream(header));
fOut.flush();
fOut.getFD().sync();
fOut.close();
}
var json = jsonOut.toByteArray();
Util.println("Import Succeed");
if(acti!=null) acti.runOnUiThread(() -> {
Util.makeText(acti, "Import Succeed 导入成功").show();
acti.initProg(json);
});
else {
if(Util.custom == Util.Custom.LoRa) {
var id = Util.getCardId();
var dir = new File(path+"/"+id);
if(! dir.isDirectory()) {
Util.println("MEDIA_MOUNTED can't find "+id);
if(acti!=null) acti.runOnUiThread(() -> Util.makeText(acti, "MEDIA_MOUNTED can't find "+id).show());
return;
}
long size = 0;
var files = dir.listFiles();
Arrays.sort(files, (f1, f2) -> f1.getName().compareTo(f2.getName()));
for(var file : files) if(! file.getName().endsWith("json")) {
size += file.length();
}
if(size==0) {
Util.println("files' size is 0");
if(acti!=null) acti.runOnUiThread(() -> Util.makeText(acti, "files' size is 0").show());
return;
}
var items = new JSList<JSMap>();
var root = new JSMap(
"_type", "PlayXixunTask",
"Demand", 1,
"task", new JSMap(
"name", id,
"width", Util.screenWidth,
"height", Util.screenHeight,
"items", items
)
);
Util.deleteFiles(size, null);
for(var file : files) if(! file.getName().endsWith("json")) {
var name = file.getName();
Util.println(" name: " + name);
var fOut = new FileOutputStream(Util.programDir + "/" + name);
IOs.writeCloseIn(fOut, new FileInputStream(file));
fOut.flush();
fOut.getFD().sync();
fOut.close();
items.add(new JSMap(
"_program", new JSMap(
"name", name,
"layers", new JSList<>(new JSMap(
"sources", new JSList<>(new JSMap(
"_type", "Video",
"id", name,
"md5", name,
"name", name,
"timeSpan", 43200,
"left", 0,
"top", 0,
"width", Util.screenWidth,
"height", Util.screenHeight,
"playTime", 0
))
))
)
));
}
var fOut = new FileOutputStream(Util.programDir + "/program");
fOut.write(json);
root.write(fOut);
var spaces = " ".getBytes();
for(int i=0;i<1000; i++) fOut.write(spaces);
fOut.flush();
fOut.getFD().sync();
fOut.close();
var inten = new Intent(MainService.this, MainActivity.class);
inten.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(inten);
Util.println("Import Succeed");
if(acti!=null) acti.runOnUiThread(() -> {
Util.makeText(acti, "Import Succeed 导入成功").show();
acti.initProg();
});
} else {
var zip = new ZipFile(path + "/program.zip");
if(zip.isEncrypted()) zip.setPassword(pass);
long size = 0;
ByteArrayOutputStream jsonOut = null;
var headers = zip.getFileHeaders();
for(var header : headers) {
size += header.getUncompressedSize();
if ("program".equals(header.getFileName()))
IOs.writeClose(jsonOut = new ByteArrayOutputStream(), zip.getInputStream(header));
}
if(jsonOut == null) {
Util.println("No program File");
if (acti != null)
acti.runOnUiThread(() -> Util.makeText(acti, "No program File").show());
return;
}
if(size == 0) {
Util.println("zip size is 0");
if (acti != null)
acti.runOnUiThread(() -> Util.makeText(acti, "zip size is 0").show());
return;
}
Util.deleteFiles(size, null);
for(var header : headers)
if (!"program".equals(header.getFileName())) {
Util.println(" name: " + header.getFileName());
var fOut = new FileOutputStream(Util.programDir + "/" + header.getFileName());
IOs.writeCloseIn(fOut, zip.getInputStream(header));
fOut.flush();
fOut.getFD().sync();
fOut.close();
}
var json = jsonOut.toByteArray();
Util.println("Import Succeed");
if(acti != null) acti.runOnUiThread(() -> {
Util.makeText(acti, "Import Succeed 导入成功").show();
acti.initProg(json);
});
else {
var fOut = new FileOutputStream(Util.programDir + "/program");
fOut.write(json);
var spaces = " ".getBytes();
for (int i = 0; i < 1000; i++) fOut.write(spaces);
fOut.flush();
fOut.getFD().sync();
fOut.close();
var inten = new Intent(MainService.this, MainActivity.class);
inten.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(inten);
}
var inten = new Intent("com.xixun.AccessibilityService");
inten.putExtra("newProgram", "USB");
sendBroadcast(inten);
}
var inten = new Intent("com.xixun.AccessibilityService");
inten.putExtra("newProgram", "USB");
sendBroadcast(inten);
} catch (Exception e) {
Util.printStackTrace(e);
if(acti!=null) acti.runOnUiThread(() -> Util.makeText(acti, Util.toStr(e)).show());

View File

@ -35,8 +35,8 @@ import wseemann.media.FFmpegMediaMetadataRetriever;
public class Util {
enum Custom{Normal, Yishi};
public static final Custom custom = Custom.Normal;
enum Custom{Normal, Yishi, LoRa};
public static final Custom custom = Custom.LoRa;
public static JSMap cfg;
public static SQLiteOpenHelper openHelper;
public static String serverURL;