private static ArrayList<TimelineEntry> getParTimeline( ElementParallelTimeContainer par, double offset, double maxOffset) { ArrayList<TimelineEntry> timeline = new ArrayList<>(); // Set my begin at first TimeList myBeginList = par.getBegin(); /* * Begin list only contain 1 begin time which has been resolved. * @see com.android.mms.dom.smil.ElementParallelTimeContainerImpl#getBegin() */ Time begin = myBeginList.item(0); double beginOffset = begin.getResolvedOffset() + offset; if (beginOffset > maxOffset) { // This element can't be started. return timeline; } TimelineEntry myBegin = new TimelineEntry(beginOffset, par, TimelineEntry.ACTION_BEGIN); timeline.add(myBegin); TimeList myEndList = par.getEnd(); /* * End list only contain 1 end time which has been resolved. * @see com.android.mms.dom.smil.ElementParallelTimeContainerImpl#getEnd() */ Time end = myEndList.item(0); double endOffset = end.getResolvedOffset() + offset; if (endOffset > maxOffset) { endOffset = maxOffset; } TimelineEntry myEnd = new TimelineEntry(endOffset, par, TimelineEntry.ACTION_END); maxOffset = endOffset; NodeList children = par.getTimeChildren(); for (int i = 0; i < children.getLength(); ++i) { ElementTime child = (ElementTime) children.item(i); ArrayList<TimelineEntry> childTimeline = getTimeline(child, offset, maxOffset); timeline.addAll(childTimeline); } Collections.sort(timeline, sTimelineEntryComparator); // Add end-event to timeline for all active children NodeList activeChildrenAtEnd = par.getActiveChildrenAt( (float) (endOffset - offset) * 1000); for (int i = 0; i < activeChildrenAtEnd.getLength(); ++i) { timeline.add(new TimelineEntry(endOffset, (ElementTime) activeChildrenAtEnd.item(i), TimelineEntry.ACTION_END)); } // Set my end at last timeline.add(myEnd); return timeline; }
private static ArrayList<TimelineEntry> getParTimeline( ElementParallelTimeContainer par, double offset, double maxOffset) { ArrayList<TimelineEntry> timeline = new ArrayList<TimelineEntry>(); // Set my begin at first TimeList myBeginList = par.getBegin(); /* * Begin list only contain 1 begin time which has been resolved. * @see com.android.mms.dom.smil.ElementParallelTimeContainerImpl#getBegin() */ Time begin = myBeginList.item(0); double beginOffset = begin.getResolvedOffset() + offset; if (beginOffset > maxOffset) { // This element can't be started. return timeline; } TimelineEntry myBegin = new TimelineEntry(beginOffset, par, TimelineEntry.ACTION_BEGIN); timeline.add(myBegin); TimeList myEndList = par.getEnd(); /* * End list only contain 1 end time which has been resolved. * @see com.android.mms.dom.smil.ElementParallelTimeContainerImpl#getEnd() */ Time end = myEndList.item(0); double endOffset = end.getResolvedOffset() + offset; if (endOffset > maxOffset) { endOffset = maxOffset; } TimelineEntry myEnd = new TimelineEntry(endOffset, par, TimelineEntry.ACTION_END); maxOffset = endOffset; NodeList children = par.getTimeChildren(); for (int i = 0; i < children.getLength(); ++i) { ElementTime child = (ElementTime) children.item(i); ArrayList<TimelineEntry> childTimeline = getTimeline(child, offset, maxOffset); timeline.addAll(childTimeline); } Collections.sort(timeline, sTimelineEntryComparator); // Add end-event to timeline for all active children NodeList activeChildrenAtEnd = par.getActiveChildrenAt( (float) (endOffset - offset) * 1000); for (int i = 0; i < activeChildrenAtEnd.getLength(); ++i) { timeline.add(new TimelineEntry(endOffset, (ElementTime) activeChildrenAtEnd.item(i), TimelineEntry.ACTION_END)); } // Set my end at last timeline.add(myEnd); return timeline; }