X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/blobdiff_plain/59513cd56ddd82118b96df9a5485406338dfb5ea..1d5087d736b823c3ce22c80975e202059c44751c:/src/com/owncloud/android/ui/dialog/ActivityChooserDialog.java diff --git a/src/com/owncloud/android/ui/dialog/ActivityChooserDialog.java b/src/com/owncloud/android/ui/dialog/ActivityChooserDialog.java index fd910b40..dc15f69a 100644 --- a/src/com/owncloud/android/ui/dialog/ActivityChooserDialog.java +++ b/src/com/owncloud/android/ui/dialog/ActivityChooserDialog.java @@ -17,26 +17,33 @@ package com.owncloud.android.ui.dialog; -import android.annotation.SuppressLint; -import android.app.Activity; +import java.util.Arrays; +import java.util.Collections; +import java.util.Iterator; +import java.util.List; + import android.app.AlertDialog; import android.app.Dialog; +import android.content.ComponentName; +import android.content.Context; import android.content.DialogInterface; import android.content.Intent; +import android.content.pm.ActivityInfo; +import android.content.pm.PackageManager; +import android.content.pm.ResolveInfo; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.view.WindowManager.LayoutParams; import android.widget.ArrayAdapter; -import android.widget.EditText; -import android.widget.ListAdapter; +import android.widget.ImageView; +import android.widget.TextView; import com.actionbarsherlock.app.SherlockDialogFragment; import com.owncloud.android.R; -import com.owncloud.android.ui.dialog.ConflictsResolveDialog.Decision; -import com.owncloud.android.ui.dialog.ConflictsResolveDialog.OnConflictDecisionMadeListener; -import com.owncloud.android.utils.DisplayUtils; +import com.owncloud.android.datamodel.OCFile; +import com.owncloud.android.files.FileOperationsHelper; +import com.owncloud.android.ui.activity.FileActivity; import com.owncloud.android.utils.Log_OC; /** @@ -50,14 +57,18 @@ public class ActivityChooserDialog extends SherlockDialogFragment { private final static String TAG = ActivityChooserDialog.class.getSimpleName(); private final static String ARG_INTENT = ActivityChooserDialog.class.getSimpleName() + ".ARG_INTENT"; private final static String ARG_PACKAGES_TO_EXCLUDE = ActivityChooserDialog.class.getSimpleName() + ".ARG_PACKAGES_TO_EXCLUDE"; + private final static String ARG_FILE_TO_SHARE = ActivityChooserDialog.class.getSimpleName() + ".FILE_TO_SHARE"; - private ListAdapter mAdapter = null; //new ArrayAdapter(); + private ActivityAdapter mAdapter; + private OCFile mFile; + private Intent mIntent; - public static ActivityChooserDialog newInstance(Intent intent, String[] packagesToExclude/*OnConflictDecisionMadeListener listener*/) { + public static ActivityChooserDialog newInstance(Intent intent, String[] packagesToExclude, OCFile fileToShare) { ActivityChooserDialog f = new ActivityChooserDialog(); Bundle args = new Bundle(); args.putParcelable(ARG_INTENT, intent); args.putStringArray(ARG_PACKAGES_TO_EXCLUDE, packagesToExclude); + args.putParcelable(ARG_FILE_TO_SHARE, fileToShare); f.setArguments(args); return f; } @@ -69,22 +80,72 @@ public class ActivityChooserDialog extends SherlockDialogFragment { @Override public Dialog onCreateDialog(Bundle savedInstanceState) { - Intent intent = getArguments().getParcelable(ARG_INTENT); - String [] packagesToExclude = getArguments().getStringArray(ARG_PACKAGES_TO_EXCLUDE); + mIntent = getArguments().getParcelable(ARG_INTENT); + String[] packagesToExclude = getArguments().getStringArray(ARG_PACKAGES_TO_EXCLUDE); + List packagesToExcludeList = Arrays.asList(packagesToExclude != null ? packagesToExclude : new String[0]); + mFile = getArguments().getParcelable(ARG_FILE_TO_SHARE); - // TODO init mAdapter + PackageManager pm= getSherlockActivity().getPackageManager(); + List activities = pm.queryIntentActivities(mIntent, PackageManager.MATCH_DEFAULT_ONLY); + Iterator it = activities.iterator(); + ResolveInfo resolveInfo; + while (it.hasNext()) { + resolveInfo = it.next(); + if (packagesToExcludeList.contains(resolveInfo.activityInfo.packageName.toLowerCase())) { + it.remove(); + } + } + Collections.sort(activities, new ResolveInfo.DisplayNameComparator(pm)); + mAdapter = new ActivityAdapter(getSherlockActivity(), pm, activities); return new AlertDialog.Builder(getSherlockActivity()) - .setIcon(DisplayUtils.getSeasonalIconId()) .setTitle(R.string.activity_chooser_title) .setAdapter(mAdapter, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { - // The 'which' argument contains the index position - // of the selected item + // Add the information of the chosen activity to the intent to send + ResolveInfo chosen = mAdapter.getItem(which); + ActivityInfo actInfo = chosen.activityInfo; + ComponentName name=new ComponentName(actInfo.applicationInfo.packageName, actInfo.name); + mIntent.setComponent(name); + + // Create a new share resource + FileOperationsHelper foh = new FileOperationsHelper(); + foh.shareFileWithLinkToApp(mFile, mIntent, (FileActivity)getSherlockActivity()); } }) .create(); } + + + class ActivityAdapter extends ArrayAdapter { + + private PackageManager mPackageManager; + + ActivityAdapter(Context context, PackageManager pm, List apps) { + super(context, R.layout.activity_row, apps); + this.mPackageManager = pm; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + if (convertView == null) { + convertView = newView(parent); + } + bindView(position, convertView); + return convertView; + } + + private View newView(ViewGroup parent) { + return(((LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.activity_row, parent, false)); + } + + private void bindView(int position, View row) { + TextView label = (TextView) row.findViewById(R.id.title); + label.setText(getItem(position).loadLabel(mPackageManager)); + ImageView icon = (ImageView) row.findViewById(R.id.icon); + icon.setImageDrawable(getItem(position).loadIcon(mPackageManager)); + } + } }