diff options
author | Nick Chalko <nchalko@google.com> | 2016-08-31 16:00:31 -0700 |
---|---|---|
committer | Nick Chalko <nchalko@google.com> | 2016-09-07 05:38:33 -0700 |
commit | 65fda1eaa94968bb55d5ded10dcb0b3f37fb05f2 (patch) | |
tree | ffc8e4c5a71c130d3782bf03e674f9d77ca77f72 /tests/common/src/com/android/tv | |
parent | ad819718f80e796cf039f96537b5c8cd127c042b (diff) | |
download | TV-65fda1eaa94968bb55d5ded10dcb0b3f37fb05f2.tar.gz |
Sync to ub-tv-dev at http://ag/1415258
Bug: 30970843
Change-Id: I0aa43094d103de28956a3d9b56a594ea46a20543
Diffstat (limited to 'tests/common/src/com/android/tv')
8 files changed, 207 insertions, 128 deletions
diff --git a/tests/common/src/com/android/tv/MockTvApplication.java b/tests/common/src/com/android/tv/MockTvApplication.java deleted file mode 100644 index 24c47a6a..00000000 --- a/tests/common/src/com/android/tv/MockTvApplication.java +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Copyright (C) 2015 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License - */ - -package com.android.tv; - -import android.test.mock.MockApplication; - -import com.android.tv.analytics.Analytics; -import com.android.tv.analytics.Tracker; -import com.android.tv.data.ChannelDataManager; -import com.android.tv.data.ProgramDataManager; -import com.android.tv.dvr.DvrDataManager; -import com.android.tv.dvr.DvrManager; -import com.android.tv.dvr.DvrSessionManager; -import com.android.tv.util.TvInputManagerHelper; - -/** - * A mock TV Application used for testing. - */ -public class MockTvApplication extends MockApplication implements ApplicationSingletons { - public final ApplicationSingletons mDelegate; - - public MockTvApplication(ApplicationSingletons delegate) { - mDelegate = delegate; - } - - @Override - public DvrManager getDvrManager() { - return mDelegate.getDvrManager(); - } - - @Override - public DvrSessionManager getDvrSessionManger() { - return mDelegate.getDvrSessionManger(); - } - - @Override - public Analytics getAnalytics() { - return mDelegate.getAnalytics(); - } - - @Override - public Tracker getTracker() { - return mDelegate.getTracker(); - } - - @Override - public ChannelDataManager getChannelDataManager() { - return mDelegate.getChannelDataManager(); - } - - @Override - public ProgramDataManager getProgramDataManager() { - return mDelegate.getProgramDataManager(); - } - - @Override - public DvrDataManager getDvrDataManager() { - return mDelegate.getDvrDataManager(); - } - - @Override - public TvInputManagerHelper getTvInputManagerHelper() { - return mDelegate.getTvInputManagerHelper(); - } - - @Override - public MainActivityWrapper getMainActivityWrapper() { - return mDelegate.getMainActivityWrapper(); - } -} diff --git a/tests/common/src/com/android/tv/input/TunerHelper.java b/tests/common/src/com/android/tv/input/TunerHelper.java new file mode 100644 index 00000000..126d5027 --- /dev/null +++ b/tests/common/src/com/android/tv/input/TunerHelper.java @@ -0,0 +1,155 @@ +/* + * Copyright (C) 2016 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.tv.input; + +import android.net.Uri; +import android.support.annotation.Nullable; +import android.util.Log; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +/** + * A class to manage fake tuners for the tune and the recording. + */ +public class TunerHelper { + private static final String TAG = "TunerHelper"; + private static final boolean DEBUG = false; + + private final List<Tuner> mTuners = new ArrayList<>(); + private final int mTunerCount; + + public TunerHelper(int tunerCount) { + mTunerCount = tunerCount; + } + + /** + * Checks whether there are available tuners for the recording. + */ + public boolean tunerAvailableForRecording() { + if (mTuners.size() < mTunerCount) { + return true; + } + for (Tuner tuner : mTuners) { + if (!tuner.recording) { + return true; + } + } + return false; + } + + /** + * Checks whether there is available tuner. + * If there's available tuner, it is assigned to the channel. + */ + public boolean tune(@Nullable Uri channelUri, boolean forRecording) { + if (channelUri == null) { + return false; + } + for (Tuner tuner : mTuners) { + // Find available tuner which is used only for the recording. + if (tuner.channelUri.equals(channelUri)) { + if (!forRecording && !tuner.tuning) { + tuner.tuning = true; + return true; + } else if (forRecording && !tuner.recording) { + tuner.recording = true; + return true; + } + } + } + if (mTuners.size() < mTunerCount) { + // Assign new tuner. + mTuners.add(new Tuner(channelUri, forRecording)); + return true; + } + Log.i(TAG, "No available tuners. tuner count: " + mTunerCount); + return false; + } + + /** + * Releases the tuner which was being used for the tune. + */ + public void stopTune(@Nullable Uri channelUri) { + if (channelUri == null) { + return; + } + Tuner candidate = null; + Iterator<Tuner> iterator = mTuners.iterator(); + while (iterator.hasNext()) { + Tuner tuner = iterator.next(); + if (tuner.channelUri.equals(channelUri) && tuner.tuning) { + if (tuner.recording) { + // A tuner which is used both for the tune and recording is the candidate. + candidate = tuner; + } else { + // Remove the tuner which is used only for the tune. + if (DEBUG) Log.d(TAG, "Removed tuner for tune"); + iterator.remove(); + return; + } + } + } + if (candidate != null) { + candidate.tuning = false; + } + } + + /** + * Releases the tuner which was being used for the recording. + */ + public void stopRecording(@Nullable Uri channelUri) { + if (channelUri == null) { + return; + } + Tuner candidate = null; + Iterator<Tuner> iterator = mTuners.iterator(); + while (iterator.hasNext()) { + Tuner tuner = iterator.next(); + if (tuner.channelUri.equals(channelUri)) { + if (tuner.recording) { + if (tuner.tuning) { + // A tuner which is used both for the tune and recording is the candidate. + candidate = tuner; + } else { + // Remove the tuner which is used only for the recording. + iterator.remove(); + return; + } + } else { + Log.w(TAG, "Tuner found for " + channelUri + ", but not used for recording"); + } + } + } + if (candidate != null) { + candidate.recording = false; + } + } + + private static class Tuner { + public final Uri channelUri; + public boolean tuning; + public boolean recording; + + public Tuner (Uri channelUri, boolean forRecording) { + this.channelUri = channelUri; + this.tuning = !forRecording; + this.recording = forRecording; + } + } +} diff --git a/tests/common/src/com/android/tv/testing/ChannelUtils.java b/tests/common/src/com/android/tv/testing/ChannelUtils.java index e09843a6..bfb766d6 100644 --- a/tests/common/src/com/android/tv/testing/ChannelUtils.java +++ b/tests/common/src/com/android/tv/testing/ChannelUtils.java @@ -23,7 +23,6 @@ import android.media.tv.TvContract; import android.media.tv.TvContract.Channels; import android.net.Uri; import android.os.AsyncTask; -import android.os.Build; import android.support.annotation.WorkerThread; import android.text.TextUtils; import android.util.Log; @@ -96,22 +95,20 @@ public class ChannelUtils { } else { values.putNull(Channels.COLUMN_VIDEO_FORMAT); } - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { - if (!TextUtils.isEmpty(channel.appLinkText)) { - values.put(Channels.COLUMN_APP_LINK_TEXT, channel.appLinkText); - } - if (channel.appLinkColor != 0) { - values.put(Channels.COLUMN_APP_LINK_COLOR, channel.appLinkColor); - } - if (!TextUtils.isEmpty(channel.appLinkPosterArtUri)) { - values.put(Channels.COLUMN_APP_LINK_POSTER_ART_URI, channel.appLinkPosterArtUri); - } - if (!TextUtils.isEmpty(channel.appLinkIconUri)) { - values.put(Channels.COLUMN_APP_LINK_ICON_URI, channel.appLinkIconUri); - } - if (!TextUtils.isEmpty(channel.appLinkIntentUri)) { - values.put(Channels.COLUMN_APP_LINK_INTENT_URI, channel.appLinkIntentUri); - } + if (!TextUtils.isEmpty(channel.appLinkText)) { + values.put(Channels.COLUMN_APP_LINK_TEXT, channel.appLinkText); + } + if (channel.appLinkColor != 0) { + values.put(Channels.COLUMN_APP_LINK_COLOR, channel.appLinkColor); + } + if (!TextUtils.isEmpty(channel.appLinkPosterArtUri)) { + values.put(Channels.COLUMN_APP_LINK_POSTER_ART_URI, channel.appLinkPosterArtUri); + } + if (!TextUtils.isEmpty(channel.appLinkIconUri)) { + values.put(Channels.COLUMN_APP_LINK_ICON_URI, channel.appLinkIconUri); + } + if (!TextUtils.isEmpty(channel.appLinkIntentUri)) { + values.put(Channels.COLUMN_APP_LINK_INTENT_URI, channel.appLinkIntentUri); } Long rowId = existingChannelsMap.get(channel.originalNetworkId); Uri uri; diff --git a/tests/common/src/com/android/tv/testing/ProgramInfo.java b/tests/common/src/com/android/tv/testing/ProgramInfo.java index 3f1f30ce..b1aaea6b 100644 --- a/tests/common/src/com/android/tv/testing/ProgramInfo.java +++ b/tests/common/src/com/android/tv/testing/ProgramInfo.java @@ -184,7 +184,7 @@ public final class ProgramInfo { */ public ProgramInfo build(Context context, int index) { if (!GEN_TITLE.equals(title) - && !GEN_EPISODE.equals(episode) + && episode == null && !GEN_POSTER.equals(posterArtUri) && durationMs != GEN_DURATION && !GEN_GENRE.equals(genre)) { @@ -193,8 +193,8 @@ public final class ProgramInfo { return new ProgramInfo( GEN_TITLE.equals(title) ? "Title(" + index + ")" : title, GEN_EPISODE.equals(episode) ? "Episode(" + index + ")" : episode, - GEN_EPISODE.equals(episode) ? (index % SEASON_MAX + 1) : seasonNumber, - GEN_EPISODE.equals(episode) ? (index % EPISODE_MAX + 1) : episodeNumber, + episode != null ? (index % SEASON_MAX + 1) : seasonNumber, + episode != null ? (index % EPISODE_MAX + 1) : episodeNumber, GEN_POSTER.equals(posterArtUri) ? Utils.getUriStringForResource(context, POSTER_ARTS_RES[index % POSTER_ARTS_RES.length]) diff --git a/tests/common/src/com/android/tv/testing/ProgramUtils.java b/tests/common/src/com/android/tv/testing/ProgramUtils.java index 227eb84a..f7f26431 100644 --- a/tests/common/src/com/android/tv/testing/ProgramUtils.java +++ b/tests/common/src/com/android/tv/testing/ProgramUtils.java @@ -66,8 +66,12 @@ public class ProgramUtils { ProgramInfo programAt = program.build(context, index++); values.put(Programs.COLUMN_TITLE, programAt.title); values.put(Programs.COLUMN_EPISODE_TITLE, programAt.episode); - values.put(Programs.COLUMN_SEASON_NUMBER, programAt.seasonNumber); - values.put(Programs.COLUMN_EPISODE_NUMBER, programAt.episodeNumber); + if (programAt.seasonNumber != 0) { + values.put(Programs.COLUMN_SEASON_NUMBER, programAt.seasonNumber); + } + if (programAt.episodeNumber != 0) { + values.put(Programs.COLUMN_EPISODE_NUMBER, programAt.episodeNumber); + } values.put(Programs.COLUMN_POSTER_ART_URI, programAt.posterArtUri); values.put(Programs.COLUMN_START_TIME_UTC_MILLIS, timeMs); values.put(Programs.COLUMN_END_TIME_UTC_MILLIS, timeMs + programAt.durationMs); diff --git a/tests/common/src/com/android/tv/testing/TvContentRatingConstants.java b/tests/common/src/com/android/tv/testing/TvContentRatingConstants.java index 71af8297..b80d56f9 100644 --- a/tests/common/src/com/android/tv/testing/TvContentRatingConstants.java +++ b/tests/common/src/com/android/tv/testing/TvContentRatingConstants.java @@ -33,7 +33,7 @@ public final class TvContentRatingConstants { public static final TvContentRating CONTENT_RATING_US_TV_Y7_US_TV_FV = TvContentRating.createRating("com.android.tv", "US_TV", "US_TV_Y7", "US_TV_FV"); - public static String STRING_US_TV_Y7_US_TV_FV = "com.android.tv/US_TV/US_TV_Y7/US_TV_FV"; + public static final String STRING_US_TV_Y7_US_TV_FV = "com.android.tv/US_TV/US_TV_Y7/US_TV_FV"; /** * A content rating object. @@ -45,7 +45,7 @@ public final class TvContentRatingConstants { public static final TvContentRating CONTENT_RATING_US_TV_MA = TvContentRating.createRating("com.android.tv", "US_TV", "US_TV_MA"); - public static String STRING_US_TV_MA = "com.android.tv/US_TV/US_TV_MA"; + public static final String STRING_US_TV_MA = "com.android.tv/US_TV/US_TV_MA"; /** * A content rating object. diff --git a/tests/common/src/com/android/tv/testing/Utils.java b/tests/common/src/com/android/tv/testing/Utils.java index 6bc4e24e..66a13466 100644 --- a/tests/common/src/com/android/tv/testing/Utils.java +++ b/tests/common/src/com/android/tv/testing/Utils.java @@ -21,12 +21,10 @@ import android.content.ContentResolver; import android.content.Context; import android.content.pm.ServiceInfo; import android.content.res.Resources; -import android.media.tv.TvContentRating; import android.media.tv.TvInputInfo; import android.media.tv.TvInputManager; import android.net.Uri; import android.os.Looper; -import android.text.TextUtils; import android.util.Log; import com.android.tv.common.TvCommonUtils; @@ -118,9 +116,7 @@ public final class Utils { Future<?> temp = MainThreadExecutor.getInstance().submit(runnable); try { temp.get(); - } catch (InterruptedException e) { - throw new RuntimeException(e); - } catch (ExecutionException e) { + } catch (InterruptedException | ExecutionException e) { throw new RuntimeException(e); } } diff --git a/tests/common/src/com/android/tv/testing/dvr/RecordingTestUtils.java b/tests/common/src/com/android/tv/testing/dvr/RecordingTestUtils.java index ab3bb043..b9def95e 100644 --- a/tests/common/src/com/android/tv/testing/dvr/RecordingTestUtils.java +++ b/tests/common/src/com/android/tv/testing/dvr/RecordingTestUtils.java @@ -16,7 +16,6 @@ package com.android.tv.testing.dvr; -import com.android.tv.dvr.DvrDataManagerInMemoryImpl; import com.android.tv.dvr.ScheduledRecording; import junit.framework.Assert; @@ -25,26 +24,38 @@ import junit.framework.Assert; * Static utils for using {@link ScheduledRecording} in tests. */ public final class RecordingTestUtils { - public static ScheduledRecording createTestRecordingWithIdAndPeriod(long id, long channelId, - long startTime, long endTime) { - return ScheduledRecording.builder(startTime, endTime) + private static final String INPUT_ID = "input_id"; + private static final int CHANNEL_ID = 273; + + public static ScheduledRecording createTestRecordingWithIdAndPeriod(long id, String inputId, + long channelId, long startTime, long endTime) { + return ScheduledRecording.builder(inputId, channelId, startTime, endTime) .setId(id) .setChannelId(channelId) .build(); } - public static ScheduledRecording createTestRecordingWithPeriod(long channelId, long startTime, - long endTime) { - return createTestRecordingWithIdAndPeriod(ScheduledRecording.ID_NOT_SET, channelId, + public static ScheduledRecording createTestRecordingWithPeriod(String inputId, + long channelId, long startTime, long endTime) { + return createTestRecordingWithIdAndPeriod(ScheduledRecording.ID_NOT_SET, inputId, channelId, startTime, endTime); } - public static ScheduledRecording addScheduledRecording( - DvrDataManagerInMemoryImpl dvrDataManager, long channelId, long startTime, - long endTime) { - ScheduledRecording recording = createTestRecordingWithPeriod(channelId, startTime, endTime); - recording = dvrDataManager.addScheduledRecordingInternal(recording); - return recording; + public static ScheduledRecording createTestRecordingWithPriorityAndPeriod(long channelId, + long priority, long startTime, long endTime) { + return ScheduledRecording.builder(INPUT_ID, CHANNEL_ID, startTime, endTime) + .setChannelId(channelId) + .setPriority(priority) + .build(); + } + + public static ScheduledRecording createTestRecordingWithIdAndPriorityAndPeriod(long id, + long channelId, long priority, long startTime, long endTime) { + return ScheduledRecording.builder(INPUT_ID, CHANNEL_ID, startTime, endTime) + .setId(id) + .setChannelId(channelId) + .setPriority(priority) + .build(); } public static ScheduledRecording normalizePriority(ScheduledRecording orig){ @@ -59,8 +70,8 @@ public final class RecordingTestUtils { Assert.assertEquals("start time", expected.getStartTimeMs(), actual.getStartTimeMs()); Assert.assertEquals("end time", expected.getEndTimeMs(), actual.getEndTimeMs()); Assert.assertEquals("state", expected.getState(), actual.getState()); - Assert.assertEquals("parent season recording", expected.getParentSeasonRecording(), - actual.getParentSeasonRecording()); + Assert.assertEquals("parent series recording", expected.getSeriesRecordingId(), + actual.getSeriesRecordingId()); } private RecordingTestUtils() { } |