diff options
Diffstat (limited to 'java')
3 files changed, 25 insertions, 3 deletions
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<DisplayResolveInfo> mTargetInfos = new ArrayList<>(); + final ArrayList<DisplayResolveInfo> 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<DisplayResolveInfo>} once {@link ChooserActivity} - * stops requiring the signature to match that of the other "lists" it builds up. + * TODO: provide as a generic {@code List<DisplayResolveInfo>} once + * {@link com.android.intentresolver.ChooserActivity} stops requiring the signature to match + * that of the other "lists" it builds up. */ @Override public ArrayList<DisplayResolveInfo> getAllDisplayTargets() { @@ -93,6 +95,17 @@ public class MultiDisplayResolveInfo extends DisplayResolveInfo { } @Override + public TargetInfo cloneFilledIn(Intent fillInIntent, int flags) { + ArrayList<DisplayResolveInfo> 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. } |