merge and update

This commit is contained in:
Ernir Erlingsson
2016-04-26 10:59:58 +02:00
parent ef3b41dc1d
commit e809aaa932
27 changed files with 187 additions and 161 deletions

View File

@@ -13,6 +13,9 @@ import org.briarproject.android.forum.ShareForumActivity;
import org.briarproject.android.forum.WriteForumPostActivity; import org.briarproject.android.forum.WriteForumPostActivity;
import org.briarproject.android.fragment.BaseFragment; import org.briarproject.android.fragment.BaseFragment;
import org.briarproject.android.identity.CreateIdentityActivity; import org.briarproject.android.identity.CreateIdentityActivity;
import org.briarproject.android.introduction.ContactChooserFragment;
import org.briarproject.android.introduction.IntroductionActivity;
import org.briarproject.android.introduction.IntroductionMessageFragment;
import org.briarproject.android.invitation.AddContactActivity; import org.briarproject.android.invitation.AddContactActivity;
import org.briarproject.android.keyagreement.ChooseIdentityFragment; import org.briarproject.android.keyagreement.ChooseIdentityFragment;
import org.briarproject.android.keyagreement.KeyAgreementActivity; import org.briarproject.android.keyagreement.KeyAgreementActivity;
@@ -74,6 +77,12 @@ public interface ActivityComponent {
void inject(ShowQrCodeFragment fragment); void inject(ShowQrCodeFragment fragment);
void inject(IntroductionActivity activity);
void inject(ContactChooserFragment fragment);
void inject(IntroductionMessageFragment fragment);
@Named("ContactListFragment") @Named("ContactListFragment")
BaseFragment newContactListFragment(); BaseFragment newContactListFragment();
@@ -85,4 +94,10 @@ public interface ActivityComponent {
@Named("ShowQrCodeFragment") @Named("ShowQrCodeFragment")
BaseFragment newShowQrCodeFragment(); BaseFragment newShowQrCodeFragment();
@Named("ContactChooserFragment")
BaseFragment newContactChooserFragment();
@Named("IntroductionMessageFragment")
IntroductionMessageFragment newIntroductionMessageFragment();
} }

View File

@@ -19,6 +19,8 @@ import org.briarproject.android.controller.SetupController;
import org.briarproject.android.controller.SetupControllerImp; import org.briarproject.android.controller.SetupControllerImp;
import org.briarproject.android.controller.ConfigController; import org.briarproject.android.controller.ConfigController;
import org.briarproject.android.controller.ConfigControllerImp; import org.briarproject.android.controller.ConfigControllerImp;
import org.briarproject.android.introduction.ContactChooserFragment;
import org.briarproject.android.introduction.IntroductionMessageFragment;
import org.briarproject.android.keyagreement.ChooseIdentityFragment; import org.briarproject.android.keyagreement.ChooseIdentityFragment;
import org.briarproject.android.keyagreement.ShowQrCodeFragment; import org.briarproject.android.keyagreement.ShowQrCodeFragment;
@@ -135,5 +137,20 @@ public class ActivityModule {
return fragment; return fragment;
} }
@Provides
@Named("ContactChooserFragment")
BaseFragment provideContactChooserFragment() {
ContactChooserFragment fragment = new ContactChooserFragment();
fragment.setArguments(new Bundle());
return fragment;
}
@Provides
@Named("IntroductionMessageFragment")
IntroductionMessageFragment provideIntroductionMessageFragment() {
IntroductionMessageFragment fragment = new IntroductionMessageFragment();
fragment.setArguments(new Bundle());
return fragment;
}
} }

View File

@@ -17,6 +17,7 @@ import org.briarproject.api.forum.ForumPostFactory;
import org.briarproject.api.forum.ForumSharingManager; import org.briarproject.api.forum.ForumSharingManager;
import org.briarproject.api.identity.AuthorFactory; import org.briarproject.api.identity.AuthorFactory;
import org.briarproject.api.identity.IdentityManager; import org.briarproject.api.identity.IdentityManager;
import org.briarproject.api.introduction.IntroductionManager;
import org.briarproject.api.invitation.InvitationTaskFactory; import org.briarproject.api.invitation.InvitationTaskFactory;
import org.briarproject.api.keyagreement.KeyAgreementTaskFactory; import org.briarproject.api.keyagreement.KeyAgreementTaskFactory;
import org.briarproject.api.keyagreement.PayloadEncoder; import org.briarproject.api.keyagreement.PayloadEncoder;
@@ -33,7 +34,6 @@ import org.briarproject.system.AndroidSystemModule;
import java.util.concurrent.Executor; import java.util.concurrent.Executor;
import javax.inject.Named;
import javax.inject.Singleton; import javax.inject.Singleton;
import dagger.Component; import dagger.Component;
@@ -95,6 +95,8 @@ public interface AndroidComponent extends CoreEagerSingletons {
PayloadParser payloadParser(); PayloadParser payloadParser();
IntroductionManager introductionManager();
void inject(BriarService activity); void inject(BriarService activity);
void inject(ContactChooserFragment fragment); void inject(ContactChooserFragment fragment);

View File

@@ -2,9 +2,7 @@ package org.briarproject.android;
import android.os.Bundle; import android.os.Bundle;
import android.os.IBinder; import android.os.IBinder;
import android.os.PersistableBundle;
import android.support.v7.app.AppCompatActivity; import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View; import android.view.View;
import android.view.inputmethod.InputMethodManager; import android.view.inputmethod.InputMethodManager;
@@ -44,6 +42,10 @@ public abstract class BaseActivity extends AppCompatActivity {
.build(); .build();
injectActivity(activityComponent); injectActivity(activityComponent);
for (ActivityLifecycleController alc : lifecycleControllers) {
alc.onActivityCreate();
}
} }
@Override @Override
@@ -51,9 +53,9 @@ public abstract class BaseActivity extends AppCompatActivity {
super.onPostCreate(savedInstanceState); super.onPostCreate(savedInstanceState);
// Post call used for controllers to ensure that the onCreate method // Post call used for controllers to ensure that the onCreate method
// override in inherited Activities has finished // override in inherited Activities has finished
for (ActivityLifecycleController alc : lifecycleControllers) { // for (ActivityLifecycleController alc : lifecycleControllers) {
alc.onActivityCreate(); // alc.onActivityCreate();
} // }
} }
@Override @Override

View File

@@ -4,18 +4,11 @@ import android.annotation.SuppressLint;
import android.content.Intent; import android.content.Intent;
import android.os.Build; import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.os.IBinder;
import org.briarproject.android.BriarService.BriarBinder;
import org.briarproject.android.BriarService.BriarServiceConnection;
import org.briarproject.android.controller.BriarController; import org.briarproject.android.controller.BriarController;
import org.briarproject.android.controller.ResultHandler; import org.briarproject.android.controller.handler.UiResultHandler;
import org.briarproject.android.panic.ExitActivity; import org.briarproject.android.panic.ExitActivity;
import org.briarproject.api.db.DatabaseConfig;
import org.briarproject.api.db.DatabaseExecutor;
import org.briarproject.api.lifecycle.LifecycleManager;
import java.util.concurrent.Executor;
import java.util.logging.Logger; import java.util.logging.Logger;
import javax.inject.Inject; import javax.inject.Inject;
@@ -68,24 +61,14 @@ public abstract class BriarActivity extends BaseActivity {
} }
} }
@Override
public void onDestroy() {
super.onDestroy();
briarController.unbindService();
}
protected void signOut(final boolean removeFromRecentApps) { protected void signOut(final boolean removeFromRecentApps) {
briarController.signOut(new ResultHandler<Void, RuntimeException>() { briarController.signOut(new UiResultHandler<Void>(this) {
@Override @Override
public void onResult(Void result) { public void onResultUi(Void result) {
if (removeFromRecentApps) startExitActivity(); if (removeFromRecentApps) startExitActivity();
else finishAndExit(); else finishAndExit();
} }
@Override
public void onException(RuntimeException exception) {
// TODO ?
}
}); });
} }
@@ -111,10 +94,12 @@ public abstract class BriarActivity extends BaseActivity {
System.exit(0); System.exit(0);
} }
@Deprecated
public void runOnDbThread(final Runnable task) { public void runOnDbThread(final Runnable task) {
briarController.runOnDbThread(task); briarController.runOnDbThread(task);
} }
@Deprecated
protected void finishOnUiThread() { protected void finishOnUiThread() {
runOnUiThread(new Runnable() { runOnUiThread(new Runnable() {
public void run() { public void run() {

View File

@@ -10,7 +10,6 @@ import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout; import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle; import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.widget.Toolbar; import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
@@ -21,8 +20,8 @@ import android.widget.TextView;
import org.briarproject.R; import org.briarproject.R;
import org.briarproject.android.controller.NavDrawerController; import org.briarproject.android.controller.NavDrawerController;
import org.briarproject.android.controller.ResultHandler;
import org.briarproject.android.controller.TransportStateListener; import org.briarproject.android.controller.TransportStateListener;
import org.briarproject.android.controller.handler.UiResultExceptionHandler;
import org.briarproject.android.fragment.BaseFragment; import org.briarproject.android.fragment.BaseFragment;
import org.briarproject.android.util.CustomAnimations; import org.briarproject.android.util.CustomAnimations;
import org.briarproject.api.TransportId; import org.briarproject.api.TransportId;
@@ -160,14 +159,14 @@ public class NavDrawerActivity extends BriarFragmentActivity implements
private void storeLocalAuthor(final LocalAuthor a) { private void storeLocalAuthor(final LocalAuthor a) {
controller.storeLocalAuthor(a, controller.storeLocalAuthor(a,
new ResultHandler<Void, DbException>() { new UiResultExceptionHandler<Void, DbException>(this) {
@Override @Override
public void onResult(Void result) { public void onResultUi(Void result) {
hideLoadingScreen(); hideLoadingScreen();
} }
@Override @Override
public void onException(DbException exception) { public void onExceptionUi(DbException exception) {
} }
}); });

View File

@@ -3,6 +3,7 @@ package org.briarproject.android;
import android.content.DialogInterface; import android.content.DialogInterface;
import android.content.Intent; import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.design.widget.TextInputLayout; import android.support.design.widget.TextInputLayout;
import android.support.v7.app.AlertDialog; import android.support.v7.app.AlertDialog;
import android.text.Editable; import android.text.Editable;
@@ -16,9 +17,8 @@ import android.widget.TextView;
import android.widget.TextView.OnEditorActionListener; import android.widget.TextView.OnEditorActionListener;
import org.briarproject.R; import org.briarproject.R;
import org.briarproject.android.controller.EncryptedKeyNullException;
import org.briarproject.android.controller.PasswordController; import org.briarproject.android.controller.PasswordController;
import org.briarproject.android.controller.ResultHandler; import org.briarproject.android.controller.handler.UiResultHandler;
import org.briarproject.android.util.AndroidUtils; import org.briarproject.android.util.AndroidUtils;
import javax.inject.Inject; import javax.inject.Inject;
@@ -36,13 +36,13 @@ public class PasswordActivity extends BaseActivity {
private EditText password; private EditText password;
@Inject @Inject
PasswordController passwordHelper; PasswordController passwordController;
@Override @Override
public void onCreate(Bundle state) { public void onCreate(Bundle state) {
super.onCreate(state); super.onCreate(state);
if (!passwordHelper.initialized()) { if (!passwordController.initialized()) {
clearSharedPrefsAndDeleteEverything(); clearSharedPrefsAndDeleteEverything();
return; return;
} }
@@ -92,7 +92,7 @@ public class PasswordActivity extends BaseActivity {
} }
private void clearSharedPrefsAndDeleteEverything() { private void clearSharedPrefsAndDeleteEverything() {
passwordHelper.clearPrefs(); passwordController.clearPrefs();
AndroidUtils.deleteAppData(this); AndroidUtils.deleteAppData(this);
setResult(RESULT_CANCELED); setResult(RESULT_CANCELED);
startActivity(new Intent(this, SetupActivity.class)); startActivity(new Intent(this, SetupActivity.class));
@@ -125,22 +125,17 @@ public class PasswordActivity extends BaseActivity {
hideSoftKeyboard(password); hideSoftKeyboard(password);
signInButton.setVisibility(INVISIBLE); signInButton.setVisibility(INVISIBLE);
progress.setVisibility(VISIBLE); progress.setVisibility(VISIBLE);
passwordHelper.validatePassword(password.getText().toString(), passwordController.validatePassword(password.getText().toString(),
new ResultHandler<Boolean, EncryptedKeyNullException>() { new UiResultHandler<Boolean>(this) {
@Override @Override
public void onResult(Boolean result) { public void onResultUi(@NonNull Boolean result) {
if (result != null && result) { if (result) {
setResult(RESULT_OK); setResult(RESULT_OK);
finish(); finish();
} else { } else {
tryAgain(); tryAgain();
} }
} }
@Override
public void onException(EncryptedKeyNullException e) {
// TODO ?
}
}); });
} }

View File

@@ -2,6 +2,7 @@ package org.briarproject.android;
import android.content.Intent; import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.design.widget.TextInputLayout; import android.support.design.widget.TextInputLayout;
import android.text.Editable; import android.text.Editable;
import android.text.TextWatcher; import android.text.TextWatcher;
@@ -15,11 +16,10 @@ import android.widget.TextView;
import android.widget.TextView.OnEditorActionListener; import android.widget.TextView.OnEditorActionListener;
import org.briarproject.R; import org.briarproject.R;
import org.briarproject.android.controller.ResultHandler;
import org.briarproject.android.controller.SetupController; import org.briarproject.android.controller.SetupController;
import org.briarproject.android.controller.handler.UiResultHandler;
import org.briarproject.android.util.AndroidUtils; import org.briarproject.android.util.AndroidUtils;
import org.briarproject.android.util.StrengthMeter; import org.briarproject.android.util.StrengthMeter;
import org.briarproject.util.StringUtils; import org.briarproject.util.StringUtils;
import javax.inject.Inject; import javax.inject.Inject;
@@ -135,16 +135,10 @@ public class SetupActivity extends BaseActivity implements OnClickListener,
final String nickname = nicknameEntry.getText().toString(); final String nickname = nicknameEntry.getText().toString();
final String password = passwordEntry.getText().toString(); final String password = passwordEntry.getText().toString();
setupController.createIdentity(nickname, password, setupController.createIdentity(nickname, password,
new ResultHandler<Long, RuntimeException>() { new UiResultHandler<Long>(this) {
@Override @Override
public void onResult(Long result) { public void onResultUi(@NonNull Long result) {
if (result != null) showMain(result);
showMain(result);
}
@Override
public void onException(RuntimeException exception) {
} }
}); });
} }

View File

@@ -1,6 +1,8 @@
package org.briarproject.android.controller; package org.briarproject.android.controller;
import org.briarproject.android.controller.handler.ResultHandler;
public interface BriarController extends ActivityLifecycleController { public interface BriarController extends ActivityLifecycleController {
void runOnDbThread(final Runnable task); void runOnDbThread(final Runnable task);
@@ -10,5 +12,5 @@ public interface BriarController extends ActivityLifecycleController {
boolean encryptionKey(); boolean encryptionKey();
void signOut(ResultHandler<Void, RuntimeException> eventHandler); void signOut(ResultHandler<Void> eventHandler);
} }

View File

@@ -7,6 +7,7 @@ import android.support.annotation.CallSuper;
import org.briarproject.android.BriarService; import org.briarproject.android.BriarService;
import org.briarproject.android.BriarService.BriarServiceConnection; import org.briarproject.android.BriarService.BriarServiceConnection;
import org.briarproject.android.controller.handler.ResultHandler;
import org.briarproject.api.db.DatabaseConfig; import org.briarproject.api.db.DatabaseConfig;
import org.briarproject.api.db.DatabaseExecutor; import org.briarproject.api.db.DatabaseExecutor;
import org.briarproject.api.lifecycle.LifecycleManager; import org.briarproject.api.lifecycle.LifecycleManager;
@@ -75,7 +76,7 @@ public class BriarControllerImp implements BriarController {
} }
@Override @Override
public void signOut(final ResultHandler<Void, RuntimeException> eventHandler) { public void signOut(final ResultHandler<Void> eventHandler) {
new Thread() { new Thread() {
@Override @Override
public void run() { public void run() {
@@ -90,14 +91,8 @@ public class BriarControllerImp implements BriarController {
service.waitForShutdown(); service.waitForShutdown();
} catch (InterruptedException e) { } catch (InterruptedException e) {
LOG.warning("Interrupted while waiting for service"); LOG.warning("Interrupted while waiting for service");
Thread.currentThread().interrupt();
} }
activity.runOnUiThread(new Runnable() { eventHandler.onResult(null);
@Override
public void run() {
eventHandler.onResult(null);
}
});
} }
}.start(); }.start();
} }

View File

@@ -1,9 +0,0 @@
package org.briarproject.android.controller;
public class EncryptedKeyNullException extends NullPointerException {
@Override
public String toString() {
return "Encrypted key can't be null";
}
}

View File

@@ -1,5 +1,6 @@
package org.briarproject.android.controller; package org.briarproject.android.controller;
import org.briarproject.android.controller.handler.ResultExceptionHandler;
import org.briarproject.api.TransportId; import org.briarproject.api.TransportId;
import org.briarproject.api.db.DbException; import org.briarproject.api.db.DbException;
import org.briarproject.api.identity.LocalAuthor; import org.briarproject.api.identity.LocalAuthor;
@@ -10,7 +11,7 @@ public interface NavDrawerController extends BriarController {
boolean transportRunning(TransportId transportId); boolean transportRunning(TransportId transportId);
void storeLocalAuthor(LocalAuthor author, void storeLocalAuthor(LocalAuthor author,
ResultHandler<Void, DbException> resultHandler); ResultExceptionHandler<Void, DbException> resultHandler);
LocalAuthor removeAuthorHandle(long handle); LocalAuthor removeAuthorHandle(long handle);
} }

View File

@@ -3,6 +3,7 @@ package org.briarproject.android.controller;
import android.app.Activity; import android.app.Activity;
import org.briarproject.android.api.ReferenceManager; import org.briarproject.android.api.ReferenceManager;
import org.briarproject.android.controller.handler.ResultExceptionHandler;
import org.briarproject.api.TransportId; import org.briarproject.api.TransportId;
import org.briarproject.api.db.DbException; import org.briarproject.api.db.DbException;
import org.briarproject.api.event.Event; import org.briarproject.api.event.Event;
@@ -84,7 +85,8 @@ public class NavDrawerControllerImp extends BriarControllerImp
} }
} }
private void transportStateUpdate(final TransportId id, final boolean enabled) { private void transportStateUpdate(final TransportId id,
final boolean enabled) {
activity.runOnUiThread(new Runnable() { activity.runOnUiThread(new Runnable() {
@Override @Override
public void run() { public void run() {
@@ -108,7 +110,8 @@ public class NavDrawerControllerImp extends BriarControllerImp
@Override @Override
public void storeLocalAuthor(final LocalAuthor author, public void storeLocalAuthor(final LocalAuthor author,
final ResultHandler<Void, DbException> resultHandler) { final ResultExceptionHandler<Void, DbException> resultHandler) {
runOnDbThread(new Runnable() { runOnDbThread(new Runnable() {
public void run() { public void run() {
try { try {
@@ -117,22 +120,11 @@ public class NavDrawerControllerImp extends BriarControllerImp
long duration = System.currentTimeMillis() - now; long duration = System.currentTimeMillis() - now;
if (LOG.isLoggable(INFO)) if (LOG.isLoggable(INFO))
LOG.info("Storing author took " + duration + " ms"); LOG.info("Storing author took " + duration + " ms");
activity.runOnUiThread(new Runnable() { resultHandler.onResult(null);
@Override
public void run() {
resultHandler.onResult(null);
}
});
} catch (final DbException e) { } catch (final DbException e) {
if (LOG.isLoggable(WARNING)) if (LOG.isLoggable(WARNING))
LOG.log(WARNING, e.toString(), e); LOG.log(WARNING, e.toString(), e);
resultHandler.onException(e);
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
resultHandler.onException(e);
}
});
} }
} }
}); });

View File

@@ -1,6 +1,8 @@
package org.briarproject.android.controller; package org.briarproject.android.controller;
import org.briarproject.android.controller.handler.ResultHandler;
public interface PasswordController extends ConfigController { public interface PasswordController extends ConfigController {
void validatePassword(String password, void validatePassword(String password,
ResultHandler<Boolean, EncryptedKeyNullException> resultHandler); ResultHandler<Boolean> resultHandler);
} }

View File

@@ -2,6 +2,7 @@ package org.briarproject.android.controller;
import android.app.Activity; import android.app.Activity;
import org.briarproject.android.controller.handler.ResultHandler;
import org.briarproject.api.crypto.CryptoComponent; import org.briarproject.api.crypto.CryptoComponent;
import org.briarproject.api.crypto.CryptoExecutor; import org.briarproject.api.crypto.CryptoExecutor;
import org.briarproject.api.crypto.SecretKey; import org.briarproject.api.crypto.SecretKey;
@@ -29,35 +30,21 @@ public class PasswordControllerImp extends ConfigControllerImp
@Override @Override
public void validatePassword(final String password, public void validatePassword(final String password,
final ResultHandler<Boolean, EncryptedKeyNullException> resultHandler) { final ResultHandler<Boolean> resultHandler) {
final byte[] encrypted = getEncryptedKey(); final byte[] encrypted = getEncryptedKey();
if (encrypted == null) {
resultHandler.onException(new EncryptedKeyNullException());
}
cryptoExecutor.execute(new Runnable() { cryptoExecutor.execute(new Runnable() {
public void run() { public void run() {
byte[] key = crypto.decryptWithPassword(encrypted, password); byte[] key = crypto.decryptWithPassword(encrypted, password);
if (key == null) { if (key == null) {
onPasswordValidated(false, resultHandler); resultHandler.onResult(false);
} else { } else {
databaseConfig.setEncryptionKey(new SecretKey(key)); databaseConfig.setEncryptionKey(new SecretKey(key));
onPasswordValidated(true, resultHandler); resultHandler.onResult(true);
} }
} }
}); });
} }
private void onPasswordValidated(final boolean validated,
final ResultHandler<Boolean, EncryptedKeyNullException> resultHandler) {
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
resultHandler.onResult(validated);
}
});
}
private byte[] getEncryptedKey() { private byte[] getEncryptedKey() {
String hex = getEncryptedDatabaseKey(); String hex = getEncryptedDatabaseKey();
return hex == null ? null : StringUtils.fromHexString(hex); return hex == null ? null : StringUtils.fromHexString(hex);

View File

@@ -1,6 +0,0 @@
package org.briarproject.android.controller;
public interface ResultHandler<R, E> {
void onResult(R result);
void onException(E exception);
}

View File

@@ -1,8 +1,10 @@
package org.briarproject.android.controller; package org.briarproject.android.controller;
import org.briarproject.android.controller.handler.ResultHandler;
public interface SetupController { public interface SetupController {
float estimatePasswordStrength(String password); float estimatePasswordStrength(String password);
void createIdentity(String nickname, String password, void createIdentity(String nickname, String password,
ResultHandler<Long, RuntimeException> resultHandler); ResultHandler<Long> resultHandler);
} }

View File

@@ -3,8 +3,8 @@ package org.briarproject.android.controller;
import android.app.Activity; import android.app.Activity;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import org.briarproject.android.BaseActivity;
import org.briarproject.android.api.ReferenceManager; import org.briarproject.android.api.ReferenceManager;
import org.briarproject.android.controller.handler.ResultHandler;
import org.briarproject.api.crypto.CryptoComponent; import org.briarproject.api.crypto.CryptoComponent;
import org.briarproject.api.crypto.CryptoExecutor; import org.briarproject.api.crypto.CryptoExecutor;
import org.briarproject.api.crypto.KeyPair; import org.briarproject.api.crypto.KeyPair;
@@ -83,7 +83,7 @@ public class SetupControllerImp implements SetupController {
@Override @Override
public void createIdentity(final String nickname, final String password, public void createIdentity(final String nickname, final String password,
final ResultHandler<Long, RuntimeException> resultHandler) { final ResultHandler<Long> resultHandler) {
cryptoExecutor.execute(new Runnable() { cryptoExecutor.execute(new Runnable() {
public void run() { public void run() {
SecretKey key = crypto.generateSecretKey(); SecretKey key = crypto.generateSecretKey();
@@ -93,17 +93,6 @@ public class SetupControllerImp implements SetupController {
final LocalAuthor localAuthor = createLocalAuthor(nickname); final LocalAuthor localAuthor = createLocalAuthor(nickname);
long handle = referenceManager.putReference(localAuthor, long handle = referenceManager.putReference(localAuthor,
LocalAuthor.class); LocalAuthor.class);
onIdentityCreated(handle, resultHandler);
}
});
}
private void onIdentityCreated(final long handle,
final ResultHandler<Long, RuntimeException> resultHandler) {
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
resultHandler.onResult(handle); resultHandler.onResult(handle);
} }
}); });

View File

@@ -0,0 +1,6 @@
package org.briarproject.android.controller.handler;
public interface ResultExceptionHandler<R, E extends Exception> {
void onResult(R result);
void onException(E exception);
}

View File

@@ -0,0 +1,5 @@
package org.briarproject.android.controller.handler;
public interface ResultHandler<R> {
void onResult(R result);
}

View File

@@ -0,0 +1,33 @@
package org.briarproject.android.controller.handler;
import android.app.Activity;
public abstract class UiResultExceptionHandler<R, E extends Exception>
implements ResultExceptionHandler<R, E> {
private final Activity activity;
public UiResultExceptionHandler(Activity activity) {
this.activity = activity;
}
public void onResult(final R result) {
activity.runOnUiThread(new Runnable() {
public void run() {
onResultUi(result);
}
});
}
public void onException(final E exception) {
activity.runOnUiThread(new Runnable() {
public void run() {
onExceptionUi(exception);
}
});
}
public abstract void onResultUi(R result);
public abstract void onExceptionUi(E exception);
}

View File

@@ -0,0 +1,22 @@
package org.briarproject.android.controller.handler;
import android.app.Activity;
public abstract class UiResultHandler<R> implements ResultHandler<R> {
private final Activity activity;
public UiResultHandler(Activity activity) {
this.activity = activity;
}
public void onResult(final R result) {
activity.runOnUiThread(new Runnable() {
public void run() {
onResultUi(result);
}
});
}
public abstract void onResultUi(R result);
}

View File

@@ -12,7 +12,6 @@ import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import org.briarproject.R; import org.briarproject.R;
import org.briarproject.android.AndroidComponent;
import org.briarproject.android.contact.ContactListAdapter; import org.briarproject.android.contact.ContactListAdapter;
import org.briarproject.android.contact.ContactListItem; import org.briarproject.android.contact.ContactListItem;
import org.briarproject.android.contact.ConversationItem; import org.briarproject.android.contact.ConversationItem;
@@ -66,6 +65,11 @@ public class ContactChooserFragment extends BaseFragment {
@Inject @Inject
protected volatile ConnectionRegistry connectionRegistry; protected volatile ConnectionRegistry connectionRegistry;
@Inject
public ContactChooserFragment() {
}
@Override @Override
public void onAttach(Context context) { public void onAttach(Context context) {
super.onAttach(context); super.onAttach(context);
@@ -77,11 +81,6 @@ public class ContactChooserFragment extends BaseFragment {
} }
} }
@Override
public void injectActivity(AndroidComponent component) {
component.inject(this);
}
@Override @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) { Bundle savedInstanceState) {

View File

@@ -3,6 +3,7 @@ package org.briarproject.android.introduction;
import android.content.Intent; import android.content.Intent;
import android.os.Build; import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentManager;
import android.transition.ChangeBounds; import android.transition.ChangeBounds;
import android.transition.Fade; import android.transition.Fade;
@@ -10,7 +11,7 @@ import android.view.MenuItem;
import android.view.View; import android.view.View;
import org.briarproject.R; import org.briarproject.R;
import org.briarproject.android.AndroidComponent; import org.briarproject.android.ActivityComponent;
import org.briarproject.android.BriarActivity; import org.briarproject.android.BriarActivity;
import org.briarproject.android.fragment.BaseFragment; import org.briarproject.android.fragment.BaseFragment;
import org.briarproject.api.contact.Contact; import org.briarproject.api.contact.Contact;
@@ -33,15 +34,15 @@ public class IntroductionActivity extends BriarActivity implements
setContentView(R.layout.activity_introduction); setContentView(R.layout.activity_introduction);
if (savedInstanceState == null) { if (savedInstanceState == null) {
ContactChooserFragment chooserFragment =
new ContactChooserFragment();
getSupportFragmentManager().beginTransaction() getSupportFragmentManager().beginTransaction()
.add(R.id.introductionContainer, chooserFragment).commit(); .add(R.id.introductionContainer,
activityComponent.newContactChooserFragment())
.commit();
} }
} }
@Override @Override
public void injectActivity(AndroidComponent component) { public void injectActivity(ActivityComponent component) {
component.inject(this); component.inject(this);
} }
@@ -85,13 +86,14 @@ public class IntroductionActivity extends BriarActivity implements
final Contact c2) { final Contact c2) {
IntroductionMessageFragment messageFragment = IntroductionMessageFragment messageFragment =
IntroductionMessageFragment activityComponent.newIntroductionMessageFragment();
.newInstance(c1.getId().getInt(), c2.getId().getInt()); messageFragment.initBundle(c1.getId().getInt(), c2.getId().getInt());
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
messageFragment.setSharedElementEnterTransition(new ChangeBounds()); messageFragment.setSharedElementEnterTransition(new ChangeBounds());
messageFragment.setEnterTransition(new Fade()); messageFragment.setEnterTransition(new Fade());
messageFragment.setSharedElementReturnTransition(new ChangeBounds()); messageFragment
.setSharedElementReturnTransition(new ChangeBounds());
} }
getSupportFragmentManager().beginTransaction() getSupportFragmentManager().beginTransaction()

View File

@@ -13,7 +13,6 @@ import android.widget.TextView;
import android.widget.Toast; import android.widget.Toast;
import org.briarproject.R; import org.briarproject.R;
import org.briarproject.android.AndroidComponent;
import org.briarproject.android.fragment.BaseFragment; import org.briarproject.android.fragment.BaseFragment;
import org.briarproject.api.FormatException; import org.briarproject.api.FormatException;
import org.briarproject.api.contact.Contact; import org.briarproject.api.contact.Contact;
@@ -49,18 +48,19 @@ public class IntroductionMessageFragment extends BaseFragment {
@Inject @Inject
protected volatile IntroductionManager introductionManager; protected volatile IntroductionManager introductionManager;
public static IntroductionMessageFragment newInstance(int contactId1, public void initBundle(int contactId1, int contactId2) {
int contactId2) {
IntroductionMessageFragment f = new IntroductionMessageFragment();
Bundle args = new Bundle(); Bundle args = new Bundle();
args.putInt(CONTACT_ID_1, contactId1); args.putInt(CONTACT_ID_1, contactId1);
args.putInt(CONTACT_ID_2, contactId2); args.putInt(CONTACT_ID_2, contactId2);
f.setArguments(args); this.setArguments(args);
return f;
} }
@Inject
public IntroductionMessageFragment() {
}
@Override @Override
public void onAttach(Context context) { public void onAttach(Context context) {
super.onAttach(context); super.onAttach(context);
@@ -72,11 +72,6 @@ public class IntroductionMessageFragment extends BaseFragment {
} }
} }
@Override
public void injectActivity(AndroidComponent component) {
component.inject(this);
}
@Override @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) { Bundle savedInstanceState) {
@@ -183,7 +178,8 @@ public class IntroductionMessageFragment extends BaseFragment {
// actually make the introduction // actually make the introduction
try { try {
long timestamp = System.currentTimeMillis(); long timestamp = System.currentTimeMillis();
introductionManager.makeIntroduction(c1, c2, msg, timestamp); introductionManager
.makeIntroduction(c1, c2, msg, timestamp);
} catch (DbException e) { } catch (DbException e) {
if (LOG.isLoggable(WARNING)) if (LOG.isLoggable(WARNING))
LOG.log(WARNING, e.toString(), e); LOG.log(WARNING, e.toString(), e);

View File

@@ -6,7 +6,6 @@ import android.widget.Toast;
import org.briarproject.R; import org.briarproject.R;
import org.briarproject.android.ActivityComponent; import org.briarproject.android.ActivityComponent;
import org.briarproject.android.AndroidComponent;
import org.briarproject.android.BriarActivity; import org.briarproject.android.BriarActivity;
import org.briarproject.android.api.ReferenceManager; import org.briarproject.android.api.ReferenceManager;
import org.briarproject.api.crypto.CryptoComponent; import org.briarproject.api.crypto.CryptoComponent;
@@ -287,7 +286,7 @@ implements InvitationListener {
localInvitationCode, code); localInvitationCode, code);
taskHandle = referenceManager.putReference(task, InvitationTask.class); taskHandle = referenceManager.putReference(task, InvitationTask.class);
task.addListener(AddContactActivity.this); task.addListener(AddContactActivity.this);
// Add a second listener so we can remove the first in onActivityDestroy(), // Add a second listener so we can remove the first in onDestroy(),
// allowing the activity to be garbage collected if it's destroyed // allowing the activity to be garbage collected if it's destroyed
task.addListener(new ReferenceCleaner(referenceManager, taskHandle)); task.addListener(new ReferenceCleaner(referenceManager, taskHandle));
task.connect(); task.connect();

View File

@@ -26,7 +26,7 @@ public class IntroductionModule {
@Provides @Provides
@Singleton @Singleton
MessageValidator getValidator(MessageQueueManager messageQueueManager, MessageValidator provideValidator(MessageQueueManager messageQueueManager,
IntroductionManager introductionManager, IntroductionManager introductionManager,
MetadataEncoder metadataEncoder, ClientHelper clientHelper, MetadataEncoder metadataEncoder, ClientHelper clientHelper,
Clock clock) { Clock clock) {
@@ -43,7 +43,7 @@ public class IntroductionModule {
@Provides @Provides
@Singleton @Singleton
IntroductionManager getIntroductionManager( IntroductionManager provideIntroductionManager(
LifecycleManager lifecycleManager, LifecycleManager lifecycleManager,
ContactManager contactManager, ContactManager contactManager,
MessageQueueManager messageQueueManager, MessageQueueManager messageQueueManager,