diff --git a/libs/javax.inject-1.jar b/libs/javax.inject.jar similarity index 62% rename from libs/javax.inject-1.jar rename to libs/javax.inject.jar index b2a9d0bf7bd463a6361898b36f010edd05c0cf6e..a9dfb86d27a3b18b646dad07f15b0d28d729cef7 100644 Binary files a/libs/javax.inject-1.jar and b/libs/javax.inject.jar differ diff --git a/libs/roboguice-2.0.jar b/libs/roboguice-2.0.jar new file mode 100644 index 0000000000000000000000000000000000000000..bdb7d08b8d7db70b7a1cea4327ff9abe1902741d Binary files /dev/null and b/libs/roboguice-2.0.jar differ diff --git a/res/values/roboguice.xml b/res/values/roboguice.xml new file mode 100644 index 0000000000000000000000000000000000000000..c7d58a7a3ddf0e68b2e921fd4fa59790a83c9254 --- /dev/null +++ b/res/values/roboguice.xml @@ -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> \ No newline at end of file diff --git a/src/net/sf/briar/HelloWorldModule.java b/src/net/sf/briar/HelloWorldModule.java index a0fa22c7f89a6b65cc1874c32ff2d50b61de3f39..5fe4fad758d86eaab80c6500223b50a2e1cdbdf7 100644 --- a/src/net/sf/briar/HelloWorldModule.java +++ b/src/net/sf/briar/HelloWorldModule.java @@ -1,56 +1,56 @@ package net.sf.briar; +import static android.content.Context.MODE_PRIVATE; + import java.io.File; import net.sf.briar.api.crypto.Password; import net.sf.briar.api.db.DatabaseConfig; import net.sf.briar.api.ui.UiCallback; +import android.app.Application; import com.google.inject.AbstractModule; +import com.google.inject.Provides; +import com.google.inject.Singleton; public class HelloWorldModule extends AbstractModule { - private final DatabaseConfig config; - private final UiCallback callback; + @Override + protected void configure() { + bind(UiCallback.class).toInstance(new UiCallback() { - public HelloWorldModule(final File dir) { - final Password password = new Password() { + public int showChoice(String[] options, String... message) { + return -1; + } - public char[] getPassword() { - return "foo bar".toCharArray(); + public boolean showConfirmationMessage(String... message) { + return false; } - }; - config = new DatabaseConfig() { + + public void showMessage(String... message) {} + }); + } + + @Provides @Singleton + DatabaseConfig getDatabaseConfig(final Application app) { + return new DatabaseConfig() { public File getDataDirectory() { - return dir; + return app.getApplicationContext().getDir("db", MODE_PRIVATE); } public Password getPassword() { - return password; + return new Password() { + + public char[] getPassword() { + return "foo bar".toCharArray(); + } + }; } public long getMaxSize() { return Long.MAX_VALUE; } }; - callback = new UiCallback() { - - public int showChoice(String[] options, String... message) { - return -1; - } - - public boolean showConfirmationMessage(String... message) { - return false; - } - - public void showMessage(String... message) {} - }; - } - - @Override - protected void configure() { - bind(DatabaseConfig.class).toInstance(config); - bind(UiCallback.class).toInstance(callback); } } diff --git a/src/net/sf/briar/HelloWorldService.java b/src/net/sf/briar/HelloWorldService.java index 6dbbb30790aa9c003cd122fe9d814384ca4344b9..ef2dec27c8e8fb2391ea8cbba6698aa860cd0fad 100644 --- a/src/net/sf/briar/HelloWorldService.java +++ b/src/net/sf/briar/HelloWorldService.java @@ -3,40 +3,27 @@ package net.sf.briar; import static java.util.logging.Level.INFO; import static java.util.logging.Level.WARNING; -import java.io.File; import java.io.IOException; import java.util.logging.Logger; -import net.sf.briar.android.AndroidModule; import net.sf.briar.api.crypto.KeyManager; import net.sf.briar.api.db.DatabaseComponent; import net.sf.briar.api.db.DbException; 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.content.Intent; import android.os.IBinder; -import com.google.inject.Guice; -import com.google.inject.Injector; +import com.google.inject.Inject; public class HelloWorldService extends Service implements Runnable { private static final Logger LOG = Logger.getLogger(HelloWorldService.class.getName()); - private DatabaseComponent db = null; - private KeyManager keyManager = null; - private PluginManager pluginManager = null; + @Inject private DatabaseComponent db; + @Inject private KeyManager keyManager; + @Inject private PluginManager pluginManager; @Override public void onCreate() { @@ -56,16 +43,6 @@ public class HelloWorldService extends Service implements Runnable { } 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 { // Start... if(LOG.isLoggable(INFO)) LOG.info("Starting"); diff --git a/src/net/sf/briar/android/invitation/AndroidInvitationModule.java b/src/net/sf/briar/android/invitation/AndroidInvitationModule.java new file mode 100644 index 0000000000000000000000000000000000000000..c917e2256b53be9418b3a600dd3d5ffc63e835b0 --- /dev/null +++ b/src/net/sf/briar/android/invitation/AndroidInvitationModule.java @@ -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); + } +} diff --git a/src/net/sf/briar/android/invitation/ConfirmationCodeActivity.java b/src/net/sf/briar/android/invitation/ConfirmationCodeActivity.java index 9b696762ab07089abb01f28594dc6a0881e385d8..220548b58019b071d9b503b7cd39ccad58c05603 100644 --- a/src/net/sf/briar/android/invitation/ConfirmationCodeActivity.java +++ b/src/net/sf/briar/android/invitation/ConfirmationCodeActivity.java @@ -6,7 +6,7 @@ import static android.view.ViewGroup.LayoutParams.MATCH_PARENT; import static android.widget.LinearLayout.HORIZONTAL; import static android.widget.LinearLayout.VERTICAL; import net.sf.briar.R; -import android.app.Activity; +import roboguice.activity.RoboActivity; import android.content.Intent; import android.content.res.Resources; import android.os.Bundle; @@ -15,9 +15,13 @@ import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; -public class ConfirmationCodeActivity extends Activity +import com.google.inject.Inject; + +public class ConfirmationCodeActivity extends RoboActivity implements CodeEntryListener { + @Inject private InvitationManager manager; + @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -49,8 +53,7 @@ implements CodeEntryListener { TextView code = new TextView(this); code.setGravity(CENTER_HORIZONTAL); code.setTextSize(50); - InvitationManager im = InvitationManagerFactory.getInvitationManager(); - code.setText(im.getLocalConfirmationCode()); + code.setText(manager.getLocalConfirmationCode()); layout.addView(code); CodeEntryWidget codeEntry = new CodeEntryWidget(this); @@ -62,9 +65,7 @@ implements CodeEntryListener { } public void codeEntered(String code) { - InvitationManager im = InvitationManagerFactory.getInvitationManager(); - String remoteConfirmationCode = im.getRemoteConfirmationCode(); - if(code.equals(String.valueOf(remoteConfirmationCode))) { + if(code.equals(manager.getRemoteConfirmationCode())) { Intent intent = new Intent(this, WaitForContactActivity.class); intent.putExtras(getIntent().getExtras()); startActivity(intent); diff --git a/src/net/sf/briar/android/invitation/ConnectionActivity.java b/src/net/sf/briar/android/invitation/ConnectionActivity.java index 7049f856cbd6453976893ab454d9749e478a9802..5ed8b80d38141492394d2d0d1bb63ab60c205f87 100644 --- a/src/net/sf/briar/android/invitation/ConnectionActivity.java +++ b/src/net/sf/briar/android/invitation/ConnectionActivity.java @@ -6,7 +6,7 @@ import static android.view.ViewGroup.LayoutParams.MATCH_PARENT; import static android.widget.LinearLayout.HORIZONTAL; import static android.widget.LinearLayout.VERTICAL; import net.sf.briar.R; -import android.app.Activity; +import roboguice.activity.RoboActivity; import android.content.Intent; import android.content.res.Resources; import android.os.Bundle; @@ -15,10 +15,12 @@ import android.widget.LinearLayout; import android.widget.ProgressBar; import android.widget.TextView; -public class ConnectionActivity extends Activity implements ConnectionListener { +import com.google.inject.Inject; - private final InvitationManager manager = - InvitationManagerFactory.getInvitationManager(); +public class ConnectionActivity extends RoboActivity +implements ConnectionListener { + + @Inject private InvitationManager manager; @Override public void onCreate(Bundle savedInstanceState) { diff --git a/src/net/sf/briar/android/invitation/InvitationCodeActivity.java b/src/net/sf/briar/android/invitation/InvitationCodeActivity.java index 230771a163f55f60fa5c5d847b933b87c4c1a3fe..8f3bb1b41b5df7df5a286ade4970c13a86803db1 100644 --- a/src/net/sf/briar/android/invitation/InvitationCodeActivity.java +++ b/src/net/sf/briar/android/invitation/InvitationCodeActivity.java @@ -4,7 +4,7 @@ import static android.view.Gravity.CENTER_HORIZONTAL; import static android.view.ViewGroup.LayoutParams.MATCH_PARENT; import static android.widget.LinearLayout.VERTICAL; import net.sf.briar.R; -import android.app.Activity; +import roboguice.activity.RoboActivity; import android.content.Intent; import android.content.res.Resources; import android.os.Bundle; @@ -12,11 +12,12 @@ import android.view.ViewGroup.LayoutParams; import android.widget.LinearLayout; import android.widget.TextView; -public class InvitationCodeActivity extends Activity +import com.google.inject.Inject; + +public class InvitationCodeActivity extends RoboActivity implements CodeEntryListener { - private final InvitationManager manager = - InvitationManagerFactory.getInvitationManager(); + @Inject private InvitationManager manager; @Override public void onCreate(Bundle savedInstanceState) { diff --git a/src/net/sf/briar/android/invitation/InvitationManagerFactory.java b/src/net/sf/briar/android/invitation/InvitationManagerFactory.java deleted file mode 100644 index a38ac435ade195507a70316a2890c7da29afe586..0000000000000000000000000000000000000000 --- a/src/net/sf/briar/android/invitation/InvitationManagerFactory.java +++ /dev/null @@ -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; - } - } -} diff --git a/src/net/sf/briar/android/invitation/WaitForContactActivity.java b/src/net/sf/briar/android/invitation/WaitForContactActivity.java index e6884c67ad452c8b05739c37e79968be49867636..7d93aea62d9bf78387d3e001c4294487ac42e821 100644 --- a/src/net/sf/briar/android/invitation/WaitForContactActivity.java +++ b/src/net/sf/briar/android/invitation/WaitForContactActivity.java @@ -6,7 +6,7 @@ import static android.view.ViewGroup.LayoutParams.MATCH_PARENT; import static android.widget.LinearLayout.HORIZONTAL; import static android.widget.LinearLayout.VERTICAL; import net.sf.briar.R; -import android.app.Activity; +import roboguice.activity.RoboActivity; import android.content.Intent; import android.os.Bundle; import android.view.ViewGroup.LayoutParams; @@ -15,9 +15,13 @@ import android.widget.LinearLayout; import android.widget.ProgressBar; import android.widget.TextView; -public class WaitForContactActivity extends Activity +import com.google.inject.Inject; + +public class WaitForContactActivity extends RoboActivity implements ConfirmationListener { + @Inject private InvitationManager manager; + @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -49,8 +53,7 @@ implements ConfirmationListener { TextView code = new TextView(this); code.setGravity(CENTER_HORIZONTAL); code.setTextSize(50); - InvitationManager im = InvitationManagerFactory.getInvitationManager(); - code.setText(im.getLocalConfirmationCode()); + code.setText(manager.getLocalConfirmationCode()); layout.addView(code); innerLayout = new LinearLayout(this); @@ -69,7 +72,7 @@ implements ConfirmationListener { setContentView(layout); - im.startConfirmationWorker(this); + manager.startConfirmationWorker(this); } public void confirmationReceived() {