diff options
Diffstat (limited to 'partner_support/g3doc/CloudEpgForPartners.md')
-rw-r--r-- | partner_support/g3doc/CloudEpgForPartners.md | 112 |
1 files changed, 112 insertions, 0 deletions
diff --git a/partner_support/g3doc/CloudEpgForPartners.md b/partner_support/g3doc/CloudEpgForPartners.md new file mode 100644 index 00000000..bec6b504 --- /dev/null +++ b/partner_support/g3doc/CloudEpgForPartners.md @@ -0,0 +1,112 @@ +# 3rd party instructions for using Cloud EPG feature of Live Channels + +Partners can ask Live Channels to retrieve EPG data for their TV Input Service +using live channels + +## Prerequisites + +* Updated agreement with Google +* Oreo or patched Nougat + +## Nougat + +To use cloud epg with Nougat you will need the following changes. + +### Patch TVProvider + +To run in Nougat you must cherry pick [change +455319](https://android-review.googlesource.com/c/platform/packages/providers/TvProvider/+/455319) +to TV Provider. + +### Customisation + +Indicate TvProvider is patched by including the following in their TV +customization resource + +``` +<bool name="tvprovider_allows_system_inserts_to_program_table">true</bool> +``` + +See https://source.android.com/devices/tv/customize-tv-app + +## **Input Setup** + +During the input setup activity, the TIS will query the content provider for +lineups in a given postal code. The TIS then inserts a row to the inputs table +with input_id and lineup_id + +On completion of the activity the TIS sets the extra data in the result to + +* `com.android.tv.extra.USE_CLOUD_EPG = true` +* `TvInputInfo.EXTRA_INPUT_ID` with their input_id + +This is used to tell Live Channels to immediately start the EPG fetch for that +input. + +### Sample Input Setup code. + +A complete sample is at +../third_party/samples/src/com/example/partnersupportsampletvinput + +#### query lineup + +```java + private AsyncTask<Void, Void, List<Lineup>> createFetchLineupsTask() { + return new AsyncTask<Void, Void, List<Lineup>>() { + @Override + protected List<Lineup> doInBackground(Void... params) { + ContentResolver cr = getActivity().getContentResolver(); + + List<Lineup> results = new ArrayList<>(); + Cursor cursor = + cr.query( + Uri.parse( + "content://com.android.tv.data.epg/lineups/postal_code/" + + ZIP), + null, + null, + null, + null); + + while (cursor.moveToNext()) { + String id = cursor.getString(0); + String name = cursor.getString(1); + String channels = cursor.getString(2); + results.add(new Lineup(id, name, channels)); + } + + return results; + } + + @Override + protected void onPostExecute(List<Lineup> lineups) { + showLineups(lineups); + } + }; + } +``` + +#### Insert cloud_epg_input + +```java +ContentValues values = new ContentValues(); +values.put(EpgContract.EpgInputs.COLUMN_INPUT_ID, SampleTvInputService.INPUT_ID); +values.put(EpgContract.EpgInputs.COLUMN_LINEUP_ID, lineup.getId()); +ContentResolver contentResolver = getActivity().getContentResolver(); +EpgInput epgInput = EpgInputs.queryEpgInput(contentResolver, SampleTvInputService.INPUT_ID); +if (epgInput == null) { + contentResolver.insert(EpgContract.EpgInputs.CONTENT_URI, values); +} else { + values.put(EpgContract.EpgInputs.COLUMN_ID, epgInput.getId()); + EpgInputs.update(contentResolver, EpgInput.createEpgChannel(values)); +} +``` + +#### Return use_cloud_epg + +```java +Intent data = new Intent(); +data.putExtra(TvInputInfo.EXTRA_INPUT_ID, inputId); +data.putExtra(com.android.tv.extra.USE_CLOUD_EPG, true); +setResult(Activity.RESULT_OK, data); +``` |