From: David A. Velasco Date: Mon, 3 Feb 2014 08:46:26 +0000 (+0100) Subject: Merge branch 'share_link__new_share' into share_link__new_share_menu X-Git-Tag: oc-android-1.5.5~58^2~15^2~1 X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/commitdiff_plain/59513cd56ddd82118b96df9a5485406338dfb5ea?hp=261d8a5167571ffbaa447cce8df24f32a53faf7d Merge branch 'share_link__new_share' into share_link__new_share_menu --- diff --git a/AndroidManifest.xml b/AndroidManifest.xml index ca11c81b..465dec84 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -54,7 +54,6 @@ > - @@ -81,9 +80,12 @@ - + - + + + + Wait a moment "Unexpected problem ; please select the file from a different app" No file was selected + Send link to #8230; Login with oAuth2 Connecting to oAuth2 server… diff --git a/src/com/owncloud/android/files/FileHandler.java b/src/com/owncloud/android/files/FileHandler.java index 2eb754dd..77ff78ad 100644 --- a/src/com/owncloud/android/files/FileHandler.java +++ b/src/com/owncloud/android/files/FileHandler.java @@ -27,4 +27,5 @@ public interface FileHandler { public void openFile(OCFile file); + public void shareFileWithLink(OCFile file); } diff --git a/src/com/owncloud/android/ui/activity/FileActivity.java b/src/com/owncloud/android/ui/activity/FileActivity.java index 3a9297ec..4f42597f 100644 --- a/src/com/owncloud/android/ui/activity/FileActivity.java +++ b/src/com/owncloud/android/ui/activity/FileActivity.java @@ -18,15 +18,24 @@ package com.owncloud.android.ui.activity; +import java.util.ArrayList; +import java.util.List; + +import org.apache.http.protocol.HTTP; + import android.accounts.Account; import android.accounts.AccountManager; import android.accounts.AccountManagerCallback; import android.accounts.AccountManagerFuture; import android.accounts.OperationCanceledException; import android.content.Intent; +import android.content.pm.PackageManager; +import android.content.pm.ResolveInfo; import android.net.Uri; import android.os.Bundle; +import android.os.Parcelable; import android.webkit.MimeTypeMap; +import android.widget.Toast; import com.actionbarsherlock.app.SherlockFragmentActivity; import com.owncloud.android.MainApp; @@ -343,5 +352,88 @@ public abstract class FileActivity extends SherlockFragmentActivity { Log_OC.wtf(TAG, "Trying to open a NULL OCFile"); } } + + /* + public void shareFileWithLink(OCFile file) { + if (file != null) { + + Intent intentToShareLink = new Intent(Intent.ACTION_SEND); + intentToShareLink.putExtra(Intent.EXTRA_TEXT, "https://fake.url.lolo"); + intentToShareLink.setType(HTTP.PLAIN_TEXT_TYPE); + + Intent chooserIntent = Intent.createChooser(intentToShareLink, getString(R.string.action_share_file)); + startActivity(chooserIntent); + + } else { + Log_OC.wtf(TAG, "Trying to open a NULL OCFile"); + } + } + */ + + public void shareFileWithLink(OCFile file) { + if (isSharedSupported()) { + if (file != null) { + + // Create the Share + //CreateShareOperation createShare = new CreateShareOperation(file.getRemotePath(), ShareType.PUBLIC_LINK, "", false, "", 1); + //createShare.execute(getStorageManager(), this, this, mHandler, this); + + // TODO + // Get the link --> when the operation is finished + + String link = "https://fake.url.lolo"; + Intent chooserIntent = null; + List targetedShareIntents = new ArrayList(); + List resInfo = getPackageManager().queryIntentActivities(createShareWithLinkIntent(link), PackageManager.MATCH_DEFAULT_ONLY); + String myPackageName = getPackageName(); + if (!resInfo.isEmpty()) { + for (ResolveInfo info : resInfo) { + if (!info.activityInfo.packageName.equalsIgnoreCase(myPackageName)) { + Intent targetedShare = createTargetedShare(link, info.activityInfo.applicationInfo.packageName, info.activityInfo.name); + targetedShareIntents.add(targetedShare); + } + } + } + if (targetedShareIntents.size() > 0) { + Intent firstTargeted = targetedShareIntents.remove(0); + chooserIntent = Intent.createChooser(firstTargeted, getString(R.string.action_share_file)); + chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, targetedShareIntents.toArray(new Parcelable[] {})); + } else { + // to show standard message + chooserIntent = Intent.createChooser(null, getString(R.string.action_share_file)); + } + startActivity(chooserIntent); + + } else { + Log_OC.wtf(TAG, "Trying to open a NULL OCFile"); + } + + } else { + // Show a Message + Toast t = Toast.makeText(this, getString(R.string.share_link_no_support_share_api), Toast.LENGTH_LONG); + t.show(); + } + } + + private Intent createTargetedShare(String link, String packageName, String className) { + //Intent targetedShare = createShareWithLinkIntent(link); + Intent targetedShare=new Intent(Intent.ACTION_MAIN); + + targetedShare.addCategory(Intent.CATEGORY_LAUNCHER); + targetedShare.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | + Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED); + Log_OC.e("LOLO", "className: " + className + "\npackageName: " + packageName + "\n"); + targetedShare.setClassName(packageName, className); + return targetedShare; + } + + + private Intent createShareWithLinkIntent(String link) { + Intent intentToShareLink = new Intent(Intent.ACTION_SEND); + intentToShareLink.putExtra(Intent.EXTRA_TEXT, link); + intentToShareLink.setType(HTTP.PLAIN_TEXT_TYPE); + return intentToShareLink; + } + } diff --git a/src/com/owncloud/android/ui/activity/FileDisplayActivity.java b/src/com/owncloud/android/ui/activity/FileDisplayActivity.java index 9ae9dfed..237113d8 100644 --- a/src/com/owncloud/android/ui/activity/FileDisplayActivity.java +++ b/src/com/owncloud/android/ui/activity/FileDisplayActivity.java @@ -73,7 +73,6 @@ import com.owncloud.android.operations.CreateFolderOperation; import com.owncloud.android.lib.operations.common.OnRemoteOperationListener; import com.owncloud.android.lib.operations.common.RemoteOperation; import com.owncloud.android.lib.operations.common.RemoteOperationResult; -import com.owncloud.android.lib.operations.common.ShareType; import com.owncloud.android.lib.operations.common.RemoteOperationResult.ResultCode; import com.owncloud.android.operations.CreateShareOperation; import com.owncloud.android.operations.RemoveFileOperation; @@ -1584,23 +1583,4 @@ OCFileListFragment.ContainerActivity, FileDetailFragment.ContainerActivity, OnNa } - - public void shareFileWithLink(OCFile file) { - - if (isSharedSupported()) { - // Create the Share - CreateShareOperation createShare = new CreateShareOperation(file.getRemotePath(), ShareType.PUBLIC_LINK, "", false, "", 1); - createShare.execute(getStorageManager(), this, this, mHandler, this); - - // TODO - // Get the link --> when the operation is finished - - } else { - // Show a Message - Toast t = Toast.makeText(this, getString(R.string.share_link_no_support_share_api), Toast.LENGTH_LONG); - t.show(); - - } - } - } diff --git a/src/com/owncloud/android/ui/dialog/ActivityChooserDialog.java b/src/com/owncloud/android/ui/dialog/ActivityChooserDialog.java new file mode 100644 index 00000000..fd910b40 --- /dev/null +++ b/src/com/owncloud/android/ui/dialog/ActivityChooserDialog.java @@ -0,0 +1,90 @@ +/* ownCloud Android client application + * Copyright (C) 2012-2014 ownCloud Inc. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +package com.owncloud.android.ui.dialog; + +import android.annotation.SuppressLint; +import android.app.Activity; +import android.app.AlertDialog; +import android.app.Dialog; +import android.content.DialogInterface; +import android.content.Intent; +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 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.utils.Log_OC; + +/** + * Dialog showing a list activities able to resolve a given Intent, + * filtering out the activities matching give package names. + * + * @author David A. Velasco + */ +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 ListAdapter mAdapter = null; //new ArrayAdapter(); + + public static ActivityChooserDialog newInstance(Intent intent, String[] packagesToExclude/*OnConflictDecisionMadeListener listener*/) { + ActivityChooserDialog f = new ActivityChooserDialog(); + Bundle args = new Bundle(); + args.putParcelable(ARG_INTENT, intent); + args.putStringArray(ARG_PACKAGES_TO_EXCLUDE, packagesToExclude); + f.setArguments(args); + return f; + } + + public ActivityChooserDialog() { + super(); + Log_OC.d(TAG, "constructor"); + } + + @Override + public Dialog onCreateDialog(Bundle savedInstanceState) { + Intent intent = getArguments().getParcelable(ARG_INTENT); + String [] packagesToExclude = getArguments().getStringArray(ARG_PACKAGES_TO_EXCLUDE); + + // TODO init mAdapter + + 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 + } + }) + .create(); + } + +} diff --git a/src/com/owncloud/android/ui/fragment/FileDetailFragment.java b/src/com/owncloud/android/ui/fragment/FileDetailFragment.java index 5925e085..0eacfe44 100644 --- a/src/com/owncloud/android/ui/fragment/FileDetailFragment.java +++ b/src/com/owncloud/android/ui/fragment/FileDetailFragment.java @@ -336,7 +336,7 @@ public class FileDetailFragment extends FileFragment implements public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.action_share_file: { - mContainerActivity.shareFileWithLink(getFile()); + mContainerActivity.shareFileWithLink(getFile()); return true; } case R.id.action_open_file_with: { diff --git a/src/com/owncloud/android/ui/fragment/OCFileListFragment.java b/src/com/owncloud/android/ui/fragment/OCFileListFragment.java index ae7b7567..8be94778 100644 --- a/src/com/owncloud/android/ui/fragment/OCFileListFragment.java +++ b/src/com/owncloud/android/ui/fragment/OCFileListFragment.java @@ -285,7 +285,7 @@ public class OCFileListFragment extends ExtendedListFragment implements EditName mTargetFile = (OCFile) mAdapter.getItem(info.position); switch (item.getItemId()) { case R.id.action_share_file: { - mContainerActivity.shareFileWithLink(mTargetFile); + mContainerActivity.shareFileWithLink(mTargetFile); return true; } case R.id.action_rename_file: { diff --git a/src/com/owncloud/android/ui/preview/PreviewImageActivity.java b/src/com/owncloud/android/ui/preview/PreviewImageActivity.java index 7816349b..3caa80a0 100644 --- a/src/com/owncloud/android/ui/preview/PreviewImageActivity.java +++ b/src/com/owncloud/android/ui/preview/PreviewImageActivity.java @@ -481,9 +481,4 @@ public class PreviewImageActivity extends FileActivity implements FileFragment.C } } - @Override - public void shareFileWithLink(OCFile file) { - - } - } diff --git a/src/com/owncloud/android/ui/preview/PreviewImageFragment.java b/src/com/owncloud/android/ui/preview/PreviewImageFragment.java index 8555fa77..d646bd5b 100644 --- a/src/com/owncloud/android/ui/preview/PreviewImageFragment.java +++ b/src/com/owncloud/android/ui/preview/PreviewImageFragment.java @@ -247,6 +247,10 @@ public class PreviewImageFragment extends FileFragment implements OnRemoteOper @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { + case R.id.action_share_file: { + //shareFileWithLink(getFile()); + return true; + } case R.id.action_open_file_with: { openFile(); return true; diff --git a/src/com/owncloud/android/ui/preview/PreviewMediaFragment.java b/src/com/owncloud/android/ui/preview/PreviewMediaFragment.java index 464ea6db..0baed617 100644 --- a/src/com/owncloud/android/ui/preview/PreviewMediaFragment.java +++ b/src/com/owncloud/android/ui/preview/PreviewMediaFragment.java @@ -307,6 +307,10 @@ public class PreviewMediaFragment extends FileFragment implements @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { + case R.id.action_share_file: { + //shareFileWithLink(getFile()); + return true; + } case R.id.action_open_file_with: { openFile(); return true;