Newer
Older

Ernir Erlingsson
committed
package org.briarproject.android.controller;
import android.app.Activity;
import android.content.Intent;
import android.os.IBinder;
import android.support.annotation.CallSuper;
import org.briarproject.android.BriarService;
import org.briarproject.android.BriarService.BriarServiceConnection;
import org.briarproject.android.controller.handler.ResultHandler;

Ernir Erlingsson
committed
import org.briarproject.api.db.DatabaseConfig;
import java.util.logging.Logger;
import javax.inject.Inject;
public class BriarControllerImpl implements BriarController {

Ernir Erlingsson
committed
private static final Logger LOG =
Logger.getLogger(BriarControllerImpl.class.getName());

Ernir Erlingsson
committed
@Inject
protected BriarServiceConnection serviceConnection;
@Inject
protected DatabaseConfig databaseConfig;

Ernir Erlingsson
committed
private boolean bound = false;
@Inject
public BriarControllerImpl() {

Ernir Erlingsson
committed
}
@Override
@CallSuper
public void onActivityCreate() {
if (databaseConfig.getEncryptionKey() != null) startAndBindService();
}
@Override
@CallSuper
public void onActivityResume() {
}
@Override
@CallSuper
public void onActivityPause() {
}
@Override
@CallSuper
public void onActivityDestroy() {
unbindService();
}

Ernir Erlingsson
committed
public void startAndBindService() {
activity.startService(new Intent(activity, BriarService.class));
bound = activity.bindService(new Intent(activity, BriarService.class),
serviceConnection, 0);
LOG.info("Briar service started " + bound);

Ernir Erlingsson
committed
}
@Override
public boolean hasEncryptionKey() {

Ernir Erlingsson
committed
return databaseConfig.getEncryptionKey() != null;
}
@Override
public void signOut(final ResultHandler<Void> eventHandler) {

Ernir Erlingsson
committed
new Thread() {
@Override
public void run() {
try {
// Wait for the service to finish starting up
IBinder binder = serviceConnection.waitForBinder();
BriarService service =
((BriarService.BriarBinder) binder).getService();

Ernir Erlingsson
committed
service.waitForStartup();
// Shut down the service and wait for it to shut down
LOG.info("Shutting down service");
service.shutdown();
service.waitForShutdown();
} catch (InterruptedException e) {
LOG.warning("Interrupted while waiting for service");
}

Ernir Erlingsson
committed
}
}.start();
}
protected void unbindService() {
LOG.info("Briar service unbind " + bound);

Ernir Erlingsson
committed
if (bound) activity.unbindService(serviceConnection);
}
}