This commit is contained in:
Gangphon 2024-01-26 18:31:10 +08:00
parent d093537ddd
commit df9c61aa55
5 changed files with 109 additions and 10 deletions

View File

@ -0,0 +1,7 @@
package com.xixun.xixunplayer;
import android.content.Intent;
public interface IntentReceiver {
void onReceive(Intent intent);
}

View File

@ -19,6 +19,7 @@ import android.os.IBinder;
import android.os.RemoteException;
import android.os.StatFs;
import android.view.Choreographer;
import android.view.View;
import android.webkit.WebView;
import androidx.activity.ComponentActivity;
@ -59,7 +60,7 @@ public class MainActivity extends ComponentActivity implements Choreographer.Fra
public static MainActivity ins;
public Intent environIntent = new Intent();
HashSet<EleEnviron> environs = new HashSet<>();
HashSet<IntentReceiver> environs = new HashSet<>();
BackView backView;
Prog progView;
long launchMilli = System.currentTimeMillis();
@ -210,7 +211,7 @@ public class MainActivity extends ComponentActivity implements Choreographer.Fra
MainActivity.this.environIntent = intent;
for(var environ : environs) {
environ.onReceive(intent);
environ.invalidate();
((View)environ).invalidate();
}
}
}, new IntentFilter("xixun.intent.action.TEMPERATURE_HUMIDITY"));
@ -585,7 +586,7 @@ public class MainActivity extends ComponentActivity implements Choreographer.Fra
Util.printStackTrace(e);
} finally {
O.close(in, out);
Util.println("conn end");
Util.println("conn end\n\n");
}
}
} catch (Throwable e) {

View File

@ -39,11 +39,11 @@ public class Prog extends AbsLayout {
partObj = _program;
} catch (Throwable ignored){}
}
var width = partObj.intg("width");
var height = partObj.intg("height");
AbsLayout box = this;
if(partLengths!=null && partLengths.size() > 1) {
box = new AbsLayout(context);
var width = partObj.intg("width");
var height = partObj.intg("height");
addView(box, new AbsLayout.LayoutParams(0, 0, width, height));
var mask = new View(context);
mask.setBackgroundColor(0xff000000);
@ -68,7 +68,7 @@ public class Prog extends AbsLayout {
JSList<JSMap> layers = _program.jslist("layers");
if(layers==null || layers.isEmpty()) continue;
var page = new Page();
page.repeatTimes = pageMap.intg("repeatTimes");
page.repeatTimes = pageMap.intg("repeatTimes", 1);
page.parse(pageMap.jslist("schedules"));
HashMap<String, EleVideo> videoMap = new HashMap<>();
for(int ll=layers.size()-1; ll>=0; ll--) {
@ -90,7 +90,7 @@ public class Prog extends AbsLayout {
if(timeSpan==0) continue;
var geo = new AbsLayout.LayoutParams(source.intg("left")+bdWidth, source.intg("top")+bdWidth, source.intg("width")-bdWidth-bdWidth, source.intg("height")-bdWidth-bdWidth);
boolean notAudio = ! src.type.equals("Audio");
if((geo.width<=0 || geo.height<=0) && notAudio) continue;
if((geo.width<=0 || geo.height<=0 || (geo.y>=height && height>0) || (geo.x>=width && width>0)) && notAudio) continue;
src.startTime = source.intg("playTime")*1000;
if(bdStart > src.startTime) bdStart = src.startTime;
src.endTime = src.startTime + timeSpan;
@ -228,7 +228,8 @@ public class Prog extends AbsLayout {
}
else if(src.type.equals("Timer")) src.view = new SrcTimer(context, source);
else if(src.type.equals("Countdown")) src.view = new SrcCountdown(context, source);
else if(src.type.startsWith("Environ")) src.view = new EleEnviron(context, source);
else if(src.type.startsWith("Environ")) src.view = new SrcEnviron(context, source);
else if(src.type.startsWith("MultiLineText")) src.view = new SrcSensor(context, source);
else continue;
if(src.view==null) continue;
src.view.setVisibility(GONE);

View File

@ -17,7 +17,7 @@ import gnph.util.JSList;
import gnph.util.JSMap;
import gnph.util.NumFmts;
public class EleEnviron extends View implements Choreographer.FrameCallback {
public class SrcEnviron extends View implements Choreographer.FrameCallback, IntentReceiver {
class Item {
String key;
Bitmap label;
@ -39,7 +39,7 @@ public class EleEnviron extends View implements Choreographer.FrameCallback {
int interval, cur, end, step;
boolean isScroll, isFirst = true;
public EleEnviron(Context context, JSMap json) {
public SrcEnviron(Context context, JSMap json) {
super(context);
act = (MainActivity) context;
alignType = json.intg("alignType");

View File

@ -0,0 +1,90 @@
package com.xixun.xixunplayer;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.view.Choreographer;
import android.view.View;
import android.webkit.WebView;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.HashMap;
import gnph.util.JSList;
import gnph.util.JSMap;
import gnph.util.NumFmts;
public class SrcSensor extends WebView implements IntentReceiver {
static String directs[] = {"NNE", "NE", "ENE", "E", "ESE", "SE", "SSE", "S", "SSW", "SW", "WSW", "W", "WNW", "NW", "NNW", "N"};
MainActivity act;
String html, lineHeight, prefix;
int interval, cur, end, step;
boolean isFirst = true;
public SrcSensor(Context context, JSMap json) {
super(context);
act = (MainActivity) context;
setBackgroundColor(Color.TRANSPARENT);
setVerticalScrollBarEnabled(false);
setHorizontalScrollBarEnabled(false);
setInitialScale(100);
html = json.stnn("html");
lineHeight = json.str("lineHeight");
prefix = "<body style=\"color:#fff;margin:0;padding:0;";
if(lineHeight!=null) prefix += "line-height:"+lineHeight+";";
prefix += "\">";
}
public static Method method;
static {
try {
method = Intent.class.getMethod("getExtra", String.class, Object.class);
} catch (Exception e) {
e.printStackTrace();
}
}
public void onReceive(Intent intent) {
try {
// for(var item : items) {
// item.nums.clear();
// if(item.unit==null) {
// var num = intent.getIntExtra(item.key, -1);
// if(num>=0 && num<=15) item.nums.add(imgMap.get(directs[num]));
// else {
// var img = imgMap.get("-");
// item.nums.add(img);
// item.nums.add(img);
// }
// } else {
// var num = ((Number) method.invoke(intent, item.key, -999)).doubleValue();
// var str = num==-999 || (num==-1 && ! item.key.endsWith("rature")) ? "--" : NumFmts.zz().format(num);
// for(int cc=0; cc<str.length(); cc++) item.nums.add(imgMap.get(str.substring(cc, cc+1)));
// }
// }
var htm = html;
loadDataWithBaseURL(null, prefix+htm+"</body>", "text/html", "UTF-8", null);
} catch (Exception e) {
Util.printStackTrace(e);
}
}
@Override
public void onVisibilityAggregated(boolean isVisible) {
super.onVisibilityAggregated(isVisible);
if(isVisible) {
if(isFirst) {
isFirst = false;
onReceive(act.environIntent);
act.environs.add(this);
}
} else {
act.environs.remove(this);
isFirst = true;
}
}
}