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 pages = task.jslist("items"); for(var pageMap : pages) { var _program = pageMap.jsmap("_program"); JSList 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 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 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 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; isetGeometry(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; isetGeometry(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 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.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)); } } }