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 androidx.leanback.widget; 17 18import static org.junit.Assert.assertEquals; 19import static org.junit.Assert.assertFalse; 20import static org.junit.Assert.assertTrue; 21import static org.junit.Assert.fail; 22 23import android.content.Context; 24import android.graphics.Bitmap; 25import android.support.test.InstrumentationRegistry; 26import android.support.test.filters.MediumTest; 27import android.support.test.runner.AndroidJUnit4; 28import android.view.ContextThemeWrapper; 29import android.view.View; 30import android.view.ViewGroup.LayoutParams; 31import android.widget.FrameLayout; 32 33import androidx.leanback.R; 34import androidx.leanback.app.HeadersFragment; 35 36import org.junit.Before; 37import org.junit.Test; 38import org.junit.runner.RunWith; 39 40@MediumTest 41@RunWith(AndroidJUnit4.class) 42public class PresenterTest { 43 private Context mContext; 44 45 @Before 46 public void setup() throws Exception { 47 mContext = InstrumentationRegistry.getTargetContext(); 48 } 49 50 @Test 51 public void testZoomFactors() throws Throwable { 52 new ListRowPresenter(FocusHighlight.ZOOM_FACTOR_SMALL); 53 new ListRowPresenter(FocusHighlight.ZOOM_FACTOR_MEDIUM); 54 new ListRowPresenter(FocusHighlight.ZOOM_FACTOR_LARGE); 55 new ListRowPresenter(FocusHighlight.ZOOM_FACTOR_XSMALL); 56 try { 57 new ListRowPresenter(100); 58 fail("Should have thrown exception"); 59 } catch (IllegalArgumentException exception) { 60 } 61 } 62 63 private void testHeaderPresenter(RowHeaderPresenter p) { 64 int expectedVisibility; 65 Presenter.ViewHolder vh = p.onCreateViewHolder(new FrameLayout(mContext)); 66 p.onBindViewHolder(vh, null); 67 expectedVisibility = p.isNullItemVisibilityGone() ? View.GONE : View.VISIBLE; 68 assertTrue("Header visibility", 69 vh.view.getVisibility() == expectedVisibility); 70 p.onBindViewHolder(vh, new Row(null)); 71 assertTrue("Header visibility", 72 vh.view.getVisibility() == expectedVisibility); 73 p.onBindViewHolder(vh, new Row(new HeaderItem(""))); 74 assertTrue("Header visibility", 75 vh.view.getVisibility() == View.VISIBLE); 76 } 77 78 @Test 79 public void testHeaderPresenter() throws Throwable { 80 HeadersFragment hf = new HeadersFragment(); 81 PresenterSelector ps = hf.getPresenterSelector(); 82 83 Presenter p = ps.getPresenter(new Row()); 84 assertTrue("Row header instance", 85 p instanceof RowHeaderPresenter); 86 assertFalse("isNullItemVisibilityGone", 87 ((RowHeaderPresenter) p).isNullItemVisibilityGone()); 88 testHeaderPresenter((RowHeaderPresenter) p); 89 90 p = ps.getPresenter(new SectionRow("Section Name")); 91 assertTrue("Row header instance", 92 p instanceof RowHeaderPresenter); 93 assertFalse("isNullItemVisibilityGone", 94 ((RowHeaderPresenter) p).isNullItemVisibilityGone()); 95 testHeaderPresenter((RowHeaderPresenter) p); 96 97 p = ps.getPresenter(new DividerRow()); 98 assertTrue("Row header instance", 99 p instanceof DividerPresenter); 100 101 ListRowPresenter lrp = new ListRowPresenter(); 102 assertTrue("Row header instance", 103 lrp.getHeaderPresenter() instanceof RowHeaderPresenter); 104 RowHeaderPresenter rhp = (RowHeaderPresenter) lrp.getHeaderPresenter(); 105 assertTrue("isNullItemVisibilityGone", 106 rhp.isNullItemVisibilityGone()); 107 testHeaderPresenter(rhp); 108 } 109 110 @Test 111 public void testRowHeaderPresenter() { 112 RowHeaderPresenter p = new RowHeaderPresenter(); 113 p.setNullItemVisibilityGone(true); 114 RowHeaderPresenter.ViewHolder vh = (RowHeaderPresenter.ViewHolder) 115 p.onCreateViewHolder(new FrameLayout(mContext)); 116 p.onBindViewHolder(vh, null); 117 assertEquals("Header visibility", View.GONE, vh.view.getVisibility()); 118 p.onBindViewHolder(vh, new Row(null)); 119 assertEquals("Header visibility", View.GONE, vh.view.getVisibility()); 120 121 p.onBindViewHolder(vh, new Row(new HeaderItem(""))); 122 assertEquals("Header visibility", View.VISIBLE, vh.view.getVisibility()); 123 assertEquals("Header Description visibility", View.GONE, 124 vh.mDescriptionView.getVisibility()); 125 126 HeaderItem item = new HeaderItem(""); 127 item.setDescription("description"); 128 p.onBindViewHolder(vh, new Row(item)); 129 assertEquals("Header visibility", View.VISIBLE, vh.view.getVisibility()); 130 assertEquals("Header Description visibility", View.VISIBLE, 131 vh.mDescriptionView.getVisibility()); 132 } 133 134 @Test 135 public void testSingleRowHeaderPresenter() { 136 RowHeaderPresenter p = new RowHeaderPresenter(); 137 RowHeaderPresenter.ViewHolder vh = new RowHeaderPresenter.ViewHolder( 138 new RowHeaderView(mContext)); 139 HeaderItem item = new HeaderItem(""); 140 p.onBindViewHolder(vh, new Row(item)); 141 assertEquals("Header visibility", View.VISIBLE, vh.view.getVisibility()); 142 } 143 144 @Test 145 public void testPlaybackControlsRowPresenter() { 146 Context context = new ContextThemeWrapper(mContext, R.style.Theme_Leanback); 147 Presenter detailsPresenter = new AbstractDetailsDescriptionPresenter() { 148 @Override 149 protected void onBindDescription(ViewHolder vh, Object item) { 150 vh.getTitle().setText("The quick brown fox jumped over the lazy dog"); 151 vh.getSubtitle().setText("Subtitle"); 152 } 153 }; 154 PlaybackControlsRowPresenter controlsRowPresenter = new PlaybackControlsRowPresenter( 155 detailsPresenter); 156 PlaybackControlsRowPresenter.ViewHolder vh = (PlaybackControlsRowPresenter.ViewHolder) 157 controlsRowPresenter.onCreateViewHolder(new FrameLayout(context)); 158 159 Object item = new Object(); 160 PlaybackControlsRow controlsRow = new PlaybackControlsRow(item); 161 162 controlsRowPresenter.onBindRowViewHolder(vh, controlsRow); 163 assertEquals("Controls card right panel layout height", 164 vh.view.findViewById(R.id.controls_card_right_panel).getLayoutParams().height, 165 LayoutParams.WRAP_CONTENT); 166 assertEquals("Description dock layout height", 167 vh.view.findViewById(R.id.description_dock).getLayoutParams().height, 168 LayoutParams.WRAP_CONTENT); 169 controlsRowPresenter.onUnbindRowViewHolder(vh); 170 171 controlsRow.setImageBitmap( 172 context, Bitmap.createBitmap(10, 10, Bitmap.Config.ARGB_8888)); 173 controlsRowPresenter.onBindRowViewHolder(vh, controlsRow); 174 AssertHelper.assertGreaterThan("Controls card right panel layout height", 175 vh.view.findViewById(R.id.controls_card_right_panel).getLayoutParams().height, 0); 176 assertEquals("Description dock layout height", 177 vh.view.findViewById(R.id.description_dock).getLayoutParams().height, 0); 178 controlsRowPresenter.onUnbindRowViewHolder(vh); 179 } 180} 181