package com.amaze.filemanager.utils.share; import android.app.Activity; import android.content.ComponentName; import android.content.Intent; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.graphics.drawable.Drawable; import android.net.Uri; import android.os.AsyncTask; import android.widget.Toast; import com.afollestad.materialdialogs.MaterialDialog; import com.amaze.filemanager.R; import com.amaze.filemanager.utils.theme.AppTheme; import java.util.ArrayList; import java.util.List; /** * Created by Arpit on 01-07-2015. */ public class ShareTask extends AsyncTask<String, String, Void> { private AppTheme appTheme; private Activity contextc; private int fab_skin; private ArrayList<Uri> arrayList; private ArrayList<Intent> targetShareIntents = new ArrayList<>(); private ArrayList<String> arrayList1 = new ArrayList<>(); private ArrayList<Drawable> arrayList2 = new ArrayList<>(); public ShareTask(Activity context, ArrayList<Uri> arrayList, AppTheme appTheme, int fab_skin) { this.contextc = context; this.arrayList = arrayList; this.appTheme = appTheme; this.fab_skin = fab_skin; } @Override protected Void doInBackground(String... strings) { String mime = strings[0]; Intent shareIntent = new Intent(); boolean bluetooth_present = false; shareIntent.setAction(Intent.ACTION_SEND_MULTIPLE); shareIntent.setType(mime); PackageManager packageManager = contextc.getPackageManager(); List<ResolveInfo> resInfos = packageManager.queryIntentActivities(shareIntent, 0); if (!resInfos.isEmpty()) { for (ResolveInfo resInfo : resInfos) { String packageName = resInfo.activityInfo.packageName; arrayList2.add(resInfo.loadIcon(packageManager)); arrayList1.add(resInfo.loadLabel(packageManager).toString()); if (packageName.contains("android.bluetooth")) bluetooth_present = true; Intent intent = new Intent(); System.out.println(resInfo.activityInfo.packageName + "\t" + resInfo.activityInfo.name); intent.setComponent(new ComponentName(packageName, resInfo.activityInfo.name)); intent.setAction(Intent.ACTION_SEND_MULTIPLE); intent.setType(mime); intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, arrayList); intent.setPackage(packageName); targetShareIntents.add(intent); } } if (!bluetooth_present && appInstalledOrNot("com.android.bluetooth", packageManager)) { Intent intent = new Intent(); intent.setComponent(new ComponentName("com.android.bluetooth", "com.android.bluetooth.opp.BluetoothOppLauncherActivity")); intent.setAction(Intent.ACTION_SEND_MULTIPLE); intent.setType(mime); intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, arrayList); intent.setPackage("com.android.bluetooth"); targetShareIntents.add(intent); arrayList1.add(contextc.getResources().getString(R.string.bluetooth)); arrayList2.add(contextc.getResources().getDrawable(appTheme.equals(AppTheme.DARK) ? R.drawable.ic_settings_bluetooth_white_36dp : R.drawable.ic_settings_bluetooth_black_24dp)); } return null; } private boolean appInstalledOrNot(String uri, PackageManager pm) { boolean app_installed; try { pm.getPackageInfo(uri, PackageManager.GET_ACTIVITIES); app_installed = true; } catch (PackageManager.NameNotFoundException e) { app_installed = false; } return app_installed; } @Override public void onPostExecute(Void v) { if (!targetShareIntents.isEmpty()) { MaterialDialog.Builder builder = new MaterialDialog.Builder(contextc); builder.title(R.string.share); builder.theme(appTheme.getMaterialDialogTheme()); ShareAdapter shareAdapter = new ShareAdapter(contextc, targetShareIntents, arrayList1, arrayList2); builder.adapter(shareAdapter, null); builder.negativeText(R.string.cancel); builder.negativeColor(fab_skin); MaterialDialog b = builder.build(); shareAdapter.updateMatDialog(b); b.show(); } else { Toast.makeText(contextc, R.string.noappfound, Toast.LENGTH_SHORT).show(); } } }