From: David A. Velasco Date: Fri, 16 May 2014 07:58:10 +0000 (+0200) Subject: Recover automatic redirection to login view when a foreground operation was tried... X-Git-Tag: oc-android-1.7.0_signed~309^2~18^2 X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/commitdiff_plain/d76b8fcdf710345193208d4079fb7bba2b1c6ea2?ds=inline Recover automatic redirection to login view when a foreground operation was tried with expired credentials --- diff --git a/src/com/owncloud/android/services/OperationsService.java b/src/com/owncloud/android/services/OperationsService.java index eeda5e9d..1c841f51 100644 --- a/src/com/owncloud/android/services/OperationsService.java +++ b/src/com/owncloud/android/services/OperationsService.java @@ -472,20 +472,20 @@ public class OperationsService extends Service { } else { result = mCurrentOperation.execute(mOwnCloudClient); } - + } catch (AccountsException e) { if (mLastTarget.mAccount == null) { - Log_OC.e(TAG, "Error while trying to get autorization for a NULL account", e); + Log_OC.e(TAG, "Error while trying to get authorization for a NULL account", e); } else { - Log_OC.e(TAG, "Error while trying to get autorization for " + mLastTarget.mAccount.name, e); + Log_OC.e(TAG, "Error while trying to get authorization for " + mLastTarget.mAccount.name, e); } result = new RemoteOperationResult(e); } catch (IOException e) { if (mLastTarget.mAccount == null) { - Log_OC.e(TAG, "Error while trying to get autorization for a NULL account", e); + Log_OC.e(TAG, "Error while trying to get authorization for a NULL account", e); } else { - Log_OC.e(TAG, "Error while trying to get autorization for " + mLastTarget.mAccount.name, e); + Log_OC.e(TAG, "Error while trying to get authorization for " + mLastTarget.mAccount.name, e); } result = new RemoteOperationResult(e); } catch (Exception e) { diff --git a/src/com/owncloud/android/ui/activity/FileActivity.java b/src/com/owncloud/android/ui/activity/FileActivity.java index 895e7764..eda47843 100644 --- a/src/com/owncloud/android/ui/activity/FileActivity.java +++ b/src/com/owncloud/android/ui/activity/FileActivity.java @@ -18,11 +18,15 @@ package com.owncloud.android.ui.activity; +import org.apache.commons.httpclient.Credentials; + import android.accounts.Account; import android.accounts.AccountManager; import android.accounts.AccountManagerCallback; import android.accounts.AccountManagerFuture; +import android.accounts.AuthenticatorException; import android.accounts.OperationCanceledException; +import android.app.PendingIntent; import android.content.ComponentName; import android.content.Context; import android.content.Intent; @@ -39,6 +43,7 @@ import com.actionbarsherlock.app.SherlockFragmentActivity; import com.owncloud.android.MainApp; import com.owncloud.android.R; import com.owncloud.android.authentication.AccountUtils; +import com.owncloud.android.authentication.AuthenticatorActivity; import com.owncloud.android.datamodel.FileDataStorageManager; import com.owncloud.android.datamodel.OCFile; import com.owncloud.android.files.FileOperationsHelper; @@ -46,6 +51,7 @@ import com.owncloud.android.files.services.FileDownloader; import com.owncloud.android.files.services.FileUploader; import com.owncloud.android.files.services.FileDownloader.FileDownloaderBinder; import com.owncloud.android.files.services.FileUploader.FileUploaderBinder; +import com.owncloud.android.lib.common.network.BearerCredentials; import com.owncloud.android.lib.common.operations.OnRemoteOperationListener; import com.owncloud.android.lib.common.operations.RemoteOperation; import com.owncloud.android.lib.common.operations.RemoteOperationResult; @@ -450,7 +456,15 @@ implements OnRemoteOperationListener, ComponentsGetter { mFileOperationsHelper.setOpIdWaitingFor(Long.MAX_VALUE); - if (operation instanceof CreateShareOperation) { + if (!result.isSuccess() && ( + result.getCode() == ResultCode.UNAUTHORIZED || + result.isIdPRedirection() || + (result.isException() && result.getException() instanceof AuthenticatorException) + )) { + + requestCredentialsUpdate(); + + } else if (operation instanceof CreateShareOperation) { onCreateShareOperationFinish((CreateShareOperation) operation, result); } else if (operation instanceof UnshareLinkOperation) { @@ -459,6 +473,17 @@ implements OnRemoteOperationListener, ComponentsGetter { } } + private void requestCredentialsUpdate() { + Intent updateAccountCredentials = new Intent(this, AuthenticatorActivity.class); + updateAccountCredentials.putExtra(AuthenticatorActivity.EXTRA_ACCOUNT, getAccount()); + updateAccountCredentials.putExtra( + AuthenticatorActivity.EXTRA_ACTION, + AuthenticatorActivity.ACTION_UPDATE_EXPIRED_TOKEN); + updateAccountCredentials.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS); + startActivity(updateAccountCredentials); + } + + private void onCreateShareOperationFinish(CreateShareOperation operation, RemoteOperationResult result) { dismissLoadingDialog(); if (result.isSuccess()) {