diff --git a/src/com/owncloud/android/datamodel/UploadsStorageManager.java b/src/com/owncloud/android/datamodel/UploadsStorageManager.java index 79ad5b330b..a597bdd0a7 100644 --- a/src/com/owncloud/android/datamodel/UploadsStorageManager.java +++ b/src/com/owncloud/android/datamodel/UploadsStorageManager.java @@ -33,6 +33,7 @@ import com.owncloud.android.lib.common.utils.Log_OC; import com.owncloud.android.operations.UploadFileOperation; import java.io.File; +import java.security.Provider; import java.util.Observable; /** @@ -135,6 +136,7 @@ public class UploadsStorageManager extends Observable { cv.put(ProviderTableMeta.UPLOADS_IS_WHILE_CHARGING_ONLY, ocUpload.isWhileChargingOnly() ? 1 : 0); cv.put(ProviderTableMeta.UPLOADS_IS_WIFI_ONLY, ocUpload.isUseWifiOnly() ? 1 : 0); cv.put(ProviderTableMeta.UPLOADS_LAST_RESULT, ocUpload.getLastResult().getValue()); + cv.put(ProviderTableMeta.UPLOADS_CREATED_BY, ocUpload.getCreadtedBy()); Uri result = getDB().insert(ProviderTableMeta.CONTENT_URI_UPLOADS, cv); @@ -459,6 +461,7 @@ public class UploadsStorageManager extends Observable { c.getColumnIndex(ProviderTableMeta.UPLOADS_IS_WIFI_ONLY)) == 1); upload.setLastResult(UploadResult.fromValue( c.getInt(c.getColumnIndex(ProviderTableMeta.UPLOADS_LAST_RESULT)))); + upload.setCreatedBy(c.getInt(c.getColumnIndex(ProviderTableMeta.UPLOADS_CREATED_BY))); } return upload; } diff --git a/src/com/owncloud/android/db/OCUpload.java b/src/com/owncloud/android/db/OCUpload.java index 1fe2078077..1cd40628bc 100644 --- a/src/com/owncloud/android/db/OCUpload.java +++ b/src/com/owncloud/android/db/OCUpload.java @@ -34,6 +34,7 @@ import com.owncloud.android.datamodel.UploadsStorageManager; import com.owncloud.android.datamodel.UploadsStorageManager.UploadStatus; import com.owncloud.android.files.services.FileUploader; import com.owncloud.android.lib.common.utils.Log_OC; +import com.owncloud.android.operations.UploadFileOperation; import com.owncloud.android.utils.MimetypeIconUtil; import com.owncloud.android.utils.UploadUtils; @@ -100,6 +101,11 @@ public class OCUpload implements Parcelable { */ private UploadResult mLastResult; + /** + * Defines the origin of the upload; see constants CREATED_ in {@link UploadFileOperation} + */ + private int mCreatedBy; + /** * Main constructor @@ -151,6 +157,7 @@ public class OCUpload implements Parcelable { mIsWhileChargingOnly = false; mUploadStatus = UploadStatus.UPLOAD_LATER; mLastResult = UploadResult.UNKNOWN; + mCreatedBy = UploadFileOperation.CREATED_BY_USER; } // Getters & Setters @@ -295,6 +302,16 @@ public class OCUpload implements Parcelable { return mIsWhileChargingOnly; } + + public void setCreatedBy(int createdBy) { + mCreatedBy = createdBy; + } + + public int getCreadtedBy() { + return mCreatedBy; + } + + /** * For debugging purposes only. */ @@ -395,6 +412,7 @@ public class OCUpload implements Parcelable { } catch (IllegalArgumentException x) { mLastResult = UploadResult.UNKNOWN; } + mCreatedBy = source.readInt(); } @@ -416,6 +434,7 @@ public class OCUpload implements Parcelable { dest.writeInt(mIsWhileChargingOnly ? 1 : 0); dest.writeString(mUploadStatus.name()); dest.writeString(((mLastResult == null) ? "" : mLastResult.name())); + dest.writeInt(mCreatedBy); } diff --git a/src/com/owncloud/android/db/PreferenceReader.java b/src/com/owncloud/android/db/PreferenceReader.java new file mode 100644 index 0000000000..eaa9d12360 --- /dev/null +++ b/src/com/owncloud/android/db/PreferenceReader.java @@ -0,0 +1,59 @@ +/** + * ownCloud Android client application + * + * @author David A. Velasco + * Copyright (C) 2016 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.db; + +import android.content.Context; +import android.preference.PreferenceManager; + +/** + * Helper to simplify reading of Preferences all around the app + */ + +public class PreferenceReader { + + public static boolean instantPictureUploadEnabled(Context context) { + return PreferenceManager.getDefaultSharedPreferences(context).getBoolean( + "instant_uploading", + false + ); + } + + public static boolean instantVideoUploadEnabled(Context context) { + return PreferenceManager.getDefaultSharedPreferences(context).getBoolean( + "instant_video_uploading", + false + ); + } + + public static boolean instantPictureUploadViaWiFiOnly(Context context) { + return PreferenceManager.getDefaultSharedPreferences(context).getBoolean( + "instant_upload_on_wifi", + false + ); + } + + public static boolean instantVideoUploadViaWiFiOnly(Context context) { + return PreferenceManager.getDefaultSharedPreferences(context).getBoolean( + "instant_video_upload_on_wifi", + false + ); + } + +} diff --git a/src/com/owncloud/android/db/ProviderMeta.java b/src/com/owncloud/android/db/ProviderMeta.java index eaafae2ce6..3637c8e0a0 100644 --- a/src/com/owncloud/android/db/ProviderMeta.java +++ b/src/com/owncloud/android/db/ProviderMeta.java @@ -147,8 +147,10 @@ public class ProviderMeta { public static final String UPLOADS_IS_WIFI_ONLY = "is_wifi_only"; public static final String UPLOADS_UPLOAD_TIMESTAMP = "upload_timestamp"; public static final String UPLOADS_LAST_RESULT = "last_result"; + public static final String UPLOADS_CREATED_BY = "created_by"; //public static final String UPLOADS_DEFAULT_SORT_ORDER = UPLOADS_FILE_ID + " collate nocase asc"; public static final String UPLOADS_DEFAULT_SORT_ORDER = ProviderTableMeta._ID + " collate nocase desc"; + } } diff --git a/src/com/owncloud/android/files/InstantUploadBroadcastReceiver.java b/src/com/owncloud/android/files/InstantUploadBroadcastReceiver.java index 211fed7036..1e68f04513 100644 --- a/src/com/owncloud/android/files/InstantUploadBroadcastReceiver.java +++ b/src/com/owncloud/android/files/InstantUploadBroadcastReceiver.java @@ -1,8 +1,10 @@ /** * ownCloud Android client application *

+ * @author Bartek Przybylski + * @author David A. Velasco * Copyright (C) 2012 Bartek Przybylski - * Copyright (C) 2015 ownCloud Inc. + * Copyright (C) 2016 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, @@ -32,8 +34,10 @@ import android.provider.MediaStore.Video; import android.support.v4.content.ContextCompat; import com.owncloud.android.authentication.AccountUtils; +import com.owncloud.android.db.PreferenceReader; import com.owncloud.android.files.services.FileUploader; import com.owncloud.android.lib.common.utils.Log_OC; +import com.owncloud.android.operations.UploadFileOperation; import com.owncloud.android.utils.FileStorageUtils; @@ -81,9 +85,9 @@ public class InstantUploadBroadcastReceiver extends BroadcastReceiver { String file_name = null; String mime_type = null; - Log_OC.w(TAG, "New photo received"); + Log_OC.i(TAG, "New photo received"); - if (!instantPictureUploadEnabled(context)) { + if (!PreferenceReader.instantPictureUploadEnabled(context)) { Log_OC.d(TAG, "Instant picture upload disabled, ignoring new picture"); return; } @@ -124,8 +128,16 @@ public class InstantUploadBroadcastReceiver extends BroadcastReceiver { Log_OC.d(TAG, "Path: " + file_path + ""); int behaviour = getUploadBehaviour(context); - FileUploader.uploadNewFile(context, account, file_path, FileStorageUtils.getInstantUploadFilePath(context, - file_name), behaviour, mime_type, true, instantPictureUploadViaWiFiOnly(context)); + FileUploader.uploadNewFile( + context, + account, + file_path, + FileStorageUtils.getInstantUploadFilePath(context, file_name), + behaviour, + mime_type, + true, // create parent folder if not existent + UploadFileOperation.CREATED_AS_INSTANT_PICTURE + ); } private Integer getUploadBehaviour(Context context) { @@ -148,9 +160,9 @@ public class InstantUploadBroadcastReceiver extends BroadcastReceiver { String file_name = null; String mime_type = null; - Log_OC.w(TAG, "New video received"); + Log_OC.i(TAG, "New video received"); - if (!instantVideoUploadEnabled(context)) { + if (!PreferenceReader.instantVideoUploadEnabled(context)) { Log_OC.d(TAG, "Instant video upload disabled, ignoring new video"); return; } @@ -182,24 +194,9 @@ public class InstantUploadBroadcastReceiver extends BroadcastReceiver { FileStorageUtils.getInstantVideoUploadFilePath(context, file_name), behaviour, mime_type, - true, - instantVideoUploadViaWiFiOnly(context) + true, // create parent folder if not existent + UploadFileOperation.CREATED_AS_INSTANT_VIDEO ); } - public static boolean instantPictureUploadEnabled(Context context) { - return PreferenceManager.getDefaultSharedPreferences(context).getBoolean("instant_uploading", false); - } - - public static boolean instantVideoUploadEnabled(Context context) { - return PreferenceManager.getDefaultSharedPreferences(context).getBoolean("instant_video_uploading", false); - } - - public static boolean instantPictureUploadViaWiFiOnly(Context context) { - return PreferenceManager.getDefaultSharedPreferences(context).getBoolean("instant_upload_on_wifi", false); - } - - public static boolean instantVideoUploadViaWiFiOnly(Context context) { - return PreferenceManager.getDefaultSharedPreferences(context).getBoolean("instant_video_upload_on_wifi", false); - } } diff --git a/src/com/owncloud/android/files/services/ConnectivityActionReceiver.java b/src/com/owncloud/android/files/services/ConnectivityActionReceiver.java index 121ab525d2..c11d1d35fa 100755 --- a/src/com/owncloud/android/files/services/ConnectivityActionReceiver.java +++ b/src/com/owncloud/android/files/services/ConnectivityActionReceiver.java @@ -34,6 +34,7 @@ import android.os.Bundle; import android.preference.PreferenceManager; import com.owncloud.android.authentication.AccountUtils; +import com.owncloud.android.db.PreferenceReader; import com.owncloud.android.lib.common.utils.Log_OC; import com.owncloud.android.utils.FileStorageUtils; @@ -98,8 +99,8 @@ public class ConnectivityActionReceiver extends BroadcastReceiver { } private void wifiDisconnected(Context context) { - boolean instantPictureWiFiOnly = instantPictureUploadViaWiFiOnly(context); - boolean instantVideoWiFiOnly = instantVideoUploadViaWiFiOnly(context); + boolean instantPictureWiFiOnly = PreferenceReader.instantPictureUploadViaWiFiOnly(context); + boolean instantVideoWiFiOnly = PreferenceReader.instantVideoUploadViaWiFiOnly(context); if (instantPictureWiFiOnly || instantVideoWiFiOnly) { Account account = AccountUtils.getCurrentOwnCloudAccount(context); if (account == null) { @@ -131,18 +132,4 @@ public class ConnectivityActionReceiver extends BroadcastReceiver { } - private static boolean instantPictureUploadViaWiFiOnly(Context context) { - return PreferenceManager.getDefaultSharedPreferences(context).getBoolean( - "instant_upload_on_wifi", - false - ); - } - - private static boolean instantVideoUploadViaWiFiOnly(Context context) { - return PreferenceManager.getDefaultSharedPreferences(context).getBoolean( - "instant_video_upload_on_wifi", - false - ); - } - } \ No newline at end of file diff --git a/src/com/owncloud/android/files/services/FileUploader.java b/src/com/owncloud/android/files/services/FileUploader.java index 2002bd0c52..0f8f9de11d 100644 --- a/src/com/owncloud/android/files/services/FileUploader.java +++ b/src/com/owncloud/android/files/services/FileUploader.java @@ -2,7 +2,7 @@ * ownCloud Android client application * * @author Bartek Przybylski - * @authro masensio + * @author masensio * @author LukeOwnCloud * @author David A. Velasco * Copyright (C) 2012 Bartek Przybylski @@ -50,6 +50,7 @@ import com.owncloud.android.datamodel.OCFile; import com.owncloud.android.datamodel.UploadsStorageManager; import com.owncloud.android.datamodel.UploadsStorageManager.UploadStatus; import com.owncloud.android.db.OCUpload; +import com.owncloud.android.db.PreferenceReader; import com.owncloud.android.db.UploadResult; import com.owncloud.android.lib.common.OwnCloudAccount; import com.owncloud.android.lib.common.OwnCloudClient; @@ -136,9 +137,9 @@ public class FileUploader extends Service */ public static final String KEY_CREATE_REMOTE_FOLDER = "CREATE_REMOTE_FOLDER"; /** - * Set to true if upload is to performed only when connected via wifi. + * Key to signal what is the origin of the upload request */ - public static final String KEY_WIFI_ONLY = "WIFI_ONLY"; + public static final String KEY_CREATED_BY = "CREATED_BY"; /** * Set to true if upload is to performed only when phone is being charged. */ @@ -260,7 +261,7 @@ public class FileUploader extends Service * Call to upload several new files */ public static void uploadNewFile(Context context, Account account, String[] localPaths, String[] remotePaths, - Integer behaviour, String mimeType, Boolean createRemoteFolder, Boolean wifiOnly) { + Integer behaviour, String mimeType, Boolean createRemoteFolder, int createdBy) { Log_OC.d(TAG, "FileUploader.uploadNewFile()"); Intent intent = new Intent(context, FileUploader.class); @@ -270,7 +271,7 @@ public class FileUploader extends Service intent.putExtra(FileUploader.KEY_LOCAL_BEHAVIOUR, behaviour); intent.putExtra(FileUploader.KEY_MIME_TYPE, mimeType); intent.putExtra(FileUploader.KEY_CREATE_REMOTE_FOLDER, createRemoteFolder); - intent.putExtra(FileUploader.KEY_WIFI_ONLY, wifiOnly); + intent.putExtra(FileUploader.KEY_CREATED_BY, createdBy); context.startService(intent); } @@ -279,10 +280,10 @@ public class FileUploader extends Service * Call to upload a new single file */ public static void uploadNewFile(Context context, Account account, String localPath, String remotePath, int - behaviour, String mimeType, boolean createRemoteFile, boolean wifiOnly) { + behaviour, String mimeType, boolean createRemoteFile, int createdBy) { uploadNewFile(context, account, new String[]{localPath}, new String[]{remotePath}, behaviour, mimeType, - createRemoteFile, wifiOnly); + createRemoteFile, createdBy); } /** @@ -440,7 +441,7 @@ public class FileUploader extends Service int localAction = intent.getIntExtra(KEY_LOCAL_BEHAVIOUR, LOCAL_BEHAVIOUR_FORGET); boolean isCreateRemoteFolder = intent.getBooleanExtra(KEY_CREATE_REMOTE_FOLDER, false); - boolean isUseWifiOnly = intent.getBooleanExtra(KEY_WIFI_ONLY, true); + int createdBy = intent.getIntExtra(KEY_CREATED_BY, UploadFileOperation.CREATED_BY_USER); boolean isWhileChargingOnly = intent.getBooleanExtra(KEY_WHILE_CHARGING_ONLY, false); //long uploadTimestamp = intent.getLongExtra(KEY_UPLOAD_TIMESTAMP, -1); @@ -492,6 +493,7 @@ public class FileUploader extends Service localAction, this ); + newUpload.setCreatedBy(createdBy); if (isCreateRemoteFolder) { newUpload.setRemoteFolderToBeCreated(); } @@ -502,9 +504,10 @@ public class FileUploader extends Service OCUpload ocUpload = new OCUpload(files[i], account); ocUpload.setForceOverwrite(forceOverwrite); ocUpload.setCreateRemoteFolder(isCreateRemoteFolder); + ocUpload.setCreatedBy(createdBy); ocUpload.setLocalAction(localAction); - ocUpload.setUseWifiOnly(isUseWifiOnly); - ocUpload.setWhileChargingOnly(isWhileChargingOnly); + /*ocUpload.setUseWifiOnly(isUseWifiOnly); + ocUpload.setWhileChargingOnly(isWhileChargingOnly);*/ ocUpload.setUploadStatus(UploadStatus.UPLOAD_LATER); // storagePath inside upload is the temporary path. file @@ -551,16 +554,13 @@ public class FileUploader extends Service account, upload, chunked, - upload.isForceOverwrite(), - upload.getLocalAction(), + upload.isForceOverwrite(), // TODO should be read from DB? + upload.getLocalAction(), // TODO should be read from DB? this ); - if (upload.isCreateRemoteFolder()) { - newUpload.setRemoteFolderToBeCreated(); - } + newUpload.addDatatransferProgressListener(this); newUpload.addDatatransferProgressListener((FileUploaderBinder) mBinder); - newUpload.setOCUploadId(upload.getUploadId()); Pair putResult = mPendingUploads.putIfAbsent( account.name, @@ -920,70 +920,86 @@ public class FileUploader extends Service mCurrentUpload = mPendingUploads.get(uploadKey); if (mCurrentUpload != null) { - // Detect if the account exists - if (AccountUtils.exists(mCurrentUpload.getAccount(), getApplicationContext())) { - Log_OC.d(TAG, "Account " + mCurrentUpload.getAccount().name + " exists"); - mUploadsStorageManager.updateDatabaseUploadStart(mCurrentUpload); + /// Check account existence + if (!AccountUtils.exists(mCurrentUpload.getAccount(), this)) { + Log_OC.w(TAG, "Account " + mCurrentUpload.getAccount().name + + " does not exist anymore -> cancelling all its uploads"); + cancelUploadsForAccount(mCurrentUpload.getAccount()); + return; + } - notifyUploadStart(mCurrentUpload); + /// Check that connectivity conditions are met + if (mCurrentUpload.isInstantPicture() && + PreferenceReader.instantPictureUploadViaWiFiOnly(this)) { - RemoteOperationResult uploadResult = null; + Log_OC.d(TAG, "Upload delayed until WiFi is available: " + mCurrentUpload.getRemotePath()); + // TODO - update mUploadsStorageManager + return; + } + if (mCurrentUpload.isInstantVideo() && + PreferenceReader.instantVideoUploadViaWiFiOnly(this)) { - try { - /// prepare client object to send the request to the ownCloud server - if (mCurrentAccount == null || !mCurrentAccount.equals(mCurrentUpload.getAccount())) { - mCurrentAccount = mCurrentUpload.getAccount(); - mStorageManager = new FileDataStorageManager( - mCurrentAccount, - getContentResolver() - ); - } // else, reuse storage manager from previous operation + Log_OC.d(TAG, "Upload delayed until WiFi is available: " + mCurrentUpload.getRemotePath()); + // TODO - update mUploadsStorageManager + return; + } - // always get client from client manager, to get fresh credentials in case of update - OwnCloudAccount ocAccount = new OwnCloudAccount(mCurrentAccount, this); - mUploadClient = OwnCloudClientManagerFactory.getDefaultSingleton(). - getClientFor(ocAccount, this); + /// OK, let's upload + mUploadsStorageManager.updateDatabaseUploadStart(mCurrentUpload); - /// perform the upload - uploadResult = mCurrentUpload.execute(mUploadClient, mStorageManager); + notifyUploadStart(mCurrentUpload); + + RemoteOperationResult uploadResult = null; + + try { + /// prepare client object to send the request to the ownCloud server + if (mCurrentAccount == null || !mCurrentAccount.equals(mCurrentUpload.getAccount())) { + mCurrentAccount = mCurrentUpload.getAccount(); + mStorageManager = new FileDataStorageManager( + mCurrentAccount, + getContentResolver() + ); + } // else, reuse storage manager from previous operation + + // always get client from client manager, to get fresh credentials in case of update + OwnCloudAccount ocAccount = new OwnCloudAccount(mCurrentAccount, this); + mUploadClient = OwnCloudClientManagerFactory.getDefaultSingleton(). + getClientFor(ocAccount, this); + + /// perform the upload + uploadResult = mCurrentUpload.execute(mUploadClient, mStorageManager); - } catch (Exception e) { - Log_OC.e(TAG, "Error uploading", e); - uploadResult = new RemoteOperationResult(e); + } catch (Exception e) { + Log_OC.e(TAG, "Error uploading", e); + uploadResult = new RemoteOperationResult(e); - } finally { - Pair removeResult; - if (mCurrentUpload.wasRenamed()) { - removeResult = mPendingUploads.removePayload( - mCurrentAccount.name, - mCurrentUpload.getOldFile().getRemotePath() - ); - /** TODO: grant that name is also updated for mCurrentUpload.getOCUploadId */ + } finally { + Pair removeResult; + if (mCurrentUpload.wasRenamed()) { + removeResult = mPendingUploads.removePayload( + mCurrentAccount.name, + mCurrentUpload.getOldFile().getRemotePath() + ); + /** TODO: grant that name is also updated for mCurrentUpload.getOCUploadId */ - } else { - removeResult = mPendingUploads.removePayload( - mCurrentAccount.name, - mCurrentUpload.getRemotePath() - ); - } - - mUploadsStorageManager.updateDatabaseUploadResult(uploadResult, mCurrentUpload); - - /// notify result - notifyUploadResult(mCurrentUpload, uploadResult); - - sendBroadcastUploadFinished(mCurrentUpload, uploadResult, removeResult.second); + } else { + removeResult = mPendingUploads.removePayload( + mCurrentAccount.name, + mCurrentUpload.getRemotePath() + ); } - } else { - // Cancel the transfer - Log_OC.d(TAG, "Account " + mCurrentUpload.getAccount().toString() + - " doesn't exist"); - cancelUploadsForAccount(mCurrentUpload.getAccount()); + mUploadsStorageManager.updateDatabaseUploadResult(uploadResult, mCurrentUpload); + + /// notify result + notifyUploadResult(mCurrentUpload, uploadResult); + + sendBroadcastUploadFinished(mCurrentUpload, uploadResult, removeResult.second); } + } } diff --git a/src/com/owncloud/android/operations/UploadFileOperation.java b/src/com/owncloud/android/operations/UploadFileOperation.java index 5ca112624c..49da070bd7 100644 --- a/src/com/owncloud/android/operations/UploadFileOperation.java +++ b/src/com/owncloud/android/operations/UploadFileOperation.java @@ -2,7 +2,7 @@ * ownCloud Android client application * * @author David A. Velasco - * Copyright (C) 2015 ownCloud Inc. + * Copyright (C) 2016 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, @@ -72,6 +72,11 @@ public class UploadFileOperation extends SyncOperation { private static final String MIME_TYPE_PDF = "application/pdf"; private static final String FILE_EXTENSION_PDF = ".pdf"; + public static final int CREATED_BY_USER = 0; + public static final int CREATED_AS_INSTANT_PICTURE = 1; + public static final int CREATED_AS_INSTANT_VIDEO = 2; + + /** * Checks if content provider, using the content:// scheme, returns a file with mime-type * 'application/pdf' but file has not extension @@ -138,6 +143,8 @@ public class UploadFileOperation extends SyncOperation { private boolean mRemoteFolderToBeCreated = false; private boolean mForceOverwrite = false; private int mLocalBehaviour = FileUploader.LOCAL_BEHAVIOUR_COPY; + private int mCreatedBy = CREATED_BY_USER; + private boolean mWasRenamed = false; private String mOriginalFileName = null; private long mOCUploadId = -1; @@ -157,11 +164,12 @@ public class UploadFileOperation extends SyncOperation { protected RequestEntity mEntity = null; public UploadFileOperation(Account account, - OCFile file, - boolean chunked, - boolean forceOverwrite, - int localBehaviour, - Context context) { + OCFile file, + boolean chunked, + boolean forceOverwrite, + int localBehaviour, + Context context + ) { if (account == null) throw new IllegalArgumentException("Illegal NULL account in UploadFileOperation " + "creation"); @@ -185,11 +193,11 @@ public class UploadFileOperation extends SyncOperation { } public UploadFileOperation(Account account, - OCUpload upload, - boolean chunked, - boolean forceOverwrite, - int localBehaviour, - Context context + OCUpload upload, + boolean chunked, + boolean forceOverwrite, + int localBehaviour, + Context context ) { if (account == null) throw new IllegalArgumentException("Illegal NULL account in UploadFileOperation " + @@ -215,6 +223,9 @@ public class UploadFileOperation extends SyncOperation { mOriginalStoragePath = mFile.getStoragePath(); mOriginalFileName = mFile.getFileName(); mContext = context; + mOCUploadId = upload.getUploadId(); + mCreatedBy = upload.getCreadtedBy(); + mRemoteFolderToBeCreated = upload.isCreateRemoteFolder(); } public Account getAccount() { @@ -261,6 +272,25 @@ public class UploadFileOperation extends SyncOperation { return mWasRenamed; } + public void setCreatedBy(int createdBy) { + mCreatedBy = createdBy; + if (createdBy < CREATED_BY_USER || CREATED_AS_INSTANT_VIDEO < createdBy) { + mCreatedBy = CREATED_BY_USER; + } + } + + public int getCreatedBy () { + return mCreatedBy; + } + + public boolean isInstantPicture() { + return mCreatedBy == CREATED_AS_INSTANT_PICTURE; + } + + public boolean isInstantVideo() { + return mCreatedBy == CREATED_AS_INSTANT_VIDEO; + } + public void setOCUploadId(long id){ mOCUploadId = id; } diff --git a/src/com/owncloud/android/providers/FileContentProvider.java b/src/com/owncloud/android/providers/FileContentProvider.java index 483cb48b77..554e31225d 100644 --- a/src/com/owncloud/android/providers/FileContentProvider.java +++ b/src/com/owncloud/android/providers/FileContentProvider.java @@ -858,7 +858,9 @@ public class FileContentProvider extends ContentProvider { + ProviderTableMeta.UPLOADS_IS_WHILE_CHARGING_ONLY + " INTEGER, " // boolean + ProviderTableMeta.UPLOADS_IS_WIFI_ONLY + " INTEGER, " // boolean + ProviderTableMeta.UPLOADS_UPLOAD_TIMESTAMP + " INTEGER, " - + ProviderTableMeta.UPLOADS_LAST_RESULT + " INTEGER );" ); // Upload LastResult + + ProviderTableMeta.UPLOADS_LAST_RESULT + " INTEGER, " // Upload LastResult + + ProviderTableMeta.UPLOADS_CREATED_BY + " INTEGER );" // Upload createdBy + ); /* before: diff --git a/src/com/owncloud/android/ui/activity/FileDisplayActivity.java b/src/com/owncloud/android/ui/activity/FileDisplayActivity.java index 66c51cd3ba..93b60b2be8 100644 --- a/src/com/owncloud/android/ui/activity/FileDisplayActivity.java +++ b/src/com/owncloud/android/ui/activity/FileDisplayActivity.java @@ -81,6 +81,7 @@ import com.owncloud.android.operations.RefreshFolderOperation; import com.owncloud.android.operations.RemoveFileOperation; import com.owncloud.android.operations.RenameFileOperation; import com.owncloud.android.operations.SynchronizeFileOperation; +import com.owncloud.android.operations.UploadFileOperation; import com.owncloud.android.services.observer.FileObserverService; import com.owncloud.android.syncadapter.FileSyncAdapter; import com.owncloud.android.ui.dialog.ConfirmationDialogFragment; @@ -735,7 +736,16 @@ public class FileDisplayActivity extends HookActivity implements int behaviour = (resultCode == UploadFilesActivity.RESULT_OK_AND_MOVE) ? FileUploader .LOCAL_BEHAVIOUR_MOVE : FileUploader.LOCAL_BEHAVIOUR_COPY; - FileUploader.uploadNewFile(this, getAccount(), filePaths, remotePaths, behaviour, null, false, false); + FileUploader.uploadNewFile( + this, + getAccount(), + filePaths, + remotePaths, + behaviour, + null, // MIME type will be detected from file name + false, // do not create parent folder if not existent + UploadFileOperation.CREATED_BY_USER + ); } else { Log_OC.d(TAG, "User clicked on 'Update' with no selection"); @@ -810,7 +820,16 @@ public class FileDisplayActivity extends HookActivity implements int behaviour = (resultCode == UploadFilesActivity.RESULT_OK_AND_MOVE) ? FileUploader.LOCAL_BEHAVIOUR_MOVE : FileUploader.LOCAL_BEHAVIOUR_COPY; - FileUploader.uploadNewFile(this, getAccount(), filePath, remotePath, behaviour, mimeType, false, false); + FileUploader.uploadNewFile( + this, + getAccount(), + filePath, + remotePath, + behaviour, + mimeType, + false, // do not create parent folder if not existent + UploadFileOperation.CREATED_BY_USER + ); } diff --git a/src/com/owncloud/android/ui/activity/Uploader.java b/src/com/owncloud/android/ui/activity/Uploader.java index 0515d68eec..e5236e4896 100644 --- a/src/com/owncloud/android/ui/activity/Uploader.java +++ b/src/com/owncloud/android/ui/activity/Uploader.java @@ -73,6 +73,7 @@ import com.owncloud.android.lib.common.operations.RemoteOperation; 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.operations.UploadFileOperation; import com.owncloud.android.ui.dialog.CreateFolderDialogFragment; import com.owncloud.android.ui.dialog.LoadingDialog; import com.owncloud.android.utils.CopyTmpFileAsyncTask; @@ -563,8 +564,16 @@ public class Uploader extends FileActivity throw new SecurityException(); } - FileUploader.uploadNewFile(this, getAccount(), local.toArray(new String[local.size()]), remote - .toArray(new String[remote.size()]), FileUploader.LOCAL_BEHAVIOUR_FORGET, null, false, false); + FileUploader.uploadNewFile( + this, + getAccount(), + local.toArray(new String[local.size()]), + remote.toArray(new String[remote.size()]), + FileUploader.LOCAL_BEHAVIOUR_FORGET, + null, // MIME type will be detected from file name + false, // do not create parent folder if not existent + UploadFileOperation.CREATED_BY_USER + ); //Save the path to shared preferences SharedPreferences.Editor appPrefs = PreferenceManager @@ -693,8 +702,15 @@ public class Uploader extends FileActivity dismissWaitingCopyDialog(); } if (result != null) { - FileUploader.uploadNewFile(this, getAccount(), result, mRemoteCacheData.get(index), FileUploader - .LOCAL_BEHAVIOUR_FORGET, null, false, false); + FileUploader.uploadNewFile( + this, getAccount(), + result, + mRemoteCacheData.get(index), + FileUploader.LOCAL_BEHAVIOUR_FORGET, + null, // MIME type will be detected from file name + false, // do not create parent folder if not existent + UploadFileOperation.CREATED_BY_USER + ); } else { String message = String.format(getString(R.string.uploader_error_forbidden_content),