Skip to content
Snippets Groups Projects
AppModule.java 3.66 KiB
Newer Older
package org.briarproject.android;
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;
import org.briarproject.api.crypto.SecretKey;
import org.briarproject.api.db.DatabaseConfig;
akwizgran's avatar
akwizgran committed
import org.briarproject.api.event.EventBus;
import org.briarproject.api.lifecycle.LifecycleManager;
import org.briarproject.api.reporting.DevConfig;
import org.briarproject.api.ui.UiCallback;
import org.briarproject.util.StringUtils;
import java.security.GeneralSecurityException;
import javax.inject.Inject;
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;
public class AppModule {
	static class EagerSingletons {
		@Inject
		AndroidNotificationManager androidNotificationManager;
	private final Application application;
	public AppModule(Application application) {
		this.application = application;
			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();
			}
		};
	}

	@Provides
	@Singleton
	Application providesApplication() {
		return application;
	}

	UiCallback provideUICallback() {
	DatabaseConfig provideDatabaseConfig(Application app) {
		final File dir = app.getApplicationContext().getDir("db", MODE_PRIVATE);
		return new DatabaseConfig() {

			private volatile SecretKey key = null;
akwizgran's avatar
akwizgran committed
			private volatile String nickname;
				if (!dir.isDirectory()) return false;
				File[] files = dir.listFiles();
				return files != null && files.length > 0;
			public void setEncryptionKey(SecretKey key) {
				this.key = key;
			}

			public void setLocalAuthorName(String nickname) {
akwizgran's avatar
akwizgran committed
				this.nickname = nickname;
			public String getLocalAuthorName() {
akwizgran's avatar
akwizgran committed
				return nickname;
	DevConfig provideDevConfig(final CryptoComponent crypto) {
			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() {
				return DEV_ONION_ADDRESS;
	ReferenceManager provideReferenceManager() {
		return new ReferenceManagerImpl();
	AndroidNotificationManager provideAndroidNotificationManager(
akwizgran's avatar
akwizgran committed
			LifecycleManager lifecycleManager, EventBus eventBus,
			AndroidNotificationManagerImpl notificationManager) {
		lifecycleManager.registerService(notificationManager);
akwizgran's avatar
akwizgran committed
		eventBus.addListener(notificationManager);
		return notificationManager;
	}