1/* 2 * Copyright (C) 2015 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16package android.support.v17.leanback.widget; 17 18import android.graphics.Bitmap; 19import android.support.v17.leanback.app.HeadersFragment; 20import android.support.v17.leanback.R; 21import android.test.AndroidTestCase; 22import android.view.ContextThemeWrapper; 23import android.widget.FrameLayout; 24import android.view.View; 25import android.view.ViewGroup.LayoutParams; 26 27public class PresenterTest extends AndroidTestCase { 28 29 public void testZoomFactors() throws Throwable { 30 new ListRowPresenter(FocusHighlight.ZOOM_FACTOR_SMALL); 31 new ListRowPresenter(FocusHighlight.ZOOM_FACTOR_MEDIUM); 32 new ListRowPresenter(FocusHighlight.ZOOM_FACTOR_LARGE); 33 new ListRowPresenter(FocusHighlight.ZOOM_FACTOR_XSMALL); 34 try { 35 new ListRowPresenter(100); 36 fail("Should have thrown exception"); 37 } catch (IllegalArgumentException exception) { 38 } 39 } 40 41 private void testHeaderPresenter(RowHeaderPresenter p) { 42 int expectedVisibility; 43 Presenter.ViewHolder vh = p.onCreateViewHolder(new FrameLayout(getContext())); 44 p.onBindViewHolder(vh, null); 45 expectedVisibility = p.isNullItemVisibilityGone() ? View.GONE : View.VISIBLE; 46 assertTrue("Header visibility", 47 vh.view.getVisibility() == expectedVisibility); 48 p.onBindViewHolder(vh, new Row(null)); 49 assertTrue("Header visibility", 50 vh.view.getVisibility() == expectedVisibility); 51 p.onBindViewHolder(vh, new Row(new HeaderItem(""))); 52 assertTrue("Header visibility", 53 vh.view.getVisibility() == View.VISIBLE); 54 } 55 56 public void testHeaderPresenter() throws Throwable { 57 HeadersFragment hf = new HeadersFragment(); 58 PresenterSelector ps = hf.getPresenterSelector(); 59 60 Presenter p = ps.getPresenter(new Row()); 61 assertTrue("Row header instance", 62 p instanceof RowHeaderPresenter); 63 assertFalse("isNullItemVisibilityGone", 64 ((RowHeaderPresenter) p).isNullItemVisibilityGone()); 65 testHeaderPresenter((RowHeaderPresenter) p); 66 67 p = ps.getPresenter(new SectionRow("Section Name")); 68 assertTrue("Row header instance", 69 p instanceof RowHeaderPresenter); 70 assertFalse("isNullItemVisibilityGone", 71 ((RowHeaderPresenter) p).isNullItemVisibilityGone()); 72 testHeaderPresenter((RowHeaderPresenter) p); 73 74 p = ps.getPresenter(new DividerRow()); 75 assertTrue("Row header instance", 76 p instanceof DividerPresenter); 77 78 ListRowPresenter lrp = new ListRowPresenter(); 79 assertTrue("Row header instance", 80 lrp.getHeaderPresenter() instanceof RowHeaderPresenter); 81 RowHeaderPresenter rhp = (RowHeaderPresenter) lrp.getHeaderPresenter(); 82 assertTrue("isNullItemVisibilityGone", 83 rhp.isNullItemVisibilityGone()); 84 testHeaderPresenter(rhp); 85 } 86 87 public void testPlaybackControlsRowPresenter() { 88 setContext(new ContextThemeWrapper(getContext(), R.style.Theme_Leanback)); 89 Presenter detailsPresenter = new AbstractDetailsDescriptionPresenter() { 90 @Override 91 protected void onBindDescription(ViewHolder vh, Object item) { 92 vh.getTitle().setText("The quick brown fox jumped over the lazy dog"); 93 vh.getSubtitle().setText("Subtitle"); 94 } 95 }; 96 PlaybackControlsRowPresenter controlsRowPresenter = new PlaybackControlsRowPresenter( 97 detailsPresenter); 98 PlaybackControlsRowPresenter.ViewHolder vh = (PlaybackControlsRowPresenter.ViewHolder) 99 controlsRowPresenter.onCreateViewHolder(new FrameLayout(getContext())); 100 101 Object item = new Object(); 102 PlaybackControlsRow controlsRow = new PlaybackControlsRow(item); 103 104 controlsRowPresenter.onBindRowViewHolder(vh, controlsRow); 105 assertEquals("Controls card right panel layout height", 106 vh.view.findViewById(R.id.controls_card_right_panel).getLayoutParams().height, 107 LayoutParams.WRAP_CONTENT); 108 assertEquals("Description dock layout height", 109 vh.view.findViewById(R.id.description_dock).getLayoutParams().height, 110 LayoutParams.WRAP_CONTENT); 111 controlsRowPresenter.onUnbindRowViewHolder(vh); 112 113 controlsRow.setImageBitmap( 114 getContext(), Bitmap.createBitmap(10, 10, Bitmap.Config.ARGB_8888)); 115 controlsRowPresenter.onBindRowViewHolder(vh, controlsRow); 116 AssertHelper.assertGreaterThan("Controls card right panel layout height", 117 vh.view.findViewById(R.id.controls_card_right_panel).getLayoutParams().height, 0); 118 assertEquals("Description dock layout height", 119 vh.view.findViewById(R.id.description_dock).getLayoutParams().height, 0); 120 controlsRowPresenter.onUnbindRowViewHolder(vh); 121 } 122} 123