From 651ea96e4e069309cf3d1c5f518388e1410d5172 Mon Sep 17 00:00:00 2001 From: Andrey Epin Date: Thu, 2 Feb 2023 11:37:21 -0800 Subject: Add MultiDisplayResolveInfo#cloneFilledIn() implementation. Fix: 267652812 Test: manual verification of the fix Change-Id: I1355c64a6226579d4af05c2b259866f782b4e9fe --- .../intentresolver/chooser/DisplayResolveInfo.java | 4 ++++ .../chooser/MultiDisplayResolveInfo.java | 19 ++++++++++++++++--- .../android/intentresolver/chooser/TargetInfoTest.kt | 5 +++++ 3 files changed, 25 insertions(+), 3 deletions(-) (limited to 'java') diff --git a/java/src/com/android/intentresolver/chooser/DisplayResolveInfo.java b/java/src/com/android/intentresolver/chooser/DisplayResolveInfo.java index db5ae0b4..1b729c0e 100644 --- a/java/src/com/android/intentresolver/chooser/DisplayResolveInfo.java +++ b/java/src/com/android/intentresolver/chooser/DisplayResolveInfo.java @@ -169,6 +169,10 @@ public class DisplayResolveInfo implements TargetInfo { @Override public TargetInfo cloneFilledIn(Intent fillInIntent, int flags) { + return cloneFilledInInternal(fillInIntent, flags); + } + + protected final DisplayResolveInfo cloneFilledInInternal(Intent fillInIntent, int flags) { return new DisplayResolveInfo(this, fillInIntent, flags, mPresentationGetter); } diff --git a/java/src/com/android/intentresolver/chooser/MultiDisplayResolveInfo.java b/java/src/com/android/intentresolver/chooser/MultiDisplayResolveInfo.java index 29f00a35..e4cec887 100644 --- a/java/src/com/android/intentresolver/chooser/MultiDisplayResolveInfo.java +++ b/java/src/com/android/intentresolver/chooser/MultiDisplayResolveInfo.java @@ -17,6 +17,7 @@ package com.android.intentresolver.chooser; import android.app.Activity; +import android.content.Intent; import android.os.Bundle; import android.os.UserHandle; @@ -30,7 +31,7 @@ import java.util.List; */ public class MultiDisplayResolveInfo extends DisplayResolveInfo { - ArrayList mTargetInfos = new ArrayList<>(); + final ArrayList mTargetInfos; // Index of selected target private int mSelected = -1; @@ -66,8 +67,9 @@ public class MultiDisplayResolveInfo extends DisplayResolveInfo { /** * List of all {@link DisplayResolveInfo}s included in this target. - * TODO: provide as a generic {@code List} once {@link ChooserActivity} - * stops requiring the signature to match that of the other "lists" it builds up. + * TODO: provide as a generic {@code List} once + * {@link com.android.intentresolver.ChooserActivity} stops requiring the signature to match + * that of the other "lists" it builds up. */ @Override public ArrayList getAllDisplayTargets() { @@ -92,6 +94,17 @@ public class MultiDisplayResolveInfo extends DisplayResolveInfo { return mSelected >= 0; } + @Override + public TargetInfo cloneFilledIn(Intent fillInIntent, int flags) { + ArrayList targetInfos = new ArrayList<>(mTargetInfos.size()); + for (int i = 0, size = mTargetInfos.size(); i < size; i++) { + targetInfos.add(mTargetInfos.get(i).cloneFilledInInternal(fillInIntent, flags)); + } + MultiDisplayResolveInfo clone = new MultiDisplayResolveInfo(targetInfos); + clone.mSelected = mSelected; + return clone; + } + @Override public boolean start(Activity activity, Bundle options) { return mTargetInfos.get(mSelected).start(activity, options); diff --git a/java/tests/src/com/android/intentresolver/chooser/TargetInfoTest.kt b/java/tests/src/com/android/intentresolver/chooser/TargetInfoTest.kt index 7c2b07a9..69948cc9 100644 --- a/java/tests/src/com/android/intentresolver/chooser/TargetInfoTest.kt +++ b/java/tests/src/com/android/intentresolver/chooser/TargetInfoTest.kt @@ -186,6 +186,11 @@ class TargetInfoTest { assertThat(multiTargetInfo.hasSelected()).isTrue() assertThat(multiTargetInfo.getSelectedTarget()).isEqualTo(secondTargetInfo) + val multiTargetInfoClone = multiTargetInfo.cloneFilledIn(Intent(), 0) + assertThat(multiTargetInfoClone).isInstanceOf(MultiDisplayResolveInfo::class.java) + assertThat((multiTargetInfoClone as MultiDisplayResolveInfo).hasSelected()) + .isEqualTo(multiTargetInfo.hasSelected()) + // TODO: consider exercising activity-start behavior. // TODO: consider exercising DisplayResolveInfo base class behavior. } -- cgit v1.2.3-59-g8ed1b