Макет данных для EPG - PullRequest
       33

Макет данных для EPG

0 голосов
/ 26 марта 2020

Я пытаюсь изменить класс 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;
    }

У кого-нибудь есть хорошие идеи для такой настройки?

...