Semi-encapsulated the core/api dependency graphs and created a proper structure to load eager singletons

This commit is contained in:
Ernir Erlingsson
2016-03-10 22:31:08 +01:00
parent 10764d727b
commit 6f233070fe
28 changed files with 483 additions and 225 deletions

View File

@@ -0,0 +1,48 @@
package org.briarproject.system;
import android.app.Application;
import android.content.Context;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import org.briarproject.api.android.PlatformExecutor;
import java.util.concurrent.Callable;
import java.util.concurrent.Future;
import java.util.concurrent.FutureTask;
import javax.inject.Inject;
class AndroidExecutorImpl implements PlatformExecutor {
private final Handler handler;
AndroidExecutorImpl(Application app) {
Context ctx = app.getApplicationContext();
handler = new FutureTaskHandler(ctx.getMainLooper());
}
public <V> Future<V> submit(Callable<V> c) {
Future<V> f = new FutureTask<V>(c);
handler.sendMessage(Message.obtain(handler, 0, f));
return f;
}
public void execute(Runnable r) {
handler.post(r);
}
private static class FutureTaskHandler extends Handler {
private FutureTaskHandler(Looper looper) {
super(looper);
}
@Override
public void handleMessage(Message m) {
((FutureTask<?>) m.obj).run();
}
}
}

View File

@@ -0,0 +1,78 @@
package org.briarproject.system;
import android.app.Application;
import android.content.Context;
import org.briarproject.PlatformModule;
import org.briarproject.android.ApplicationScope;
import org.briarproject.api.android.PlatformExecutor;
import org.briarproject.api.crypto.SecretKey;
import org.briarproject.api.db.DatabaseConfig;
import org.briarproject.api.ui.UiCallback;
import java.io.File;
public class PlatformModuleExtension extends PlatformModule {
private final UiCallback uiCallback;
private final Application app;
public PlatformModuleExtension(Application app) {
this.app = app;
// Use a dummy UI callback
uiCallback = new UiCallback() {
public int showChoice(String[] options, String... message) {
throw new UnsupportedOperationException();
}
public boolean showConfirmationMessage(String... message) {
throw new UnsupportedOperationException();
}
public void showMessage(String... message) {
throw new UnsupportedOperationException();
}
};
}
@Override
public UiCallback provideUICallback() {
return uiCallback;
}
@Override
@ApplicationScope
public DatabaseConfig provideDatabaseConfig() {
final File dir = app.getApplicationContext().getDir("db", Context.MODE_PRIVATE);
return new DatabaseConfig() {
private volatile SecretKey key = null;
public boolean databaseExists() {
return dir.isDirectory() && dir.listFiles().length > 0;
}
public File getDatabaseDirectory() {
return dir;
}
public void setEncryptionKey(SecretKey key) {
this.key = key;
}
public SecretKey getEncryptionKey() {
return key;
}
public long getMaxSize() {
return Long.MAX_VALUE;
}
};
}
@Override
public PlatformExecutor providePlatformExecutor() {
return new AndroidExecutorImpl(app);
}
}

View File

@@ -11,26 +11,21 @@ import org.briarproject.api.system.Timer;
import dagger.Module;
import dagger.Provides;
@Module
public class AndroidSystemModule {
public class SystemModuleExtension extends SystemModule {
@Provides
Clock provideClock() {
return new SystemClock();
private final Application app;
public SystemModuleExtension(final Application app) {
this.app = app;
}
@Provides
Timer provideTimer() {
return new SystemTimer();
}
@Provides
SeedProvider provideSeedProvider(final Application app) {
@Override
public SeedProvider provideSeedProvider() {
return new AndroidSeedProvider(app);
}
@Provides
LocationUtils provideLocationUtils(final Application app) {
@Override
public LocationUtils provideLocationUtils() {
return new AndroidLocationUtils(app);
}