mirror of
https://github.com/nextcloud/android.git
synced 2024-11-27 09:39:25 +03:00
Execute the file to upload copy in an AsyncTask
This commit is contained in:
parent
42fde39ff1
commit
b064bd4591
2 changed files with 168 additions and 58 deletions
|
@ -34,6 +34,7 @@ import java.util.LinkedList;
|
|||
import java.util.List;
|
||||
import java.util.Stack;
|
||||
import java.util.Vector;
|
||||
import java.util.concurrent.ExecutionException;
|
||||
|
||||
import android.accounts.Account;
|
||||
import android.accounts.AccountManager;
|
||||
|
@ -78,6 +79,7 @@ import com.owncloud.android.lib.common.operations.RemoteOperationResult;
|
|||
import com.owncloud.android.lib.common.utils.Log_OC;
|
||||
import com.owncloud.android.operations.CreateFolderOperation;
|
||||
import com.owncloud.android.ui.dialog.CreateFolderDialogFragment;
|
||||
import com.owncloud.android.utils.CopyTmpFileAsyncTask;
|
||||
import com.owncloud.android.utils.DisplayUtils;
|
||||
import com.owncloud.android.utils.ErrorMessageAdapter;
|
||||
import com.owncloud.android.utils.FileStorageUtils;
|
||||
|
@ -88,7 +90,8 @@ import com.owncloud.android.utils.UriUtils;
|
|||
* This can be used to upload things to an ownCloud instance.
|
||||
*/
|
||||
public class Uploader extends FileActivity
|
||||
implements OnItemClickListener, android.view.View.OnClickListener {
|
||||
implements OnItemClickListener, android.view.View.OnClickListener,
|
||||
CopyTmpFileAsyncTask.OnCopyTmpFileTaskListener {
|
||||
|
||||
private static final String TAG = Uploader.class.getSimpleName();
|
||||
|
||||
|
@ -453,50 +456,17 @@ public class Uploader extends FileActivity
|
|||
String data = c.getString(index);
|
||||
String filePath = mUploadPath +
|
||||
c.getString(c.getColumnIndex(Images.Media.DISPLAY_NAME));
|
||||
String fullTempPath = FileStorageUtils.getTemporalPath(getAccount().name)
|
||||
+ filePath;
|
||||
InputStream inputStream = null;
|
||||
FileOutputStream outputStream = null;
|
||||
|
||||
if (data == null) {
|
||||
try {
|
||||
inputStream = getContentResolver().openInputStream(uri);
|
||||
File cacheFile = new File(fullTempPath);
|
||||
cacheFile.createNewFile();
|
||||
outputStream = new FileOutputStream(fullTempPath);
|
||||
byte[] buffer = new byte[4096];
|
||||
|
||||
int count = 0;
|
||||
|
||||
while ((count = inputStream.read(buffer)) > 0) {
|
||||
outputStream.write(buffer, 0, count);
|
||||
}
|
||||
|
||||
outputStream.close();
|
||||
inputStream.close();
|
||||
|
||||
data = fullTempPath;
|
||||
}catch (Exception e) {
|
||||
if (inputStream != null) {
|
||||
try {
|
||||
inputStream.close();
|
||||
} catch (Exception e1) {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
if (outputStream != null) {
|
||||
try {
|
||||
outputStream.close();
|
||||
} catch (Exception e1) {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
if (fullTempPath != null) {
|
||||
File f = new File(fullTempPath);
|
||||
f.delete();
|
||||
}
|
||||
}
|
||||
CopyTmpFileAsyncTask copyTask = new CopyTmpFileAsyncTask(this);
|
||||
Object[] params = { uri, filePath };
|
||||
try {
|
||||
data = copyTask.execute(params).get();
|
||||
} catch (ExecutionException e) {
|
||||
Log_OC.e(TAG, "ExecutionException " + e);
|
||||
} catch (InterruptedException e) {
|
||||
Log_OC.e(TAG, "InterruptedException " + e);
|
||||
}
|
||||
}
|
||||
|
||||
local.add(data);
|
||||
|
@ -645,16 +615,15 @@ public class Uploader extends FileActivity
|
|||
// "/" equals root-directory
|
||||
if(last_path.equals("/")) {
|
||||
mParents.add("");
|
||||
}
|
||||
else{
|
||||
} else{
|
||||
String[] dir_names = last_path.split("/");
|
||||
for (String dir : dir_names)
|
||||
mParents.add(dir);
|
||||
}
|
||||
//Make sure that path still exists, if it doesn't pop the stack and try the previous path
|
||||
while(!getStorageManager().fileExists(generatePath(mParents)) && mParents.size() > 1){
|
||||
mParents.pop();
|
||||
}
|
||||
while(!getStorageManager().fileExists(generatePath(mParents)) && mParents.size() > 1){
|
||||
mParents.pop();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -662,17 +631,26 @@ public class Uploader extends FileActivity
|
|||
public boolean onOptionsItemSelected(MenuItem item) {
|
||||
boolean retval = true;
|
||||
switch (item.getItemId()) {
|
||||
case android.R.id.home: {
|
||||
if((mParents.size() > 1)) {
|
||||
onBackPressed();
|
||||
}
|
||||
break;
|
||||
}
|
||||
default:
|
||||
retval = super.onOptionsItemSelected(item);
|
||||
case android.R.id.home:
|
||||
if((mParents.size() > 1)) {
|
||||
onBackPressed();
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
retval = super.onOptionsItemSelected(item);
|
||||
}
|
||||
return retval;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Process the result of CopyTmpFileAsyncTask
|
||||
* @param result
|
||||
*/
|
||||
@Override
|
||||
public void OnCopyTmpFileTaskListener(String result) {
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
132
src/com/owncloud/android/utils/CopyTmpFileAsyncTask.java
Normal file
132
src/com/owncloud/android/utils/CopyTmpFileAsyncTask.java
Normal file
|
@ -0,0 +1,132 @@
|
|||
/**
|
||||
* ownCloud Android client application
|
||||
*
|
||||
* Copyright (C) 2015 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 <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
package com.owncloud.android.utils;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.ContentResolver;
|
||||
import android.content.Context;
|
||||
import android.net.Uri;
|
||||
import android.os.AsyncTask;
|
||||
|
||||
import com.owncloud.android.lib.common.utils.Log_OC;
|
||||
import com.owncloud.android.ui.activity.FileActivity;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.InputStream;
|
||||
import java.lang.ref.WeakReference;
|
||||
|
||||
/**
|
||||
* AsyncTask to copy a file from a uri in a temporal file
|
||||
*/
|
||||
public class CopyTmpFileAsyncTask extends AsyncTask<Object, Void, String> {
|
||||
|
||||
private final String TAG = CopyTmpFileAsyncTask.class.getSimpleName();
|
||||
private final WeakReference<OnCopyTmpFileTaskListener> mListener;
|
||||
private String mAccountName;
|
||||
private ContentResolver mContentResolver;
|
||||
|
||||
public CopyTmpFileAsyncTask(Activity activity) {
|
||||
mContentResolver = ((FileActivity) activity).getContentResolver();
|
||||
mAccountName = ((FileActivity) activity).getAccount().name;
|
||||
mListener = new WeakReference<OnCopyTmpFileTaskListener>((OnCopyTmpFileTaskListener)activity);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String doInBackground(Object[] params) {
|
||||
String result = null;
|
||||
|
||||
if (params.length == 2) {
|
||||
Uri uri = (Uri) params[0];
|
||||
String filePath = (String) params[1];
|
||||
|
||||
String fullTempPath = FileStorageUtils.getTemporalPath(mAccountName) + filePath;
|
||||
InputStream inputStream = null;
|
||||
FileOutputStream outputStream = null;
|
||||
|
||||
try {
|
||||
inputStream = mContentResolver.openInputStream(uri);
|
||||
File cacheFile = new File(fullTempPath);
|
||||
File tempDir = cacheFile.getParentFile();
|
||||
if (!tempDir.exists()) {
|
||||
tempDir.mkdirs();
|
||||
}
|
||||
cacheFile.createNewFile();
|
||||
outputStream = new FileOutputStream(fullTempPath);
|
||||
byte[] buffer = new byte[4096];
|
||||
|
||||
int count = 0;
|
||||
|
||||
while ((count = inputStream.read(buffer)) > 0) {
|
||||
outputStream.write(buffer, 0, count);
|
||||
}
|
||||
|
||||
outputStream.close();
|
||||
inputStream.close();
|
||||
|
||||
result = fullTempPath;
|
||||
} catch (Exception e) {
|
||||
Log_OC.e(TAG, "Exception ", e);
|
||||
if (inputStream != null) {
|
||||
try {
|
||||
inputStream.close();
|
||||
} catch (Exception e1) {
|
||||
Log_OC.e(TAG, "Input Stream Exception ", e1);
|
||||
}
|
||||
}
|
||||
|
||||
if (outputStream != null) {
|
||||
try {
|
||||
outputStream.close();
|
||||
} catch (Exception e1) {
|
||||
Log_OC.e(TAG, "Output Stream Exception ", e1);
|
||||
}
|
||||
}
|
||||
|
||||
if (fullTempPath != null) {
|
||||
File f = new File(fullTempPath);
|
||||
f.delete();
|
||||
}
|
||||
result = null;
|
||||
}
|
||||
} else {
|
||||
Log_OC.e(TAG, "Error in parameters number");
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPostExecute(String result) {
|
||||
|
||||
OnCopyTmpFileTaskListener listener = mListener.get();
|
||||
if (listener!= null)
|
||||
{
|
||||
listener.OnCopyTmpFileTaskListener(result);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Interface to retrieve data from recognition task
|
||||
*/
|
||||
public interface OnCopyTmpFileTaskListener{
|
||||
|
||||
void OnCopyTmpFileTaskListener(String result);
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue