2021-09-15 06:33:54 +00:00
|
|
|
package androidx.core.view;
|
|
|
|
|
|
|
|
import android.content.ClipData;
|
|
|
|
import android.content.ClipDescription;
|
|
|
|
import android.net.Uri;
|
|
|
|
import android.os.Bundle;
|
|
|
|
import android.util.Pair;
|
|
|
|
import androidx.annotation.NonNull;
|
|
|
|
import androidx.annotation.Nullable;
|
|
|
|
import androidx.annotation.RestrictTo;
|
|
|
|
import androidx.core.util.Preconditions;
|
|
|
|
import androidx.core.util.Predicate;
|
2021-12-17 21:59:34 +00:00
|
|
|
import b.d.b.a.a;
|
2021-09-15 06:33:54 +00:00
|
|
|
import java.lang.annotation.Retention;
|
|
|
|
import java.lang.annotation.RetentionPolicy;
|
|
|
|
import java.util.ArrayList;
|
|
|
|
import java.util.List;
|
|
|
|
public final class ContentInfoCompat {
|
|
|
|
public static final int FLAG_CONVERT_TO_PLAIN_TEXT = 1;
|
|
|
|
public static final int SOURCE_APP = 0;
|
|
|
|
public static final int SOURCE_CLIPBOARD = 1;
|
|
|
|
public static final int SOURCE_DRAG_AND_DROP = 3;
|
|
|
|
public static final int SOURCE_INPUT_METHOD = 2;
|
|
|
|
@NonNull
|
|
|
|
public final ClipData mClip;
|
|
|
|
@Nullable
|
|
|
|
public final Bundle mExtras;
|
|
|
|
public final int mFlags;
|
|
|
|
@Nullable
|
|
|
|
public final Uri mLinkUri;
|
|
|
|
public final int mSource;
|
|
|
|
|
|
|
|
public static final class Builder {
|
|
|
|
@NonNull
|
|
|
|
public ClipData mClip;
|
|
|
|
@Nullable
|
|
|
|
public Bundle mExtras;
|
|
|
|
public int mFlags;
|
|
|
|
@Nullable
|
|
|
|
public Uri mLinkUri;
|
|
|
|
public int mSource;
|
|
|
|
|
|
|
|
public Builder(@NonNull ClipData clipData, int i) {
|
|
|
|
this.mClip = clipData;
|
|
|
|
this.mSource = i;
|
|
|
|
}
|
|
|
|
|
|
|
|
public Builder(@NonNull ContentInfoCompat contentInfoCompat) {
|
|
|
|
this.mClip = contentInfoCompat.mClip;
|
|
|
|
this.mSource = contentInfoCompat.mSource;
|
|
|
|
this.mFlags = contentInfoCompat.mFlags;
|
|
|
|
this.mLinkUri = contentInfoCompat.mLinkUri;
|
|
|
|
this.mExtras = contentInfoCompat.mExtras;
|
|
|
|
}
|
|
|
|
|
|
|
|
@NonNull
|
|
|
|
public ContentInfoCompat build() {
|
|
|
|
return new ContentInfoCompat(this);
|
|
|
|
}
|
|
|
|
|
|
|
|
@NonNull
|
|
|
|
public Builder setClip(@NonNull ClipData clipData) {
|
|
|
|
this.mClip = clipData;
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
|
|
|
|
@NonNull
|
|
|
|
public Builder setExtras(@Nullable Bundle bundle) {
|
|
|
|
this.mExtras = bundle;
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
|
|
|
|
@NonNull
|
|
|
|
public Builder setFlags(int i) {
|
|
|
|
this.mFlags = i;
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
|
|
|
|
@NonNull
|
|
|
|
public Builder setLinkUri(@Nullable Uri uri) {
|
|
|
|
this.mLinkUri = uri;
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
|
|
|
|
@NonNull
|
|
|
|
public Builder setSource(int i) {
|
|
|
|
this.mSource = i;
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@Retention(RetentionPolicy.SOURCE)
|
|
|
|
@RestrictTo({RestrictTo.Scope.LIBRARY_GROUP_PREFIX})
|
|
|
|
public @interface Flags {
|
|
|
|
}
|
|
|
|
|
|
|
|
@Retention(RetentionPolicy.SOURCE)
|
|
|
|
@RestrictTo({RestrictTo.Scope.LIBRARY_GROUP_PREFIX})
|
|
|
|
public @interface Source {
|
|
|
|
}
|
|
|
|
|
|
|
|
public ContentInfoCompat(Builder builder) {
|
|
|
|
this.mClip = (ClipData) Preconditions.checkNotNull(builder.mClip);
|
|
|
|
this.mSource = Preconditions.checkArgumentInRange(builder.mSource, 0, 3, "source");
|
|
|
|
this.mFlags = Preconditions.checkFlagsArgument(builder.mFlags, 1);
|
|
|
|
this.mLinkUri = builder.mLinkUri;
|
|
|
|
this.mExtras = builder.mExtras;
|
|
|
|
}
|
|
|
|
|
|
|
|
private static ClipData buildClipData(ClipDescription clipDescription, List<ClipData.Item> list) {
|
|
|
|
ClipData clipData = new ClipData(new ClipDescription(clipDescription), list.get(0));
|
|
|
|
for (int i = 1; i < list.size(); i++) {
|
|
|
|
clipData.addItem(list.get(i));
|
|
|
|
}
|
|
|
|
return clipData;
|
|
|
|
}
|
|
|
|
|
|
|
|
@NonNull
|
|
|
|
@RestrictTo({RestrictTo.Scope.LIBRARY_GROUP_PREFIX})
|
|
|
|
public static String flagsToString(int i) {
|
|
|
|
return (i & 1) != 0 ? "FLAG_CONVERT_TO_PLAIN_TEXT" : String.valueOf(i);
|
|
|
|
}
|
|
|
|
|
|
|
|
@NonNull
|
|
|
|
@RestrictTo({RestrictTo.Scope.LIBRARY_GROUP_PREFIX})
|
|
|
|
public static String sourceToString(int i) {
|
|
|
|
return i != 0 ? i != 1 ? i != 2 ? i != 3 ? String.valueOf(i) : "SOURCE_DRAG_AND_DROP" : "SOURCE_INPUT_METHOD" : "SOURCE_CLIPBOARD" : "SOURCE_APP";
|
|
|
|
}
|
|
|
|
|
|
|
|
@NonNull
|
|
|
|
public ClipData getClip() {
|
|
|
|
return this.mClip;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Nullable
|
|
|
|
public Bundle getExtras() {
|
|
|
|
return this.mExtras;
|
|
|
|
}
|
|
|
|
|
|
|
|
public int getFlags() {
|
|
|
|
return this.mFlags;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Nullable
|
|
|
|
public Uri getLinkUri() {
|
|
|
|
return this.mLinkUri;
|
|
|
|
}
|
|
|
|
|
|
|
|
public int getSource() {
|
|
|
|
return this.mSource;
|
|
|
|
}
|
|
|
|
|
|
|
|
@NonNull
|
|
|
|
public Pair<ContentInfoCompat, ContentInfoCompat> partition(@NonNull Predicate<ClipData.Item> predicate) {
|
|
|
|
ContentInfoCompat contentInfoCompat = null;
|
|
|
|
if (this.mClip.getItemCount() == 1) {
|
|
|
|
boolean test = predicate.test(this.mClip.getItemAt(0));
|
|
|
|
ContentInfoCompat contentInfoCompat2 = test ? this : null;
|
|
|
|
if (!test) {
|
|
|
|
contentInfoCompat = this;
|
|
|
|
}
|
|
|
|
return Pair.create(contentInfoCompat2, contentInfoCompat);
|
|
|
|
}
|
|
|
|
ArrayList arrayList = new ArrayList();
|
|
|
|
ArrayList arrayList2 = new ArrayList();
|
|
|
|
for (int i = 0; i < this.mClip.getItemCount(); i++) {
|
|
|
|
ClipData.Item itemAt = this.mClip.getItemAt(i);
|
|
|
|
if (predicate.test(itemAt)) {
|
|
|
|
arrayList.add(itemAt);
|
|
|
|
} else {
|
|
|
|
arrayList2.add(itemAt);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return arrayList.isEmpty() ? Pair.create(null, this) : arrayList2.isEmpty() ? Pair.create(this, null) : Pair.create(new Builder(this).setClip(buildClipData(this.mClip.getDescription(), arrayList)).build(), new Builder(this).setClip(buildClipData(this.mClip.getDescription(), arrayList2)).build());
|
|
|
|
}
|
|
|
|
|
|
|
|
@NonNull
|
|
|
|
public String toString() {
|
|
|
|
String str;
|
2021-11-05 06:48:17 +00:00
|
|
|
StringBuilder R = a.R("ContentInfoCompat{clip=");
|
|
|
|
R.append(this.mClip.getDescription());
|
|
|
|
R.append(", source=");
|
|
|
|
R.append(sourceToString(this.mSource));
|
|
|
|
R.append(", flags=");
|
|
|
|
R.append(flagsToString(this.mFlags));
|
2021-09-15 06:33:54 +00:00
|
|
|
String str2 = "";
|
|
|
|
if (this.mLinkUri == null) {
|
|
|
|
str = str2;
|
|
|
|
} else {
|
2021-11-05 06:48:17 +00:00
|
|
|
StringBuilder R2 = a.R(", hasLinkUri(");
|
|
|
|
R2.append(this.mLinkUri.toString().length());
|
|
|
|
R2.append(")");
|
|
|
|
str = R2.toString();
|
2021-09-15 06:33:54 +00:00
|
|
|
}
|
2021-11-05 06:48:17 +00:00
|
|
|
R.append(str);
|
2021-09-15 06:33:54 +00:00
|
|
|
if (this.mExtras != null) {
|
|
|
|
str2 = ", hasExtras";
|
|
|
|
}
|
2021-11-05 06:48:17 +00:00
|
|
|
return a.H(R, str2, "}");
|
2021-09-15 06:33:54 +00:00
|
|
|
}
|
|
|
|
}
|