RoutineWatchEvaluatorTest.java revision 816a4be1a0f34f6a48877c8afd3dbbca19eac435
1816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko/* 2816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * Copyright (C) 2015 The Android Open Source Project 3816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * 4816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * Licensed under the Apache License, Version 2.0 (the "License"); 5816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * you may not use this file except in compliance with the License. 6816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * You may obtain a copy of the License at 7816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * 8816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * http://www.apache.org/licenses/LICENSE-2.0 9816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * 10816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * Unless required by applicable law or agreed to in writing, software 11816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * distributed under the License is distributed on an "AS IS" BASIS, 12816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * See the License for the specific language governing permissions and 14816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * limitations under the License. 15816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko */ 16816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 17816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkopackage com.android.tv.recommendation; 18816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 19816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport android.test.MoreAsserts; 20816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 21816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport com.android.tv.data.Program; 22816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport com.android.tv.recommendation.RoutineWatchEvaluator.ProgramTime; 23816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 24816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport java.util.Calendar; 25816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport java.util.List; 26816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport java.util.concurrent.TimeUnit; 27816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 28816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkopublic class RoutineWatchEvaluatorTest extends EvaluatorTestCase<RoutineWatchEvaluator> { 29816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 30816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko public RoutineWatchEvaluator createEvaluator() { 31816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko return new RoutineWatchEvaluator(); 32816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 33816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 34816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko public void testSplitTextToWords() { 35816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko assertSplitTextToWords(""); 36816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko assertSplitTextToWords("Google", "Google"); 37816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko assertSplitTextToWords("The Big Bang Theory", "The", "Big", "Bang", "Theory"); 38816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko assertSplitTextToWords("Hello, world!", "Hello", "world"); 39816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko assertSplitTextToWords("Adam's Rib", "Adam's", "Rib"); 40816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko assertSplitTextToWords("G.I. Joe", "G.I", "Joe"); 41816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko assertSplitTextToWords("A.I.", "A.I"); 42816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 43816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 44816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko public void testCalculateMaximumMatchedWordSequenceLength() { 45816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko assertMaximumMatchedWordSequenceLength(0, "", "Google"); 46816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko assertMaximumMatchedWordSequenceLength(2, "The Big Bang Theory", "Big Bang"); 47816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko assertMaximumMatchedWordSequenceLength(2, "The Big Bang Theory", "Theory Of Big Bang"); 48816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko assertMaximumMatchedWordSequenceLength(4, "The Big Bang Theory", "The Big Bang Theory"); 49816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko assertMaximumMatchedWordSequenceLength(1, "Modern Family", "Family Guy"); 50816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko assertMaximumMatchedWordSequenceLength(1, "The Simpsons", "The Walking Dead"); 51816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko assertMaximumMatchedWordSequenceLength(3, "Game Of Thrones 1", "Game Of Thrones 6"); 52816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko assertMaximumMatchedWordSequenceLength(0, "Dexter", "Friends"); 53816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 54816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 55816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko public void testProgramTime_createFromProgram() { 56816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko Calendar time = Calendar.getInstance(); 57816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko int todayDayOfWeek = time.get(Calendar.DAY_OF_WEEK); 58816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko // Value of DayOfWeek is between 1 and 7 (inclusive). 59816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko int tomorrowDayOfWeek = (todayDayOfWeek % 7) + 1; 60816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 61816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko // Today 00:00 - 01:00. 62816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko ProgramTime programTimeToday0000_0100 = ProgramTime.createFromProgram( 63816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko createDummyProgram(todayAtHourMin(0, 0), TimeUnit.HOURS.toMillis(1))); 64816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko assertProgramTime(todayDayOfWeek, hourMinuteToSec(0, 0), hourMinuteToSec(1, 0), 65816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko programTimeToday0000_0100); 66816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 67816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko // Today 23:30 - 24:30. 68816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko ProgramTime programTimeToday2330_2430 = ProgramTime.createFromProgram( 69816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko createDummyProgram(todayAtHourMin(23, 30), TimeUnit.HOURS.toMillis(1))); 70816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko assertProgramTime(todayDayOfWeek, hourMinuteToSec(23, 30), hourMinuteToSec(24, 30), 71816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko programTimeToday2330_2430); 72816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 73816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko // Tomorrow 00:00 - 01:00. 74816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko ProgramTime programTimeTomorrow0000_0100 = ProgramTime.createFromProgram( 75816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko createDummyProgram(tomorrowAtHourMin(0, 0), TimeUnit.HOURS.toMillis(1))); 76816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko assertProgramTime(tomorrowDayOfWeek, hourMinuteToSec(0, 0), hourMinuteToSec(1, 0), 77816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko programTimeTomorrow0000_0100); 78816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 79816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko // Tomorrow 23:30 - 24:30. 80816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko ProgramTime programTimeTomorrow2330_2430 = ProgramTime.createFromProgram( 81816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko createDummyProgram(tomorrowAtHourMin(23, 30), TimeUnit.HOURS.toMillis(1))); 82816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko assertProgramTime(tomorrowDayOfWeek, hourMinuteToSec(23, 30), hourMinuteToSec(24, 30), 83816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko programTimeTomorrow2330_2430); 84816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 85816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko // Today 18:00 - Tomorrow 12:00. 86816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko ProgramTime programTimeToday1800_3600 = ProgramTime.createFromProgram( 87816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko createDummyProgram(todayAtHourMin(18, 0), TimeUnit.HOURS.toMillis(18))); 88816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko // Maximum duration of ProgramTime is 12 hours. 89816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko // So, this program looks like it ends at Tomorrow 06:00 (30:00). 90816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko assertProgramTime(todayDayOfWeek, hourMinuteToSec(18, 0), hourMinuteToSec(30, 0), 91816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko programTimeToday1800_3600); 92816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 93816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 94816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko public void testCalculateOverlappedIntervalScore() { 95816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko // Today 21:00 - 24:00. 96816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko ProgramTime programTimeToday2100_2400 = ProgramTime.createFromProgram( 97816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko createDummyProgram(todayAtHourMin(21, 0), TimeUnit.HOURS.toMillis(3))); 98816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko // Today 22:00 - 01:00. 99816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko ProgramTime programTimeToday2200_0100 = ProgramTime.createFromProgram( 100816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko createDummyProgram(todayAtHourMin(22, 0), TimeUnit.HOURS.toMillis(3))); 101816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko // Tomorrow 00:00 - 03:00. 102816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko ProgramTime programTimeTomorrow0000_0300 = ProgramTime.createFromProgram( 103816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko createDummyProgram(tomorrowAtHourMin(0, 0), TimeUnit.HOURS.toMillis(3))); 104816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko // Tomorrow 20:00 - Tomorrow 23:00. 105816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko ProgramTime programTimeTomorrow2000_2300 = ProgramTime.createFromProgram( 106816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko createDummyProgram(tomorrowAtHourMin(20, 0), TimeUnit.HOURS.toMillis(3))); 107816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 108816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko // Check intersection time and commutative law in all cases. 109816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko int oneHourInSec = hourMinuteToSec(1, 0); 110816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko assertOverlappedIntervalScore(2 * oneHourInSec, true, 111816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko programTimeToday2100_2400, programTimeToday2200_0100); 112816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko assertOverlappedIntervalScore(0, false, 113816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko programTimeToday2100_2400, programTimeTomorrow0000_0300); 114816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko assertOverlappedIntervalScore(2 * oneHourInSec, false, 115816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko programTimeToday2100_2400, programTimeTomorrow2000_2300); 116816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko assertOverlappedIntervalScore(oneHourInSec, true, 117816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko programTimeToday2200_0100, programTimeTomorrow0000_0300); 118816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko assertOverlappedIntervalScore(oneHourInSec, false, 119816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko programTimeToday2200_0100, programTimeTomorrow2000_2300); 120816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko assertOverlappedIntervalScore(0, false, 121816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko programTimeTomorrow0000_0300, programTimeTomorrow2000_2300); 122816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 123816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 124816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko public void testGetTimeOfDayInSec() { 125816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko // Time was set as 00:00:00. So, getTimeOfDay must returns 0 (= 0 * 60 * 60 + 0 * 60 + 0). 126816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko assertEquals("TimeOfDayInSec", hourMinuteToSec(0, 0), 127816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko RoutineWatchEvaluator.getTimeOfDayInSec(todayAtHourMin(0, 0))); 128816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 129816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko // Time was set as 23:59:59. So, getTimeOfDay must returns 23 * 60 + 60 + 59 * 60 + 59. 130816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko assertEquals("TimeOfDayInSec", hourMinuteSecondToSec(23, 59, 59), 131816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko RoutineWatchEvaluator.getTimeOfDayInSec(todayAtHourMinSec(23, 59, 59))); 132816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 133816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 134816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko private void assertSplitTextToWords(String text, String... words) { 135816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko List<String> wordList = RoutineWatchEvaluator.splitTextToWords(text); 136816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko MoreAsserts.assertContentsInOrder(wordList, words); 137816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 138816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 139816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko private void assertMaximumMatchedWordSequenceLength(int expectedLength, 140816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko String text1, String text2) { 141816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko List<String> wordList1 = RoutineWatchEvaluator.splitTextToWords(text1); 142816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko List<String> wordList2 = RoutineWatchEvaluator.splitTextToWords(text2); 143816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko assertEquals("MaximumMatchedWordSequenceLength", expectedLength, 144816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko mEvaluator.calculateMaximumMatchedWordSequenceLength(wordList1, wordList2)); 145816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko assertEquals("MaximumMatchedWordSequenceLength", expectedLength, 146816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko mEvaluator.calculateMaximumMatchedWordSequenceLength(wordList2, wordList1)); 147816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 148816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 149816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko private void assertProgramTime(int expectedWeekDay, int expectedStartTimeOfDayInSec, 150816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko int expectedEndTimeOfDayInSec, ProgramTime actualProgramTime) { 151816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko assertEquals("Weekday", expectedWeekDay, actualProgramTime.weekDay); 152816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko assertEquals("StartTimeOfDayInSec", 153816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko expectedStartTimeOfDayInSec, actualProgramTime.startTimeOfDayInSec); 154816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko assertEquals("EndTimeOfDayInSec", 155816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko expectedEndTimeOfDayInSec, actualProgramTime.endTimeOfDayInSec); 156816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 157816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 158816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko private void assertOverlappedIntervalScore(int expectedSeconds, boolean overlappedOnSameDay, 159816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko ProgramTime t1, ProgramTime t2) { 160816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko double score = (double) expectedSeconds; 161816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko if (!overlappedOnSameDay) { 162816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko score *= RoutineWatchEvaluator.MULTIPLIER_FOR_UNMATCHED_DAY_OF_WEEK; 163816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 164816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko // Two tests for testing commutative law. 165816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko assertEquals("OverlappedIntervalScore", 166816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko score, mEvaluator.calculateOverlappedIntervalScore(t1, t2)); 167816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko assertEquals("OverlappedIntervalScore", 168816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko score, mEvaluator.calculateOverlappedIntervalScore(t2, t1)); 169816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 170816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 171816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko private int hourMinuteToSec(int hour, int minute) { 172816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko return hourMinuteSecondToSec(hour, minute, 0); 173816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 174816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 175816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko private int hourMinuteSecondToSec(int hour, int minute, int second) { 176816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko return hour * 60 * 60 + minute * 60 + second; 177816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 178816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 179816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko private Calendar todayAtHourMin(int hour, int minute) { 180816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko return todayAtHourMinSec(hour, minute, 0); 181816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 182816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 183816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko private Calendar todayAtHourMinSec(int hour, int minute, int second) { 184816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko Calendar time = Calendar.getInstance(); 185816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko time.set(Calendar.HOUR_OF_DAY, hour); 186816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko time.set(Calendar.MINUTE, minute); 187816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko time.set(Calendar.SECOND, second); 188816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko return time; 189816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 190816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 191816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko private Calendar tomorrowAtHourMin(int hour, int minute) { 192816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko Calendar time = todayAtHourMin(hour, minute); 193816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko time.add(Calendar.DATE, 1); 194816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko return time; 195816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 196816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 197816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko private Program createDummyProgram(Calendar startTime, long programDurationMs) { 198816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko long startTimeMs = startTime.getTimeInMillis(); 199816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 200816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko return new Program.Builder() 201816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko .setStartTimeUtcMillis(startTimeMs) 202816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko .setEndTimeUtcMillis(startTimeMs + programDurationMs) 203816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko .build(); 204816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 205816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko} 206