package androidx.appcompat.widget; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.util.TypedValue; import android.view.MenuItem; import android.view.SubMenu; import android.view.View; import androidx.appcompat.R; import androidx.appcompat.content.res.AppCompatResources; import androidx.appcompat.widget.ActivityChooserModel; import androidx.core.view.ActionProvider; public class ShareActionProvider extends ActionProvider { private static final int DEFAULT_INITIAL_ACTIVITY_COUNT = 4; public static final String DEFAULT_SHARE_HISTORY_FILE_NAME = "share_history.xml"; public final Context mContext; private int mMaxShownActivityCount = 4; private ActivityChooserModel.OnChooseActivityListener mOnChooseActivityListener; private final ShareMenuItemOnMenuItemClickListener mOnMenuItemClickListener = new ShareMenuItemOnMenuItemClickListener(); public OnShareTargetSelectedListener mOnShareTargetSelectedListener; public String mShareHistoryFileName = DEFAULT_SHARE_HISTORY_FILE_NAME; public interface OnShareTargetSelectedListener { boolean onShareTargetSelected(ShareActionProvider shareActionProvider, Intent intent); } public class ShareActivityChooserModelPolicy implements ActivityChooserModel.OnChooseActivityListener { public ShareActivityChooserModelPolicy() { } @Override // androidx.appcompat.widget.ActivityChooserModel.OnChooseActivityListener public boolean onChooseActivity(ActivityChooserModel activityChooserModel, Intent intent) { ShareActionProvider shareActionProvider = ShareActionProvider.this; OnShareTargetSelectedListener onShareTargetSelectedListener = shareActionProvider.mOnShareTargetSelectedListener; if (onShareTargetSelectedListener == null) { return false; } onShareTargetSelectedListener.onShareTargetSelected(shareActionProvider, intent); return false; } } public class ShareMenuItemOnMenuItemClickListener implements MenuItem.OnMenuItemClickListener { public ShareMenuItemOnMenuItemClickListener() { } @Override // android.view.MenuItem.OnMenuItemClickListener public boolean onMenuItemClick(MenuItem menuItem) { ShareActionProvider shareActionProvider = ShareActionProvider.this; Intent chooseActivity = ActivityChooserModel.get(shareActionProvider.mContext, shareActionProvider.mShareHistoryFileName).chooseActivity(menuItem.getItemId()); if (chooseActivity == null) { return true; } String action = chooseActivity.getAction(); if ("android.intent.action.SEND".equals(action) || "android.intent.action.SEND_MULTIPLE".equals(action)) { ShareActionProvider.this.updateIntent(chooseActivity); } ShareActionProvider.this.mContext.startActivity(chooseActivity); return true; } } public ShareActionProvider(Context context) { super(context); this.mContext = context; } private void setActivityChooserPolicyIfNeeded() { if (this.mOnShareTargetSelectedListener != null) { if (this.mOnChooseActivityListener == null) { this.mOnChooseActivityListener = new ShareActivityChooserModelPolicy(); } ActivityChooserModel.get(this.mContext, this.mShareHistoryFileName).setOnChooseActivityListener(this.mOnChooseActivityListener); } } @Override // androidx.core.view.ActionProvider public boolean hasSubMenu() { return true; } @Override // androidx.core.view.ActionProvider public View onCreateActionView() { ActivityChooserView activityChooserView = new ActivityChooserView(this.mContext); if (!activityChooserView.isInEditMode()) { activityChooserView.setActivityChooserModel(ActivityChooserModel.get(this.mContext, this.mShareHistoryFileName)); } TypedValue typedValue = new TypedValue(); this.mContext.getTheme().resolveAttribute(R.attr.actionModeShareDrawable, typedValue, true); activityChooserView.setExpandActivityOverflowButtonDrawable(AppCompatResources.getDrawable(this.mContext, typedValue.resourceId)); activityChooserView.setProvider(this); activityChooserView.setDefaultActionButtonContentDescription(R.string.abc_shareactionprovider_share_with_application); activityChooserView.setExpandActivityOverflowButtonContentDescription(R.string.abc_shareactionprovider_share_with); return activityChooserView; } @Override // androidx.core.view.ActionProvider public void onPrepareSubMenu(SubMenu subMenu) { subMenu.clear(); ActivityChooserModel activityChooserModel = ActivityChooserModel.get(this.mContext, this.mShareHistoryFileName); PackageManager packageManager = this.mContext.getPackageManager(); int activityCount = activityChooserModel.getActivityCount(); int min = Math.min(activityCount, this.mMaxShownActivityCount); for (int i = 0; i < min; i++) { ResolveInfo activity = activityChooserModel.getActivity(i); subMenu.add(0, i, i, activity.loadLabel(packageManager)).setIcon(activity.loadIcon(packageManager)).setOnMenuItemClickListener(this.mOnMenuItemClickListener); } if (min < activityCount) { SubMenu addSubMenu = subMenu.addSubMenu(0, min, min, this.mContext.getString(R.string.abc_activity_chooser_view_see_all)); for (int i2 = 0; i2 < activityCount; i2++) { ResolveInfo activity2 = activityChooserModel.getActivity(i2); addSubMenu.add(0, i2, i2, activity2.loadLabel(packageManager)).setIcon(activity2.loadIcon(packageManager)).setOnMenuItemClickListener(this.mOnMenuItemClickListener); } } } public void setOnShareTargetSelectedListener(OnShareTargetSelectedListener onShareTargetSelectedListener) { this.mOnShareTargetSelectedListener = onShareTargetSelectedListener; setActivityChooserPolicyIfNeeded(); } public void setShareHistoryFileName(String str) { this.mShareHistoryFileName = str; setActivityChooserPolicyIfNeeded(); } public void setShareIntent(Intent intent) { if (intent != null) { String action = intent.getAction(); if ("android.intent.action.SEND".equals(action) || "android.intent.action.SEND_MULTIPLE".equals(action)) { updateIntent(intent); } } ActivityChooserModel.get(this.mContext, this.mShareHistoryFileName).setIntent(intent); } public void updateIntent(Intent intent) { intent.addFlags(134742016); } }