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