@Override
 public boolean onMenuItemClick(MenuItem item) {
   ActivityChooserModel dataModel = ActivityChooserModel.get(mContext, mShareHistoryFileName);
   final int itemId = item.getItemId();
   Intent launchIntent = dataModel.chooseActivity(itemId);
   if (launchIntent != null) {
     mContext.startActivity(launchIntent);
   }
   return true;
 }
 /**
  * Set the activity chooser policy of the model backed by the current share history file if needed
  * which is if there is a registered callback.
  */
 private void setActivityChooserPolicyIfNeeded() {
   if (mOnShareTargetSelectedListener == null) {
     return;
   }
   if (mOnChooseActivityListener == null) {
     mOnChooseActivityListener = new ShareAcitivityChooserModelPolicy();
   }
   ActivityChooserModel dataModel = ActivityChooserModel.get(mContext, mShareHistoryFileName);
   dataModel.setOnChooseActivityListener(mOnChooseActivityListener);
 }
 public int getCount() {
   int count = 0;
   int activityCount = mDataModel.getActivityCount();
   if (!mShowDefaultActivity && mDataModel.getDefaultActivity() != null) {
     activityCount--;
   }
   count = Math.min(activityCount, mMaxActivityCount);
   if (mShowFooterView) {
     count++;
   }
   return count;
 }
 @Override
 protected void onAttachedToWindow() {
   super.onAttachedToWindow();
   ActivityChooserModel dataModel = mAdapter.getDataModel();
   if (dataModel != null) {
     try {
       dataModel.registerObserver(mModelDataSetOberver);
     } catch (IllegalStateException e) {
       // Related to #557.
     }
   }
   mIsAttachedToWindow = true;
 }
 public Object getItem(int position) {
   final int itemViewType = getItemViewType(position);
   switch (itemViewType) {
     case ITEM_VIEW_TYPE_FOOTER:
       return null;
     case ITEM_VIEW_TYPE_ACTIVITY:
       if (!mShowDefaultActivity && mDataModel.getDefaultActivity() != null) {
         position++;
       }
       return mDataModel.getActivity(position);
     default:
       throw new IllegalArgumentException();
   }
 }
 @Override
 protected void onDetachedFromWindow() {
   super.onDetachedFromWindow();
   ActivityChooserModel dataModel = mAdapter.getDataModel();
   if (dataModel != null) {
     try {
       dataModel.unregisterObserver(mModelDataSetOberver);
     } catch (IllegalStateException e) {
       // Oh, well... fixes issue #557
     }
   }
   ViewTreeObserver viewTreeObserver = getViewTreeObserver();
   if (viewTreeObserver.isAlive()) {
     viewTreeObserver.removeGlobalOnLayoutListener(mOnGlobalLayoutListener);
   }
   mIsAttachedToWindow = false;
 }
 public boolean onMenuItemClick(MenuItem menuitem)
 {
     menuitem = ActivityChooserModel.get(ShareActionProvider.access$0(ShareActionProvider.this), ShareActionProvider.access$1(ShareActionProvider.this)).chooseActivity(menuitem.getItemId());
     if (menuitem != null)
     {
         ShareActionProvider.access$0(ShareActionProvider.this).startActivity(menuitem);
     }
     return true;
 }
 public void setDataModel(ActivityChooserModel dataModel) {
   ActivityChooserModel oldDataModel = mAdapter.getDataModel();
   if (oldDataModel != null && isShown()) {
     try {
       oldDataModel.unregisterObserver(mModelDataSetOberver);
     } catch (IllegalStateException e) {
       // Oh, well... fixes issue #557
     }
   }
   mDataModel = dataModel;
   if (dataModel != null && isShown()) {
     try {
       dataModel.registerObserver(mModelDataSetOberver);
     } catch (IllegalStateException e) {
       // Related to #557.
     }
   }
   notifyDataSetChanged();
 }
  /** {@inheritDoc} */
  @Override
  public void onPrepareSubMenu(SubMenu subMenu) {
    // Clear since the order of items may change.
    subMenu.clear();

    ActivityChooserModel dataModel = ActivityChooserModel.get(mContext, mShareHistoryFileName);
    PackageManager packageManager = mContext.getPackageManager();

    final int expandedActivityCount = dataModel.getActivityCount();
    final int collapsedActivityCount = Math.min(expandedActivityCount, mMaxShownActivityCount);

    // Populate the sub-menu with a sub set of the activities.
    for (int i = 0; i < collapsedActivityCount; i++) {
      ResolveInfo activity = dataModel.getActivity(i);
      subMenu
          .add(0, i, i, activity.loadLabel(packageManager))
          .setIcon(activity.loadIcon(packageManager))
          .setOnMenuItemClickListener(mOnMenuItemClickListener);
    }

    if (collapsedActivityCount < expandedActivityCount) {
      // Add a sub-menu for showing all activities as a list item.
      SubMenu expandedSubMenu =
          subMenu.addSubMenu(
              Menu.NONE,
              collapsedActivityCount,
              collapsedActivityCount,
              mContext.getString(R.string.abs__activity_chooser_view_see_all));
      for (int i = 0; i < expandedActivityCount; i++) {
        ResolveInfo activity = dataModel.getActivity(i);
        expandedSubMenu
            .add(0, i, i, activity.loadLabel(packageManager))
            .setIcon(activity.loadIcon(packageManager))
            .setOnMenuItemClickListener(mOnMenuItemClickListener);
      }
    }
  }
  /** {@inheritDoc} */
  @Override
  public View onCreateActionView() {
    // Create the view and set its data model.
    ActivityChooserModel dataModel = ActivityChooserModel.get(mContext, mShareHistoryFileName);
    ActivityChooserView activityChooserView = new ActivityChooserView(mContext);
    activityChooserView.setActivityChooserModel(dataModel);

    // Lookup and set the expand action icon.
    TypedValue outTypedValue = new TypedValue();
    mContext.getTheme().resolveAttribute(R.attr.actionModeShareDrawable, outTypedValue, true);
    Drawable drawable = mContext.getResources().getDrawable(outTypedValue.resourceId);
    activityChooserView.setExpandActivityOverflowButtonDrawable(drawable);
    activityChooserView.setProvider(this);

    // Set content description.
    activityChooserView.setDefaultActionButtonContentDescription(
        R.string.abs__shareactionprovider_share_with_application);
    activityChooserView.setExpandActivityOverflowButtonContentDescription(
        R.string.abs__shareactionprovider_share_with);

    return activityChooserView;
  }
 /**
  * Sets an intent with information about the share action. Here is a sample for constructing a
  * share intent:
  *
  * <p>
  *
  * <pre>
  * <code>
  *  Intent shareIntent = new Intent(Intent.ACTION_SEND);
  *  shareIntent.setType("image/*");
  *  Uri uri = Uri.fromFile(new File(getFilesDir(), "foo.jpg"));
  *  shareIntent.putExtra(Intent.EXTRA_STREAM, uri.toString());
  * </pre>
  * </code>
  *
  * @param shareIntent The share intent.
  * @see Intent#ACTION_SEND
  * @see Intent#ACTION_SEND_MULTIPLE
  */
 public void setShareIntent(Intent shareIntent) {
   ActivityChooserModel dataModel = ActivityChooserModel.get(mContext, mShareHistoryFileName);
   dataModel.setIntent(shareIntent);
 }
 public int getHistorySize() {
   return mDataModel.getHistorySize();
 }
 public int getActivityCount() {
   return mDataModel.getActivityCount();
 }
 public ResolveInfo getDefaultActivity() {
   return mDataModel.getDefaultActivity();
 }