Lora
This commit is contained in:
parent
7af8c10ba5
commit
a1fca9a833
|
|
@ -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"
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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,6 +55,78 @@ public class MainService extends Service {
|
|||
Util.makeText(MainService.this, "MEDIA_MOUNTED path: "+path+"\nImporting 正在导入 ...").show();
|
||||
new Thread(()->{
|
||||
try {
|
||||
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");
|
||||
root.write(fOut);
|
||||
var spaces = " ".getBytes();
|
||||
for(int i=0;i<1000; i++) fOut.write(spaces);
|
||||
fOut.flush();
|
||||
fOut.getFD().sync();
|
||||
fOut.close();
|
||||
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;
|
||||
|
|
@ -57,20 +134,24 @@ public class MainService extends Service {
|
|||
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 ("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());
|
||||
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());
|
||||
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())) {
|
||||
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));
|
||||
|
|
@ -99,6 +180,7 @@ public class MainService extends Service {
|
|||
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());
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user