167 lines
9.1 KiB
Java
167 lines
9.1 KiB
Java
![]() |
package com.xixun.xixunplayer;
|
||
|
|
||
|
import android.content.Context;
|
||
|
import android.net.Uri;
|
||
|
import android.webkit.WebView;
|
||
|
import android.webkit.WebViewClient;
|
||
|
import android.widget.AbsoluteLayout;
|
||
|
import android.widget.ImageView;
|
||
|
|
||
|
import java.io.File;
|
||
|
|
||
|
import gnph.util.JSList;
|
||
|
import gnph.util.JSMap;
|
||
|
import pl.droidsonroids.gif.GifImageView;
|
||
|
|
||
|
public class ProgView extends AbsoluteLayout {
|
||
|
|
||
|
public ProgView(JSMap task, int width, int height, Context context) {
|
||
|
super(context);
|
||
|
JSList<JSMap> pages = task.jslist("items");
|
||
|
for(var pageMap : pages) {
|
||
|
var _program = pageMap.jsmap("_program");
|
||
|
JSList<JSMap> layers = _program.jslist("layers");
|
||
|
if(layers.isEmpty()) continue;
|
||
|
var splitWidths = _program.jslist("splitWidths");
|
||
|
var page = new Page(context);
|
||
|
page.repeatTimes = pageMap.intg("repeatTimes");
|
||
|
page.parse(pageMap.jslist("schedules"));
|
||
|
for(int ll=layers.size()-1; ll>=0; ll--) {
|
||
|
var layer = new Page.Layer();
|
||
|
layer.repeat = layers.get(ll).bool("repeat");
|
||
|
JSList<JSMap> sources = layers.get(ll).jslist("sources");
|
||
|
var border = layers.get(ll).jsmap("border");
|
||
|
EleBorder bdEle = null;
|
||
|
int bdWidth = 0, bdStart = 0xffff, bdEnd = 0;
|
||
|
if(border!=null) {
|
||
|
bdEle = new EleBorder(Util.programDir+"/"+border.stnn("img"), border.stnn("eff"), border.intg("speed"), context);
|
||
|
bdWidth = bdEle.img.getHeight();
|
||
|
}
|
||
|
var ele = new Page.EleBase();
|
||
|
int x, y, w, h;
|
||
|
for(var source : sources) {
|
||
|
ele.type = source.stnn("_type");
|
||
|
if(ele.type.isEmpty()) continue;
|
||
|
var timeSpan = source.intg("timeSpan")*1000;
|
||
|
if(timeSpan==0) continue;
|
||
|
x = source.intg("left")+bdWidth;
|
||
|
y = source.intg("top")+bdWidth;
|
||
|
w = source.intg("width")-bdWidth-bdWidth;
|
||
|
h = source.intg("height")-bdWidth-bdWidth;
|
||
|
boolean notAudio = ! ele.type.equals("Audio");
|
||
|
if((w<=0 || h<=0) && notAudio) continue;
|
||
|
ele.startTime = source.intg("playTime")*1000;
|
||
|
if(bdStart > ele.startTime) bdStart = ele.startTime;
|
||
|
ele.endTime = ele.startTime + timeSpan;
|
||
|
if(bdEnd < ele.endTime) bdEnd = ele.endTime;
|
||
|
if(layer.dur < ele.endTime) layer.dur = ele.endTime;
|
||
|
if(page.dur < ele.endTime && notAudio) page.dur = ele.endTime;
|
||
|
ele.id = source.stnn("id");
|
||
|
ele.view = null;
|
||
|
if(ele.type.equals("Image")) {
|
||
|
ImageView imgView = source.stnn("fileExt").equalsIgnoreCase("gif") ? new GifImageView(context) : new ImageView(context);
|
||
|
imgView.setImageURI(Uri.fromFile(new File(Util.programDir+"/"+ele.id)));
|
||
|
imgView.setScaleType(ImageView.ScaleType.FIT_XY);
|
||
|
ele.view = imgView;
|
||
|
} else if(ele.type.equals("MultiPng")) {
|
||
|
JSList<JSMap> imgs = source.jslist("arrayPics");
|
||
|
if(imgs.isEmpty()) continue;
|
||
|
if(imgs.size()==1 && imgs.get(0).intg("picDuration")==0) ele.view = new EleScroll(Util.programDir+"/", imgs.get(0), context);
|
||
|
else ele.view = new EleFlip(Util.programDir+"/", imgs, context);
|
||
|
} else if(ele.type.equals("SplitText")) {
|
||
|
// JSList<JSMap> imgs = source.jslist("arrayPics");
|
||
|
// if(imgs.isEmpty()) continue;
|
||
|
// ele.wgt = new View(context);
|
||
|
// page.addView(ele.wgt, new AbsoluteLayout.LayoutParams(width, height, 0, 0));
|
||
|
// var pheight = _program.intg("height");
|
||
|
// if(imgs.size()==1 && imgs.get(0).intg("picDuration")==0) {
|
||
|
// var wgt = new EleScroll(ele.wgt, dir+"/", imgs.get(0), context);
|
||
|
// wgt->setGeometry(ele.x, ele.y, ele.w, ele.h);
|
||
|
// for(int i=1; i<splitWidths.size(); i++) {
|
||
|
// ele.x -= splitWidths[i-1].toInt();
|
||
|
// ele.y += height;
|
||
|
// auto split = new EleSplitScroll(ele.wgt, wgt);
|
||
|
// split->setGeometry(ele.x, ele.y, splitWidths[i].toInt()-ele.x, ele.h);
|
||
|
// wgt->splits.append(split);
|
||
|
// }
|
||
|
// } else {
|
||
|
// auto wgt = new EleFlip(dir+"/", imgs, ele.wgt);
|
||
|
// wgt->setGeometry(ele.x, ele.y, ele.w, ele.h);
|
||
|
// for(int i=1; i<splitWidths.size(); i++) {
|
||
|
// ele.x -= splitWidths[i-1].toInt();
|
||
|
// ele.y += height;
|
||
|
// auto split = new EleSplitPng(wgt, ele.wgt);
|
||
|
// split->setGeometry(ele.x, ele.y, splitWidths[i].toInt()-ele.x, ele.h);
|
||
|
// wgt->splits.append(split);
|
||
|
// }
|
||
|
// }
|
||
|
// ele.w = 0;
|
||
|
} else if(ele.type.equals("DigitalClockNew")) ele.view = new EleDigiClock(Util.programDir+"/", source, context);
|
||
|
else if(ele.type.equals("AnalogClock")) ele.view = new EleAnaClock(w, h, Util.programDir+"/"+ele.id, source, context);
|
||
|
else if(ele.type.equals("Video")) {
|
||
|
page.hasVideo = true;
|
||
|
var videoView = new EleVideo(Util.programDir + "/" + ele.id, context);
|
||
|
ele.view = videoView;
|
||
|
var vol = source.intg("vol", 100);
|
||
|
if (vol < 100) videoView.vol = vol / 100.0f;
|
||
|
} else if(ele.type.equals("Audio")) {
|
||
|
var videoView = new EleVideo(Util.programDir+"/"+ele.id, context);
|
||
|
ele.view = videoView;
|
||
|
var vol = source.intg("vol", 100);
|
||
|
if(vol<100) videoView.vol = vol/100.0f;
|
||
|
} else if(ele.type.equals("WebURL")) {
|
||
|
var webView = new WebView(context);
|
||
|
webView.setWebViewClient(new WebViewClient() {
|
||
|
@Override
|
||
|
public boolean shouldOverrideUrlLoading(WebView view, String url) {
|
||
|
return false;
|
||
|
}
|
||
|
});
|
||
|
webView.loadUrl(source.stnn("url"));
|
||
|
ele.view = webView;
|
||
|
}
|
||
|
else if(ele.type.equals("Timer")) ele.view = new EleTimer(Util.programDir+"/", source, context);
|
||
|
else if(ele.type.equals("EnvironmentalMonitoring")) ele.view = new EleEnviron(Util.programDir+"/", source, context);
|
||
|
else continue;
|
||
|
if(ele.view==null) continue;
|
||
|
if(w>0) page.addView(ele.view, new AbsoluteLayout.LayoutParams(w, h, x, y));
|
||
|
layer.eles.add(ele);
|
||
|
ele = new Page.EleBase();
|
||
|
}
|
||
|
if(bdEle!=null && ! sources.isEmpty()) {
|
||
|
JSList<Long> geometry = border.jslist("geometry");
|
||
|
x = geometry.get(0).intValue();
|
||
|
y = geometry.get(1).intValue();
|
||
|
w = geometry.get(2).intValue();
|
||
|
h = geometry.get(3).intValue();
|
||
|
ele.startTime = bdStart;
|
||
|
ele.endTime = bdEnd;
|
||
|
ele.view = bdEle;
|
||
|
page.addView(ele.view, new AbsoluteLayout.LayoutParams(w, h, x, y));
|
||
|
layer.eles.add(ele);
|
||
|
}
|
||
|
if(! layer.eles.isEmpty()) page.layers.add(layer);
|
||
|
}
|
||
|
if(page.dur==0) continue;
|
||
|
for_layer: for(int ll=0; ll<page.layers.size(); ll++) {
|
||
|
var layer = page.layers.get(ll);
|
||
|
for(int ee=0; ee<layer.eles.size(); ee++) {
|
||
|
var ele = layer.eles.get(ee);
|
||
|
if(ele.startTime >= page.dur) {
|
||
|
if(layer.eles.size() > 1) {
|
||
|
layer.eles.remove(ee--);
|
||
|
continue;
|
||
|
} else {
|
||
|
page.layers.remove(ll--);
|
||
|
continue for_layer;
|
||
|
}
|
||
|
} else if(ele.endTime > page.dur) ele.endTime = page.dur;
|
||
|
ele.isShort = ele.startTime > 0 || ele.endTime < page.dur;
|
||
|
}
|
||
|
if(layer.dur > page.dur) layer.dur = page.dur;
|
||
|
}
|
||
|
page.setVisibility(GONE);
|
||
|
addView(page, new AbsoluteLayout.LayoutParams(width, height, 0, 0));
|
||
|
}
|
||
|
}
|
||
|
}
|