Я пытаюсь изменить класс EPG Mocking Data из открытого исходного кода.
https://github.com/korre/android-tv-epg/blob/master/app/src/main/java/se/kmdev/tvepg/epg/misc/MockDataService.java
Класс имеет массивы каналов, телепрограмм и продолжительность программ. Теперь они насмехаются случайно, и я хочу издеваться над ними в строгом порядке. Какие шаги мне нужно сделать?
public class MockDataService {
private static Random rand = new Random();
private static List<Integer> availableEventLength = Lists.newArrayList(
//here will be a lot of EventLengths, for each of TV Programmes
1000*60*15, // 15 minutes
1000*60*30, // 30 minutes
1000*60*45, // 45 minutes
1000*60*60, // 60 minutes
1000*60*120, // 120 minutes
);
private static List<String> availableEventTitles = Lists.newArrayList(
"TV Programme 1",
"TV Programme 2",
"TV Programme 3",
"TV Programme 4",
"TV Programme 5",
"TV Programme 6",
"TV Programme 30"
);
private static List<String> availableChannelLogos = Lists.newArrayList(
"URL 1",
"URL 1",
"URL 2",
"URL 3",
"URL 350"
);
public static Map<EPGChannel, List<EPGEvent>> getMockData() {
HashMap<EPGChannel, List<EPGEvent>> result = Maps.newLinkedHashMap();
long nowMillis = System.currentTimeMillis();
for (int i=0 ; i < availableChannelLogos.size(); i++) {
EPGChannel epgChannel = new EPGChannel(availableChannelLogos.get(i),
"Channel " + (i+1), Integer.toString(i));
result.put(epgChannel, createEvents(epgChannel, nowMillis));
}
return result;
}
private static List<EPGEvent> createEvents(EPGChannel epgChannel, long nowMillis) {
List<EPGEvent> result = Lists.newArrayList();
long epgStart = nowMillis - EPG.DAYS_BACK_MILLIS;
long epgEnd = nowMillis + EPG.DAYS_FORWARD_MILLIS;
long currentTime = epgStart;
// while (currentTime <= epgEnd) {
for(int i = 0; currentTime <= epgEnd; i++){
long eventEnd = getEventEnd(currentTime);
EPGEvent epgEvent = new EPGEvent(currentTime, eventEnd, availableEventTitles.get(i));
result.add(epgEvent);
currentTime = eventEnd;
}
// long eventEnd = getEventEnd(currentTime);
// EPGEvent epgEvent = new EPGEvent(currentTime, eventEnd, availableEventTitles.get(randomBetween(0, 6)));
// result.add(epgEvent);
// currentTime = eventEnd;
// }
return result;
}
private static long getEventEnd(long eventStartMillis) {
long length = availableEventLength.get(randomBetween(0,5));
return eventStartMillis + length;
}
private static int randomBetween(int start, int end) {
return start + rand.nextInt((end - start) + 1);
}
}
Я пытался изменить некоторые циклы, например:
for (int i=0 ; i < availableChannelLogos.size(); i++) {
EPGChannel epgChannel = new EPGChannel(availableChannelLogos.get(i),
"Channel " + (i+1), Integer.toString(i));
result.put(epgChannel, createEvents(epgChannel, nowMillis));
}
и
// while (currentTime <= epgEnd) {
for(int i = 0; currentTime <= epgEnd; i++){
long eventEnd = getEventEnd(currentTime);
EPGEvent epgEvent = new EPGEvent(currentTime, eventEnd, availableEventTitles.get(i));
result.add(epgEvent);
currentTime = eventEnd;
}
// long eventEnd = getEventEnd(currentTime);
// EPGEvent epgEvent = new EPGEvent(currentTime, eventEnd, availableEventTitles.get(randomBetween(0, 6)));
// result.add(epgEvent);
// currentTime = eventEnd;
// }
но я не думал, что я на правильном пути.
И с этим методом у меня даже нет идей, как это изменить для меня :
private static long getEventEnd(long eventStartMillis) {
long length = availableEventLength.get(randomBetween(0,5));
return eventStartMillis + length;
}
У кого-нибудь есть хорошие идеи для такой настройки?