Skip to content

Commit af3a78d

Browse files
Ioana AlexandruAndroid Build Coastguard Worker
authored andcommitted
Visit URIs in landscape/portrait custom remote views.
Bug: 277740848 Test: atest RemoteViewsTest NotificationManagerServiceTest & tested with POC from bug (cherry picked from https://googleplex-android-review.googlesource.com/q/commit:b4692946c10d11c1e935869e11dc709a9cdcba69) Merged-In: I7d3d35df0ec38945019f71755bed8797b7af4517 Change-Id: I7d3d35df0ec38945019f71755bed8797b7af4517
1 parent 5d4da10 commit af3a78d

2 files changed

Lines changed: 70 additions & 0 deletions

File tree

core/java/android/widget/RemoteViews.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -726,6 +726,12 @@ public void visitUris(@NonNull Consumer<Uri> visitor) {
726726
mActions.get(i).visitUris(visitor);
727727
}
728728
}
729+
if (mLandscape != null) {
730+
mLandscape.visitUris(visitor);
731+
}
732+
if (mPortrait != null) {
733+
mPortrait.visitUris(visitor);
734+
}
729735
}
730736

731737
private static void visitIconUri(Icon icon, @NonNull Consumer<Uri> visitor) {

core/tests/coretests/src/android/widget/RemoteViewsTest.java

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,10 @@
2424
import static org.junit.Assert.assertNull;
2525
import static org.junit.Assert.assertSame;
2626
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;
2731

2832
import android.app.ActivityOptions;
2933
import android.app.PendingIntent;
@@ -33,6 +37,8 @@
3337
import android.graphics.Bitmap;
3438
import android.graphics.drawable.BitmapDrawable;
3539
import android.graphics.drawable.Drawable;
40+
import android.graphics.drawable.Icon;
41+
import android.net.Uri;
3642
import android.os.AsyncTask;
3743
import android.os.Binder;
3844
import android.os.Looper;
@@ -58,6 +64,7 @@
5864
import java.util.Arrays;
5965
import java.util.Map;
6066
import java.util.concurrent.CountDownLatch;
67+
import java.util.function.Consumer;
6168

6269
/**
6370
* Tests for RemoteViews.
@@ -690,4 +697,61 @@ public ActivityOptions createSharedElementActivityOptions(
690697
return null;
691698
}
692699
}
700+
701+
@Test
702+
public void visitUris() {
703+
RemoteViews views = new RemoteViews(mPackage, R.layout.remote_views_test);
704+
705+
final Uri imageUri = Uri.parse("content://media/image");
706+
final Icon icon1 = Icon.createWithContentUri("content://media/icon1");
707+
final Icon icon2 = Icon.createWithContentUri("content://media/icon2");
708+
final Icon icon3 = Icon.createWithContentUri("content://media/icon3");
709+
final Icon icon4 = Icon.createWithContentUri("content://media/icon4");
710+
views.setImageViewUri(R.id.image, imageUri);
711+
views.setTextViewCompoundDrawables(R.id.text, icon1, icon2, icon3, icon4);
712+
713+
Consumer<Uri> visitor = (Consumer<Uri>) spy(Consumer.class);
714+
views.visitUris(visitor);
715+
verify(visitor, times(1)).accept(eq(imageUri));
716+
verify(visitor, times(1)).accept(eq(icon1.getUri()));
717+
verify(visitor, times(1)).accept(eq(icon2.getUri()));
718+
verify(visitor, times(1)).accept(eq(icon3.getUri()));
719+
verify(visitor, times(1)).accept(eq(icon4.getUri()));
720+
}
721+
722+
@Test
723+
public void visitUris_separateOrientation() {
724+
final RemoteViews landscape = new RemoteViews(mPackage, R.layout.remote_views_test);
725+
final Uri imageUriL = Uri.parse("content://landscape/image");
726+
final Icon icon1L = Icon.createWithContentUri("content://landscape/icon1");
727+
final Icon icon2L = Icon.createWithContentUri("content://landscape/icon2");
728+
final Icon icon3L = Icon.createWithContentUri("content://landscape/icon3");
729+
final Icon icon4L = Icon.createWithContentUri("content://landscape/icon4");
730+
landscape.setImageViewUri(R.id.image, imageUriL);
731+
landscape.setTextViewCompoundDrawables(R.id.text, icon1L, icon2L, icon3L, icon4L);
732+
733+
final RemoteViews portrait = new RemoteViews(mPackage, 33);
734+
final Uri imageUriP = Uri.parse("content://portrait/image");
735+
final Icon icon1P = Icon.createWithContentUri("content://portrait/icon1");
736+
final Icon icon2P = Icon.createWithContentUri("content://portrait/icon2");
737+
final Icon icon3P = Icon.createWithContentUri("content://portrait/icon3");
738+
final Icon icon4P = Icon.createWithContentUri("content://portrait/icon4");
739+
portrait.setImageViewUri(R.id.image, imageUriP);
740+
portrait.setTextViewCompoundDrawables(R.id.text, icon1P, icon2P, icon3P, icon4P);
741+
742+
RemoteViews views = new RemoteViews(landscape, portrait);
743+
744+
Consumer<Uri> visitor = (Consumer<Uri>) spy(Consumer.class);
745+
views.visitUris(visitor);
746+
verify(visitor, times(1)).accept(eq(imageUriL));
747+
verify(visitor, times(1)).accept(eq(icon1L.getUri()));
748+
verify(visitor, times(1)).accept(eq(icon2L.getUri()));
749+
verify(visitor, times(1)).accept(eq(icon3L.getUri()));
750+
verify(visitor, times(1)).accept(eq(icon4L.getUri()));
751+
verify(visitor, times(1)).accept(eq(imageUriP));
752+
verify(visitor, times(1)).accept(eq(icon1P.getUri()));
753+
verify(visitor, times(1)).accept(eq(icon2P.getUri()));
754+
verify(visitor, times(1)).accept(eq(icon3P.getUri()));
755+
verify(visitor, times(1)).accept(eq(icon4P.getUri()));
756+
}
693757
}

0 commit comments

Comments
 (0)