|
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; |
|
} |
|
} |