import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
-import com.owncloud.android.R;
-import com.owncloud.android.authentication.AuthenticatorActivity;
-import com.owncloud.android.datamodel.FileDataStorageManager;
-import com.owncloud.android.datamodel.OCFile;
-import com.owncloud.android.db.DbHandler;
-import com.owncloud.android.operations.CreateFolderOperation;
-import com.owncloud.android.lib.resources.files.RemoteFile;
-import com.owncloud.android.lib.common.operations.RemoteOperation;
-import com.owncloud.android.lib.common.operations.RemoteOperationResult;
-import com.owncloud.android.operations.UploadFileOperation;
-import com.owncloud.android.operations.common.SyncOperation;
-import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode;
-import com.owncloud.android.lib.resources.files.ExistenceCheckRemoteOperation;
-import com.owncloud.android.lib.resources.files.ReadRemoteFileOperation;
-import com.owncloud.android.lib.resources.files.FileUtils;
-import com.owncloud.android.lib.resources.status.OwnCloudVersion;
-import com.owncloud.android.lib.common.accounts.AccountUtils.Constants;
-import com.owncloud.android.lib.common.network.OnDatatransferProgressListener;
-import com.owncloud.android.lib.common.OwnCloudClientFactory;
-import com.owncloud.android.lib.common.OwnCloudClient;
-import com.owncloud.android.ui.activity.FailedUploadActivity;
-import com.owncloud.android.ui.activity.FileActivity;
-import com.owncloud.android.ui.activity.FileDisplayActivity;
-import com.owncloud.android.ui.activity.InstantUploadActivity;
-import com.owncloud.android.ui.preview.PreviewImageActivity;
-import com.owncloud.android.ui.preview.PreviewImageFragment;
-import com.owncloud.android.utils.ErrorMessageAdapter;
-import com.owncloud.android.utils.Log_OC;
-import com.owncloud.android.utils.NotificationBuilderWithProgressBar;
-
import android.accounts.Account;
import android.accounts.AccountManager;
import android.accounts.AccountsException;
import android.support.v4.app.NotificationCompat;
import android.webkit.MimeTypeMap;
+import com.owncloud.android.R;
+import com.owncloud.android.authentication.AuthenticatorActivity;
+import com.owncloud.android.datamodel.FileDataStorageManager;
+import com.owncloud.android.datamodel.OCFile;
+import com.owncloud.android.db.DbHandler;
+import com.owncloud.android.lib.common.OwnCloudAccount;
+import com.owncloud.android.lib.common.OwnCloudClient;
+import com.owncloud.android.lib.common.OwnCloudClientManagerFactory;
+import com.owncloud.android.lib.common.accounts.AccountUtils.Constants;
+import com.owncloud.android.lib.common.network.OnDatatransferProgressListener;
+import com.owncloud.android.lib.common.operations.RemoteOperation;
+import com.owncloud.android.lib.common.operations.RemoteOperationResult;
+import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode;
+import com.owncloud.android.lib.resources.files.ExistenceCheckRemoteOperation;
+import com.owncloud.android.lib.resources.files.FileUtils;
+import com.owncloud.android.lib.resources.files.ReadRemoteFileOperation;
+import com.owncloud.android.lib.resources.files.RemoteFile;
+import com.owncloud.android.lib.resources.status.OwnCloudVersion;
+import com.owncloud.android.notifications.NotificationBuilderWithProgressBar;
+import com.owncloud.android.notifications.NotificationDelayer;
+import com.owncloud.android.operations.CreateFolderOperation;
+import com.owncloud.android.operations.UploadFileOperation;
+import com.owncloud.android.operations.common.SyncOperation;
+import com.owncloud.android.ui.activity.FileActivity;
+import com.owncloud.android.ui.activity.FileDisplayActivity;
+import com.owncloud.android.ui.activity.InstantUploadActivity;
+import com.owncloud.android.utils.ErrorMessageAdapter;
+import com.owncloud.android.utils.Log_OC;
+
public class FileUploader extends Service implements OnDatatransferProgressListener {
/// prepare client object to send requests to the ownCloud server
if (mUploadClient == null || !mLastAccount.equals(mCurrentUpload.getAccount())) {
mLastAccount = mCurrentUpload.getAccount();
- mStorageManager = new FileDataStorageManager(mLastAccount, getContentResolver());
- mUploadClient = OwnCloudClientFactory.createOwnCloudClient(mLastAccount, getApplicationContext());
+ mStorageManager =
+ new FileDataStorageManager(mLastAccount, getContentResolver());
+ OwnCloudAccount ocAccount = new OwnCloudAccount(mLastAccount, this);
+ mUploadClient = OwnCloudClientManagerFactory.getDefaultSingleton().
+ getClientFor(ocAccount, this);
}
/// check the existence of the parent folder for the file to upload
*/
private void notifyUploadResult(RemoteOperationResult uploadResult, UploadFileOperation upload) {
Log_OC.d(TAG, "NotifyUploadResult with resultCode: " + uploadResult.getCode());
- if (uploadResult.isCancelled() || uploadResult.isSuccess()) {
- // / cancelled operation or success -> silent removal of progress notification
- mNotificationManager.cancel(R.string.uploader_upload_in_progress_ticker);
-
- } else {
-
- // / fail -> explicit failure notification
- mNotificationManager.cancel(R.string.uploader_upload_in_progress_ticker);
+ // / cancelled operation or success -> silent removal of progress notification
+ mNotificationManager.cancel(R.string.uploader_upload_in_progress_ticker);
+
+ // Show the result: success or fail notification
+ if (!uploadResult.isCancelled()) {
+ int tickerId = (uploadResult.isSuccess()) ? R.string.uploader_upload_succeeded_ticker :
+ R.string.uploader_upload_failed_ticker;
- NotificationCompat.Builder errorBuilder = new NotificationCompat.Builder(this);
+ NotificationCompat.Builder resultBuilder = new NotificationCompat.Builder(this);
String content = null;
// check credentials error
- boolean needsToUpdateCredentials = (uploadResult.getCode() == ResultCode.UNAUTHORIZED ||
- (uploadResult.isIdPRedirection() &&
- mUploadClient.getCredentials() == null));
- int tickerId = (needsToUpdateCredentials) ?
- R.string.uploader_upload_failed_credentials_error : R.string.uploader_upload_failed_ticker;
-
- errorBuilder
+ boolean needsToUpdateCredentials = (
+ uploadResult.getCode() == ResultCode.UNAUTHORIZED ||
+ uploadResult.isIdPRedirection()
+ );
+ tickerId = (needsToUpdateCredentials) ?
+ R.string.uploader_upload_failed_credentials_error : tickerId;
+
+ resultBuilder
.setSmallIcon(R.drawable.notification_icon)
.setTicker(getString(tickerId))
.setContentTitle(getString(tickerId))
updateAccountCredentials.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
updateAccountCredentials.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
updateAccountCredentials.addFlags(Intent.FLAG_FROM_BACKGROUND);
- errorBuilder.setContentIntent(PendingIntent.getActivity(
+ resultBuilder.setContentIntent(PendingIntent.getActivity(
this, (int) System.currentTimeMillis(), updateAccountCredentials, PendingIntent.FLAG_ONE_SHOT
));
// we add only for instant-uploads the InstantUploadActivity and the
// db entry
- Intent detailUploadIntent = null;
- if (upload.isInstant() && InstantUploadActivity.IS_ENABLED) {
- detailUploadIntent = new Intent(this, InstantUploadActivity.class);
- detailUploadIntent.putExtra(FileUploader.KEY_ACCOUNT, upload.getAccount());
- } else {
- detailUploadIntent = new Intent(this, FailedUploadActivity.class);
- detailUploadIntent.putExtra(FailedUploadActivity.MESSAGE, content);
- }
- errorBuilder
+ Intent detailUploadIntent = new Intent(this, InstantUploadActivity.class);
+ detailUploadIntent.putExtra(FileUploader.KEY_ACCOUNT, upload.getAccount());
+ resultBuilder
.setContentIntent(PendingIntent.getActivity(
this, (int) System.currentTimeMillis(), detailUploadIntent, PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_ONE_SHOT
))
}
}
- errorBuilder.setContentText(content);
- mNotificationManager.notify(tickerId, errorBuilder.build());
+ resultBuilder.setContentText(content);
+ mNotificationManager.notify(tickerId, resultBuilder.build());
+
+ if (uploadResult.isSuccess()) {
+
+ DbHandler db = new DbHandler(this.getBaseContext());
+ db.removeIUPendingFile(mCurrentUpload.getOriginalStoragePath());
+ db.close();
+
+ // remove success notification, with a delay of 2 seconds
+ NotificationDelayer.cancelWithDelay(
+ mNotificationManager,
+ R.string.uploader_upload_succeeded_ticker,
+ 2000);
+
+ }
}
}