mirror of
https://code.briarproject.org/briar/briar.git
synced 2026-02-11 18:29:05 +01:00
Make MailboxManager#checkConnection() blocking and let the UI manage the executor
This commit is contained in:
@@ -1,9 +1,7 @@
|
||||
package org.briarproject.bramble.api.mailbox;
|
||||
|
||||
import org.briarproject.bramble.api.Consumer;
|
||||
import org.briarproject.bramble.api.db.DbException;
|
||||
import org.briarproject.bramble.api.db.Transaction;
|
||||
import org.briarproject.bramble.api.lifecycle.IoExecutor;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
@@ -36,13 +34,11 @@ public interface MailboxManager {
|
||||
|
||||
/**
|
||||
* Can be used by the UI to test the mailbox connection.
|
||||
* After the connection has been made, the given {@param connectionCallback}
|
||||
* will be called with true (success) or false (error).
|
||||
* In addition, a {@link OwnMailboxConnectionStatusEvent} might be broadcast
|
||||
* with a new {@link MailboxStatus}.
|
||||
* <p>
|
||||
* Note that the callback will be made on the {@link IoExecutor}.
|
||||
*
|
||||
* @return true (success) or false (error).
|
||||
* A {@link OwnMailboxConnectionStatusEvent} might be broadcast with a new
|
||||
* {@link MailboxStatus}.
|
||||
*/
|
||||
void checkConnection(Consumer<Boolean> connectionCallback);
|
||||
boolean checkConnection();
|
||||
|
||||
}
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
package org.briarproject.bramble.mailbox;
|
||||
|
||||
import org.briarproject.bramble.api.Consumer;
|
||||
import org.briarproject.bramble.api.db.DbException;
|
||||
import org.briarproject.bramble.api.db.Transaction;
|
||||
import org.briarproject.bramble.api.db.TransactionManager;
|
||||
@@ -98,19 +97,17 @@ class MailboxManagerImpl implements MailboxManager {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void checkConnection(Consumer<Boolean> connectionCallback) {
|
||||
ioExecutor.execute(() -> {
|
||||
boolean success;
|
||||
try {
|
||||
MailboxProperties props = db.transactionWithNullableResult(true,
|
||||
mailboxSettingsManager::getOwnMailboxProperties);
|
||||
success = api.checkStatus(props);
|
||||
} catch (DbException | IOException | MailboxApi.ApiException e) {
|
||||
success = false;
|
||||
logException(LOG, WARNING, e);
|
||||
}
|
||||
connectionCallback.accept(success);
|
||||
if (!success) return;
|
||||
public boolean checkConnection() {
|
||||
boolean success;
|
||||
try {
|
||||
MailboxProperties props = db.transactionWithNullableResult(true,
|
||||
mailboxSettingsManager::getOwnMailboxProperties);
|
||||
success = api.checkStatus(props);
|
||||
} catch (DbException | IOException | MailboxApi.ApiException e) {
|
||||
success = false;
|
||||
logException(LOG, WARNING, e);
|
||||
}
|
||||
if (success) {
|
||||
try {
|
||||
// we are only recording successful connections here
|
||||
// as those update the UI and failures might be false negatives
|
||||
@@ -120,7 +117,8 @@ class MailboxManagerImpl implements MailboxManager {
|
||||
} catch (DbException e) {
|
||||
logException(LOG, WARNING, e);
|
||||
}
|
||||
});
|
||||
}
|
||||
return success;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -52,6 +52,7 @@ class MailboxViewModel extends DbViewModel
|
||||
getLogger(MailboxViewModel.class.getName());
|
||||
|
||||
private final EventBus eventBus;
|
||||
private final Executor ioExecutor;
|
||||
private final QrCodeDecoder qrCodeDecoder;
|
||||
private final PluginManager pluginManager;
|
||||
private final MailboxManager mailboxManager;
|
||||
@@ -76,6 +77,7 @@ class MailboxViewModel extends DbViewModel
|
||||
MailboxManager mailboxManager) {
|
||||
super(app, dbExecutor, lifecycleManager, db, androidExecutor);
|
||||
this.eventBus = eventBus;
|
||||
this.ioExecutor = ioExecutor;
|
||||
this.pluginManager = pluginManager;
|
||||
this.mailboxManager = mailboxManager;
|
||||
qrCodeDecoder = new QrCodeDecoder(androidExecutor, ioExecutor, this);
|
||||
@@ -183,20 +185,16 @@ class MailboxViewModel extends DbViewModel
|
||||
|
||||
LiveData<Boolean> checkConnection() {
|
||||
MutableLiveData<Boolean> liveData = new MutableLiveData<>();
|
||||
mailboxManager.checkConnection(result ->
|
||||
onConnectionCheckFinished(liveData, result));
|
||||
ioExecutor.execute(() -> {
|
||||
boolean success = mailboxManager.checkConnection();
|
||||
if (LOG.isLoggable(INFO)) {
|
||||
LOG.info("Got result from connection check: " + success);
|
||||
}
|
||||
liveData.postValue(success);
|
||||
});
|
||||
return liveData;
|
||||
}
|
||||
|
||||
@IoExecutor
|
||||
private void onConnectionCheckFinished(MutableLiveData<Boolean> liveData,
|
||||
boolean success) {
|
||||
if (LOG.isLoggable(INFO)) {
|
||||
LOG.info("Got result from connection check: " + success);
|
||||
}
|
||||
liveData.postValue(success);
|
||||
}
|
||||
|
||||
@UiThread
|
||||
LiveEvent<MailboxState> getPairingState() {
|
||||
return pairingState;
|
||||
|
||||
Reference in New Issue
Block a user