Newer
Older

Ernir Erlingsson
committed
package org.briarproject.android.controller;
import android.app.Activity;
import org.briarproject.android.api.ReferenceManager;
import org.briarproject.android.controller.handler.UiResultHandler;

Ernir Erlingsson
committed
import org.briarproject.api.TransportId;
import org.briarproject.api.db.DbException;
import org.briarproject.api.event.Event;
import org.briarproject.api.event.EventBus;
import org.briarproject.api.event.EventListener;
import org.briarproject.api.event.TransportDisabledEvent;
import org.briarproject.api.event.TransportEnabledEvent;
import org.briarproject.api.identity.IdentityManager;
import org.briarproject.api.identity.LocalAuthor;
import org.briarproject.api.plugins.Plugin;
import org.briarproject.api.plugins.PluginManager;
import java.util.logging.Logger;
import javax.inject.Inject;
import static java.util.logging.Level.INFO;
import static java.util.logging.Level.WARNING;
public class NavDrawerControllerImpl extends DBControllerImpl

Ernir Erlingsson
committed
implements NavDrawerController, EventListener {
private static final Logger LOG =
Logger.getLogger(NavDrawerControllerImpl.class.getName());

Ernir Erlingsson
committed
@Inject
protected ReferenceManager referenceManager;
@Inject
protected PluginManager pluginManager;
@Inject
protected EventBus eventBus;

Ernir Erlingsson
committed
@Inject
protected Activity activity;
// Fields that are accessed from background threads must be volatile
@Inject
protected volatile IdentityManager identityManager;

Ernir Erlingsson
committed
private TransportStateListener transportStateListener;
@Inject
public NavDrawerControllerImpl() {

Ernir Erlingsson
committed
}
@Override
public void onActivityCreate() {

Ernir Erlingsson
committed
}
@Override
public void onActivityResume() {
eventBus.addListener(this);
}
@Override
public void onActivityPause() {
eventBus.removeListener(this);
}
@Override
public void onActivityDestroy() {
}

Ernir Erlingsson
committed
@Override
public void eventOccurred(Event e) {
if (e instanceof TransportEnabledEvent) {
TransportId id = ((TransportEnabledEvent) e).getTransportId();
if (LOG.isLoggable(INFO)) {
LOG.info("TransportEnabledEvent: " + id.getString());
}
transportStateUpdate(id, true);
} else if (e instanceof TransportDisabledEvent) {
TransportId id = ((TransportDisabledEvent) e).getTransportId();
if (LOG.isLoggable(INFO)) {
LOG.info("TransportDisabledEvent: " + id.getString());
}
transportStateUpdate(id, false);
}
}
private void transportStateUpdate(final TransportId id,
final boolean enabled) {

Ernir Erlingsson
committed
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
if (transportStateListener != null) {
transportStateListener.stateUpdate(id, enabled);
}
}
});
}
@Override
public void setTransportListener(TransportStateListener transportListener) {
this.transportStateListener = transportListener;
}
@Override
public boolean isTransportRunning(TransportId transportId) {
Plugin plugin = pluginManager.getPlugin(transportId);
return plugin != null && plugin.isRunning();

Ernir Erlingsson
committed
}
@Override
public void storeLocalAuthor(final LocalAuthor author,
final UiResultHandler<Void> resultHandler) {

Ernir Erlingsson
committed
runOnDbThread(new Runnable() {

Ernir Erlingsson
committed
public void run() {
try {
long now = System.currentTimeMillis();
identityManager.addLocalAuthor(author);
long duration = System.currentTimeMillis() - now;
if (LOG.isLoggable(INFO))
LOG.info("Storing author took " + duration + " ms");

Ernir Erlingsson
committed
} catch (final DbException e) {
if (LOG.isLoggable(WARNING))
LOG.log(WARNING, e.toString(), e);
}
}
});
}
@Override
public LocalAuthor removeAuthorHandle(long handle) {
return referenceManager.removeReference(handle, LocalAuthor.class);

Ernir Erlingsson
committed
}