Newer
Older
package org.briarproject.android;

Ernir Erlingsson
committed
import android.app.Application;
import org.briarproject.android.api.AndroidNotificationManager;
import org.briarproject.android.api.ReferenceManager;
import org.briarproject.api.crypto.CryptoComponent;
import org.briarproject.api.crypto.PublicKey;

Ernir Erlingsson
committed
import org.briarproject.api.crypto.SecretKey;
import org.briarproject.api.db.DatabaseConfig;
import org.briarproject.api.lifecycle.LifecycleManager;
import org.briarproject.api.reporting.DevConfig;

Ernir Erlingsson
committed
import org.briarproject.api.ui.UiCallback;
import org.briarproject.util.StringUtils;

Ernir Erlingsson
committed
import java.io.File;
import java.security.GeneralSecurityException;
import javax.inject.Inject;

Ernir Erlingsson
committed
import javax.inject.Singleton;
import dagger.Module;
import dagger.Provides;
import static android.content.Context.MODE_PRIVATE;
import static org.briarproject.api.reporting.ReportingConstants.DEV_ONION_ADDRESS;
import static org.briarproject.api.reporting.ReportingConstants.DEV_PUBLIC_KEY_HEX;
static class EagerSingletons {
@Inject
AndroidNotificationManager androidNotificationManager;

Ernir Erlingsson
committed
private final UiCallback uiCallback;
public AppModule(Application application) {

Ernir Erlingsson
committed
uiCallback = new UiCallback() {

Ernir Erlingsson
committed
public int showChoice(String[] options, String... message) {
throw new UnsupportedOperationException();
}

Ernir Erlingsson
committed
public boolean showConfirmationMessage(String... message) {
throw new UnsupportedOperationException();
}

Ernir Erlingsson
committed
public void showMessage(String... message) {
throw new UnsupportedOperationException();
}
};
}
@Provides
@Singleton
Application providesApplication() {
return application;
}

Ernir Erlingsson
committed
@Provides

Ernir Erlingsson
committed
return uiCallback;
}
@Provides
@Singleton
DatabaseConfig provideDatabaseConfig(Application app) {
final File dir = app.getApplicationContext().getDir("db", MODE_PRIVATE);

Ernir Erlingsson
committed
return new DatabaseConfig() {
private volatile SecretKey key = null;

Ernir Erlingsson
committed

Ernir Erlingsson
committed
public boolean databaseExists() {
if (!dir.isDirectory()) return false;
File[] files = dir.listFiles();
return files != null && files.length > 0;

Ernir Erlingsson
committed
}

Ernir Erlingsson
committed
public File getDatabaseDirectory() {
return dir;
}

Ernir Erlingsson
committed
public void setEncryptionKey(SecretKey key) {
this.key = key;
}

Ernir Erlingsson
committed
@Override
public void setLocalAuthorName(String nickname) {

Ernir Erlingsson
committed
}
@Override
public String getLocalAuthorName() {

Ernir Erlingsson
committed
}

Ernir Erlingsson
committed
public SecretKey getEncryptionKey() {
return key;
}

Ernir Erlingsson
committed
public long getMaxSize() {
return Long.MAX_VALUE;
}
};
}
@Provides
@Singleton
DevConfig provideDevConfig(final CryptoComponent crypto) {
return new DevConfig() {
@Override
public PublicKey getDevPublicKey() {
try {
return crypto.getMessageKeyParser().parsePublicKey(
StringUtils.fromHexString(DEV_PUBLIC_KEY_HEX));
} catch (GeneralSecurityException e) {
throw new RuntimeException(e);
}
}
@Override
public String getDevOnionAddress() {
}
};
}

Ernir Erlingsson
committed
@Singleton
ReferenceManager provideReferenceManager() {
return new ReferenceManagerImpl();

Ernir Erlingsson
committed
@Singleton
AndroidNotificationManager provideAndroidNotificationManager(
LifecycleManager lifecycleManager, EventBus eventBus,
AndroidNotificationManagerImpl notificationManager) {
lifecycleManager.registerService(notificationManager);