ListRowPresenterTest.java revision a23c768a1a61495852074869b244064cf535b4c1
1/* 2 * Copyright (C) 2017 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 */ 16 17package android.support.v17.leanback.widget; 18 19import static junit.framework.Assert.assertEquals; 20import static junit.framework.Assert.assertFalse; 21import static junit.framework.Assert.assertTrue; 22 23import android.content.Context; 24import android.graphics.Color; 25import android.graphics.drawable.ColorDrawable; 26import android.graphics.drawable.Drawable; 27import android.os.Build; 28import android.support.test.InstrumentationRegistry; 29import android.support.test.filters.SmallTest; 30import android.support.test.runner.AndroidJUnit4; 31import android.support.v17.leanback.R; 32import android.support.v4.view.ViewCompat; 33import android.view.View; 34import android.view.ViewGroup; 35import android.widget.FrameLayout; 36 37import org.junit.Test; 38import org.junit.runner.RunWith; 39 40@RunWith(AndroidJUnit4.class) 41@SmallTest 42public class ListRowPresenterTest { 43 44 // default overlay color when setSelectLevel(0.5f) 45 static final int HALF_OVERLAY_COLOR = 0x4C000000; 46 static int sFocusedZ; 47 48 static class DummyPresenter extends Presenter { 49 @Override 50 public ViewHolder onCreateViewHolder(ViewGroup parent) { 51 View view = new View(parent.getContext()); 52 view.setFocusable(true); 53 view.setId(R.id.lb_action_button); 54 view.setLayoutParams(new ViewGroup.LayoutParams(100, 100)); 55 return new Presenter.ViewHolder(view); 56 } 57 58 @Override 59 public void onBindViewHolder(ViewHolder viewHolder, Object item) { 60 } 61 62 @Override 63 public void onUnbindViewHolder(ViewHolder viewHolder) { 64 } 65 } 66 67 Context mContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); 68 ListRowPresenter mListRowPresenter; 69 ListRow mRow; 70 ListRowPresenter.ViewHolder mListVh; 71 72 void setup(ListRowPresenter listRowPresenter, ObjectAdapter adapter) { 73 sFocusedZ = mContext.getResources().getDimensionPixelSize( 74 R.dimen.lb_material_shadow_focused_z); 75 assertTrue(sFocusedZ > 0); 76 mListRowPresenter = listRowPresenter; 77 mRow = new ListRow(adapter); 78 InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runnable() { 79 @Override 80 public void run() { 81 final ViewGroup parent = new FrameLayout(mContext); 82 Presenter.ViewHolder containerVh = mListRowPresenter.onCreateViewHolder(parent); 83 parent.addView(containerVh.view, 1000, 1000); 84 mListVh = (ListRowPresenter.ViewHolder) mListRowPresenter.getRowViewHolder( 85 containerVh); 86 mListRowPresenter.onBindViewHolder(mListVh, mRow); 87 runRecyclerViewLayout(); 88 } 89 }); 90 } 91 92 void runRecyclerViewLayout() { 93 mListVh.view.measure(View.MeasureSpec.makeMeasureSpec(1000, View.MeasureSpec.EXACTLY), 94 View.MeasureSpec.makeMeasureSpec(1000, View.MeasureSpec.EXACTLY)); 95 mListVh.view.layout(0, 0, 1000, 1000); 96 } 97 98 static void assertChildrenHaveAlpha(ViewGroup group, int numChildren, float alpha) { 99 assertEquals(numChildren, group.getChildCount()); 100 for (int i = 0; i < numChildren; i++) { 101 assertEquals(alpha, group.getChildAt(i).getAlpha()); 102 } 103 } 104 105 static Drawable getForeground(View view) { 106 if (Build.VERSION.SDK_INT >= 23) { 107 return view.getForeground(); 108 } 109 return null; 110 } 111 112 static void assertChildrenHaveColorOverlay(ViewGroup group, int numChildren, int overlayColor, 113 boolean keepChildForeground) { 114 assertEquals(numChildren, group.getChildCount()); 115 for (int i = 0; i < numChildren; i++) { 116 View view = group.getChildAt(i); 117 if (keepChildForeground) { 118 assertTrue("When keepChildForeground, always create a" 119 + " ShadowOverlayContainer", view instanceof ShadowOverlayContainer); 120 assertEquals(overlayColor, ((ShadowOverlayContainer) view).mOverlayColor); 121 } else { 122 if (view instanceof ShadowOverlayContainer) { 123 assertEquals(overlayColor, ((ShadowOverlayContainer) view).mOverlayColor); 124 } else { 125 Drawable foreground = getForeground(view); 126 assertEquals(overlayColor, 127 foreground instanceof ColorDrawable 128 ? ((ColorDrawable) foreground).getColor() : Color.TRANSPARENT); 129 } 130 } 131 } 132 } 133 134 public void defaultListRowOverlayColor(ListRowPresenter listRowPresenter) { 135 final ArrayObjectAdapter arrayAdapter = new ArrayObjectAdapter(new DummyPresenter()); 136 arrayAdapter.add("abc"); 137 setup(listRowPresenter, arrayAdapter); 138 InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runnable() { 139 @Override 140 public void run() { 141 mListVh.getGridView().setItemAnimator(null); 142 mListRowPresenter.setSelectLevel(mListVh, 0.5f); 143 } 144 }); 145 boolean keepChildForeground = listRowPresenter.isKeepChildForeground(); 146 assertChildrenHaveColorOverlay(mListVh.getGridView(), 1, HALF_OVERLAY_COLOR, 147 keepChildForeground); 148 InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runnable() { 149 @Override 150 public void run() { 151 arrayAdapter.add("def"); 152 runRecyclerViewLayout(); 153 } 154 }); 155 assertChildrenHaveColorOverlay(mListVh.getGridView(), 2, HALF_OVERLAY_COLOR, 156 keepChildForeground); 157 } 158 159 @Test 160 public void defaultListRowOverlayColor() { 161 defaultListRowOverlayColor(new ListRowPresenter()); 162 } 163 164 @Test 165 public void defaultListRowOverlayColorCombinations() { 166 for (boolean keepChildForeground: new boolean[] {false, true}) { 167 for (boolean isUzingZorder : new boolean[]{false, true}) { 168 for (boolean isUsingDefaultShadow : new boolean[]{false, true}) { 169 for (boolean enableRoundedCorner : new boolean[]{false, true}) { 170 for (boolean shadowEnabled : new boolean[]{false, true}) { 171 final boolean paramIsUsingZorder = isUzingZorder; 172 final boolean paramIsUsingDefaultShadow = isUsingDefaultShadow; 173 ListRowPresenter presenter = new ListRowPresenter() { 174 @Override 175 public boolean isUsingZOrder(Context context) { 176 return paramIsUsingZorder; 177 } 178 179 @Override 180 public boolean isUsingDefaultShadow() { 181 return paramIsUsingDefaultShadow; 182 } 183 }; 184 presenter.setKeepChildForeground(keepChildForeground); 185 presenter.setShadowEnabled(shadowEnabled); 186 presenter.enableChildRoundedCorners(enableRoundedCorner); 187 defaultListRowOverlayColor(presenter); 188 } 189 } 190 } 191 } 192 } 193 } 194 195 static class CustomSelectEffectRowPresenter extends ListRowPresenter { 196 @Override 197 public boolean isUsingDefaultListSelectEffect() { 198 return false; 199 } 200 201 @Override 202 protected void applySelectLevelToChild(ViewHolder rowViewHolder, View childView) { 203 childView.setAlpha(rowViewHolder.getSelectLevel()); 204 } 205 }; 206 207 public void customListRowSelectEffect(ListRowPresenter presenter) { 208 final ArrayObjectAdapter arrayAdapter = new ArrayObjectAdapter(new DummyPresenter()); 209 arrayAdapter.add("abc"); 210 setup(presenter, arrayAdapter); 211 InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runnable() { 212 @Override 213 public void run() { 214 mListVh.getGridView().setItemAnimator(null); 215 mListRowPresenter.setSelectLevel(mListVh, 0.5f); 216 } 217 }); 218 assertChildrenHaveAlpha(mListVh.getGridView(), 1, 0.5f); 219 InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runnable() { 220 @Override 221 public void run() { 222 arrayAdapter.add("def"); 223 runRecyclerViewLayout(); 224 } 225 }); 226 assertChildrenHaveAlpha(mListVh.getGridView(), 2, 0.5f); 227 } 228 229 @Test 230 public void customListRowSelectEffect() { 231 customListRowSelectEffect(new CustomSelectEffectRowPresenter()); 232 } 233 234 @Test 235 public void customListRowSelectEffectCombinations() { 236 for (boolean keepChildForeground: new boolean[] {false, true}) { 237 for (boolean isUzingZorder: new boolean[] {false, true}) { 238 for (boolean isUsingDefaultShadow: new boolean[] {false, true}) { 239 for (boolean enableRoundedCorner : new boolean[]{false, true}) { 240 for (boolean shadowEnabled : new boolean[]{false, true}) { 241 final boolean paramIsUsingZorder = isUzingZorder; 242 final boolean paramIsUsingDefaultShadow = isUsingDefaultShadow; 243 ListRowPresenter presenter = new CustomSelectEffectRowPresenter() { 244 @Override 245 public boolean isUsingZOrder(Context context) { 246 return paramIsUsingZorder; 247 } 248 249 @Override 250 public boolean isUsingDefaultShadow() { 251 return paramIsUsingDefaultShadow; 252 } 253 }; 254 presenter.setKeepChildForeground(keepChildForeground); 255 presenter.setShadowEnabled(shadowEnabled); 256 presenter.enableChildRoundedCorners(enableRoundedCorner); 257 customListRowSelectEffect(presenter); 258 } 259 } 260 } 261 } 262 } 263 } 264 265 static class ShadowOverlayResult { 266 boolean mShadowOverlayContainer; 267 int mShadowOverlayContainerOverlayColor; 268 float mShadowOverlayContainerOverlayZ; 269 boolean mShadowOverlayContainerOpticalBounds; 270 int mViewOverlayColor; 271 float mViewZ; 272 boolean mViewOpticalBounds; 273 void expect(boolean shadowOverlayContainer, int shadowOverlayContainerOverlayColor, 274 float shadowOverlayContainerOverlayZ, boolean shadowOverlayContainerOpticalBounds, 275 int viewOverlayColor, float viewZ, boolean viewOpticalBounds) { 276 assertEquals(this.mShadowOverlayContainer, shadowOverlayContainer); 277 assertEquals(this.mShadowOverlayContainerOverlayColor, 278 shadowOverlayContainerOverlayColor); 279 assertEquals(this.mShadowOverlayContainerOverlayZ, shadowOverlayContainerOverlayZ); 280 assertEquals(this.mShadowOverlayContainerOpticalBounds, 281 shadowOverlayContainerOpticalBounds); 282 assertEquals(this.mViewOverlayColor, viewOverlayColor); 283 assertEquals(this.mViewZ, viewZ); 284 assertEquals(this.mViewOpticalBounds, viewOpticalBounds); 285 } 286 } 287 288 ShadowOverlayResult setupDefaultPresenterWithSingleElement(final boolean isUsingZorder, 289 final boolean isUsingDefaultShadow, 290 final boolean enableRoundedCorner, 291 final boolean shadowEnabled, 292 final boolean keepChildForeground) { 293 ArrayObjectAdapter adapter = new ArrayObjectAdapter(new DummyPresenter()); 294 adapter.add("abc"); 295 ListRowPresenter listRowPresenter = new ListRowPresenter() { 296 @Override 297 public boolean isUsingZOrder(Context context) { 298 return isUsingZorder; 299 } 300 301 @Override 302 public boolean isUsingDefaultShadow() { 303 return isUsingDefaultShadow; 304 } 305 }; 306 listRowPresenter.setShadowEnabled(shadowEnabled); 307 listRowPresenter.enableChildRoundedCorners(enableRoundedCorner); 308 listRowPresenter.setKeepChildForeground(keepChildForeground); 309 setup(listRowPresenter, adapter); 310 InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runnable() { 311 @Override 312 public void run() { 313 mListVh.getGridView().setItemAnimator(null); 314 mListRowPresenter.setSelectLevel(mListVh, 0.5f); 315 View child = mListVh.getGridView().getChildAt(0); 316 FocusHighlightHelper.FocusAnimator animator = (FocusHighlightHelper.FocusAnimator) 317 child.getTag(R.id.lb_focus_animator); 318 animator.animateFocus(true, true); 319 } 320 }); 321 return collectResult(); 322 } 323 324 ShadowOverlayResult collectResult() { 325 ShadowOverlayResult result = new ShadowOverlayResult(); 326 View view = mListVh.getGridView().getChildAt(0); 327 if (view instanceof ShadowOverlayContainer) { 328 result.mShadowOverlayContainer = true; 329 result.mShadowOverlayContainerOverlayColor = ((ShadowOverlayContainer) view) 330 .mOverlayColor; 331 result.mShadowOverlayContainerOverlayZ = ViewCompat.getZ(view); 332 result.mShadowOverlayContainerOpticalBounds = view.getWidth() > 100; 333 } else { 334 result.mShadowOverlayContainer = false; 335 } 336 view = view.findViewById(R.id.lb_action_button); 337 Drawable d = getForeground(view); 338 result.mViewOverlayColor = d instanceof ColorDrawable ? ((ColorDrawable) d).getColor() 339 : Color.TRANSPARENT; 340 result.mViewZ = ViewCompat.getZ(view); 341 result.mViewOpticalBounds = view.getWidth() > 100; 342 return result; 343 } 344 345 @Test 346 public void shadowOverlayContainerTest01() { 347 final boolean isUsingZorder = false; 348 final boolean isUsingDefaultShadow = false; 349 final boolean enableRoundedCorner = false; 350 final boolean shadowEnabled = false; 351 final boolean keepChildForeground = false; 352 ShadowOverlayResult result = setupDefaultPresenterWithSingleElement(isUsingZorder, 353 isUsingDefaultShadow, enableRoundedCorner, shadowEnabled, keepChildForeground); 354 final int version = Build.VERSION.SDK_INT; 355 if (version < 21) { 356 // nothing supported 357 result.expect(true, HALF_OVERLAY_COLOR, 0, false, 358 0, 0, false); 359 } else if (version < 23) { 360 // supports static/dynamic shadow, supports rounded corner 361 result.expect(true, HALF_OVERLAY_COLOR, 0, false, 362 0, 0, false); 363 } else { 364 // supports foreground 365 result.expect(false, 0, 0, false, 366 HALF_OVERLAY_COLOR, 0, false); 367 } 368 } 369 370 @Test 371 public void shadowOverlayContainerTest02() { 372 final boolean isUsingZorder = false; 373 final boolean isUsingDefaultShadow = false; 374 final boolean enableRoundedCorner = false; 375 final boolean shadowEnabled = false; 376 final boolean keepChildForeground = true; 377 ShadowOverlayResult result = setupDefaultPresenterWithSingleElement(isUsingZorder, 378 isUsingDefaultShadow, enableRoundedCorner, shadowEnabled, keepChildForeground); 379 final int version = Build.VERSION.SDK_INT; 380 if (version < 21) { 381 // nothing supported 382 result.expect(true, HALF_OVERLAY_COLOR, 0, false, 383 0, 0, false); 384 } else if (version < 23) { 385 // supports static/dynamic shadow, supports rounded corner 386 result.expect(true, HALF_OVERLAY_COLOR, 0, false, 387 0, 0, false); 388 } else { 389 // supports foreground 390 result.expect(true, HALF_OVERLAY_COLOR, 0, false, 391 0, 0, false); 392 } 393 } 394 395 @Test 396 public void shadowOverlayContainerTest03() { 397 final boolean isUsingZorder = false; 398 final boolean isUsingDefaultShadow = false; 399 final boolean enableRoundedCorner = false; 400 final boolean shadowEnabled = true; 401 final boolean keepChildForeground = false; 402 ShadowOverlayResult result = setupDefaultPresenterWithSingleElement(isUsingZorder, 403 isUsingDefaultShadow, enableRoundedCorner, shadowEnabled, keepChildForeground); 404 final int version = Build.VERSION.SDK_INT; 405 if (version < 21) { 406 // nothing supported 407 result.expect(true, HALF_OVERLAY_COLOR, 0, false, 408 0, 0, false); 409 } else if (version < 23) { 410 // supports static/dynamic shadow, supports rounded corner 411 result.expect(true, HALF_OVERLAY_COLOR, 0, false, 412 0, 0, false); 413 } else { 414 // supports foreground 415 result.expect(false, 0, 0, false, 416 HALF_OVERLAY_COLOR, 0, false); 417 } 418 } 419 420 @Test 421 public void shadowOverlayContainerTest04() { 422 final boolean isUsingZorder = false; 423 final boolean isUsingDefaultShadow = false; 424 final boolean enableRoundedCorner = false; 425 final boolean shadowEnabled = true; 426 final boolean keepChildForeground = true; 427 ShadowOverlayResult result = setupDefaultPresenterWithSingleElement(isUsingZorder, 428 isUsingDefaultShadow, enableRoundedCorner, shadowEnabled, keepChildForeground); 429 final int version = Build.VERSION.SDK_INT; 430 if (version < 21) { 431 // nothing supported 432 result.expect(true, HALF_OVERLAY_COLOR, 0, false, 433 0, 0, false); 434 } else if (version < 23) { 435 // supports static/dynamic shadow, supports rounded corner 436 result.expect(true, HALF_OVERLAY_COLOR, 0, false, 437 0, 0, false); 438 } else { 439 // supports foreground 440 result.expect(true, HALF_OVERLAY_COLOR, 0, false, 441 0, 0, false); 442 } 443 } 444 445 @Test 446 public void shadowOverlayContainerTest05() { 447 final boolean isUsingZorder = false; 448 final boolean isUsingDefaultShadow = false; 449 final boolean enableRoundedCorner = true; 450 final boolean shadowEnabled = false; 451 final boolean keepChildForeground = false; 452 ShadowOverlayResult result = setupDefaultPresenterWithSingleElement(isUsingZorder, 453 isUsingDefaultShadow, enableRoundedCorner, shadowEnabled, keepChildForeground); 454 final int version = Build.VERSION.SDK_INT; 455 if (version < 21) { 456 // nothing supported 457 result.expect(true, HALF_OVERLAY_COLOR, 0, false, 458 0, 0, false); 459 } else if (version < 23) { 460 // supports static/dynamic shadow, supports rounded corner 461 result.expect(true, HALF_OVERLAY_COLOR, 0, false, 462 0, 0, false); 463 } else { 464 // supports foreground 465 result.expect(false, 0, 0, false, 466 HALF_OVERLAY_COLOR, 0, false); 467 } 468 } 469 470 @Test 471 public void shadowOverlayContainerTest06() { 472 final boolean isUsingZorder = false; 473 final boolean isUsingDefaultShadow = false; 474 final boolean enableRoundedCorner = true; 475 final boolean shadowEnabled = false; 476 final boolean keepChildForeground = true; 477 ShadowOverlayResult result = setupDefaultPresenterWithSingleElement(isUsingZorder, 478 isUsingDefaultShadow, enableRoundedCorner, shadowEnabled, keepChildForeground); 479 final int version = Build.VERSION.SDK_INT; 480 if (version < 21) { 481 // nothing supported 482 result.expect(true, HALF_OVERLAY_COLOR, 0, false, 483 0, 0, false); 484 } else if (version < 23) { 485 // supports static/dynamic shadow, supports rounded corner 486 result.expect(true, HALF_OVERLAY_COLOR, 0, false, 487 0, 0, false); 488 } else { 489 // supports foreground 490 result.expect(true, HALF_OVERLAY_COLOR, 0, false, 491 0, 0, false); 492 } 493 } 494 495 @Test 496 public void shadowOverlayContainerTest07() { 497 final boolean isUsingZorder = false; 498 final boolean isUsingDefaultShadow = false; 499 final boolean enableRoundedCorner = true; 500 final boolean shadowEnabled = true; 501 final boolean keepChildForeground = false; 502 ShadowOverlayResult result = setupDefaultPresenterWithSingleElement(isUsingZorder, 503 isUsingDefaultShadow, enableRoundedCorner, shadowEnabled, keepChildForeground); 504 final int version = Build.VERSION.SDK_INT; 505 if (version < 21) { 506 // nothing supported 507 result.expect(true, HALF_OVERLAY_COLOR, 0, false, 508 0, 0, false); 509 } else if (version < 23) { 510 // supports static/dynamic shadow, supports rounded corner 511 result.expect(true, HALF_OVERLAY_COLOR, 0, false, 512 0, 0, false); 513 } else { 514 // supports foreground 515 result.expect(false, 0, 0, false, 516 HALF_OVERLAY_COLOR, 0, false); 517 } 518 } 519 520 @Test 521 public void shadowOverlayContainerTest08() { 522 final boolean isUsingZorder = false; 523 final boolean isUsingDefaultShadow = false; 524 final boolean enableRoundedCorner = true; 525 final boolean shadowEnabled = true; 526 final boolean keepChildForeground = true; 527 ShadowOverlayResult result = setupDefaultPresenterWithSingleElement(isUsingZorder, 528 isUsingDefaultShadow, enableRoundedCorner, shadowEnabled, keepChildForeground); 529 final int version = Build.VERSION.SDK_INT; 530 if (version < 21) { 531 // nothing supported 532 result.expect(true, HALF_OVERLAY_COLOR, 0, false, 533 0, 0, false); 534 } else if (version < 23) { 535 // supports static/dynamic shadow, supports rounded corner 536 result.expect(true, HALF_OVERLAY_COLOR, 0, false, 537 0, 0, false); 538 } else { 539 // supports foreground 540 result.expect(true, HALF_OVERLAY_COLOR, 0, false, 541 0, 0, false); 542 } 543 } 544 545 @Test 546 public void shadowOverlayContainerTest09() { 547 final boolean isUsingZorder = false; 548 final boolean isUsingDefaultShadow = true; 549 final boolean enableRoundedCorner = false; 550 final boolean shadowEnabled = false; 551 final boolean keepChildForeground = false; 552 ShadowOverlayResult result = setupDefaultPresenterWithSingleElement(isUsingZorder, 553 isUsingDefaultShadow, enableRoundedCorner, shadowEnabled, keepChildForeground); 554 final int version = Build.VERSION.SDK_INT; 555 if (version < 21) { 556 // nothing supported 557 result.expect(true, HALF_OVERLAY_COLOR, 0, false, 558 0, 0, false); 559 } else if (version < 23) { 560 // supports static/dynamic shadow, supports rounded corner 561 result.expect(true, HALF_OVERLAY_COLOR, 0, false, 562 0, 0, false); 563 } else { 564 // supports foreground 565 result.expect(false, 0, 0, false, 566 HALF_OVERLAY_COLOR, 0, false); 567 } 568 } 569 570 @Test 571 public void shadowOverlayContainerTest10() { 572 final boolean isUsingZorder = false; 573 final boolean isUsingDefaultShadow = true; 574 final boolean enableRoundedCorner = false; 575 final boolean shadowEnabled = false; 576 final boolean keepChildForeground = true; 577 ShadowOverlayResult result = setupDefaultPresenterWithSingleElement(isUsingZorder, 578 isUsingDefaultShadow, enableRoundedCorner, shadowEnabled, keepChildForeground); 579 final int version = Build.VERSION.SDK_INT; 580 if (version < 21) { 581 // nothing supported 582 result.expect(true, HALF_OVERLAY_COLOR, 0, false, 583 0, 0, false); 584 } else if (version < 23) { 585 // supports static/dynamic shadow, supports rounded corner 586 result.expect(true, HALF_OVERLAY_COLOR, 0, false, 587 0, 0, false); 588 } else { 589 // supports foreground 590 result.expect(true, HALF_OVERLAY_COLOR, 0, false, 591 0, 0, false); 592 } 593 } 594 595 @Test 596 public void shadowOverlayContainerTest11() { 597 final boolean isUsingZorder = false; 598 final boolean isUsingDefaultShadow = true; 599 final boolean enableRoundedCorner = false; 600 final boolean shadowEnabled = true; 601 final boolean keepChildForeground = false; 602 ShadowOverlayResult result = setupDefaultPresenterWithSingleElement(isUsingZorder, 603 isUsingDefaultShadow, enableRoundedCorner, shadowEnabled, keepChildForeground); 604 final int version = Build.VERSION.SDK_INT; 605 if (version < 21) { 606 // nothing supported 607 result.expect(true, HALF_OVERLAY_COLOR, 0, false, 608 0, 0, false); 609 } else if (version < 23) { 610 // supports static/dynamic shadow, supports rounded corner 611 result.expect(true, HALF_OVERLAY_COLOR, 0, true, 612 0, 0, false); 613 } else { 614 // supports foreground 615 result.expect(true, HALF_OVERLAY_COLOR, 0, true, 616 0, 0, false); 617 } 618 } 619 620 @Test 621 public void shadowOverlayContainerTest12() { 622 final boolean isUsingZorder = false; 623 final boolean isUsingDefaultShadow = true; 624 final boolean enableRoundedCorner = false; 625 final boolean shadowEnabled = true; 626 final boolean keepChildForeground = true; 627 ShadowOverlayResult result = setupDefaultPresenterWithSingleElement(isUsingZorder, 628 isUsingDefaultShadow, enableRoundedCorner, shadowEnabled, keepChildForeground); 629 final int version = Build.VERSION.SDK_INT; 630 if (version < 21) { 631 // nothing supported 632 result.expect(true, HALF_OVERLAY_COLOR, 0, false, 633 0, 0, false); 634 } else if (version < 23) { 635 // supports static/dynamic shadow, supports rounded corner 636 result.expect(true, HALF_OVERLAY_COLOR, 0, true, 637 0, 0, false); 638 } else { 639 // supports foreground 640 result.expect(true, HALF_OVERLAY_COLOR, 0, true, 641 0, 0, false); 642 } 643 } 644 645 @Test 646 public void shadowOverlayContainerTest13() { 647 final boolean isUsingZorder = false; 648 final boolean isUsingDefaultShadow = true; 649 final boolean enableRoundedCorner = true; 650 final boolean shadowEnabled = false; 651 final boolean keepChildForeground = false; 652 ShadowOverlayResult result = setupDefaultPresenterWithSingleElement(isUsingZorder, 653 isUsingDefaultShadow, enableRoundedCorner, shadowEnabled, keepChildForeground); 654 final int version = Build.VERSION.SDK_INT; 655 if (version < 21) { 656 // nothing supported 657 result.expect(true, HALF_OVERLAY_COLOR, 0, false, 658 0, 0, false); 659 } else if (version < 23) { 660 // supports static/dynamic shadow, supports rounded corner 661 result.expect(true, HALF_OVERLAY_COLOR, 0, false, 662 0, 0, false); 663 } else { 664 // supports foreground 665 result.expect(false, 0, 0, false, 666 HALF_OVERLAY_COLOR, 0, false); 667 } 668 } 669 670 @Test 671 public void shadowOverlayContainerTest14() { 672 final boolean isUsingZorder = false; 673 final boolean isUsingDefaultShadow = true; 674 final boolean enableRoundedCorner = true; 675 final boolean shadowEnabled = false; 676 final boolean keepChildForeground = true; 677 ShadowOverlayResult result = setupDefaultPresenterWithSingleElement(isUsingZorder, 678 isUsingDefaultShadow, enableRoundedCorner, shadowEnabled, keepChildForeground); 679 final int version = Build.VERSION.SDK_INT; 680 if (version < 21) { 681 // nothing supported 682 result.expect(true, HALF_OVERLAY_COLOR, 0, false, 683 0, 0, false); 684 } else if (version < 23) { 685 // supports static/dynamic shadow, supports rounded corner 686 result.expect(true, HALF_OVERLAY_COLOR, 0, false, 687 0, 0, false); 688 } else { 689 // supports foreground 690 result.expect(true, HALF_OVERLAY_COLOR, 0, false, 691 0, 0, false); 692 } 693 } 694 695 @Test 696 public void shadowOverlayContainerTest15() { 697 final boolean isUsingZorder = false; 698 final boolean isUsingDefaultShadow = true; 699 final boolean enableRoundedCorner = true; 700 final boolean shadowEnabled = true; 701 final boolean keepChildForeground = false; 702 ShadowOverlayResult result = setupDefaultPresenterWithSingleElement(isUsingZorder, 703 isUsingDefaultShadow, enableRoundedCorner, shadowEnabled, keepChildForeground); 704 final int version = Build.VERSION.SDK_INT; 705 if (version < 21) { 706 // nothing supported 707 result.expect(true, HALF_OVERLAY_COLOR, 0, false, 708 0, 0, false); 709 } else if (version < 23) { 710 // supports static/dynamic shadow, supports rounded corner 711 result.expect(true, HALF_OVERLAY_COLOR, 0, true, 712 0, 0, false); 713 } else { 714 // supports foreground 715 result.expect(true, HALF_OVERLAY_COLOR, 0, true, 716 0, 0, false); 717 } 718 } 719 720 @Test 721 public void shadowOverlayContainerTest16() { 722 final boolean isUsingZorder = false; 723 final boolean isUsingDefaultShadow = true; 724 final boolean enableRoundedCorner = true; 725 final boolean shadowEnabled = true; 726 final boolean keepChildForeground = true; 727 ShadowOverlayResult result = setupDefaultPresenterWithSingleElement(isUsingZorder, 728 isUsingDefaultShadow, enableRoundedCorner, shadowEnabled, keepChildForeground); 729 final int version = Build.VERSION.SDK_INT; 730 if (version < 21) { 731 // nothing supported 732 result.expect(true, HALF_OVERLAY_COLOR, 0, false, 733 0, 0, false); 734 } else if (version < 23) { 735 // supports static/dynamic shadow, supports rounded corner 736 result.expect(true, HALF_OVERLAY_COLOR, 0, true, 737 0, 0, false); 738 } else { 739 // supports foreground 740 result.expect(true, HALF_OVERLAY_COLOR, 0, true, 741 0, 0, false); 742 } 743 } 744 745 @Test 746 public void shadowOverlayContainerTest17() { 747 final boolean isUsingZorder = true; 748 final boolean isUsingDefaultShadow = false; 749 final boolean enableRoundedCorner = false; 750 final boolean shadowEnabled = false; 751 final boolean keepChildForeground = false; 752 ShadowOverlayResult result = setupDefaultPresenterWithSingleElement(isUsingZorder, 753 isUsingDefaultShadow, enableRoundedCorner, shadowEnabled, keepChildForeground); 754 final int version = Build.VERSION.SDK_INT; 755 if (version < 21) { 756 // nothing supported 757 result.expect(true, HALF_OVERLAY_COLOR, 0, false, 758 0, 0, false); 759 } else if (version < 23) { 760 // supports static/dynamic shadow, supports rounded corner 761 result.expect(true, HALF_OVERLAY_COLOR, 0, false, 762 0, 0, false); 763 } else { 764 // supports foreground 765 result.expect(false, 0, 0, false, 766 HALF_OVERLAY_COLOR, 0, false); 767 } 768 } 769 770 @Test 771 public void shadowOverlayContainerTest18() { 772 final boolean isUsingZorder = true; 773 final boolean isUsingDefaultShadow = false; 774 final boolean enableRoundedCorner = false; 775 final boolean shadowEnabled = false; 776 final boolean keepChildForeground = true; 777 ShadowOverlayResult result = setupDefaultPresenterWithSingleElement(isUsingZorder, 778 isUsingDefaultShadow, enableRoundedCorner, shadowEnabled, keepChildForeground); 779 final int version = Build.VERSION.SDK_INT; 780 if (version < 21) { 781 // nothing supported 782 result.expect(true, HALF_OVERLAY_COLOR, 0, false, 783 0, 0, false); 784 } else if (version < 23) { 785 // supports static/dynamic shadow, supports rounded corner 786 result.expect(true, HALF_OVERLAY_COLOR, 0, false, 787 0, 0, false); 788 } else { 789 // supports foreground 790 result.expect(true, HALF_OVERLAY_COLOR, 0, false, 791 0, 0, false); 792 } 793 } 794 795 @Test 796 public void shadowOverlayContainerTest19() { 797 final boolean isUsingZorder = true; 798 final boolean isUsingDefaultShadow = false; 799 final boolean enableRoundedCorner = false; 800 final boolean shadowEnabled = true; 801 final boolean keepChildForeground = false; 802 ShadowOverlayResult result = setupDefaultPresenterWithSingleElement(isUsingZorder, 803 isUsingDefaultShadow, enableRoundedCorner, shadowEnabled, keepChildForeground); 804 final int version = Build.VERSION.SDK_INT; 805 if (version < 21) { 806 // nothing supported 807 result.expect(true, HALF_OVERLAY_COLOR, 0, false, 808 0, 0, false); 809 } else if (version < 23) { 810 // supports static/dynamic shadow, supports rounded corner 811 result.expect(true, HALF_OVERLAY_COLOR, 0, false, 812 0, 0, false); 813 } else { 814 // supports foreground 815 result.expect(false, 0, 0, false, 816 HALF_OVERLAY_COLOR, 0, false); 817 } 818 } 819 820 @Test 821 public void shadowOverlayContainerTest20() { 822 final boolean isUsingZorder = true; 823 final boolean isUsingDefaultShadow = false; 824 final boolean enableRoundedCorner = false; 825 final boolean shadowEnabled = true; 826 final boolean keepChildForeground = true; 827 ShadowOverlayResult result = setupDefaultPresenterWithSingleElement(isUsingZorder, 828 isUsingDefaultShadow, enableRoundedCorner, shadowEnabled, keepChildForeground); 829 final int version = Build.VERSION.SDK_INT; 830 if (version < 21) { 831 // nothing supported 832 result.expect(true, HALF_OVERLAY_COLOR, 0, false, 833 0, 0, false); 834 } else if (version < 23) { 835 // supports static/dynamic shadow, supports rounded corner 836 result.expect(true, HALF_OVERLAY_COLOR, 0, false, 837 0, 0, false); 838 } else { 839 // supports foreground 840 result.expect(true, HALF_OVERLAY_COLOR, 0, false, 841 0, 0, false); 842 } 843 } 844 845 @Test 846 public void shadowOverlayContainerTest21() { 847 final boolean isUsingZorder = true; 848 final boolean isUsingDefaultShadow = false; 849 final boolean enableRoundedCorner = true; 850 final boolean shadowEnabled = false; 851 final boolean keepChildForeground = false; 852 ShadowOverlayResult result = setupDefaultPresenterWithSingleElement(isUsingZorder, 853 isUsingDefaultShadow, enableRoundedCorner, shadowEnabled, keepChildForeground); 854 final int version = Build.VERSION.SDK_INT; 855 if (version < 21) { 856 // nothing supported 857 result.expect(true, HALF_OVERLAY_COLOR, 0, false, 858 0, 0, false); 859 } else if (version < 23) { 860 // supports static/dynamic shadow, supports rounded corner 861 result.expect(true, HALF_OVERLAY_COLOR, 0, false, 862 0, 0, false); 863 } else { 864 // supports foreground 865 result.expect(false, 0, 0, false, 866 HALF_OVERLAY_COLOR, 0, false); 867 } 868 } 869 870 @Test 871 public void shadowOverlayContainerTest22() { 872 final boolean isUsingZorder = true; 873 final boolean isUsingDefaultShadow = false; 874 final boolean enableRoundedCorner = true; 875 final boolean shadowEnabled = false; 876 final boolean keepChildForeground = true; 877 ShadowOverlayResult result = setupDefaultPresenterWithSingleElement(isUsingZorder, 878 isUsingDefaultShadow, enableRoundedCorner, shadowEnabled, keepChildForeground); 879 final int version = Build.VERSION.SDK_INT; 880 if (version < 21) { 881 // nothing supported 882 result.expect(true, HALF_OVERLAY_COLOR, 0, false, 883 0, 0, false); 884 } else if (version < 23) { 885 // supports static/dynamic shadow, supports rounded corner 886 result.expect(true, HALF_OVERLAY_COLOR, 0, false, 887 0, 0, false); 888 } else { 889 // supports foreground 890 result.expect(true, HALF_OVERLAY_COLOR, 0, false, 891 0, 0, false); 892 } 893 } 894 895 @Test 896 public void shadowOverlayContainerTest23() { 897 final boolean isUsingZorder = true; 898 final boolean isUsingDefaultShadow = false; 899 final boolean enableRoundedCorner = true; 900 final boolean shadowEnabled = true; 901 final boolean keepChildForeground = false; 902 ShadowOverlayResult result = setupDefaultPresenterWithSingleElement(isUsingZorder, 903 isUsingDefaultShadow, enableRoundedCorner, shadowEnabled, keepChildForeground); 904 final int version = Build.VERSION.SDK_INT; 905 if (version < 21) { 906 // nothing supported 907 result.expect(true, HALF_OVERLAY_COLOR, 0, false, 908 0, 0, false); 909 } else if (version < 23) { 910 // supports static/dynamic shadow, supports rounded corner 911 result.expect(true, HALF_OVERLAY_COLOR, 0, false, 912 0, 0, false); 913 } else { 914 // supports foreground 915 result.expect(false, 0, 0, false, 916 HALF_OVERLAY_COLOR, 0, false); 917 } 918 } 919 920 @Test 921 public void shadowOverlayContainerTest24() { 922 final boolean isUsingZorder = true; 923 final boolean isUsingDefaultShadow = false; 924 final boolean enableRoundedCorner = true; 925 final boolean shadowEnabled = true; 926 final boolean keepChildForeground = true; 927 ShadowOverlayResult result = setupDefaultPresenterWithSingleElement(isUsingZorder, 928 isUsingDefaultShadow, enableRoundedCorner, shadowEnabled, keepChildForeground); 929 final int version = Build.VERSION.SDK_INT; 930 if (version < 21) { 931 // nothing supported 932 result.expect(true, HALF_OVERLAY_COLOR, 0, false, 933 0, 0, false); 934 } else if (version < 23) { 935 // supports static/dynamic shadow, supports rounded corner 936 result.expect(true, HALF_OVERLAY_COLOR, 0, false, 937 0, 0, false); 938 } else { 939 // supports foreground 940 result.expect(true, HALF_OVERLAY_COLOR, 0, false, 941 0, 0, false); 942 } 943 } 944 945 @Test 946 public void shadowOverlayContainerTest25() { 947 final boolean isUsingZorder = true; 948 final boolean isUsingDefaultShadow = true; 949 final boolean enableRoundedCorner = false; 950 final boolean shadowEnabled = false; 951 final boolean keepChildForeground = false; 952 ShadowOverlayResult result = setupDefaultPresenterWithSingleElement(isUsingZorder, 953 isUsingDefaultShadow, enableRoundedCorner, shadowEnabled, keepChildForeground); 954 final int version = Build.VERSION.SDK_INT; 955 if (version < 21) { 956 // nothing supported 957 result.expect(true, HALF_OVERLAY_COLOR, 0, false, 958 0, 0, false); 959 } else if (version < 23) { 960 // supports static/dynamic shadow, supports rounded corner 961 result.expect(true, HALF_OVERLAY_COLOR, 0, false, 962 0, 0, false); 963 } else { 964 // supports foreground 965 result.expect(false, 0, 0, false, 966 HALF_OVERLAY_COLOR, 0, false); 967 } 968 } 969 970 @Test 971 public void shadowOverlayContainerTest26() { 972 final boolean isUsingZorder = true; 973 final boolean isUsingDefaultShadow = true; 974 final boolean enableRoundedCorner = false; 975 final boolean shadowEnabled = false; 976 final boolean keepChildForeground = true; 977 ShadowOverlayResult result = setupDefaultPresenterWithSingleElement(isUsingZorder, 978 isUsingDefaultShadow, enableRoundedCorner, shadowEnabled, keepChildForeground); 979 final int version = Build.VERSION.SDK_INT; 980 if (version < 21) { 981 // nothing supported 982 result.expect(true, HALF_OVERLAY_COLOR, 0, false, 983 0, 0, false); 984 } else if (version < 23) { 985 // supports static/dynamic shadow, supports rounded corner 986 result.expect(true, HALF_OVERLAY_COLOR, 0, false, 987 0, 0, false); 988 } else { 989 // supports foreground 990 result.expect(true, HALF_OVERLAY_COLOR, 0, false, 991 0, 0, false); 992 } 993 } 994 995 @Test 996 public void shadowOverlayContainerTest27() { 997 final boolean isUsingZorder = true; 998 final boolean isUsingDefaultShadow = true; 999 final boolean enableRoundedCorner = false; 1000 final boolean shadowEnabled = true; 1001 final boolean keepChildForeground = false; 1002 ShadowOverlayResult result = setupDefaultPresenterWithSingleElement(isUsingZorder, 1003 isUsingDefaultShadow, enableRoundedCorner, shadowEnabled, keepChildForeground); 1004 final int version = Build.VERSION.SDK_INT; 1005 if (version < 21) { 1006 // nothing supported 1007 result.expect(true, HALF_OVERLAY_COLOR, 0, false, 1008 0, 0, false); 1009 } else if (version < 23) { 1010 // supports static/dynamic shadow, supports rounded corner 1011 result.expect(true, HALF_OVERLAY_COLOR, sFocusedZ, false, 1012 0, 0, false); 1013 } else { 1014 // supports foreground 1015 result.expect(false, 0, 0, false, 1016 HALF_OVERLAY_COLOR, sFocusedZ, false); 1017 } 1018 } 1019 1020 @Test 1021 public void shadowOverlayContainerTest28() { 1022 final boolean isUsingZorder = true; 1023 final boolean isUsingDefaultShadow = true; 1024 final boolean enableRoundedCorner = false; 1025 final boolean shadowEnabled = true; 1026 final boolean keepChildForeground = true; 1027 ShadowOverlayResult result = setupDefaultPresenterWithSingleElement(isUsingZorder, 1028 isUsingDefaultShadow, enableRoundedCorner, shadowEnabled, keepChildForeground); 1029 final int version = Build.VERSION.SDK_INT; 1030 if (version < 21) { 1031 // nothing supported 1032 result.expect(true, HALF_OVERLAY_COLOR, 0, false, 1033 0, 0, false); 1034 } else if (version < 23) { 1035 // supports static/dynamic shadow, supports rounded corner 1036 result.expect(true, HALF_OVERLAY_COLOR, sFocusedZ, false, 1037 0, 0, false); 1038 } else { 1039 // supports foreground 1040 result.expect(true, HALF_OVERLAY_COLOR, sFocusedZ, false, 1041 0, 0, false); 1042 } 1043 } 1044 1045 @Test 1046 public void shadowOverlayContainerTest29() { 1047 final boolean isUsingZorder = true; 1048 final boolean isUsingDefaultShadow = true; 1049 final boolean enableRoundedCorner = true; 1050 final boolean shadowEnabled = false; 1051 final boolean keepChildForeground = false; 1052 ShadowOverlayResult result = setupDefaultPresenterWithSingleElement(isUsingZorder, 1053 isUsingDefaultShadow, enableRoundedCorner, shadowEnabled, keepChildForeground); 1054 final int version = Build.VERSION.SDK_INT; 1055 if (version < 21) { 1056 // nothing supported 1057 result.expect(true, HALF_OVERLAY_COLOR, 0, false, 1058 0, 0, false); 1059 } else if (version < 23) { 1060 // supports static/dynamic shadow, supports rounded corner 1061 result.expect(true, HALF_OVERLAY_COLOR, 0, false, 1062 0, 0, false); 1063 } else { 1064 // supports foreground 1065 result.expect(false, 0, 0, false, 1066 HALF_OVERLAY_COLOR, 0, false); 1067 } 1068 } 1069 1070 @Test 1071 public void shadowOverlayContainerTest30() { 1072 final boolean isUsingZorder = true; 1073 final boolean isUsingDefaultShadow = true; 1074 final boolean enableRoundedCorner = true; 1075 final boolean shadowEnabled = false; 1076 final boolean keepChildForeground = true; 1077 ShadowOverlayResult result = setupDefaultPresenterWithSingleElement(isUsingZorder, 1078 isUsingDefaultShadow, enableRoundedCorner, shadowEnabled, keepChildForeground); 1079 final int version = Build.VERSION.SDK_INT; 1080 if (version < 21) { 1081 // nothing supported 1082 result.expect(true, HALF_OVERLAY_COLOR, 0, false, 1083 0, 0, false); 1084 } else if (version < 23) { 1085 // supports static/dynamic shadow, supports rounded corner 1086 result.expect(true, HALF_OVERLAY_COLOR, 0, false, 1087 0, 0, false); 1088 } else { 1089 // supports foreground 1090 result.expect(true, HALF_OVERLAY_COLOR, 0, false, 1091 0, 0, false); 1092 } 1093 } 1094 1095 @Test 1096 public void shadowOverlayContainerTest31() { 1097 final boolean isUsingZorder = true; 1098 final boolean isUsingDefaultShadow = true; 1099 final boolean enableRoundedCorner = true; 1100 final boolean shadowEnabled = true; 1101 final boolean keepChildForeground = false; 1102 ShadowOverlayResult result = setupDefaultPresenterWithSingleElement(isUsingZorder, 1103 isUsingDefaultShadow, enableRoundedCorner, shadowEnabled, keepChildForeground); 1104 final int version = Build.VERSION.SDK_INT; 1105 if (version < 21) { 1106 // nothing supported 1107 result.expect(true, HALF_OVERLAY_COLOR, 0, false, 1108 0, 0, false); 1109 } else if (version < 23) { 1110 // supports static/dynamic shadow, supports rounded corner 1111 result.expect(true, HALF_OVERLAY_COLOR, sFocusedZ, false, 1112 0, 0, false); 1113 } else { 1114 // supports foreground 1115 result.expect(false, 0, 0, false, 1116 HALF_OVERLAY_COLOR, sFocusedZ, false); 1117 } 1118 } 1119 1120 @Test 1121 public void shadowOverlayContainerTest32() { 1122 final boolean isUsingZorder = true; 1123 final boolean isUsingDefaultShadow = true; 1124 final boolean enableRoundedCorner = true; 1125 final boolean shadowEnabled = true; 1126 final boolean keepChildForeground = true; 1127 ShadowOverlayResult result = setupDefaultPresenterWithSingleElement(isUsingZorder, 1128 isUsingDefaultShadow, enableRoundedCorner, shadowEnabled, keepChildForeground); 1129 final int version = Build.VERSION.SDK_INT; 1130 if (version < 21) { 1131 // nothing supported 1132 result.expect(true, HALF_OVERLAY_COLOR, 0, false, 1133 0, 0, false); 1134 } else if (version < 23) { 1135 // supports static/dynamic shadow, supports rounded corner 1136 result.expect(true, HALF_OVERLAY_COLOR, sFocusedZ, false, 1137 0, 0, false); 1138 } else { 1139 // supports foreground 1140 result.expect(true, HALF_OVERLAY_COLOR, sFocusedZ, false, 1141 0, 0, false); 1142 } 1143 } 1144 1145 @Test 1146 public void shadowOverlayContainerTestDefaultSettings() { 1147 ListRowPresenter presenter = new ListRowPresenter(); 1148 final int version = Build.VERSION.SDK_INT; 1149 if (version < 21) { 1150 assertFalse(presenter.isUsingZOrder(mContext)); 1151 assertFalse(presenter.isUsingDefaultShadow()); 1152 } else { 1153 assertTrue(presenter.isUsingZOrder(mContext)); 1154 assertTrue(presenter.isUsingDefaultShadow()); 1155 } 1156 assertTrue(presenter.areChildRoundedCornersEnabled()); 1157 assertTrue(presenter.getShadowEnabled()); 1158 assertTrue(presenter.isKeepChildForeground()); 1159 } 1160} 1161