16ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko/*
26ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko * Copyright (C) 2017 The Android Open Source Project
36ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko *
46ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko * Licensed under the Apache License, Version 2.0 (the "License");
56ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko * you may not use this file except in compliance with the License.
66ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko * You may obtain a copy of the License at
76ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko *
86ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko *      http://www.apache.org/licenses/LICENSE-2.0
96ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko *
106ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko * Unless required by applicable law or agreed to in writing, software
116ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko * distributed under the License is distributed on an "AS IS" BASIS,
126ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
136ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko * See the License for the specific language governing permissions and
146ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko * limitations under the License.
156ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko */
166ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko
176ebde20b03db4c0d57f67acaac11832b610b966bNick Chalkopackage com.android.tv.tests.ui.sidepanel;
186ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko
196ebde20b03db4c0d57f67acaac11832b610b966bNick Chalkoimport static com.android.tv.testing.uihelper.UiDeviceAsserts.assertWaitForCondition;
206ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko
216ebde20b03db4c0d57f67acaac11832b610b966bNick Chalkoimport android.graphics.Point;
226ebde20b03db4c0d57f67acaac11832b610b966bNick Chalkoimport android.support.test.filters.LargeTest;
236ebde20b03db4c0d57f67acaac11832b610b966bNick Chalkoimport android.support.test.uiautomator.BySelector;
246ebde20b03db4c0d57f67acaac11832b610b966bNick Chalkoimport android.support.test.uiautomator.Direction;
256ebde20b03db4c0d57f67acaac11832b610b966bNick Chalkoimport android.support.test.uiautomator.UiObject2;
266ebde20b03db4c0d57f67acaac11832b610b966bNick Chalkoimport android.support.test.uiautomator.Until;
276ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko
286ebde20b03db4c0d57f67acaac11832b610b966bNick Chalkoimport com.android.tv.R;
296ebde20b03db4c0d57f67acaac11832b610b966bNick Chalkoimport com.android.tv.testing.uihelper.Constants;
306ebde20b03db4c0d57f67acaac11832b610b966bNick Chalkoimport com.android.tv.tests.ui.LiveChannelsTestCase;
316ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko
326ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko@LargeTest
336ebde20b03db4c0d57f67acaac11832b610b966bNick Chalkopublic class CustomizeChannelListFragmentTest extends LiveChannelsTestCase {
346ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko    private BySelector mBySettingsSidePanel;
356ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko    private UiObject2 mTvView;
366ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko    private Point mNormalTvViewCenter;
376ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko
386ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko    @Override
396ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko    protected void setUp() throws Exception {
406ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        super.setUp();
416ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        mLiveChannelsHelper.assertAppStarted();
426ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        mTvView = mDevice.findObject(Constants.TV_VIEW);
436ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        mNormalTvViewCenter = mTvView.getVisibleCenter();
446ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        assertNotNull(mNormalTvViewCenter);
456ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        pressKeysForChannel(com.android.tv.testing.testinput.TvTestInputConstants.CH_2);
466ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        // Wait until KeypadChannelSwitchView closes.
476ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        assertWaitForCondition(mDevice, Until.hasObject(Constants.CHANNEL_BANNER));
486ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        mBySettingsSidePanel = mSidePanelHelper.bySidePanelTitled(
496ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko                R.string.side_panel_title_settings);
506ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko    }
516ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko
526ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko    private void assertShrunkenTvView(boolean shrunkenExpected) {
536ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        Point currentTvViewCenter = mTvView.getVisibleCenter();
546ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        if (shrunkenExpected) {
556ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko            assertFalse(mNormalTvViewCenter.equals(currentTvViewCenter));
566ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        } else {
576ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko            assertTrue(mNormalTvViewCenter.equals(currentTvViewCenter));
586ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        }
596ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko    }
606ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko
616ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko    public void testCustomizeChannelList_noraml() {
626ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        // Show customize channel list fragment
636ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        mMenuHelper.assertPressOptionsSettings();
646ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        assertWaitForCondition(mDevice, Until.hasObject(mBySettingsSidePanel));
656ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        mSidePanelHelper.assertNavigateToItem(
666ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko                R.string.settings_channel_source_item_customize_channels);
676ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        mDevice.pressDPadCenter();
686ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        BySelector bySidePanel = mSidePanelHelper.bySidePanelTitled(
696ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko                R.string.side_panel_title_edit_channels_for_an_input);
706ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        assertWaitForCondition(mDevice, Until.hasObject(bySidePanel));
716ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        assertShrunkenTvView(true);
726ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko
736ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        // Show group by fragment
746ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        mSidePanelHelper.assertNavigateToItem(R.string.edit_channels_item_group_by, Direction.UP);
756ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        mDevice.pressDPadCenter();
766ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        bySidePanel = mSidePanelHelper.bySidePanelTitled(R.string.side_panel_title_group_by);
776ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        assertWaitForCondition(mDevice, Until.hasObject(bySidePanel));
786ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        assertShrunkenTvView(true);
796ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko
806ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        // Back to customize channel list fragment
816ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        mDevice.pressBack();
826ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        bySidePanel = mSidePanelHelper.bySidePanelTitled(
836ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko                R.string.side_panel_title_edit_channels_for_an_input);
846ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        assertWaitForCondition(mDevice, Until.hasObject(bySidePanel));
856ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        assertShrunkenTvView(true);
866ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko
876ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        // Return to the main menu.
886ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        mDevice.pressBack();
896ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        assertWaitForCondition(mDevice, Until.hasObject(mBySettingsSidePanel));
906ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        assertShrunkenTvView(false);
916ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko    }
926ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko
936ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko    public void testCustomizeChannelList_timeout() {
946ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        // Show customize channel list fragment
956ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        mMenuHelper.assertPressOptionsSettings();
966ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        assertWaitForCondition(mDevice, Until.hasObject(mBySettingsSidePanel));
976ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        mSidePanelHelper.assertNavigateToItem(
986ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko                R.string.settings_channel_source_item_customize_channels);
996ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        mDevice.pressDPadCenter();
1006ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        BySelector bySidePanel = mSidePanelHelper.bySidePanelTitled(
1016ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko                R.string.side_panel_title_edit_channels_for_an_input);
1026ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        assertWaitForCondition(mDevice, Until.hasObject(bySidePanel));
1036ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        assertShrunkenTvView(true);
1046ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko
1056ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        // Show group by fragment
1066ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        mSidePanelHelper.assertNavigateToItem(R.string.edit_channels_item_group_by, Direction.UP);
1076ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        mDevice.pressDPadCenter();
1086ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        bySidePanel = mSidePanelHelper.bySidePanelTitled(R.string.side_panel_title_group_by);
1096ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        assertWaitForCondition(mDevice, Until.hasObject(bySidePanel));
1106ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        assertShrunkenTvView(true);
1116ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko
1126ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        // Wait for time-out to return to the main menu.
1136ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        assertWaitForCondition(mDevice, Until.gone(bySidePanel),
1146ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko                mTargetResources.getInteger(R.integer.side_panel_show_duration));
1156ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        assertShrunkenTvView(false);
1166ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko    }
1176ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko}
118