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.testinput; 18816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 19816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport android.app.Activity; 20816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport android.app.AlertDialog; 21816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport android.app.Dialog; 22816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport android.app.DialogFragment; 23816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport android.content.ContentResolver; 24816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport android.content.ContentValues; 25816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport android.content.Context; 26816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport android.content.DialogInterface; 27816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport android.media.tv.TvContract; 28816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport android.media.tv.TvInputInfo; 29816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport android.net.Uri; 30816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport android.os.Bundle; 31816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport android.util.Log; 32816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 33816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport com.android.tv.testing.ChannelInfo; 34816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport com.android.tv.testing.ChannelUtils; 35816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport com.android.tv.testing.Constants; 36816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport com.android.tv.testing.ProgramInfo; 37816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport com.android.tv.testing.ProgramUtils; 38816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 39816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport java.util.ArrayList; 40816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport java.util.List; 41816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport java.util.Map; 42816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 43816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko/** 44816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * The setup activity for {@link TestTvInputService}. 45816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko */ 46816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkopublic class TestTvInputSetupActivity extends Activity { 47816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko private static final String TAG = "TestTvInputSetup"; 48816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko private String mInputId; 49816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 50816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko @Override 51816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko public void onCreate(Bundle savedInstanceState) { 52816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko super.onCreate(savedInstanceState); 53816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko mInputId = getIntent().getStringExtra(TvInputInfo.EXTRA_INPUT_ID); 54816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 55816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko DialogFragment newFragment = new MyAlertDialogFragment(); 56816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko newFragment.show(getFragmentManager(), "dialog"); 57816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 58816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 59816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko private void registerChannels(int channelCount) { 60816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko TestTvInputSetupActivity context = this; 61816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko registerChannels(context, mInputId, false, channelCount); 62816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 63816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 64816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko public static void registerChannels(Context context, String inputId, boolean updateBrowsable, 65816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko int channelCount) { 66816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko Log.i(TAG, "Registering " + channelCount + " channels"); 67816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko List<ChannelInfo> channels = new ArrayList<>(); 68816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko for (int i = 1; i <= channelCount; i++) { 69816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko channels.add(ChannelInfo.create(context, i)); 70816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 71816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko ChannelUtils.updateChannels(context, inputId, channels); 72816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko if (updateBrowsable) { 73816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko updateChannelsBrowsable(context.getContentResolver(), inputId); 74816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 75816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 76816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko // Reload channels so we have the ids. 77816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko Map<Long, ChannelInfo> channelIdToInfoMap = 78816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko ChannelUtils.queryChannelInfoMapForTvInput(context, inputId); 79816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko for (Long channelId : channelIdToInfoMap.keySet()) { 80816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko // TODO: http://b/21705569 Create better program info for tests 81816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko ProgramInfo programInfo = ProgramInfo.create(); 82816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko ProgramUtils.populatePrograms(context, TvContract.buildChannelUri(channelId), 83816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko programInfo); 84816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 85816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 86816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 87816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko private static void updateChannelsBrowsable(ContentResolver contentResolver, String inputId) { 88816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko Uri uri = TvContract.buildChannelsUriForInput(inputId); 89816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko ContentValues values = new ContentValues(); 90816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko values.put(TvContract.Channels.COLUMN_BROWSABLE, 1); 91816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko contentResolver.update(uri, values, null, null); 92816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 93816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 94816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko public static class MyAlertDialogFragment extends DialogFragment { 95816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko @Override 96816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko public Dialog onCreateDialog(Bundle savedInstanceState) { 97816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko return new AlertDialog.Builder(getActivity()).setTitle(R.string.simple_setup_title) 98816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko .setMessage(R.string.simple_setup_message) 99816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { 100816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko @Override 101816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko public void onClick(DialogInterface dialog, int whichButton) { 102816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko // TODO: add UI to ask how many channels 103816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko ((TestTvInputSetupActivity) getActivity()) 104816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko .registerChannels(Constants.UNIT_TEST_CHANNEL_COUNT); 105816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko // Sets the results so that the application can process the 106816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko // registered channels properly. 107816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko getActivity().setResult(Activity.RESULT_OK); 108816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko getActivity().finish(); 109816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 110816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko }).setNegativeButton(android.R.string.cancel, 111816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko new DialogInterface.OnClickListener() { 112816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko @Override 113816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko public void onClick(DialogInterface dialog, int whichButton) { 114816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko getActivity().finish(); 115816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 116816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko }).create(); 117816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 118816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 119816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko} 120