2021-06-27 20:44:35 +00:00
|
|
|
package androidx.core.app;
|
|
|
|
|
|
|
|
import android.app.Activity;
|
|
|
|
import android.content.ComponentName;
|
|
|
|
import android.content.Context;
|
|
|
|
import android.content.Intent;
|
|
|
|
import android.content.pm.PackageManager;
|
|
|
|
import android.graphics.drawable.Drawable;
|
|
|
|
import android.net.Uri;
|
|
|
|
import android.text.Html;
|
|
|
|
import android.text.Spanned;
|
|
|
|
import android.util.Log;
|
|
|
|
import android.view.ActionProvider;
|
|
|
|
import android.view.Menu;
|
|
|
|
import android.view.MenuItem;
|
|
|
|
import android.widget.ShareActionProvider;
|
|
|
|
import androidx.annotation.IdRes;
|
|
|
|
import androidx.annotation.NonNull;
|
|
|
|
import androidx.annotation.Nullable;
|
|
|
|
import androidx.annotation.StringRes;
|
|
|
|
import androidx.core.util.Preconditions;
|
|
|
|
import c.d.b.a.a;
|
|
|
|
import java.util.ArrayList;
|
|
|
|
public final class ShareCompat {
|
|
|
|
public static final String EXTRA_CALLING_ACTIVITY = "androidx.core.app.EXTRA_CALLING_ACTIVITY";
|
|
|
|
public static final String EXTRA_CALLING_ACTIVITY_INTEROP = "android.support.v4.app.EXTRA_CALLING_ACTIVITY";
|
|
|
|
public static final String EXTRA_CALLING_PACKAGE = "androidx.core.app.EXTRA_CALLING_PACKAGE";
|
|
|
|
public static final String EXTRA_CALLING_PACKAGE_INTEROP = "android.support.v4.app.EXTRA_CALLING_PACKAGE";
|
|
|
|
private static final String HISTORY_FILENAME_PREFIX = ".sharecompat_";
|
|
|
|
|
|
|
|
public static class IntentBuilder {
|
|
|
|
@Nullable
|
|
|
|
private ArrayList<String> mBccAddresses;
|
|
|
|
@Nullable
|
|
|
|
private ArrayList<String> mCcAddresses;
|
|
|
|
@Nullable
|
|
|
|
private CharSequence mChooserTitle;
|
|
|
|
@NonNull
|
|
|
|
private final Context mContext;
|
|
|
|
@NonNull
|
|
|
|
private final Intent mIntent;
|
|
|
|
@Nullable
|
|
|
|
private ArrayList<Uri> mStreams;
|
|
|
|
@Nullable
|
|
|
|
private ArrayList<String> mToAddresses;
|
|
|
|
|
|
|
|
private IntentBuilder(@NonNull Context context, @Nullable ComponentName componentName) {
|
|
|
|
this.mContext = (Context) Preconditions.checkNotNull(context);
|
|
|
|
Intent action = new Intent().setAction("android.intent.action.SEND");
|
|
|
|
this.mIntent = action;
|
|
|
|
action.putExtra("androidx.core.app.EXTRA_CALLING_PACKAGE", context.getPackageName());
|
|
|
|
action.putExtra("android.support.v4.app.EXTRA_CALLING_PACKAGE", context.getPackageName());
|
|
|
|
action.putExtra("androidx.core.app.EXTRA_CALLING_ACTIVITY", componentName);
|
|
|
|
action.putExtra("android.support.v4.app.EXTRA_CALLING_ACTIVITY", componentName);
|
|
|
|
action.addFlags(524288);
|
|
|
|
}
|
|
|
|
|
|
|
|
private void combineArrayExtra(String str, ArrayList<String> arrayList) {
|
|
|
|
String[] stringArrayExtra = this.mIntent.getStringArrayExtra(str);
|
|
|
|
int length = stringArrayExtra != null ? stringArrayExtra.length : 0;
|
|
|
|
String[] strArr = new String[(arrayList.size() + length)];
|
|
|
|
arrayList.toArray(strArr);
|
|
|
|
if (stringArrayExtra != null) {
|
|
|
|
System.arraycopy(stringArrayExtra, 0, strArr, arrayList.size(), length);
|
|
|
|
}
|
|
|
|
this.mIntent.putExtra(str, strArr);
|
|
|
|
}
|
|
|
|
|
|
|
|
private void combineArrayExtra(@Nullable String str, @NonNull String[] strArr) {
|
|
|
|
Intent intent = getIntent();
|
|
|
|
String[] stringArrayExtra = intent.getStringArrayExtra(str);
|
|
|
|
int length = stringArrayExtra != null ? stringArrayExtra.length : 0;
|
|
|
|
String[] strArr2 = new String[(strArr.length + length)];
|
|
|
|
if (stringArrayExtra != null) {
|
|
|
|
System.arraycopy(stringArrayExtra, 0, strArr2, 0, length);
|
|
|
|
}
|
|
|
|
System.arraycopy(strArr, 0, strArr2, length, strArr.length);
|
|
|
|
intent.putExtra(str, strArr2);
|
|
|
|
}
|
|
|
|
|
|
|
|
@NonNull
|
|
|
|
public static IntentBuilder from(@NonNull Activity activity) {
|
|
|
|
return from((Context) Preconditions.checkNotNull(activity), activity.getComponentName());
|
|
|
|
}
|
|
|
|
|
|
|
|
@NonNull
|
|
|
|
private static IntentBuilder from(@NonNull Context context, @Nullable ComponentName componentName) {
|
|
|
|
return new IntentBuilder(context, componentName);
|
|
|
|
}
|
|
|
|
|
|
|
|
@NonNull
|
|
|
|
public IntentBuilder addEmailBcc(@NonNull String str) {
|
|
|
|
if (this.mBccAddresses == null) {
|
|
|
|
this.mBccAddresses = new ArrayList<>();
|
|
|
|
}
|
|
|
|
this.mBccAddresses.add(str);
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
|
|
|
|
@NonNull
|
|
|
|
public IntentBuilder addEmailBcc(@NonNull String[] strArr) {
|
|
|
|
combineArrayExtra("android.intent.extra.BCC", strArr);
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
|
|
|
|
@NonNull
|
|
|
|
public IntentBuilder addEmailCc(@NonNull String str) {
|
|
|
|
if (this.mCcAddresses == null) {
|
|
|
|
this.mCcAddresses = new ArrayList<>();
|
|
|
|
}
|
|
|
|
this.mCcAddresses.add(str);
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
|
|
|
|
@NonNull
|
|
|
|
public IntentBuilder addEmailCc(@NonNull String[] strArr) {
|
|
|
|
combineArrayExtra("android.intent.extra.CC", strArr);
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
|
|
|
|
@NonNull
|
|
|
|
public IntentBuilder addEmailTo(@NonNull String str) {
|
|
|
|
if (this.mToAddresses == null) {
|
|
|
|
this.mToAddresses = new ArrayList<>();
|
|
|
|
}
|
|
|
|
this.mToAddresses.add(str);
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
|
|
|
|
@NonNull
|
|
|
|
public IntentBuilder addEmailTo(@NonNull String[] strArr) {
|
|
|
|
combineArrayExtra("android.intent.extra.EMAIL", strArr);
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
|
|
|
|
@NonNull
|
|
|
|
public IntentBuilder addStream(@NonNull Uri uri) {
|
|
|
|
Uri uri2 = (Uri) this.mIntent.getParcelableExtra("android.intent.extra.STREAM");
|
|
|
|
ArrayList<Uri> arrayList = this.mStreams;
|
|
|
|
if (arrayList == null && uri2 == null) {
|
|
|
|
return setStream(uri);
|
|
|
|
}
|
|
|
|
if (arrayList == null) {
|
|
|
|
this.mStreams = new ArrayList<>();
|
|
|
|
}
|
|
|
|
if (uri2 != null) {
|
|
|
|
this.mIntent.removeExtra("android.intent.extra.STREAM");
|
|
|
|
this.mStreams.add(uri2);
|
|
|
|
}
|
|
|
|
this.mStreams.add(uri);
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
|
|
|
|
@NonNull
|
|
|
|
public Intent createChooserIntent() {
|
|
|
|
return Intent.createChooser(getIntent(), this.mChooserTitle);
|
|
|
|
}
|
|
|
|
|
|
|
|
@NonNull
|
|
|
|
public Context getContext() {
|
|
|
|
return this.mContext;
|
|
|
|
}
|
|
|
|
|
|
|
|
@NonNull
|
|
|
|
public Intent getIntent() {
|
|
|
|
ArrayList<String> arrayList = this.mToAddresses;
|
|
|
|
if (arrayList != null) {
|
|
|
|
combineArrayExtra("android.intent.extra.EMAIL", arrayList);
|
|
|
|
this.mToAddresses = null;
|
|
|
|
}
|
|
|
|
ArrayList<String> arrayList2 = this.mCcAddresses;
|
|
|
|
if (arrayList2 != null) {
|
|
|
|
combineArrayExtra("android.intent.extra.CC", arrayList2);
|
|
|
|
this.mCcAddresses = null;
|
|
|
|
}
|
|
|
|
ArrayList<String> arrayList3 = this.mBccAddresses;
|
|
|
|
if (arrayList3 != null) {
|
|
|
|
combineArrayExtra("android.intent.extra.BCC", arrayList3);
|
|
|
|
this.mBccAddresses = null;
|
|
|
|
}
|
|
|
|
ArrayList<Uri> arrayList4 = this.mStreams;
|
|
|
|
boolean z2 = true;
|
|
|
|
if (arrayList4 == null || arrayList4.size() <= 1) {
|
|
|
|
z2 = false;
|
|
|
|
}
|
|
|
|
boolean equals = "android.intent.action.SEND_MULTIPLE".equals(this.mIntent.getAction());
|
|
|
|
if (!z2 && equals) {
|
|
|
|
this.mIntent.setAction("android.intent.action.SEND");
|
|
|
|
ArrayList<Uri> arrayList5 = this.mStreams;
|
|
|
|
if (arrayList5 == null || arrayList5.isEmpty()) {
|
|
|
|
this.mIntent.removeExtra("android.intent.extra.STREAM");
|
|
|
|
} else {
|
|
|
|
this.mIntent.putExtra("android.intent.extra.STREAM", this.mStreams.get(0));
|
|
|
|
}
|
|
|
|
this.mStreams = null;
|
|
|
|
}
|
|
|
|
if (z2 && !equals) {
|
|
|
|
this.mIntent.setAction("android.intent.action.SEND_MULTIPLE");
|
|
|
|
ArrayList<Uri> arrayList6 = this.mStreams;
|
|
|
|
if (arrayList6 == null || arrayList6.isEmpty()) {
|
|
|
|
this.mIntent.removeExtra("android.intent.extra.STREAM");
|
|
|
|
} else {
|
|
|
|
this.mIntent.putParcelableArrayListExtra("android.intent.extra.STREAM", this.mStreams);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return this.mIntent;
|
|
|
|
}
|
|
|
|
|
|
|
|
@NonNull
|
|
|
|
public IntentBuilder setChooserTitle(@StringRes int i) {
|
|
|
|
return setChooserTitle(this.mContext.getText(i));
|
|
|
|
}
|
|
|
|
|
|
|
|
@NonNull
|
|
|
|
public IntentBuilder setChooserTitle(@Nullable CharSequence charSequence) {
|
|
|
|
this.mChooserTitle = charSequence;
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
|
|
|
|
@NonNull
|
|
|
|
public IntentBuilder setEmailBcc(@Nullable String[] strArr) {
|
|
|
|
this.mIntent.putExtra("android.intent.extra.BCC", strArr);
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
|
|
|
|
@NonNull
|
|
|
|
public IntentBuilder setEmailCc(@Nullable String[] strArr) {
|
|
|
|
this.mIntent.putExtra("android.intent.extra.CC", strArr);
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
|
|
|
|
@NonNull
|
|
|
|
public IntentBuilder setEmailTo(@Nullable String[] strArr) {
|
|
|
|
if (this.mToAddresses != null) {
|
|
|
|
this.mToAddresses = null;
|
|
|
|
}
|
|
|
|
this.mIntent.putExtra("android.intent.extra.EMAIL", strArr);
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
|
|
|
|
@NonNull
|
|
|
|
public IntentBuilder setHtmlText(@Nullable String str) {
|
|
|
|
this.mIntent.putExtra("android.intent.extra.HTML_TEXT", str);
|
|
|
|
if (!this.mIntent.hasExtra("android.intent.extra.TEXT")) {
|
|
|
|
setText(Html.fromHtml(str));
|
|
|
|
}
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
|
|
|
|
@NonNull
|
|
|
|
public IntentBuilder setStream(@Nullable Uri uri) {
|
|
|
|
if (!"android.intent.action.SEND".equals(this.mIntent.getAction())) {
|
|
|
|
this.mIntent.setAction("android.intent.action.SEND");
|
|
|
|
}
|
|
|
|
this.mStreams = null;
|
|
|
|
this.mIntent.putExtra("android.intent.extra.STREAM", uri);
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
|
|
|
|
@NonNull
|
|
|
|
public IntentBuilder setSubject(@Nullable String str) {
|
|
|
|
this.mIntent.putExtra("android.intent.extra.SUBJECT", str);
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
|
|
|
|
@NonNull
|
|
|
|
public IntentBuilder setText(@Nullable CharSequence charSequence) {
|
|
|
|
this.mIntent.putExtra("android.intent.extra.TEXT", charSequence);
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
|
|
|
|
@NonNull
|
|
|
|
public IntentBuilder setType(@Nullable String str) {
|
|
|
|
this.mIntent.setType(str);
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
|
|
|
|
public void startChooser() {
|
|
|
|
this.mContext.startActivity(createChooserIntent());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public static class IntentReader {
|
|
|
|
private static final String TAG = "IntentReader";
|
|
|
|
@Nullable
|
|
|
|
private final ComponentName mCallingActivity;
|
|
|
|
@Nullable
|
|
|
|
private final String mCallingPackage;
|
|
|
|
@NonNull
|
|
|
|
private final Context mContext;
|
|
|
|
@NonNull
|
|
|
|
private final Intent mIntent;
|
|
|
|
@Nullable
|
|
|
|
private ArrayList<Uri> mStreams;
|
|
|
|
|
|
|
|
private IntentReader(@NonNull Context context, @NonNull Intent intent) {
|
|
|
|
this.mContext = (Context) Preconditions.checkNotNull(context);
|
|
|
|
this.mIntent = (Intent) Preconditions.checkNotNull(intent);
|
|
|
|
this.mCallingPackage = ShareCompat.getCallingPackage(intent);
|
|
|
|
this.mCallingActivity = ShareCompat.getCallingActivity(intent);
|
|
|
|
}
|
|
|
|
|
|
|
|
@NonNull
|
|
|
|
public static IntentReader from(@NonNull Activity activity) {
|
|
|
|
return from((Context) Preconditions.checkNotNull(activity), activity.getIntent());
|
|
|
|
}
|
|
|
|
|
|
|
|
@NonNull
|
|
|
|
private static IntentReader from(@NonNull Context context, @NonNull Intent intent) {
|
|
|
|
return new IntentReader(context, intent);
|
|
|
|
}
|
|
|
|
|
|
|
|
private static void withinStyle(StringBuilder sb, CharSequence charSequence, int i, int i2) {
|
|
|
|
while (i < i2) {
|
|
|
|
char charAt = charSequence.charAt(i);
|
|
|
|
if (charAt == '<') {
|
|
|
|
sb.append("<");
|
|
|
|
} else if (charAt == '>') {
|
|
|
|
sb.append(">");
|
|
|
|
} else if (charAt == '&') {
|
|
|
|
sb.append("&");
|
|
|
|
} else if (charAt > '~' || charAt < ' ') {
|
|
|
|
sb.append("&#");
|
|
|
|
sb.append((int) charAt);
|
|
|
|
sb.append(";");
|
|
|
|
} else if (charAt == ' ') {
|
|
|
|
while (true) {
|
|
|
|
int i3 = i + 1;
|
|
|
|
if (i3 >= i2 || charSequence.charAt(i3) != ' ') {
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
sb.append(" ");
|
|
|
|
i = i3;
|
|
|
|
}
|
|
|
|
sb.append(' ');
|
|
|
|
} else {
|
|
|
|
sb.append(charAt);
|
|
|
|
}
|
|
|
|
i++;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@Nullable
|
|
|
|
public ComponentName getCallingActivity() {
|
|
|
|
return this.mCallingActivity;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Nullable
|
|
|
|
public Drawable getCallingActivityIcon() {
|
|
|
|
if (this.mCallingActivity == null) {
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
try {
|
|
|
|
return this.mContext.getPackageManager().getActivityIcon(this.mCallingActivity);
|
|
|
|
} catch (PackageManager.NameNotFoundException e) {
|
|
|
|
Log.e("IntentReader", "Could not retrieve icon for calling activity", e);
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@Nullable
|
|
|
|
public Drawable getCallingApplicationIcon() {
|
|
|
|
if (this.mCallingPackage == null) {
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
try {
|
|
|
|
return this.mContext.getPackageManager().getApplicationIcon(this.mCallingPackage);
|
|
|
|
} catch (PackageManager.NameNotFoundException e) {
|
|
|
|
Log.e("IntentReader", "Could not retrieve icon for calling application", e);
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@Nullable
|
|
|
|
public CharSequence getCallingApplicationLabel() {
|
|
|
|
if (this.mCallingPackage == null) {
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
PackageManager packageManager = this.mContext.getPackageManager();
|
|
|
|
try {
|
|
|
|
return packageManager.getApplicationLabel(packageManager.getApplicationInfo(this.mCallingPackage, 0));
|
|
|
|
} catch (PackageManager.NameNotFoundException e) {
|
|
|
|
Log.e("IntentReader", "Could not retrieve label for calling application", e);
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@Nullable
|
|
|
|
public String getCallingPackage() {
|
|
|
|
return this.mCallingPackage;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Nullable
|
|
|
|
public String[] getEmailBcc() {
|
|
|
|
return this.mIntent.getStringArrayExtra("android.intent.extra.BCC");
|
|
|
|
}
|
|
|
|
|
|
|
|
@Nullable
|
|
|
|
public String[] getEmailCc() {
|
|
|
|
return this.mIntent.getStringArrayExtra("android.intent.extra.CC");
|
|
|
|
}
|
|
|
|
|
|
|
|
@Nullable
|
|
|
|
public String[] getEmailTo() {
|
|
|
|
return this.mIntent.getStringArrayExtra("android.intent.extra.EMAIL");
|
|
|
|
}
|
|
|
|
|
|
|
|
@Nullable
|
|
|
|
public String getHtmlText() {
|
|
|
|
String stringExtra = this.mIntent.getStringExtra("android.intent.extra.HTML_TEXT");
|
|
|
|
if (stringExtra != null) {
|
|
|
|
return stringExtra;
|
|
|
|
}
|
|
|
|
CharSequence text = getText();
|
|
|
|
return text instanceof Spanned ? Html.toHtml((Spanned) text) : text != null ? Html.escapeHtml(text) : stringExtra;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Nullable
|
|
|
|
public Uri getStream() {
|
|
|
|
return (Uri) this.mIntent.getParcelableExtra("android.intent.extra.STREAM");
|
|
|
|
}
|
|
|
|
|
|
|
|
@Nullable
|
|
|
|
public Uri getStream(int i) {
|
|
|
|
if (this.mStreams == null && isMultipleShare()) {
|
|
|
|
this.mStreams = this.mIntent.getParcelableArrayListExtra("android.intent.extra.STREAM");
|
|
|
|
}
|
|
|
|
ArrayList<Uri> arrayList = this.mStreams;
|
|
|
|
if (arrayList != null) {
|
|
|
|
return arrayList.get(i);
|
|
|
|
}
|
|
|
|
if (i == 0) {
|
|
|
|
return (Uri) this.mIntent.getParcelableExtra("android.intent.extra.STREAM");
|
|
|
|
}
|
|
|
|
StringBuilder L = a.L("Stream items available: ");
|
|
|
|
L.append(getStreamCount());
|
|
|
|
L.append(" index requested: ");
|
|
|
|
L.append(i);
|
|
|
|
throw new IndexOutOfBoundsException(L.toString());
|
|
|
|
}
|
|
|
|
|
|
|
|
public int getStreamCount() {
|
|
|
|
if (this.mStreams == null && isMultipleShare()) {
|
|
|
|
this.mStreams = this.mIntent.getParcelableArrayListExtra("android.intent.extra.STREAM");
|
|
|
|
}
|
|
|
|
ArrayList<Uri> arrayList = this.mStreams;
|
|
|
|
return arrayList != null ? arrayList.size() : this.mIntent.hasExtra("android.intent.extra.STREAM") ? 1 : 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Nullable
|
|
|
|
public String getSubject() {
|
|
|
|
return this.mIntent.getStringExtra("android.intent.extra.SUBJECT");
|
|
|
|
}
|
|
|
|
|
|
|
|
@Nullable
|
|
|
|
public CharSequence getText() {
|
|
|
|
return this.mIntent.getCharSequenceExtra("android.intent.extra.TEXT");
|
|
|
|
}
|
|
|
|
|
|
|
|
@Nullable
|
|
|
|
public String getType() {
|
|
|
|
return this.mIntent.getType();
|
|
|
|
}
|
|
|
|
|
|
|
|
public boolean isMultipleShare() {
|
|
|
|
return "android.intent.action.SEND_MULTIPLE".equals(this.mIntent.getAction());
|
|
|
|
}
|
|
|
|
|
|
|
|
public boolean isShareIntent() {
|
|
|
|
String action = this.mIntent.getAction();
|
|
|
|
return "android.intent.action.SEND".equals(action) || "android.intent.action.SEND_MULTIPLE".equals(action);
|
|
|
|
}
|
|
|
|
|
|
|
|
public boolean isSingleShare() {
|
|
|
|
return "android.intent.action.SEND".equals(this.mIntent.getAction());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
private ShareCompat() {
|
|
|
|
}
|
|
|
|
|
|
|
|
public static void configureMenuItem(@NonNull Menu menu, @IdRes int i, @NonNull IntentBuilder intentBuilder) {
|
|
|
|
MenuItem findItem = menu.findItem(i);
|
|
|
|
if (findItem != null) {
|
|
|
|
configureMenuItem(findItem, intentBuilder);
|
|
|
|
return;
|
|
|
|
}
|
2021-07-13 20:23:20 +00:00
|
|
|
throw new IllegalArgumentException(a.l("Could not find menu item with id ", i, " in the supplied menu"));
|
2021-06-27 20:44:35 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
public static void configureMenuItem(@NonNull MenuItem menuItem, @NonNull IntentBuilder intentBuilder) {
|
|
|
|
ActionProvider actionProvider = menuItem.getActionProvider();
|
|
|
|
ShareActionProvider shareActionProvider = !(actionProvider instanceof ShareActionProvider) ? new ShareActionProvider(intentBuilder.getContext()) : (ShareActionProvider) actionProvider;
|
|
|
|
StringBuilder L = a.L(".sharecompat_");
|
|
|
|
L.append(intentBuilder.getContext().getClass().getName());
|
|
|
|
shareActionProvider.setShareHistoryFileName(L.toString());
|
|
|
|
shareActionProvider.setShareIntent(intentBuilder.getIntent());
|
|
|
|
menuItem.setActionProvider(shareActionProvider);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Nullable
|
|
|
|
public static ComponentName getCallingActivity(@NonNull Activity activity) {
|
|
|
|
Intent intent = activity.getIntent();
|
|
|
|
ComponentName callingActivity = activity.getCallingActivity();
|
|
|
|
return callingActivity == null ? getCallingActivity(intent) : callingActivity;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Nullable
|
|
|
|
public static ComponentName getCallingActivity(@NonNull Intent intent) {
|
|
|
|
ComponentName componentName = (ComponentName) intent.getParcelableExtra("androidx.core.app.EXTRA_CALLING_ACTIVITY");
|
|
|
|
return componentName == null ? (ComponentName) intent.getParcelableExtra("android.support.v4.app.EXTRA_CALLING_ACTIVITY") : componentName;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Nullable
|
|
|
|
public static String getCallingPackage(@NonNull Activity activity) {
|
|
|
|
Intent intent = activity.getIntent();
|
|
|
|
String callingPackage = activity.getCallingPackage();
|
|
|
|
return (callingPackage != null || intent == null) ? callingPackage : getCallingPackage(intent);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Nullable
|
|
|
|
public static String getCallingPackage(@NonNull Intent intent) {
|
|
|
|
String stringExtra = intent.getStringExtra("androidx.core.app.EXTRA_CALLING_PACKAGE");
|
|
|
|
return stringExtra == null ? intent.getStringExtra("android.support.v4.app.EXTRA_CALLING_PACKAGE") : stringExtra;
|
|
|
|
}
|
|
|
|
}
|