introduce QueueingCryptoOperationFragment to queue result handling in detached state

This commit is contained in:
Vincent Breitmoser
2015-07-07 23:43:23 +02:00
parent 895d1fbef6
commit 310228f6ba
5 changed files with 87 additions and 13 deletions

View File

@@ -324,11 +324,15 @@ public class CertifyKeyFragment
}
@Override
public void onCryptoOperationSuccess(CertifyResult result) {
public void onQueuedOperationSuccess(CertifyResult result) {
// protected by Queueing*Fragment
Activity activity = getActivity();
Intent intent = new Intent();
intent.putExtra(CertifyResult.EXTRA_RESULT, result);
getActivity().setResult(Activity.RESULT_OK, intent);
getActivity().finish();
activity.setResult(Activity.RESULT_OK, intent);
activity.finish();
}
}

View File

@@ -387,13 +387,10 @@ public class EncryptFilesFragment
}
@Override
public void onCryptoOperationSuccess(final SignEncryptResult result) {
public void onQueuedOperationSuccess(final SignEncryptResult result) {
// protected by Queueing*Fragment
FragmentActivity activity = getActivity();
if (activity == null) {
// it's gone, there's nothing we can do here
return;
}
if (mDeleteAfterEncrypt) {
// TODO make behavior coherent here

View File

@@ -331,7 +331,7 @@ public class EncryptTextFragment
}
@Override
public void onCryptoOperationSuccess(SignEncryptResult result) {
public void onQueuedOperationSuccess(SignEncryptResult result) {
if (mShareAfterEncrypt) {
// Share encrypted message/file

View File

@@ -4,12 +4,11 @@ package org.sufficientlysecure.keychain.ui.base;
import android.os.Bundle;
import android.os.Parcelable;
import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.operations.results.OperationResult;
public abstract class CachingCryptoOperationFragment <T extends Parcelable, S extends OperationResult>
extends CryptoOperationFragment<T, S> {
extends QueueingCryptoOperationFragment<T, S> {
public static final String ARG_CACHED_ACTIONS = "cached_actions";
@@ -32,12 +31,14 @@ public abstract class CachingCryptoOperationFragment <T extends Parcelable, S ex
}
@Override
public void onCryptoOperationSuccess(S result) {
public void onQueuedOperationSuccess(S result) {
super.onCryptoOperationSuccess(result);
mCachedActionsParcel = null;
}
@Override
public void onCryptoOperationError(S result) {
public void onQueuedOperationError(S result) {
super.onCryptoOperationError(result);
mCachedActionsParcel = null;
}

View File

@@ -0,0 +1,72 @@
package org.sufficientlysecure.keychain.ui.base;
import android.os.Bundle;
import android.os.Parcelable;
import org.sufficientlysecure.keychain.operations.results.OperationResult;
public abstract class QueueingCryptoOperationFragment<T extends Parcelable, S extends OperationResult>
extends CryptoOperationFragment<T,S> {
public static final String ARG_QUEUED_RESULT = "queued_result";
private S mQueuedResult;
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
if (mQueuedResult != null) {
try {
if (mQueuedResult.success()) {
onQueuedOperationSuccess(mQueuedResult);
} else {
onQueuedOperationError(mQueuedResult);
}
} finally {
mQueuedResult = null;
}
}
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putParcelable(ARG_QUEUED_RESULT, mQueuedResult);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState != null) {
mQueuedResult = savedInstanceState.getParcelable(ARG_QUEUED_RESULT);
}
}
public abstract void onQueuedOperationSuccess(S result);
public void onQueuedOperationError(S result) {
super.onCryptoOperationError(result);
}
@Override
final public void onCryptoOperationSuccess(S result) {
if (getActivity() == null) {
mQueuedResult = result;
return;
}
onQueuedOperationSuccess(result);
}
@Override
final public void onCryptoOperationError(S result) {
if (getActivity() == null) {
mQueuedResult = result;
return;
}
onQueuedOperationError(result);
}
}