Skip to content

Instantly share code, notes, and snippets.

@bunjix
Last active August 29, 2015 13:57
Show Gist options
  • Save bunjix/9722697 to your computer and use it in GitHub Desktop.
Save bunjix/9722697 to your computer and use it in GitHub Desktop.
package com.protips.Intent;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.os.Parcelable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class ShareIntent {
private static final String[] CLASSNAME_TO_FILTER = {
"com.android.bluetooth.opp.BluetoothOppLauncherActivity", //Bluetooth
"com.google.android.apps.docs.app.SendTextToClipboardActivity", //Copy to clipboard
"com.google.android.keep.activities.EditorActivity", //Google Keep
"com.google.android.apps.docs.shareitem.UploadSharedItemActivity", //Upload to Drive
"com.google.android.apps.translate.TranslateActivity", //Google Translate
};
public static Intent createChooser(PackageManager packageManager, Intent intent, String title) {
final List<Intent> filtered = filterShareIntent(packageManager, intent);
final Intent chooser = Intent.createChooser(filtered.remove(filtered.size()-1), title);
return chooser.putExtra(Intent.EXTRA_INITIAL_INTENTS, filtered.toArray(new Parcelable[] {}));
}
private static List<Intent> filterShareIntent(PackageManager packageManager, Intent intent) {
final List<Intent> intentList = new ArrayList<>();
final List<ResolveInfo> possible = packageManager.queryIntentActivities(intent,
PackageManager.MATCH_DEFAULT_ONLY);
if (possible == null || possible.isEmpty()) {
intentList.add(intent);
return intentList;
}
for (ResolveInfo resolveInfo : possible) {
if (!Arrays.asList(CLASSNAME_TO_FILTER).contains(resolveInfo.activityInfo.name)) {
intentList.add(createSameIntent(intent, resolveInfo));
}
}
return intentList;
}
private static Intent createSameIntent(Intent source, ResolveInfo resolveInfo) {
final Intent intent = new Intent(source.getAction());
intent.setType(source.getType());
intent.putExtras(source.getExtras());
intent.setPackage(resolveInfo.activityInfo.packageName);
intent.setClassName(resolveInfo.activityInfo.packageName, resolveInfo.activityInfo.name);
return intent;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment