Use RoboGuice for injection into Android activities.

This commit is contained in:
akwizgran
2012-11-07 12:29:06 +00:00
parent 8279cd14c9
commit 5aec95332d
11 changed files with 93 additions and 91 deletions

BIN
libs/roboguice-2.0.jar Normal file

Binary file not shown.

18
res/values/roboguice.xml Normal file
View File

@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="roboguice_modules">
<item>net.sf.briar.HelloWorldModule</item>
<item>net.sf.briar.android.AndroidModule</item>
<item>net.sf.briar.android.invitation.AndroidInvitationModule</item>
<item>net.sf.briar.clock.ClockModule</item>
<item>net.sf.briar.crypto.CryptoModule</item>
<item>net.sf.briar.db.DatabaseModule</item>
<item>net.sf.briar.lifecycle.LifecycleModule</item>
<item>net.sf.briar.plugins.PluginsModule</item>
<item>net.sf.briar.protocol.ProtocolModule</item>
<item>net.sf.briar.protocol.duplex.DuplexProtocolModule</item>
<item>net.sf.briar.protocol.simplex.SimplexProtocolModule</item>
<item>net.sf.briar.serial.SerialModule</item>
<item>net.sf.briar.transport.TransportModule</item>
</string-array>
</resources>

View File

@@ -1,40 +1,23 @@
package net.sf.briar; package net.sf.briar;
import static android.content.Context.MODE_PRIVATE;
import java.io.File; import java.io.File;
import net.sf.briar.api.crypto.Password; import net.sf.briar.api.crypto.Password;
import net.sf.briar.api.db.DatabaseConfig; import net.sf.briar.api.db.DatabaseConfig;
import net.sf.briar.api.ui.UiCallback; import net.sf.briar.api.ui.UiCallback;
import android.app.Application;
import com.google.inject.AbstractModule; import com.google.inject.AbstractModule;
import com.google.inject.Provides;
import com.google.inject.Singleton;
public class HelloWorldModule extends AbstractModule { public class HelloWorldModule extends AbstractModule {
private final DatabaseConfig config; @Override
private final UiCallback callback; protected void configure() {
bind(UiCallback.class).toInstance(new UiCallback() {
public HelloWorldModule(final File dir) {
final Password password = new Password() {
public char[] getPassword() {
return "foo bar".toCharArray();
}
};
config = new DatabaseConfig() {
public File getDataDirectory() {
return dir;
}
public Password getPassword() {
return password;
}
public long getMaxSize() {
return Long.MAX_VALUE;
}
};
callback = new UiCallback() {
public int showChoice(String[] options, String... message) { public int showChoice(String[] options, String... message) {
return -1; return -1;
@@ -45,12 +28,29 @@ public class HelloWorldModule extends AbstractModule {
} }
public void showMessage(String... message) {} public void showMessage(String... message) {}
}; });
} }
@Override @Provides @Singleton
protected void configure() { DatabaseConfig getDatabaseConfig(final Application app) {
bind(DatabaseConfig.class).toInstance(config); return new DatabaseConfig() {
bind(UiCallback.class).toInstance(callback);
public File getDataDirectory() {
return app.getApplicationContext().getDir("db", MODE_PRIVATE);
}
public Password getPassword() {
return new Password() {
public char[] getPassword() {
return "foo bar".toCharArray();
}
};
}
public long getMaxSize() {
return Long.MAX_VALUE;
}
};
} }
} }

View File

@@ -3,40 +3,27 @@ package net.sf.briar;
import static java.util.logging.Level.INFO; import static java.util.logging.Level.INFO;
import static java.util.logging.Level.WARNING; import static java.util.logging.Level.WARNING;
import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.util.logging.Logger; import java.util.logging.Logger;
import net.sf.briar.android.AndroidModule;
import net.sf.briar.api.crypto.KeyManager; import net.sf.briar.api.crypto.KeyManager;
import net.sf.briar.api.db.DatabaseComponent; import net.sf.briar.api.db.DatabaseComponent;
import net.sf.briar.api.db.DbException; import net.sf.briar.api.db.DbException;
import net.sf.briar.api.plugins.PluginManager; import net.sf.briar.api.plugins.PluginManager;
import net.sf.briar.clock.ClockModule;
import net.sf.briar.crypto.CryptoModule;
import net.sf.briar.db.DatabaseModule;
import net.sf.briar.lifecycle.LifecycleModule;
import net.sf.briar.plugins.PluginsModule;
import net.sf.briar.protocol.ProtocolModule;
import net.sf.briar.protocol.duplex.DuplexProtocolModule;
import net.sf.briar.protocol.simplex.SimplexProtocolModule;
import net.sf.briar.serial.SerialModule;
import net.sf.briar.transport.TransportModule;
import android.app.Service; import android.app.Service;
import android.content.Intent; import android.content.Intent;
import android.os.IBinder; import android.os.IBinder;
import com.google.inject.Guice; import com.google.inject.Inject;
import com.google.inject.Injector;
public class HelloWorldService extends Service implements Runnable { public class HelloWorldService extends Service implements Runnable {
private static final Logger LOG = private static final Logger LOG =
Logger.getLogger(HelloWorldService.class.getName()); Logger.getLogger(HelloWorldService.class.getName());
private DatabaseComponent db = null; @Inject private DatabaseComponent db;
private KeyManager keyManager = null; @Inject private KeyManager keyManager;
private PluginManager pluginManager = null; @Inject private PluginManager pluginManager;
@Override @Override
public void onCreate() { public void onCreate() {
@@ -56,16 +43,6 @@ public class HelloWorldService extends Service implements Runnable {
} }
public void run() { public void run() {
File dir = getApplicationContext().getDir("db", MODE_PRIVATE);
Injector i = Guice.createInjector(new HelloWorldModule(dir),
new AndroidModule(), new ClockModule(), new CryptoModule(),
new DatabaseModule(), new LifecycleModule(),
new PluginsModule(), new ProtocolModule(),
new DuplexProtocolModule(), new SimplexProtocolModule(),
new SerialModule(), new TransportModule());
db = i.getInstance(DatabaseComponent.class);
keyManager = i.getInstance(KeyManager.class);
pluginManager = i.getInstance(PluginManager.class);
try { try {
// Start... // Start...
if(LOG.isLoggable(INFO)) LOG.info("Starting"); if(LOG.isLoggable(INFO)) LOG.info("Starting");

View File

@@ -0,0 +1,14 @@
package net.sf.briar.android.invitation;
import javax.inject.Singleton;
import com.google.inject.AbstractModule;
public class AndroidInvitationModule extends AbstractModule {
@Override
protected void configure() {
bind(InvitationManager.class).to(InvitationManagerImpl.class).in(
Singleton.class);
}
}

View File

@@ -6,7 +6,7 @@ import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
import static android.widget.LinearLayout.HORIZONTAL; import static android.widget.LinearLayout.HORIZONTAL;
import static android.widget.LinearLayout.VERTICAL; import static android.widget.LinearLayout.VERTICAL;
import net.sf.briar.R; import net.sf.briar.R;
import android.app.Activity; import roboguice.activity.RoboActivity;
import android.content.Intent; import android.content.Intent;
import android.content.res.Resources; import android.content.res.Resources;
import android.os.Bundle; import android.os.Bundle;
@@ -15,9 +15,13 @@ import android.widget.ImageView;
import android.widget.LinearLayout; import android.widget.LinearLayout;
import android.widget.TextView; import android.widget.TextView;
public class ConfirmationCodeActivity extends Activity import com.google.inject.Inject;
public class ConfirmationCodeActivity extends RoboActivity
implements CodeEntryListener { implements CodeEntryListener {
@Inject private InvitationManager manager;
@Override @Override
public void onCreate(Bundle savedInstanceState) { public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
@@ -49,8 +53,7 @@ implements CodeEntryListener {
TextView code = new TextView(this); TextView code = new TextView(this);
code.setGravity(CENTER_HORIZONTAL); code.setGravity(CENTER_HORIZONTAL);
code.setTextSize(50); code.setTextSize(50);
InvitationManager im = InvitationManagerFactory.getInvitationManager(); code.setText(manager.getLocalConfirmationCode());
code.setText(im.getLocalConfirmationCode());
layout.addView(code); layout.addView(code);
CodeEntryWidget codeEntry = new CodeEntryWidget(this); CodeEntryWidget codeEntry = new CodeEntryWidget(this);
@@ -62,9 +65,7 @@ implements CodeEntryListener {
} }
public void codeEntered(String code) { public void codeEntered(String code) {
InvitationManager im = InvitationManagerFactory.getInvitationManager(); if(code.equals(manager.getRemoteConfirmationCode())) {
String remoteConfirmationCode = im.getRemoteConfirmationCode();
if(code.equals(String.valueOf(remoteConfirmationCode))) {
Intent intent = new Intent(this, WaitForContactActivity.class); Intent intent = new Intent(this, WaitForContactActivity.class);
intent.putExtras(getIntent().getExtras()); intent.putExtras(getIntent().getExtras());
startActivity(intent); startActivity(intent);

View File

@@ -6,7 +6,7 @@ import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
import static android.widget.LinearLayout.HORIZONTAL; import static android.widget.LinearLayout.HORIZONTAL;
import static android.widget.LinearLayout.VERTICAL; import static android.widget.LinearLayout.VERTICAL;
import net.sf.briar.R; import net.sf.briar.R;
import android.app.Activity; import roboguice.activity.RoboActivity;
import android.content.Intent; import android.content.Intent;
import android.content.res.Resources; import android.content.res.Resources;
import android.os.Bundle; import android.os.Bundle;
@@ -15,10 +15,12 @@ import android.widget.LinearLayout;
import android.widget.ProgressBar; import android.widget.ProgressBar;
import android.widget.TextView; import android.widget.TextView;
public class ConnectionActivity extends Activity implements ConnectionListener { import com.google.inject.Inject;
private final InvitationManager manager = public class ConnectionActivity extends RoboActivity
InvitationManagerFactory.getInvitationManager(); implements ConnectionListener {
@Inject private InvitationManager manager;
@Override @Override
public void onCreate(Bundle savedInstanceState) { public void onCreate(Bundle savedInstanceState) {

View File

@@ -4,7 +4,7 @@ import static android.view.Gravity.CENTER_HORIZONTAL;
import static android.view.ViewGroup.LayoutParams.MATCH_PARENT; import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
import static android.widget.LinearLayout.VERTICAL; import static android.widget.LinearLayout.VERTICAL;
import net.sf.briar.R; import net.sf.briar.R;
import android.app.Activity; import roboguice.activity.RoboActivity;
import android.content.Intent; import android.content.Intent;
import android.content.res.Resources; import android.content.res.Resources;
import android.os.Bundle; import android.os.Bundle;
@@ -12,11 +12,12 @@ import android.view.ViewGroup.LayoutParams;
import android.widget.LinearLayout; import android.widget.LinearLayout;
import android.widget.TextView; import android.widget.TextView;
public class InvitationCodeActivity extends Activity import com.google.inject.Inject;
public class InvitationCodeActivity extends RoboActivity
implements CodeEntryListener { implements CodeEntryListener {
private final InvitationManager manager = @Inject private InvitationManager manager;
InvitationManagerFactory.getInvitationManager();
@Override @Override
public void onCreate(Bundle savedInstanceState) { public void onCreate(Bundle savedInstanceState) {

View File

@@ -1,14 +0,0 @@
package net.sf.briar.android.invitation;
class InvitationManagerFactory {
private static final Object LOCK = new Object();
private static InvitationManager instance = null; // Locking: lock
static InvitationManager getInvitationManager() {
synchronized(LOCK) {
if(instance == null) instance = new InvitationManagerImpl();
return instance;
}
}
}

View File

@@ -6,7 +6,7 @@ import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
import static android.widget.LinearLayout.HORIZONTAL; import static android.widget.LinearLayout.HORIZONTAL;
import static android.widget.LinearLayout.VERTICAL; import static android.widget.LinearLayout.VERTICAL;
import net.sf.briar.R; import net.sf.briar.R;
import android.app.Activity; import roboguice.activity.RoboActivity;
import android.content.Intent; import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import android.view.ViewGroup.LayoutParams; import android.view.ViewGroup.LayoutParams;
@@ -15,9 +15,13 @@ import android.widget.LinearLayout;
import android.widget.ProgressBar; import android.widget.ProgressBar;
import android.widget.TextView; import android.widget.TextView;
public class WaitForContactActivity extends Activity import com.google.inject.Inject;
public class WaitForContactActivity extends RoboActivity
implements ConfirmationListener { implements ConfirmationListener {
@Inject private InvitationManager manager;
@Override @Override
public void onCreate(Bundle savedInstanceState) { public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
@@ -49,8 +53,7 @@ implements ConfirmationListener {
TextView code = new TextView(this); TextView code = new TextView(this);
code.setGravity(CENTER_HORIZONTAL); code.setGravity(CENTER_HORIZONTAL);
code.setTextSize(50); code.setTextSize(50);
InvitationManager im = InvitationManagerFactory.getInvitationManager(); code.setText(manager.getLocalConfirmationCode());
code.setText(im.getLocalConfirmationCode());
layout.addView(code); layout.addView(code);
innerLayout = new LinearLayout(this); innerLayout = new LinearLayout(this);
@@ -69,7 +72,7 @@ implements ConfirmationListener {
setContentView(layout); setContentView(layout);
im.startConfirmationWorker(this); manager.startConfirmationWorker(this);
} }
public void confirmationReceived() { public void confirmationReceived() {