Fix UI around receiving multiple returned shards

This commit is contained in:
ameba23
2021-04-19 10:07:06 +02:00
parent ad3c9e101c
commit bdbc377c8f
3 changed files with 18 additions and 14 deletions

View File

@@ -104,16 +104,8 @@ public class OwnerReturnShardActivity extends BaseActivity
@Override @Override
public void onBackPressed() { public void onBackPressed() {
// TODO should we cancel the return shard task here? // TODO should we cancel the return shard task here?
if (viewModel.getState()
.getValue() instanceof SecretOwnerTask.State.Failure) {
// re-create this activity when going back in failed state
Intent i = new Intent(this, OwnerReturnShardActivity.class);
i.setFlags(FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);
} else {
super.onBackPressed(); super.onBackPressed();
} }
}
private void showQrCodeFragment() { private void showQrCodeFragment() {
LOG.info("showQrCodeFragment called"); LOG.info("showQrCodeFragment called");
@@ -136,10 +128,13 @@ public class OwnerReturnShardActivity extends BaseActivity
"Success - got shard" + (added ? "" : " duplicate"), "Success - got shard" + (added ? "" : " duplicate"),
Toast.LENGTH_SHORT).show(); Toast.LENGTH_SHORT).show();
if (added && viewModel.canRecover()) { if (added && viewModel.canRecover()) {
Toast.makeText(this,
"Secret key recovered!",
Toast.LENGTH_LONG).show();
finish();
return;
} }
onBackPressed(); onBackPressed();
// finish();
} else if (state instanceof SecretOwnerTask.State.Failure) { } else if (state instanceof SecretOwnerTask.State.Failure) {
// TODO error screen, handle reason // TODO error screen, handle reason
Toast.makeText(this, Toast.makeText(this,

View File

@@ -137,8 +137,6 @@ class OwnerReturnShardViewModel extends AndroidViewModel
@UiThread @UiThread
public void startListening() { public void startListening() {
ioExecutor.execute(() -> { ioExecutor.execute(() -> {
task.cancel();
// wait until really cancelled
task.start(this, getWifiIpv4Address()); task.start(this, getWifiIpv4Address());
}); });
// KeyAgreementTask oldTask = task; // KeyAgreementTask oldTask = task;
@@ -210,6 +208,10 @@ class OwnerReturnShardViewModel extends AndroidViewModel
qrCodeBitmap = QrCodeUtils.createQrCode(dm, content); qrCodeBitmap = QrCodeUtils.createQrCode(dm, content);
this.state.postValue(state); this.state.postValue(state);
}); });
} else if (state instanceof SecretOwnerTask.State.Success) {
// startClicked.setEvent(true);
this.state.postValue(state);
// TODO do same for failure
} else { } else {
this.state.postValue(state); this.state.postValue(state);
} }

View File

@@ -62,6 +62,13 @@ public class SecretOwnerTaskImpl extends ReturnShardTaskImpl
LOG.info("InetAddress is " + inetAddress); LOG.info("InetAddress is " + inetAddress);
socketAddress = new InetSocketAddress(inetAddress, PORT); socketAddress = new InetSocketAddress(inetAddress, PORT);
// If we have a socket already open, close it and start fresh
if (serverSocket != null) {
try {
serverSocket.close();
} catch (IOException ignored) {}
}
// Start listening on socketAddress // Start listening on socketAddress
try { try {
LOG.info("Binding socket"); LOG.info("Binding socket");