1575dc8a5a5c023aee0c0ec297a7d357685cf49e9Craig Stout/* 2575dc8a5a5c023aee0c0ec297a7d357685cf49e9Craig Stout * Copyright (C) 2015 The Android Open Source Project 3575dc8a5a5c023aee0c0ec297a7d357685cf49e9Craig Stout * 4575dc8a5a5c023aee0c0ec297a7d357685cf49e9Craig Stout * Licensed under the Apache License, Version 2.0 (the "License"); 5575dc8a5a5c023aee0c0ec297a7d357685cf49e9Craig Stout * you may not use this file except in compliance with the License. 6575dc8a5a5c023aee0c0ec297a7d357685cf49e9Craig Stout * You may obtain a copy of the License at 7575dc8a5a5c023aee0c0ec297a7d357685cf49e9Craig Stout * 8575dc8a5a5c023aee0c0ec297a7d357685cf49e9Craig Stout * http://www.apache.org/licenses/LICENSE-2.0 9575dc8a5a5c023aee0c0ec297a7d357685cf49e9Craig Stout * 10575dc8a5a5c023aee0c0ec297a7d357685cf49e9Craig Stout * Unless required by applicable law or agreed to in writing, software 11575dc8a5a5c023aee0c0ec297a7d357685cf49e9Craig Stout * distributed under the License is distributed on an "AS IS" BASIS, 12575dc8a5a5c023aee0c0ec297a7d357685cf49e9Craig Stout * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13575dc8a5a5c023aee0c0ec297a7d357685cf49e9Craig Stout * See the License for the specific language governing permissions and 14575dc8a5a5c023aee0c0ec297a7d357685cf49e9Craig Stout * limitations under the License. 15575dc8a5a5c023aee0c0ec297a7d357685cf49e9Craig Stout */ 16575dc8a5a5c023aee0c0ec297a7d357685cf49e9Craig Stoutpackage android.support.v17.leanback.widget; 17575dc8a5a5c023aee0c0ec297a7d357685cf49e9Craig Stout 185d3875ca7ca9294a00f9da0a92ad9055adeb9703Craig Stoutimport android.graphics.Bitmap; 19ad9af35ec6a808136478daf7bd57d564ac517e0eCraig Stoutimport android.support.v17.leanback.app.HeadersFragment; 205d3875ca7ca9294a00f9da0a92ad9055adeb9703Craig Stoutimport android.support.v17.leanback.R; 21575dc8a5a5c023aee0c0ec297a7d357685cf49e9Craig Stoutimport android.test.AndroidTestCase; 2230670ddd3140bf545ae9e2657a44bc5db4bc6c27Keyvan Amiriimport android.view.ContextThemeWrapper; 23ad9af35ec6a808136478daf7bd57d564ac517e0eCraig Stoutimport android.widget.FrameLayout; 24ad9af35ec6a808136478daf7bd57d564ac517e0eCraig Stoutimport android.view.View; 255d3875ca7ca9294a00f9da0a92ad9055adeb9703Craig Stoutimport android.view.ViewGroup.LayoutParams; 26575dc8a5a5c023aee0c0ec297a7d357685cf49e9Craig Stout 27575dc8a5a5c023aee0c0ec297a7d357685cf49e9Craig Stoutpublic class PresenterTest extends AndroidTestCase { 28575dc8a5a5c023aee0c0ec297a7d357685cf49e9Craig Stout 29575dc8a5a5c023aee0c0ec297a7d357685cf49e9Craig Stout public void testZoomFactors() throws Throwable { 30575dc8a5a5c023aee0c0ec297a7d357685cf49e9Craig Stout new ListRowPresenter(FocusHighlight.ZOOM_FACTOR_SMALL); 31575dc8a5a5c023aee0c0ec297a7d357685cf49e9Craig Stout new ListRowPresenter(FocusHighlight.ZOOM_FACTOR_MEDIUM); 32575dc8a5a5c023aee0c0ec297a7d357685cf49e9Craig Stout new ListRowPresenter(FocusHighlight.ZOOM_FACTOR_LARGE); 33575dc8a5a5c023aee0c0ec297a7d357685cf49e9Craig Stout new ListRowPresenter(FocusHighlight.ZOOM_FACTOR_XSMALL); 34575dc8a5a5c023aee0c0ec297a7d357685cf49e9Craig Stout try { 35575dc8a5a5c023aee0c0ec297a7d357685cf49e9Craig Stout new ListRowPresenter(100); 365d3875ca7ca9294a00f9da0a92ad9055adeb9703Craig Stout fail("Should have thrown exception"); 37575dc8a5a5c023aee0c0ec297a7d357685cf49e9Craig Stout } catch (IllegalArgumentException exception) { 38575dc8a5a5c023aee0c0ec297a7d357685cf49e9Craig Stout } 39575dc8a5a5c023aee0c0ec297a7d357685cf49e9Craig Stout } 40ad9af35ec6a808136478daf7bd57d564ac517e0eCraig Stout 41ad9af35ec6a808136478daf7bd57d564ac517e0eCraig Stout private void testHeaderPresenter(RowHeaderPresenter p) { 42ad9af35ec6a808136478daf7bd57d564ac517e0eCraig Stout int expectedVisibility; 43ad9af35ec6a808136478daf7bd57d564ac517e0eCraig Stout Presenter.ViewHolder vh = p.onCreateViewHolder(new FrameLayout(getContext())); 44ad9af35ec6a808136478daf7bd57d564ac517e0eCraig Stout p.onBindViewHolder(vh, null); 45ad9af35ec6a808136478daf7bd57d564ac517e0eCraig Stout expectedVisibility = p.isNullItemVisibilityGone() ? View.GONE : View.VISIBLE; 465d3875ca7ca9294a00f9da0a92ad9055adeb9703Craig Stout assertTrue("Header visibility", 475d3875ca7ca9294a00f9da0a92ad9055adeb9703Craig Stout vh.view.getVisibility() == expectedVisibility); 48ad9af35ec6a808136478daf7bd57d564ac517e0eCraig Stout p.onBindViewHolder(vh, new Row(null)); 495d3875ca7ca9294a00f9da0a92ad9055adeb9703Craig Stout assertTrue("Header visibility", 505d3875ca7ca9294a00f9da0a92ad9055adeb9703Craig Stout vh.view.getVisibility() == expectedVisibility); 51ad9af35ec6a808136478daf7bd57d564ac517e0eCraig Stout p.onBindViewHolder(vh, new Row(new HeaderItem(""))); 525d3875ca7ca9294a00f9da0a92ad9055adeb9703Craig Stout assertTrue("Header visibility", 535d3875ca7ca9294a00f9da0a92ad9055adeb9703Craig Stout vh.view.getVisibility() == View.VISIBLE); 54ad9af35ec6a808136478daf7bd57d564ac517e0eCraig Stout } 55ad9af35ec6a808136478daf7bd57d564ac517e0eCraig Stout 56ad9af35ec6a808136478daf7bd57d564ac517e0eCraig Stout public void testHeaderPresenter() throws Throwable { 57ad9af35ec6a808136478daf7bd57d564ac517e0eCraig Stout HeadersFragment hf = new HeadersFragment(); 58ad9af35ec6a808136478daf7bd57d564ac517e0eCraig Stout PresenterSelector ps = hf.getPresenterSelector(); 5930670ddd3140bf545ae9e2657a44bc5db4bc6c27Keyvan Amiri 6030670ddd3140bf545ae9e2657a44bc5db4bc6c27Keyvan Amiri Presenter p = ps.getPresenter(new Row()); 615d3875ca7ca9294a00f9da0a92ad9055adeb9703Craig Stout assertTrue("Row header instance", 625d3875ca7ca9294a00f9da0a92ad9055adeb9703Craig Stout p instanceof RowHeaderPresenter); 635d3875ca7ca9294a00f9da0a92ad9055adeb9703Craig Stout assertFalse("isNullItemVisibilityGone", 645d3875ca7ca9294a00f9da0a92ad9055adeb9703Craig Stout ((RowHeaderPresenter) p).isNullItemVisibilityGone()); 65ad9af35ec6a808136478daf7bd57d564ac517e0eCraig Stout testHeaderPresenter((RowHeaderPresenter) p); 66ad9af35ec6a808136478daf7bd57d564ac517e0eCraig Stout 6730670ddd3140bf545ae9e2657a44bc5db4bc6c27Keyvan Amiri p = ps.getPresenter(new SectionRow("Section Name")); 6830670ddd3140bf545ae9e2657a44bc5db4bc6c27Keyvan Amiri assertTrue("Row header instance", 6930670ddd3140bf545ae9e2657a44bc5db4bc6c27Keyvan Amiri p instanceof RowHeaderPresenter); 7030670ddd3140bf545ae9e2657a44bc5db4bc6c27Keyvan Amiri assertFalse("isNullItemVisibilityGone", 7130670ddd3140bf545ae9e2657a44bc5db4bc6c27Keyvan Amiri ((RowHeaderPresenter) p).isNullItemVisibilityGone()); 7230670ddd3140bf545ae9e2657a44bc5db4bc6c27Keyvan Amiri testHeaderPresenter((RowHeaderPresenter) p); 7330670ddd3140bf545ae9e2657a44bc5db4bc6c27Keyvan Amiri 7430670ddd3140bf545ae9e2657a44bc5db4bc6c27Keyvan Amiri p = ps.getPresenter(new DividerRow()); 7530670ddd3140bf545ae9e2657a44bc5db4bc6c27Keyvan Amiri assertTrue("Row header instance", 7630670ddd3140bf545ae9e2657a44bc5db4bc6c27Keyvan Amiri p instanceof DividerPresenter); 7730670ddd3140bf545ae9e2657a44bc5db4bc6c27Keyvan Amiri 78ad9af35ec6a808136478daf7bd57d564ac517e0eCraig Stout ListRowPresenter lrp = new ListRowPresenter(); 795d3875ca7ca9294a00f9da0a92ad9055adeb9703Craig Stout assertTrue("Row header instance", 805d3875ca7ca9294a00f9da0a92ad9055adeb9703Craig Stout lrp.getHeaderPresenter() instanceof RowHeaderPresenter); 81ad9af35ec6a808136478daf7bd57d564ac517e0eCraig Stout RowHeaderPresenter rhp = (RowHeaderPresenter) lrp.getHeaderPresenter(); 825d3875ca7ca9294a00f9da0a92ad9055adeb9703Craig Stout assertTrue("isNullItemVisibilityGone", 835d3875ca7ca9294a00f9da0a92ad9055adeb9703Craig Stout rhp.isNullItemVisibilityGone()); 84ad9af35ec6a808136478daf7bd57d564ac517e0eCraig Stout testHeaderPresenter(rhp); 85ad9af35ec6a808136478daf7bd57d564ac517e0eCraig Stout } 865d3875ca7ca9294a00f9da0a92ad9055adeb9703Craig Stout 875d3875ca7ca9294a00f9da0a92ad9055adeb9703Craig Stout public void testPlaybackControlsRowPresenter() { 8830670ddd3140bf545ae9e2657a44bc5db4bc6c27Keyvan Amiri setContext(new ContextThemeWrapper(getContext(), R.style.Theme_Leanback)); 895d3875ca7ca9294a00f9da0a92ad9055adeb9703Craig Stout Presenter detailsPresenter = new AbstractDetailsDescriptionPresenter() { 905d3875ca7ca9294a00f9da0a92ad9055adeb9703Craig Stout @Override 915d3875ca7ca9294a00f9da0a92ad9055adeb9703Craig Stout protected void onBindDescription(ViewHolder vh, Object item) { 925d3875ca7ca9294a00f9da0a92ad9055adeb9703Craig Stout vh.getTitle().setText("The quick brown fox jumped over the lazy dog"); 935d3875ca7ca9294a00f9da0a92ad9055adeb9703Craig Stout vh.getSubtitle().setText("Subtitle"); 945d3875ca7ca9294a00f9da0a92ad9055adeb9703Craig Stout } 955d3875ca7ca9294a00f9da0a92ad9055adeb9703Craig Stout }; 965d3875ca7ca9294a00f9da0a92ad9055adeb9703Craig Stout PlaybackControlsRowPresenter controlsRowPresenter = new PlaybackControlsRowPresenter( 975d3875ca7ca9294a00f9da0a92ad9055adeb9703Craig Stout detailsPresenter); 985d3875ca7ca9294a00f9da0a92ad9055adeb9703Craig Stout PlaybackControlsRowPresenter.ViewHolder vh = (PlaybackControlsRowPresenter.ViewHolder) 995d3875ca7ca9294a00f9da0a92ad9055adeb9703Craig Stout controlsRowPresenter.onCreateViewHolder(new FrameLayout(getContext())); 1005d3875ca7ca9294a00f9da0a92ad9055adeb9703Craig Stout 1015d3875ca7ca9294a00f9da0a92ad9055adeb9703Craig Stout Object item = new Object(); 1025d3875ca7ca9294a00f9da0a92ad9055adeb9703Craig Stout PlaybackControlsRow controlsRow = new PlaybackControlsRow(item); 1035d3875ca7ca9294a00f9da0a92ad9055adeb9703Craig Stout 1045d3875ca7ca9294a00f9da0a92ad9055adeb9703Craig Stout controlsRowPresenter.onBindRowViewHolder(vh, controlsRow); 1055d3875ca7ca9294a00f9da0a92ad9055adeb9703Craig Stout assertEquals("Controls card right panel layout height", 1065d3875ca7ca9294a00f9da0a92ad9055adeb9703Craig Stout vh.view.findViewById(R.id.controls_card_right_panel).getLayoutParams().height, 1075d3875ca7ca9294a00f9da0a92ad9055adeb9703Craig Stout LayoutParams.WRAP_CONTENT); 1085d3875ca7ca9294a00f9da0a92ad9055adeb9703Craig Stout assertEquals("Description dock layout height", 1095d3875ca7ca9294a00f9da0a92ad9055adeb9703Craig Stout vh.view.findViewById(R.id.description_dock).getLayoutParams().height, 1105d3875ca7ca9294a00f9da0a92ad9055adeb9703Craig Stout LayoutParams.WRAP_CONTENT); 1115d3875ca7ca9294a00f9da0a92ad9055adeb9703Craig Stout controlsRowPresenter.onUnbindRowViewHolder(vh); 1125d3875ca7ca9294a00f9da0a92ad9055adeb9703Craig Stout 1135d3875ca7ca9294a00f9da0a92ad9055adeb9703Craig Stout controlsRow.setImageBitmap( 1145d3875ca7ca9294a00f9da0a92ad9055adeb9703Craig Stout getContext(), Bitmap.createBitmap(10, 10, Bitmap.Config.ARGB_8888)); 1155d3875ca7ca9294a00f9da0a92ad9055adeb9703Craig Stout controlsRowPresenter.onBindRowViewHolder(vh, controlsRow); 1165d3875ca7ca9294a00f9da0a92ad9055adeb9703Craig Stout AssertHelper.assertGreaterThan("Controls card right panel layout height", 1175d3875ca7ca9294a00f9da0a92ad9055adeb9703Craig Stout vh.view.findViewById(R.id.controls_card_right_panel).getLayoutParams().height, 0); 1185d3875ca7ca9294a00f9da0a92ad9055adeb9703Craig Stout assertEquals("Description dock layout height", 1195d3875ca7ca9294a00f9da0a92ad9055adeb9703Craig Stout vh.view.findViewById(R.id.description_dock).getLayoutParams().height, 0); 1205d3875ca7ca9294a00f9da0a92ad9055adeb9703Craig Stout controlsRowPresenter.onUnbindRowViewHolder(vh); 1215d3875ca7ca9294a00f9da0a92ad9055adeb9703Craig Stout } 122575dc8a5a5c023aee0c0ec297a7d357685cf49e9Craig Stout} 123