tls-psk: handle back button
This commit is contained in:
@@ -83,12 +83,12 @@ public class KeyTransferInteractor {
|
||||
|
||||
private static class TransferThread extends Thread {
|
||||
private final Handler handler;
|
||||
private final KeyTransferCallback callback;
|
||||
private final byte[] presharedKey;
|
||||
private final boolean isServer;
|
||||
private final String clientHost;
|
||||
private final Integer clientPort;
|
||||
|
||||
private KeyTransferCallback callback;
|
||||
private SSLServerSocket serverSocket;
|
||||
private byte[] dataToSend;
|
||||
private String sendPassthrough;
|
||||
@@ -174,9 +174,12 @@ public class KeyTransferInteractor {
|
||||
OutputStream outputStream = new BufferedOutputStream(socket.getOutputStream());
|
||||
|
||||
socket.setSoTimeout(500);
|
||||
while (!isInterrupted() && socket.isConnected()) {
|
||||
while (!isInterrupted() && socket.isConnected() && !socket.isClosed()) {
|
||||
sendDataIfAvailable(socket, outputStream);
|
||||
receiveDataIfAvailable(socket, bufferedReader);
|
||||
boolean connectionTerminated = receiveDataIfAvailable(socket, bufferedReader);
|
||||
if (connectionTerminated) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
Log.d(Constants.TAG, "disconnected");
|
||||
invokeListener(CONNECTION_LOST, null);
|
||||
@@ -191,7 +194,6 @@ public class KeyTransferInteractor {
|
||||
}
|
||||
|
||||
if (firstLine == null) {
|
||||
invokeListener(CONNECTION_LOST, null);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -200,7 +202,7 @@ public class KeyTransferInteractor {
|
||||
socket.setSoTimeout(500);
|
||||
|
||||
invokeListener(CONNECTION_RECEIVE_OK, receivedData);
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
private boolean sendDataIfAvailable(Socket socket, OutputStream outputStream) throws IOException {
|
||||
@@ -280,6 +282,8 @@ public class KeyTransferInteractor {
|
||||
|
||||
@Override
|
||||
public void interrupt() {
|
||||
callback = null;
|
||||
|
||||
super.interrupt();
|
||||
|
||||
if (serverSocket != null) {
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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 &&
|
||||
|
||||
Reference in New Issue
Block a user