Loading media/java/android/media/tv/TvContract.java +56 −54 Original line number Diff line number Diff line Loading @@ -53,13 +53,25 @@ public final class TvContract { private static final String PATH_CHANNEL = "channel"; private static final String PATH_PROGRAM = "program"; private static final String PATH_INPUT = "input"; private static final String PATH_PASSTHROUGH = "passthrough"; /** * An optional query, update or delete URI parameter that allows the caller to specify TV input * ID to filter channels. * @hide */ public static final String PARAM_INPUT = "input"; /** * An optional query, update or delete URI parameter that allows the caller to specify channel * ID to filter programs. * @hide */ public static final String PARAM_CHANNEL = "channel"; /** * An optional query, update or delete URI parameter that allows the caller to specify start * time (in milliseconds since the epoch) to filter programs. * * @hide */ public static final String PARAM_START_TIME = "start_time"; Loading @@ -67,7 +79,6 @@ public final class TvContract { /** * An optional query, update or delete URI parameter that allows the caller to specify end time * (in milliseconds since the epoch) to filter programs. * * @hide */ public static final String PARAM_END_TIME = "end_time"; Loading @@ -76,7 +87,6 @@ public final class TvContract { * A query, update or delete URI parameter that allows the caller to operate on all or * browsable-only channels. If set to "true", the rows that contain non-browsable channels are * not affected. * * @hide */ public static final String PARAM_BROWSABLE_ONLY = "browsable_only"; Loading @@ -84,7 +94,6 @@ public final class TvContract { /** * A optional query, update or delete URI parameter that allows the caller to specify canonical * genre to filter programs. * * @hide */ public static final String PARAM_CANONICAL_GENRE = "canonical_genre"; Loading Loading @@ -116,17 +125,7 @@ public final class TvContract { */ public static final Uri buildChannelUriForPassthroughTvInput(String inputId) { return new Uri.Builder().scheme(ContentResolver.SCHEME_CONTENT).authority(AUTHORITY) .appendPath(PATH_INPUT).appendPath(inputId).appendPath(PATH_CHANNEL) .appendPath(PATH_PASSTHROUGH).build(); } /** * Returns true, if {@code channelUri} is a channel URI for a passthrough TV input. * @hide */ @SystemApi public static final boolean isChannelUriForPassthroughTvInput(Uri channelUri) { return channelUri.toString().endsWith(PATH_PASSTHROUGH); .appendPath(PATH_PASSTHROUGH).appendPath(inputId).build(); } /** Loading @@ -144,7 +143,7 @@ public final class TvContract { * @param channelUri The URI of the channel whose logo is pointed to. */ public static final Uri buildChannelLogoUri(Uri channelUri) { if (!PATH_CHANNEL.equals(channelUri.getPathSegments().get(0))) { if (!isChannelUriForTunerTvInput(channelUri)) { throw new IllegalArgumentException("Not a channel: " + channelUri); } return Uri.withAppendedPath(channelUri, Channels.Logo.CONTENT_DIRECTORY); Loading @@ -169,8 +168,8 @@ public final class TvContract { * @hide */ public static final Uri buildChannelsUriForInput(String inputId, boolean browsableOnly) { return new Uri.Builder().scheme(ContentResolver.SCHEME_CONTENT).authority(AUTHORITY) .appendPath(PATH_INPUT).appendPath(inputId).appendPath(PATH_CHANNEL) return Channels.CONTENT_URI.buildUpon() .appendQueryParameter(PARAM_INPUT, inputId) .appendQueryParameter(PARAM_BROWSABLE_ONLY, String.valueOf(browsableOnly)).build(); } Loading @@ -194,8 +193,7 @@ public final class TvContract { Uri uri; if (inputId == null) { uri = new Uri.Builder().scheme(ContentResolver.SCHEME_CONTENT).authority(AUTHORITY) .appendPath(PATH_CHANNEL).build(); uri = Channels.CONTENT_URI; } else { uri = buildChannelsUriForInput(inputId, browsableOnly); } Loading @@ -217,9 +215,8 @@ public final class TvContract { * @param channelId The ID of the channel to return programs for. */ public static final Uri buildProgramsUriForChannel(long channelId) { return new Uri.Builder().scheme(ContentResolver.SCHEME_CONTENT).authority(AUTHORITY) .appendPath(PATH_CHANNEL).appendPath(String.valueOf(channelId)) .appendPath(PATH_PROGRAM).build(); return Programs.CONTENT_URI.buildUpon() .appendQueryParameter(PARAM_CHANNEL, String.valueOf(channelId)).build(); } /** Loading @@ -228,7 +225,7 @@ public final class TvContract { * @param channelUri The URI of the channel to return programs for. */ public static final Uri buildProgramsUriForChannel(Uri channelUri) { if (!PATH_CHANNEL.equals(channelUri.getPathSegments().get(0))) { if (!isChannelUriForTunerTvInput(channelUri)) { throw new IllegalArgumentException("Not a channel: " + channelUri); } return buildProgramsUriForChannel(ContentUris.parseId(channelUri)); Loading Loading @@ -263,7 +260,7 @@ public final class TvContract { */ public static final Uri buildProgramsUriForChannel(Uri channelUri, long startTime, long endTime) { if (!PATH_CHANNEL.equals(channelUri.getPathSegments().get(0))) { if (!isChannelUriForTunerTvInput(channelUri)) { throw new IllegalArgumentException("Not a channel: " + channelUri); } return buildProgramsUriForChannel(ContentUris.parseId(channelUri), startTime, endTime); Loading @@ -279,41 +276,47 @@ public final class TvContract { return ContentUris.withAppendedId(WatchedPrograms.CONTENT_URI, watchedProgramId); } private static final boolean isTvUri(Uri uri) { return uri != null && ContentResolver.SCHEME_CONTENT.equals(uri.getScheme()) && AUTHORITY.equals(uri.getAuthority()); } private static final boolean isTwoSegmentUriStartingWith(Uri uri, String pathSegment) { List<String> pathSegments = uri.getPathSegments(); return pathSegments.size() == 2 && pathSegment.equals(pathSegments.get(0)); } /** * Extracts the {@link Channels#COLUMN_INPUT_ID} from a given URI. * * @param channelsUri A URI constructed by {@link #buildChannelsUriForInput(String)}, * {@link #buildChannelsUriForInput(String, boolean)}, or * {@link #buildChannelsUriForCanonicalGenre(String, String, boolean)}. * Returns true, if {@code uri} is a channel URI. * @hide */ public static final String getInputId(Uri channelsUri) { final List<String> paths = channelsUri.getPathSegments(); if (paths.size() < 3) { throw new IllegalArgumentException("Not channels: " + channelsUri); } if (!PATH_INPUT.equals(paths.get(0)) || !PATH_CHANNEL.equals(paths.get(2))) { throw new IllegalArgumentException("Not channels: " + channelsUri); } return paths.get(1); public static final boolean isChannelUri(Uri uri) { return isChannelUriForTunerTvInput(uri) || isChannelUriForPassthroughTvInput(uri); } /** * Extracts the {@link Channels#_ID} from a given URI. * * @param programsUri A URI constructed by {@link #buildProgramsUriForChannel(Uri)} or * {@link #buildProgramsUriForChannel(Uri, long, long)}. * Returns true, if {@code uri} is a channel URI for a tuner TV input. * @hide */ public static final String getChannelId(Uri programsUri) { final List<String> paths = programsUri.getPathSegments(); if (paths.size() < 3) { throw new IllegalArgumentException("Not programs: " + programsUri); public static final boolean isChannelUriForTunerTvInput(Uri uri) { return isTvUri(uri) && isTwoSegmentUriStartingWith(uri, PATH_CHANNEL); } if (!PATH_CHANNEL.equals(paths.get(0)) || !PATH_PROGRAM.equals(paths.get(2))) { throw new IllegalArgumentException("Not programs: " + programsUri); /** * Returns true, if {@code uri} is a channel URI for a passthrough TV input. * @hide */ @SystemApi public static final boolean isChannelUriForPassthroughTvInput(Uri uri) { return isTvUri(uri) && isTwoSegmentUriStartingWith(uri, PATH_PASSTHROUGH); } return paths.get(1); /** * Returns true, if {@code uri} is a program URI. * @hide */ public static final boolean isProgramUri(Uri uri) { return isTvUri(uri) && isTwoSegmentUriStartingWith(uri, PATH_PROGRAM); } Loading Loading @@ -1104,7 +1107,6 @@ public final class TvContract { /** * Column definitions for the TV programs that the user watched. Applications do not have access * to this table. * * @hide */ public static final class WatchedPrograms implements BaseTvColumns { Loading Loading
media/java/android/media/tv/TvContract.java +56 −54 Original line number Diff line number Diff line Loading @@ -53,13 +53,25 @@ public final class TvContract { private static final String PATH_CHANNEL = "channel"; private static final String PATH_PROGRAM = "program"; private static final String PATH_INPUT = "input"; private static final String PATH_PASSTHROUGH = "passthrough"; /** * An optional query, update or delete URI parameter that allows the caller to specify TV input * ID to filter channels. * @hide */ public static final String PARAM_INPUT = "input"; /** * An optional query, update or delete URI parameter that allows the caller to specify channel * ID to filter programs. * @hide */ public static final String PARAM_CHANNEL = "channel"; /** * An optional query, update or delete URI parameter that allows the caller to specify start * time (in milliseconds since the epoch) to filter programs. * * @hide */ public static final String PARAM_START_TIME = "start_time"; Loading @@ -67,7 +79,6 @@ public final class TvContract { /** * An optional query, update or delete URI parameter that allows the caller to specify end time * (in milliseconds since the epoch) to filter programs. * * @hide */ public static final String PARAM_END_TIME = "end_time"; Loading @@ -76,7 +87,6 @@ public final class TvContract { * A query, update or delete URI parameter that allows the caller to operate on all or * browsable-only channels. If set to "true", the rows that contain non-browsable channels are * not affected. * * @hide */ public static final String PARAM_BROWSABLE_ONLY = "browsable_only"; Loading @@ -84,7 +94,6 @@ public final class TvContract { /** * A optional query, update or delete URI parameter that allows the caller to specify canonical * genre to filter programs. * * @hide */ public static final String PARAM_CANONICAL_GENRE = "canonical_genre"; Loading Loading @@ -116,17 +125,7 @@ public final class TvContract { */ public static final Uri buildChannelUriForPassthroughTvInput(String inputId) { return new Uri.Builder().scheme(ContentResolver.SCHEME_CONTENT).authority(AUTHORITY) .appendPath(PATH_INPUT).appendPath(inputId).appendPath(PATH_CHANNEL) .appendPath(PATH_PASSTHROUGH).build(); } /** * Returns true, if {@code channelUri} is a channel URI for a passthrough TV input. * @hide */ @SystemApi public static final boolean isChannelUriForPassthroughTvInput(Uri channelUri) { return channelUri.toString().endsWith(PATH_PASSTHROUGH); .appendPath(PATH_PASSTHROUGH).appendPath(inputId).build(); } /** Loading @@ -144,7 +143,7 @@ public final class TvContract { * @param channelUri The URI of the channel whose logo is pointed to. */ public static final Uri buildChannelLogoUri(Uri channelUri) { if (!PATH_CHANNEL.equals(channelUri.getPathSegments().get(0))) { if (!isChannelUriForTunerTvInput(channelUri)) { throw new IllegalArgumentException("Not a channel: " + channelUri); } return Uri.withAppendedPath(channelUri, Channels.Logo.CONTENT_DIRECTORY); Loading @@ -169,8 +168,8 @@ public final class TvContract { * @hide */ public static final Uri buildChannelsUriForInput(String inputId, boolean browsableOnly) { return new Uri.Builder().scheme(ContentResolver.SCHEME_CONTENT).authority(AUTHORITY) .appendPath(PATH_INPUT).appendPath(inputId).appendPath(PATH_CHANNEL) return Channels.CONTENT_URI.buildUpon() .appendQueryParameter(PARAM_INPUT, inputId) .appendQueryParameter(PARAM_BROWSABLE_ONLY, String.valueOf(browsableOnly)).build(); } Loading @@ -194,8 +193,7 @@ public final class TvContract { Uri uri; if (inputId == null) { uri = new Uri.Builder().scheme(ContentResolver.SCHEME_CONTENT).authority(AUTHORITY) .appendPath(PATH_CHANNEL).build(); uri = Channels.CONTENT_URI; } else { uri = buildChannelsUriForInput(inputId, browsableOnly); } Loading @@ -217,9 +215,8 @@ public final class TvContract { * @param channelId The ID of the channel to return programs for. */ public static final Uri buildProgramsUriForChannel(long channelId) { return new Uri.Builder().scheme(ContentResolver.SCHEME_CONTENT).authority(AUTHORITY) .appendPath(PATH_CHANNEL).appendPath(String.valueOf(channelId)) .appendPath(PATH_PROGRAM).build(); return Programs.CONTENT_URI.buildUpon() .appendQueryParameter(PARAM_CHANNEL, String.valueOf(channelId)).build(); } /** Loading @@ -228,7 +225,7 @@ public final class TvContract { * @param channelUri The URI of the channel to return programs for. */ public static final Uri buildProgramsUriForChannel(Uri channelUri) { if (!PATH_CHANNEL.equals(channelUri.getPathSegments().get(0))) { if (!isChannelUriForTunerTvInput(channelUri)) { throw new IllegalArgumentException("Not a channel: " + channelUri); } return buildProgramsUriForChannel(ContentUris.parseId(channelUri)); Loading Loading @@ -263,7 +260,7 @@ public final class TvContract { */ public static final Uri buildProgramsUriForChannel(Uri channelUri, long startTime, long endTime) { if (!PATH_CHANNEL.equals(channelUri.getPathSegments().get(0))) { if (!isChannelUriForTunerTvInput(channelUri)) { throw new IllegalArgumentException("Not a channel: " + channelUri); } return buildProgramsUriForChannel(ContentUris.parseId(channelUri), startTime, endTime); Loading @@ -279,41 +276,47 @@ public final class TvContract { return ContentUris.withAppendedId(WatchedPrograms.CONTENT_URI, watchedProgramId); } private static final boolean isTvUri(Uri uri) { return uri != null && ContentResolver.SCHEME_CONTENT.equals(uri.getScheme()) && AUTHORITY.equals(uri.getAuthority()); } private static final boolean isTwoSegmentUriStartingWith(Uri uri, String pathSegment) { List<String> pathSegments = uri.getPathSegments(); return pathSegments.size() == 2 && pathSegment.equals(pathSegments.get(0)); } /** * Extracts the {@link Channels#COLUMN_INPUT_ID} from a given URI. * * @param channelsUri A URI constructed by {@link #buildChannelsUriForInput(String)}, * {@link #buildChannelsUriForInput(String, boolean)}, or * {@link #buildChannelsUriForCanonicalGenre(String, String, boolean)}. * Returns true, if {@code uri} is a channel URI. * @hide */ public static final String getInputId(Uri channelsUri) { final List<String> paths = channelsUri.getPathSegments(); if (paths.size() < 3) { throw new IllegalArgumentException("Not channels: " + channelsUri); } if (!PATH_INPUT.equals(paths.get(0)) || !PATH_CHANNEL.equals(paths.get(2))) { throw new IllegalArgumentException("Not channels: " + channelsUri); } return paths.get(1); public static final boolean isChannelUri(Uri uri) { return isChannelUriForTunerTvInput(uri) || isChannelUriForPassthroughTvInput(uri); } /** * Extracts the {@link Channels#_ID} from a given URI. * * @param programsUri A URI constructed by {@link #buildProgramsUriForChannel(Uri)} or * {@link #buildProgramsUriForChannel(Uri, long, long)}. * Returns true, if {@code uri} is a channel URI for a tuner TV input. * @hide */ public static final String getChannelId(Uri programsUri) { final List<String> paths = programsUri.getPathSegments(); if (paths.size() < 3) { throw new IllegalArgumentException("Not programs: " + programsUri); public static final boolean isChannelUriForTunerTvInput(Uri uri) { return isTvUri(uri) && isTwoSegmentUriStartingWith(uri, PATH_CHANNEL); } if (!PATH_CHANNEL.equals(paths.get(0)) || !PATH_PROGRAM.equals(paths.get(2))) { throw new IllegalArgumentException("Not programs: " + programsUri); /** * Returns true, if {@code uri} is a channel URI for a passthrough TV input. * @hide */ @SystemApi public static final boolean isChannelUriForPassthroughTvInput(Uri uri) { return isTvUri(uri) && isTwoSegmentUriStartingWith(uri, PATH_PASSTHROUGH); } return paths.get(1); /** * Returns true, if {@code uri} is a program URI. * @hide */ public static final boolean isProgramUri(Uri uri) { return isTvUri(uri) && isTwoSegmentUriStartingWith(uri, PATH_PROGRAM); } Loading Loading @@ -1104,7 +1107,6 @@ public final class TvContract { /** * Column definitions for the TV programs that the user watched. Applications do not have access * to this table. * * @hide */ public static final class WatchedPrograms implements BaseTvColumns { Loading