introduce QueueingCryptoOperationFragment to queue result handling in detached state
This commit is contained in:
@@ -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();
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -331,7 +331,7 @@ public class EncryptTextFragment
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCryptoOperationSuccess(SignEncryptResult result) {
|
||||
public void onQueuedOperationSuccess(SignEncryptResult result) {
|
||||
|
||||
if (mShareAfterEncrypt) {
|
||||
// Share encrypted message/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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user