<string name="auth_method_oauth2">off</string>
<string name="auth_method_saml_web_sso">off</string>
+ <!-- Flags to enable/disable some features -->
+ <string name = "send_files_to_other_apps">on</string>
+
+
<!-- Colors -->
<color name="login_background_color">#FFFFFF</color>
<color name="login_logo_background_color">#FFFFFF</color>
<string name="unshare_link_file_no_exist">Unable to unshare this file or folder. It does not exist.</string>
<string name="unshare_link_file_error">An error occurred while trying to unshare this file or folder</string>
+ <string name="activity_chooser_send_file_title">Send</string>
+
<string name="copy_link">Copy link</string>
<string name="clipboard_text_copied">Copied to clipboard</string>
</resources>
}
return false;
}
-
+
public void unshareFileWithLink(OCFile file, FileActivity callerActivity) {
}
}
+
+ public void sendDownloadedFile(OCFile file, FileActivity callerActivity) {
+ if (file != null) {
+ Intent sendIntent = new Intent(android.content.Intent.ACTION_SEND);
+ // set MimeType
+ sendIntent.setType(file.getMimetype());
+ sendIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("file://" + file.getStoragePath()));
+ sendIntent.putExtra(Intent.ACTION_SEND, true); // Send Action
+
+ // Show dialog, without the own app
+ String[] packagesToExclude = new String[] { callerActivity.getPackageName() };
+ DialogFragment chooserDialog = ShareLinkToDialog.newInstance(sendIntent, packagesToExclude, file);
+ chooserDialog.show(callerActivity.getSupportFragmentManager(), FTAG_CHOOSER_DIALOG);
+
+ } else {
+ Log_OC.wtf(TAG, "Trying to send a NULL OCFile");
+ }
+ }
+
}
import com.owncloud.android.ui.fragment.FileFragment;
import com.owncloud.android.ui.fragment.OCFileListFragment;
import com.owncloud.android.ui.preview.PreviewImageActivity;
-import com.owncloud.android.ui.preview.PreviewImageFragment;
import com.owncloud.android.ui.preview.PreviewMediaFragment;
import com.owncloud.android.ui.preview.PreviewVideoActivity;
import com.owncloud.android.utils.DisplayUtils;
private static final String KEY_WAITING_TO_PREVIEW = "WAITING_TO_PREVIEW";
private static final String KEY_SYNC_IN_PROGRESS = "SYNC_IN_PROGRESS";
- private static final String KEY_REFRESH_SHARES_IN_PROGRESS = "SHARES_IN_PROGRESS";
+ //private static final String KEY_REFRESH_SHARES_IN_PROGRESS = "SHARES_IN_PROGRESS";
+ private static final String KEY_WAITING_TO_SEND = "WAITING_TO_SEND";
public static final int DIALOG_SHORT_WAIT = 0;
private static final int DIALOG_CHOOSE_UPLOAD_SOURCE = 1;
private boolean mSyncInProgress = false;
//private boolean mRefreshSharesInProgress = false;
+ private OCFile mWaitingToSend;
+
@Override
protected void onCreate(Bundle savedInstanceState) {
Log_OC.d(TAG, "onCreate() start");
mWaitingToPreview = (OCFile) savedInstanceState.getParcelable(FileDisplayActivity.KEY_WAITING_TO_PREVIEW);
mSyncInProgress = savedInstanceState.getBoolean(KEY_SYNC_IN_PROGRESS);
//mRefreshSharesInProgress = savedInstanceState.getBoolean(KEY_REFRESH_SHARES_IN_PROGRESS);
+ mWaitingToSend = (OCFile) savedInstanceState.getParcelable(FileDisplayActivity.KEY_WAITING_TO_SEND);
} else {
mWaitingToPreview = null;
mSyncInProgress = false;
//mRefreshSharesInProgress = false;
+ mWaitingToSend = null;
}
/// USER INTERFACE
outState.putParcelable(FileDisplayActivity.KEY_WAITING_TO_PREVIEW, mWaitingToPreview);
outState.putBoolean(FileDisplayActivity.KEY_SYNC_IN_PROGRESS, mSyncInProgress);
//outState.putBoolean(FileDisplayActivity.KEY_REFRESH_SHARES_IN_PROGRESS, mRefreshSharesInProgress);
+ outState.putParcelable(FileDisplayActivity.KEY_WAITING_TO_SEND, mWaitingToSend);
Log_OC.d(TAG, "onSaveInstanceState() end");
}
refreshSecondFragment(intent.getAction(), downloadedRemotePath, intent.getBooleanExtra(FileDownloader.EXTRA_DOWNLOAD_RESULT, false));
}
+ if (mWaitingToSend != null) {
+ mWaitingToSend = getStorageManager().getFileByPath(mWaitingToSend.getRemotePath()); // Update the file to send
+ if (mWaitingToSend.isDown()) {
+ sendDownloadedFile();
+ }
+ }
+
removeStickyBroadcast(intent);
}
}
*/
+ /**
+ * Requests the download of the received {@link OCFile} , updates the UI
+ * to monitor the download progress and prepares the activity to send the file
+ * when the download finishes.
+ *
+ * @param file {@link OCFile} to download and preview.
+ */
+ @Override
+ public void startDownloadForSending(OCFile file) {
+ mWaitingToSend = file;
+ requestForDownload(mWaitingToSend);
+ boolean hasSecondFragment = (getSecondFragment()!= null);
+ updateFragmentsVisibility(hasSecondFragment);
+ }
+
+ private void requestForDownload(OCFile file) {
+ Account account = getAccount();
+ if (!mDownloaderBinder.isDownloading(account, file)) {
+ Intent i = new Intent(this, FileDownloader.class);
+ i.putExtra(FileDownloader.EXTRA_ACCOUNT, account);
+ i.putExtra(FileDownloader.EXTRA_FILE, file);
+ startService(i);
+ }
+ }
+
+ private void sendDownloadedFile(){
+ dismissLoadingDialog();
+ getFileOperationsHelper().sendDownloadedFile(mWaitingToSend, this);
+ mWaitingToSend = null;
+ }
+
}
}
}
- // add activity for copy to clipboard
- Intent copyToClipboardIntent = new Intent(getSherlockActivity(), CopyToClipboardActivity.class);
- List<ResolveInfo> copyToClipboard = pm.queryIntentActivities(copyToClipboardIntent, 0);
- if (!copyToClipboard.isEmpty()) {
- activities.add(copyToClipboard.get(0));
+ boolean sendAction = mIntent.getBooleanExtra(Intent.ACTION_SEND, false);
+
+ if (!sendAction) {
+ // add activity for copy to clipboard
+ Intent copyToClipboardIntent = new Intent(getSherlockActivity(), CopyToClipboardActivity.class);
+ List<ResolveInfo> copyToClipboard = pm.queryIntentActivities(copyToClipboardIntent, 0);
+ if (!copyToClipboard.isEmpty()) {
+ activities.add(copyToClipboard.get(0));
+ }
}
Collections.sort(activities, new ResolveInfo.DisplayNameComparator(pm));
mAdapter = new ActivityAdapter(getSherlockActivity(), pm, activities);
- return new AlertDialog.Builder(getSherlockActivity())
- .setTitle(R.string.activity_chooser_title)
- .setAdapter(mAdapter, new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- // 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();
+
+
+ if (sendAction) {
+
+ return new AlertDialog.Builder(getSherlockActivity())
+ .setTitle(R.string.activity_chooser_send_file_title)
+ .setAdapter(mAdapter, new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ // 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);
+
+ // Send the file
+ ((FileActivity)getSherlockActivity()).startActivity(mIntent);
+
+ }
+ })
+ .create();
+ } else {
+ return new AlertDialog.Builder(getSherlockActivity())
+ .setTitle(R.string.activity_chooser_title)
+ .setAdapter(mAdapter, new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ // 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();
+ }
}
item.setVisible(false);
item.setEnabled(false);
}
+
+ // Send file
+ item = menu.findItem(R.id.action_send_file);
+ boolean sendEnabled = getString(R.string.send_files_to_other_apps).equalsIgnoreCase("on");
+ if (item != null && sendEnabled) {
+ item.setVisible(true);
+ item.setEnabled(true);
+ } else {
+ item.setVisible(false);
+ item.setEnabled(false);
+ }
}
synchronizeFile();
return true;
}
+ case R.id.action_send_file: {
+ FileDisplayActivity activity = (FileDisplayActivity) getSherlockActivity();
+ // Obtain the file
+ if (!getFile().isDown()) { // Download the file
+ //activity.showLoadingDialog();
+ Log_OC.d(TAG, getFile().getRemotePath() + " : File must be downloaded");
+ activity.startDownloadForSending(getFile());
+
+ } else {
+ activity.getFileOperationsHelper().sendDownloadedFile(getFile(), activity);
+ }
+ return true;
+ }
default:
return false;
}
import android.accounts.Account;
import android.app.Activity;
-import android.content.Intent;
-import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.view.ContextMenu;
toHide.add(R.id.action_cancel_upload);
toHide.add(R.id.action_sync_file);
toHide.add(R.id.action_see_details);
- toHide.add(R.id.action_share_file);
+ toHide.add(R.id.action_send_file);
if ( mContainerActivity.getFileDownloaderBinder().isDownloading(AccountUtils.getCurrentOwnCloudAccount(getActivity()), targetFile) ||
mContainerActivity.getFileUploaderBinder().isUploading(AccountUtils.getCurrentOwnCloudAccount(getActivity()), targetFile) ) {
toDisable.add(R.id.action_rename_file);
toHide.add(R.id.action_unshare_file);
}
+ // Send file
+ boolean sendEnabled = getString(R.string.send_files_to_other_apps).equalsIgnoreCase("on");
+ if (!sendEnabled) {
+ toHide.add(R.id.action_send_file);
+ }
+
for (int i : toHide) {
item = menu.findItem(i);
if (item != null) {
return true;
}
case R.id.action_send_file: {
- Intent sharingIntent = new Intent(android.content.Intent.ACTION_SEND);
- // set MimeType
- sharingIntent.setType(mTargetFile.getMimetype());
- sharingIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("file://"+mTargetFile.getStoragePath()));
- startActivity(Intent.createChooser(sharingIntent, "Share via"));
+ // Obtain the file
+ if (!mTargetFile.isDown()) { // Download the file
+ ((FileDisplayActivity) getSherlockActivity()).showLoadingDialog();
+ Log_OC.d(TAG, mTargetFile.getRemotePath() + " : File must be downloaded");
+ mContainerActivity.startDownloadForSending(mTargetFile);
+
+ } else {
+
+ FileDisplayActivity activity = (FileDisplayActivity) getSherlockActivity();
+ activity.getFileOperationsHelper().sendDownloadedFile(mTargetFile, activity);
+ }
return true;
}
default:
* @param uploading Flag signaling if the file is now uploading.
*/
public void onTransferStateChanged(OCFile file, boolean downloading, boolean uploading);
+
+ void startDownloadForSending(OCFile file);
}
toHide.add(R.id.action_unshare_file);
}
+ // Send file
+ boolean sendEnabled = getString(R.string.send_files_to_other_apps).equalsIgnoreCase("on");
+ if (!sendEnabled) {
+ toHide.add(R.id.action_send_file);
+ }
+
for (int i : toHide) {
item = menu.findItem(i);
if (item != null) {
return true;
}
case R.id.action_send_file: {
- shareFile();
+ FileActivity act = (FileActivity)getSherlockActivity();
+ act.getFileOperationsHelper().sendDownloadedFile(getFile(), act);
return true;
}
}
}
- private void shareFile(){
- Intent sharingIntent = new Intent(android.content.Intent.ACTION_SEND);
- // set MimeType
- sharingIntent.setType(getFile().getMimetype());
- sharingIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("file://"+getFile().getStoragePath()));
- startActivity(Intent.createChooser(sharingIntent, "Share via"));
- }
-
-
private void seeDetails() {
((FileFragment.ContainerActivity)getActivity()).showDetails(getFile());
toHide.add(R.id.action_unshare_file);
}
+ // Send file
+ boolean sendEnabled = getString(R.string.send_files_to_other_apps).equalsIgnoreCase("on");
+ if (!sendEnabled) {
+ toHide.add(R.id.action_send_file);
+ }
+
for (int i : toHide) {
item = menu.findItem(i);
if (item != null) {
seeDetails();
return true;
}
+ case R.id.action_send_file: {
+ sendFile();
+ }
default:
return false;
}
+ private void sendFile() {
+ stopPreview(false);
+ FileActivity activity = (FileActivity)((FileFragment.ContainerActivity)getActivity());
+ activity.getFileOperationsHelper().sendDownloadedFile(getFile(), activity);
+
+ }
private void seeDetails() {
stopPreview(false);
package com.owncloud.android.test;
-import com.owncloud.android.lib.accounts.AccountUtils;
+import com.owncloud.android.lib.common.accounts.AccountUtils;
import com.owncloud.android.lib.resources.status.OwnCloudVersion;
import android.test.AndroidTestCase;