|
24 | 24 | import static org.junit.Assert.assertNull; |
25 | 25 | import static org.junit.Assert.assertSame; |
26 | 26 | import static org.junit.Assert.assertTrue; |
| 27 | +import static org.mockito.ArgumentMatchers.eq; |
| 28 | +import static org.mockito.Mockito.spy; |
| 29 | +import static org.mockito.Mockito.times; |
| 30 | +import static org.mockito.Mockito.verify; |
27 | 31 |
|
28 | 32 | import android.app.ActivityOptions; |
29 | 33 | import android.app.PendingIntent; |
|
33 | 37 | import android.graphics.Bitmap; |
34 | 38 | import android.graphics.drawable.BitmapDrawable; |
35 | 39 | import android.graphics.drawable.Drawable; |
| 40 | +import android.graphics.drawable.Icon; |
| 41 | +import android.net.Uri; |
36 | 42 | import android.os.AsyncTask; |
37 | 43 | import android.os.Binder; |
38 | 44 | import android.os.Looper; |
|
57 | 63 | import java.util.ArrayList; |
58 | 64 | import java.util.Arrays; |
59 | 65 | import java.util.Map; |
| 66 | +import java.util.HashMap; |
60 | 67 | import java.util.concurrent.CountDownLatch; |
| 68 | +import java.util.function.Consumer; |
61 | 69 |
|
62 | 70 | /** |
63 | 71 | * Tests for RemoteViews. |
@@ -690,4 +698,137 @@ public ActivityOptions createSharedElementActivityOptions( |
690 | 698 | return null; |
691 | 699 | } |
692 | 700 | } |
| 701 | + |
| 702 | + @Test |
| 703 | + public void visitUris() { |
| 704 | + RemoteViews views = new RemoteViews(mPackage, R.layout.remote_views_test); |
| 705 | + |
| 706 | + final Uri imageUri = Uri.parse("content://media/image"); |
| 707 | + final Icon icon1 = Icon.createWithContentUri("content://media/icon1"); |
| 708 | + final Icon icon2 = Icon.createWithContentUri("content://media/icon2"); |
| 709 | + final Icon icon3 = Icon.createWithContentUri("content://media/icon3"); |
| 710 | + final Icon icon4 = Icon.createWithContentUri("content://media/icon4"); |
| 711 | + views.setImageViewUri(R.id.image, imageUri); |
| 712 | + views.setTextViewCompoundDrawables(R.id.text, icon1, icon2, icon3, icon4); |
| 713 | + |
| 714 | + Consumer<Uri> visitor = (Consumer<Uri>) spy(Consumer.class); |
| 715 | + views.visitUris(visitor); |
| 716 | + verify(visitor, times(1)).accept(eq(imageUri)); |
| 717 | + verify(visitor, times(1)).accept(eq(icon1.getUri())); |
| 718 | + verify(visitor, times(1)).accept(eq(icon2.getUri())); |
| 719 | + verify(visitor, times(1)).accept(eq(icon3.getUri())); |
| 720 | + verify(visitor, times(1)).accept(eq(icon4.getUri())); |
| 721 | + } |
| 722 | + |
| 723 | + @Test |
| 724 | + public void visitUris_themedIcons() { |
| 725 | + RemoteViews views = new RemoteViews(mPackage, R.layout.remote_views_test); |
| 726 | + final Icon iconLight = Icon.createWithContentUri("content://light/icon"); |
| 727 | + final Icon iconDark = Icon.createWithContentUri("content://dark/icon"); |
| 728 | + views.setIcon(R.id.layout, "setLargeIcon", iconLight, iconDark); |
| 729 | + |
| 730 | + Consumer<Uri> visitor = (Consumer<Uri>) spy(Consumer.class); |
| 731 | + views.visitUris(visitor); |
| 732 | + verify(visitor, times(1)).accept(eq(iconLight.getUri())); |
| 733 | + verify(visitor, times(1)).accept(eq(iconDark.getUri())); |
| 734 | + } |
| 735 | + |
| 736 | + @Test |
| 737 | + public void visitUris_nestedViews() { |
| 738 | + final RemoteViews outer = new RemoteViews(mPackage, R.layout.remote_views_test); |
| 739 | + |
| 740 | + final RemoteViews inner = new RemoteViews(mPackage, 33); |
| 741 | + final Uri imageUriI = Uri.parse("content://inner/image"); |
| 742 | + final Icon icon1 = Icon.createWithContentUri("content://inner/icon1"); |
| 743 | + final Icon icon2 = Icon.createWithContentUri("content://inner/icon2"); |
| 744 | + final Icon icon3 = Icon.createWithContentUri("content://inner/icon3"); |
| 745 | + final Icon icon4 = Icon.createWithContentUri("content://inner/icon4"); |
| 746 | + inner.setImageViewUri(R.id.image, imageUriI); |
| 747 | + inner.setTextViewCompoundDrawables(R.id.text, icon1, icon2, icon3, icon4); |
| 748 | + |
| 749 | + outer.addView(R.id.layout, inner); |
| 750 | + |
| 751 | + Consumer<Uri> visitor = (Consumer<Uri>) spy(Consumer.class); |
| 752 | + outer.visitUris(visitor); |
| 753 | + verify(visitor, times(1)).accept(eq(imageUriI)); |
| 754 | + verify(visitor, times(1)).accept(eq(icon1.getUri())); |
| 755 | + verify(visitor, times(1)).accept(eq(icon2.getUri())); |
| 756 | + verify(visitor, times(1)).accept(eq(icon3.getUri())); |
| 757 | + verify(visitor, times(1)).accept(eq(icon4.getUri())); |
| 758 | + } |
| 759 | + |
| 760 | + @Test |
| 761 | + public void visitUris_separateOrientation() { |
| 762 | + final RemoteViews landscape = new RemoteViews(mPackage, R.layout.remote_views_test); |
| 763 | + final Uri imageUriL = Uri.parse("content://landscape/image"); |
| 764 | + final Icon icon1L = Icon.createWithContentUri("content://landscape/icon1"); |
| 765 | + final Icon icon2L = Icon.createWithContentUri("content://landscape/icon2"); |
| 766 | + final Icon icon3L = Icon.createWithContentUri("content://landscape/icon3"); |
| 767 | + final Icon icon4L = Icon.createWithContentUri("content://landscape/icon4"); |
| 768 | + landscape.setImageViewUri(R.id.image, imageUriL); |
| 769 | + landscape.setTextViewCompoundDrawables(R.id.text, icon1L, icon2L, icon3L, icon4L); |
| 770 | + |
| 771 | + final RemoteViews portrait = new RemoteViews(mPackage, 33); |
| 772 | + final Uri imageUriP = Uri.parse("content://portrait/image"); |
| 773 | + final Icon icon1P = Icon.createWithContentUri("content://portrait/icon1"); |
| 774 | + final Icon icon2P = Icon.createWithContentUri("content://portrait/icon2"); |
| 775 | + final Icon icon3P = Icon.createWithContentUri("content://portrait/icon3"); |
| 776 | + final Icon icon4P = Icon.createWithContentUri("content://portrait/icon4"); |
| 777 | + portrait.setImageViewUri(R.id.image, imageUriP); |
| 778 | + portrait.setTextViewCompoundDrawables(R.id.text, icon1P, icon2P, icon3P, icon4P); |
| 779 | + |
| 780 | + RemoteViews views = new RemoteViews(landscape, portrait); |
| 781 | + |
| 782 | + Consumer<Uri> visitor = (Consumer<Uri>) spy(Consumer.class); |
| 783 | + views.visitUris(visitor); |
| 784 | + verify(visitor, times(1)).accept(eq(imageUriL)); |
| 785 | + verify(visitor, times(1)).accept(eq(icon1L.getUri())); |
| 786 | + verify(visitor, times(1)).accept(eq(icon2L.getUri())); |
| 787 | + verify(visitor, times(1)).accept(eq(icon3L.getUri())); |
| 788 | + verify(visitor, times(1)).accept(eq(icon4L.getUri())); |
| 789 | + verify(visitor, times(1)).accept(eq(imageUriP)); |
| 790 | + verify(visitor, times(1)).accept(eq(icon1P.getUri())); |
| 791 | + verify(visitor, times(1)).accept(eq(icon2P.getUri())); |
| 792 | + verify(visitor, times(1)).accept(eq(icon3P.getUri())); |
| 793 | + verify(visitor, times(1)).accept(eq(icon4P.getUri())); |
| 794 | + } |
| 795 | + |
| 796 | + @Test |
| 797 | + public void visitUris_sizedViews() { |
| 798 | + final RemoteViews large = new RemoteViews(mPackage, R.layout.remote_views_test); |
| 799 | + final Uri imageUriL = Uri.parse("content://large/image"); |
| 800 | + final Icon icon1L = Icon.createWithContentUri("content://large/icon1"); |
| 801 | + final Icon icon2L = Icon.createWithContentUri("content://large/icon2"); |
| 802 | + final Icon icon3L = Icon.createWithContentUri("content://large/icon3"); |
| 803 | + final Icon icon4L = Icon.createWithContentUri("content://large/icon4"); |
| 804 | + large.setImageViewUri(R.id.image, imageUriL); |
| 805 | + large.setTextViewCompoundDrawables(R.id.text, icon1L, icon2L, icon3L, icon4L); |
| 806 | + |
| 807 | + final RemoteViews small = new RemoteViews(mPackage, 33); |
| 808 | + final Uri imageUriS = Uri.parse("content://small/image"); |
| 809 | + final Icon icon1S = Icon.createWithContentUri("content://small/icon1"); |
| 810 | + final Icon icon2S = Icon.createWithContentUri("content://small/icon2"); |
| 811 | + final Icon icon3S = Icon.createWithContentUri("content://small/icon3"); |
| 812 | + final Icon icon4S = Icon.createWithContentUri("content://small/icon4"); |
| 813 | + small.setImageViewUri(R.id.image, imageUriS); |
| 814 | + small.setTextViewCompoundDrawables(R.id.text, icon1S, icon2S, icon3S, icon4S); |
| 815 | + |
| 816 | + HashMap<SizeF, RemoteViews> sizedViews = new HashMap<>(); |
| 817 | + sizedViews.put(new SizeF(300, 300), large); |
| 818 | + sizedViews.put(new SizeF(100, 100), small); |
| 819 | + RemoteViews views = new RemoteViews(sizedViews); |
| 820 | + |
| 821 | + Consumer<Uri> visitor = (Consumer<Uri>) spy(Consumer.class); |
| 822 | + views.visitUris(visitor); |
| 823 | + verify(visitor, times(1)).accept(eq(imageUriL)); |
| 824 | + verify(visitor, times(1)).accept(eq(icon1L.getUri())); |
| 825 | + verify(visitor, times(1)).accept(eq(icon2L.getUri())); |
| 826 | + verify(visitor, times(1)).accept(eq(icon3L.getUri())); |
| 827 | + verify(visitor, times(1)).accept(eq(icon4L.getUri())); |
| 828 | + verify(visitor, times(1)).accept(eq(imageUriS)); |
| 829 | + verify(visitor, times(1)).accept(eq(icon1S.getUri())); |
| 830 | + verify(visitor, times(1)).accept(eq(icon2S.getUri())); |
| 831 | + verify(visitor, times(1)).accept(eq(icon3S.getUri())); |
| 832 | + verify(visitor, times(1)).accept(eq(icon4S.getUri())); |
| 833 | + } |
693 | 834 | } |
0 commit comments