tls-psk: handle back button

This commit is contained in:
Vincent Breitmoser
2017-05-30 21:33:55 +02:00
parent b14674749b
commit f4d9d0a7c0
3 changed files with 46 additions and 8 deletions

View File

@@ -63,6 +63,7 @@ import org.sufficientlysecure.keychain.util.Log;
@RequiresApi(api = VERSION_CODES.LOLLIPOP)
public class TransferPresenter implements KeyTransferCallback, LoaderCallbacks<List<SecretKeyItem>>,
OnClickTransferKeyListener, OnClickImportKeyListener {
public static final String BACKSTACK_TAG_TRANSFER = "transfer";
private final Context context;
private final TransferMvpView view;
private final LoaderManager loaderManager;
@@ -94,7 +95,7 @@ public class TransferPresenter implements KeyTransferCallback, LoaderCallbacks<L
loaderManager.restartLoader(loaderId, null, this);
if (keyTransferServerInteractor == null && keyTransferClientInteractor == null && !wasConnected) {
connectionStartListen();
connectionResetAndStartListen();
}
}
@@ -112,6 +113,12 @@ public class TransferPresenter implements KeyTransferCallback, LoaderCallbacks<L
connectionStartConnect(qrCodeContent);
}
public void onUiBackStackPop() {
if (wasConnected) {
connectionResetAndStartListen();
}
}
@Override
public void onUiClickTransferKey(long masterKeyId) {
try {
@@ -181,14 +188,15 @@ public class TransferPresenter implements KeyTransferCallback, LoaderCallbacks<L
secretKeyAdapter.clearFinishedItems();
view.showConnectionEstablished(otherName);
view.addFakeBackStackItem(BACKSTACK_TAG_TRANSFER);
}
@Override
public void onConnectionLost() {
Log.d(Constants.TAG, "Lost connection!");
if (!wasConnected) {
connectionStartListen();
view.showErrorConnectionFailed();
connectionResetAndStartListen();
} else {
view.showViewDisconnected();
secretKeyAdapter.disableAll();
@@ -237,7 +245,8 @@ public class TransferPresenter implements KeyTransferCallback, LoaderCallbacks<L
keyTransferClientInteractor.connectToServer(qrCodeContent, this);
}
private void connectionStartListen() {
private void connectionResetAndStartListen() {
wasConnected = false;
connectionClear();
keyTransferServerInteractor = new KeyTransferInteractor();
@@ -302,5 +311,7 @@ public class TransferPresenter implements KeyTransferCallback, LoaderCallbacks<L
void setReceivedKeyAdapter(Adapter secretKeyAdapter);
<T extends Parcelable, S extends OperationResult> CryptoOperationHelper<T,S> createCryptoOperationHelper(Callback<T, S> callback);
void addFakeBackStackItem(String tag);
}
}

View File

@@ -27,6 +27,8 @@ import android.os.Parcelable;
import android.support.annotation.Nullable;
import android.support.annotation.RequiresApi;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentManager.OnBackStackChangedListener;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.RecyclerView.Adapter;
import android.view.LayoutInflater;
@@ -194,6 +196,27 @@ public class TransferFragment extends Fragment implements TransferMvpView {
result.createNotify(getActivity()).show();
}
@Override
public void addFakeBackStackItem(final String tag) {
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction()
.addToBackStack(tag)
.commitAllowingStateLoss();
fragmentManager.executePendingTransactions();
fragmentManager.addOnBackStackChangedListener(new OnBackStackChangedListener() {
@Override
public void onBackStackChanged() {
FragmentManager fragMan = getFragmentManager();
fragMan.popBackStack(tag, FragmentManager.POP_BACK_STACK_INCLUSIVE);
fragMan.removeOnBackStackChangedListener(this);
presenter.onUiBackStackPop();
}
});
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (currentCryptoOperationHelper != null &&