package com.aegiswallet.helpers; import android.app.Activity; import android.app.Dialog; import android.content.ComponentName; import android.content.Intent; import android.content.pm.ActivityInfo; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.graphics.drawable.ColorDrawable; import android.net.Uri; import android.view.Gravity; import android.view.View; import android.view.ViewGroup; import android.view.Window; import android.view.WindowManager; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.ImageView; import android.widget.ListView; import android.widget.TextView; import com.aegiswallet.R; import com.aegiswallet.actions.MainActivity; import java.io.File; import java.util.Collections; import java.util.List; /** * Created by bsimic on 5/7/14. */ public class CustomSharer { ShareAdapter adapter; Button button; Intent emailIntent = new Intent(Intent.ACTION_SEND); Activity context; String fileName; public CustomSharer(Activity context, String fileName) { this.context = context; this.fileName = fileName; } public void showCustomChooser() { final Dialog dialog = new Dialog(context); dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); WindowManager.LayoutParams layoutParams = dialog.getWindow().getAttributes(); layoutParams.gravity = Gravity.CENTER; dialog.getWindow().setAttributes(layoutParams); dialog.getWindow().setBackgroundDrawable( new ColorDrawable(android.graphics.Color.TRANSPARENT)); dialog.setCanceledOnTouchOutside(true); dialog.setContentView(R.layout.custom_chooser_view); dialog.setCancelable(true); ListView listView = (ListView) dialog.findViewById(R.id.custom_chooser_list_view); PackageManager packageManager = context.getPackageManager(); emailIntent.setType("message/rfc822"); emailIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); emailIntent.putExtra(Intent.EXTRA_EMAIL, ""); emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Aegis Wallet Backup"); emailIntent.putExtra(Intent.EXTRA_TEXT, context.getString(R.string.wallet_backup_text)); emailIntent.setType("x-bitcoin/aegis-backup"); if(fileName != null && emailIntent != null) emailIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(new File(fileName))); List<ResolveInfo> launchables = packageManager.queryIntentActivities(emailIntent, 0); Collections.sort(launchables, new ResolveInfo.DisplayNameComparator(packageManager)); adapter = new ShareAdapter(packageManager, launchables); listView.setAdapter(adapter); listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { ResolveInfo launchable = adapter.getItem(i); ActivityInfo activityInfo = launchable.activityInfo; emailIntent.setType("plain/text"); ComponentName componentName = new ComponentName(activityInfo.applicationInfo.packageName, activityInfo.name); emailIntent.addCategory(Intent.CATEGORY_LAUNCHER); emailIntent.setComponent(componentName); context.startActivity(emailIntent); dialog.dismiss(); } }); dialog.show(); } private class ShareAdapter extends ArrayAdapter<ResolveInfo> { private PackageManager packageManager; public ShareAdapter(PackageManager packageManager, List<ResolveInfo> apps) { super(context, R.layout.custom_sharer_row, apps); this.packageManager = packageManager; } @Override public View getView(int position, View convertView, ViewGroup parent) { convertView = context.getLayoutInflater().inflate(R.layout.custom_sharer_row, parent, false); TextView label = (TextView) convertView.findViewById(R.id.custom_sharer_label); label.setText(getItem(position).loadLabel(packageManager)); ImageView icon = (ImageView) convertView.findViewById(R.id.custom_sharer_icon); icon.setImageDrawable(getItem(position).loadIcon(packageManager)); return convertView; } } }