From: masensio Date: Tue, 4 Mar 2014 10:58:30 +0000 (+0100) Subject: OC-3121: (fix bug) An empty message is sent, when renaming a file in the web of a... X-Git-Tag: oc-android-1.5.5~22^2~4 X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/commitdiff_plain/df4d0355f25795914dd0fcb9d53a9113da047c15?ds=inline;hp=--cc OC-3121: (fix bug) An empty message is sent, when renaming a file in the web of a big file --- df4d0355f25795914dd0fcb9d53a9113da047c15 diff --git a/res/values/strings.xml b/res/values/strings.xml index 60e4ecab..c27361fc 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -254,7 +254,8 @@ An error occurred while trying to unshare this file or folder Send - + Sorry, trying to send a missing file. + Copy link Copied to clipboard diff --git a/src/com/owncloud/android/files/FileOperationsHelper.java b/src/com/owncloud/android/files/FileOperationsHelper.java index 5b74dc89..e413cde6 100644 --- a/src/com/owncloud/android/files/FileOperationsHelper.java +++ b/src/com/owncloud/android/files/FileOperationsHelper.java @@ -17,6 +17,8 @@ package com.owncloud.android.files; +import java.io.File; +import java.io.IOException; import org.apache.http.protocol.HTTP; import android.accounts.AccountManager; @@ -35,6 +37,7 @@ import com.owncloud.android.lib.resources.status.OwnCloudVersion; import com.owncloud.android.services.OperationsService; import com.owncloud.android.ui.activity.FileActivity; import com.owncloud.android.ui.dialog.ShareLinkToDialog; +import com.owncloud.android.utils.FileStorageUtils; import com.owncloud.android.utils.Log_OC; /** @@ -46,7 +49,9 @@ public class FileOperationsHelper { private static final String TAG = FileOperationsHelper.class.getName(); - private static final String FTAG_CHOOSER_DIALOG = "CHOOSER_DIALOG"; + private static final String FTAG_CHOOSER_DIALOG = "CHOOSER_DIALOG"; + + public final static int REQUEST_CODE_FILE_OPEN_HELPER = 100; public void openFile(OCFile file, FileActivity callerActivity) { @@ -184,5 +189,41 @@ public class FileOperationsHelper { Log_OC.wtf(TAG, "Trying to send a NULL OCFile"); } } + + public void sendFileToApp(Intent sendIntent, FileActivity callerActivity) { + Uri filePath = sendIntent.getParcelableExtra(Intent.EXTRA_STREAM); + File file = new File(filePath.getPath()); + Log_OC.d(TAG, "FILE " + filePath.getPath()); + if (file.exists()) { + File folder = new File(FileStorageUtils.getTemporalPath(callerActivity.getAccount().name) + "/send"); + boolean success = true; + if (!folder.exists()) { + success = folder.mkdir(); + } + if (success) { + File tmpFile = new File(folder.getAbsolutePath()+ "/" + file.getName()); + try { + tmpFile.createNewFile(); + FileStorageUtils.copyFile(file, tmpFile); + } catch (IOException e) { + Log_OC.e(TAG, "An error occurred while it was trying to copy in a temporal folder " + e.getMessage()); + } + // Update Uri + Uri uri = Uri.fromFile(tmpFile); + sendIntent.removeExtra(Intent.EXTRA_STREAM); + sendIntent.putExtra(Intent.EXTRA_STREAM, uri); + callerActivity.startActivityForResult(sendIntent, REQUEST_CODE_FILE_OPEN_HELPER); + } + } else { + // Show a Message + Toast t = Toast.makeText(callerActivity, callerActivity.getString(R.string.send_file_missing_file), Toast.LENGTH_LONG); + t.show(); + Log_OC.d(TAG, "Missing file"); + } + } + + + + } diff --git a/src/com/owncloud/android/ui/activity/FileActivity.java b/src/com/owncloud/android/ui/activity/FileActivity.java index 42b90aec..1b211079 100644 --- a/src/com/owncloud/android/ui/activity/FileActivity.java +++ b/src/com/owncloud/android/ui/activity/FileActivity.java @@ -18,6 +18,8 @@ package com.owncloud.android.ui.activity; +import java.io.File; + import android.accounts.Account; import android.accounts.AccountManager; import android.accounts.AccountManagerCallback; @@ -52,6 +54,7 @@ import com.owncloud.android.operations.UnshareLinkOperation; import com.owncloud.android.services.OperationsService; import com.owncloud.android.services.OperationsService.OperationsServiceBinder; import com.owncloud.android.ui.dialog.LoadingDialog; +import com.owncloud.android.utils.FileStorageUtils; import com.owncloud.android.utils.Log_OC; @@ -157,6 +160,7 @@ public class FileActivity extends SherlockFragmentActivity implements OnRemoteOp if (mOperationsServiceBinder != null) { mOperationsServiceBinder.addOperationListener(FileActivity.this, mHandler); } + } @@ -376,7 +380,7 @@ public class FileActivity extends SherlockFragmentActivity implements OnRemoteOp public FileOperationsHelper getFileOperationsHelper() { return mFileOperationsHelper; } - + /** * * @param operation Removal operation performed. @@ -492,6 +496,23 @@ public class FileActivity extends SherlockFragmentActivity implements OnRemoteOp // TODO whatever could be waiting for the service is unbound } } - }; - + } + + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + + Log_OC.d(TAG, "requestCode " + String.valueOf(requestCode) ); + if (requestCode == FileOperationsHelper.REQUEST_CODE_FILE_OPEN_HELPER) { + // Remove "send" folder + File folder = new File(FileStorageUtils.getTemporalPath(getAccount().name) + "/send"); + if (folder.exists()) { + FileStorageUtils.deleteFolder(folder); + } + } + + }; + + } diff --git a/src/com/owncloud/android/ui/dialog/ShareLinkToDialog.java b/src/com/owncloud/android/ui/dialog/ShareLinkToDialog.java index f4af7e19..b651d33d 100644 --- a/src/com/owncloud/android/ui/dialog/ShareLinkToDialog.java +++ b/src/com/owncloud/android/ui/dialog/ShareLinkToDialog.java @@ -111,10 +111,7 @@ public class ShareLinkToDialog extends SherlockDialogFragment { Collections.sort(activities, new ResolveInfo.DisplayNameComparator(pm)); mAdapter = new ActivityAdapter(getSherlockActivity(), pm, activities); - - if (sendAction) { - return new AlertDialog.Builder(getSherlockActivity()) .setTitle(R.string.activity_chooser_send_file_title) .setAdapter(mAdapter, new DialogInterface.OnClickListener() { @@ -127,11 +124,13 @@ public class ShareLinkToDialog extends SherlockDialogFragment { mIntent.setComponent(name); // Send the file - ((FileActivity)getSherlockActivity()).startActivity(mIntent); + FileOperationsHelper foh = new FileOperationsHelper(); + foh.sendFileToApp(mIntent, (FileActivity)getSherlockActivity()); } }) .create(); + } else { return new AlertDialog.Builder(getSherlockActivity()) .setTitle(R.string.activity_chooser_title) diff --git a/src/com/owncloud/android/utils/FileStorageUtils.java b/src/com/owncloud/android/utils/FileStorageUtils.java index e8e8f48b..1894e74b 100644 --- a/src/com/owncloud/android/utils/FileStorageUtils.java +++ b/src/com/owncloud/android/utils/FileStorageUtils.java @@ -18,6 +18,10 @@ package com.owncloud.android.utils; import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.nio.channels.FileChannel; import com.owncloud.android.MainApp; import com.owncloud.android.R; @@ -116,5 +120,46 @@ public class FileStorageUtils { file.setEtag(ocFile.getEtag()); return file; } + + /** + * Copy file src in dst + * @param src + * @param dst + * @throws IOException + */ + @SuppressWarnings("resource") + public static void copyFile(File src, File dst) throws IOException { + FileChannel inChannel = new FileInputStream(src).getChannel(); + FileChannel outChannel = new FileOutputStream(dst).getChannel(); + try { + inChannel.transferTo(0, inChannel.size(), outChannel); + } finally { + if (inChannel != null) + inChannel.close(); + if (outChannel != null) + outChannel.close(); + } + } + + + /** + * Delete folder + * @param folder + * @return true if folder is deleted + */ + public static boolean deleteFolder(File folder){ + if (folder.isDirectory()) { + String[] children = folder.list(); + for (int i=0; i