Removed static injection hack, moved boilerplate into a superclass.

This commit is contained in:
akwizgran
2013-02-19 17:36:51 +00:00
parent 020e4df8d9
commit 0d2bc9ed7b
4 changed files with 39 additions and 44 deletions

View File

@@ -1,6 +1,5 @@
package net.sf.briar.android; package net.sf.briar.android;
import net.sf.briar.android.invitation.AddContactActivity;
import net.sf.briar.api.android.AndroidExecutor; import net.sf.briar.api.android.AndroidExecutor;
import net.sf.briar.api.android.BundleEncrypter; import net.sf.briar.api.android.BundleEncrypter;
import net.sf.briar.api.android.ReferenceManager; import net.sf.briar.api.android.ReferenceManager;
@@ -17,6 +16,5 @@ public class AndroidModule extends AbstractModule {
Singleton.class); Singleton.class);
bind(ReferenceManager.class).to(ReferenceManagerImpl.class).in( bind(ReferenceManager.class).to(ReferenceManagerImpl.class).in(
Singleton.class); Singleton.class);
requestStaticInjection(AddContactActivity.class);
} }
} }

View File

@@ -0,0 +1,28 @@
package net.sf.briar.android;
import roboguice.activity.RoboActivity;
import android.os.Bundle;
/**
* An abstract superclass for activities that overrides the default behaviour
* to prevent sensitive state from being saved unless the subclass explicitly
* saves it.
*/
public abstract class BriarActivity extends RoboActivity {
@Override
public void onCreate(Bundle state) {
// Don't pass state through to the superclass
super.onCreate(null);
}
@Override
public void onRestoreInstanceState(Bundle state) {
// Don't pass state through to the superclass
}
@Override
public void onSaveInstanceState(Bundle state) {
// Don't allow the superclass to save state
}
}

View File

@@ -8,14 +8,11 @@ import static java.util.logging.Level.INFO;
import java.util.logging.Logger; import java.util.logging.Logger;
import com.google.inject.Inject;
import com.google.inject.Provider;
import net.sf.briar.R; import net.sf.briar.R;
import net.sf.briar.android.BriarActivity;
import net.sf.briar.android.BriarService; import net.sf.briar.android.BriarService;
import net.sf.briar.android.invitation.AddContactActivity; import net.sf.briar.android.invitation.AddContactActivity;
import net.sf.briar.api.android.BundleEncrypter; import net.sf.briar.api.android.BundleEncrypter;
import roboguice.activity.RoboActivity;
import android.content.Intent; import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import android.view.View; import android.view.View;
@@ -25,21 +22,19 @@ import android.widget.LinearLayout;
import android.widget.RelativeLayout.LayoutParams; import android.widget.RelativeLayout.LayoutParams;
import android.widget.TextView; import android.widget.TextView;
public class HelloWorldActivity extends RoboActivity import com.google.inject.Inject;
public class HelloWorldActivity extends BriarActivity
implements OnClickListener { implements OnClickListener {
private static final Logger LOG = private static final Logger LOG =
Logger.getLogger(HelloWorldActivity.class.getName()); Logger.getLogger(HelloWorldActivity.class.getName());
@Inject private static Provider<BundleEncrypter> bundleEncrypterProvider; @Inject private BundleEncrypter bundleEncrypter;
private final BundleEncrypter bundleEncrypter =
bundleEncrypterProvider.get();
@Override @Override
public void onCreate(Bundle state) { public void onCreate(Bundle state) {
if(state != null && !bundleEncrypter.decrypt(state)) state = null; super.onCreate(null);
super.onCreate(state);
if(LOG.isLoggable(INFO)) LOG.info("Created"); if(LOG.isLoggable(INFO)) LOG.info("Created");
LinearLayout layout = new LinearLayout(this); LinearLayout layout = new LinearLayout(this);
layout.setLayoutParams(new LayoutParams(MATCH_PARENT, MATCH_PARENT)); layout.setLayoutParams(new LayoutParams(MATCH_PARENT, MATCH_PARENT));
@@ -70,18 +65,6 @@ implements OnClickListener {
startService(new Intent(BriarService.class.getName())); startService(new Intent(BriarService.class.getName()));
} }
@Override
public void onRestoreInstanceState(Bundle state) {
if(bundleEncrypter.decrypt(state))
super.onRestoreInstanceState(state);
}
@Override
public void onSaveInstanceState(Bundle state) {
super.onSaveInstanceState(state);
bundleEncrypter.encrypt(state);
}
@Override @Override
public void onDestroy() { public void onDestroy() {
super.onDestroy(); super.onDestroy();

View File

@@ -5,6 +5,7 @@ import static java.util.logging.Level.WARNING;
import java.util.concurrent.Executor; import java.util.concurrent.Executor;
import java.util.logging.Logger; import java.util.logging.Logger;
import net.sf.briar.android.BriarActivity;
import net.sf.briar.api.android.BundleEncrypter; import net.sf.briar.api.android.BundleEncrypter;
import net.sf.briar.api.android.ReferenceManager; import net.sf.briar.api.android.ReferenceManager;
import net.sf.briar.api.crypto.CryptoComponent; import net.sf.briar.api.crypto.CryptoComponent;
@@ -15,24 +16,17 @@ import net.sf.briar.api.invitation.InvitationListener;
import net.sf.briar.api.invitation.InvitationState; import net.sf.briar.api.invitation.InvitationState;
import net.sf.briar.api.invitation.InvitationTask; import net.sf.briar.api.invitation.InvitationTask;
import net.sf.briar.api.invitation.InvitationTaskFactory; import net.sf.briar.api.invitation.InvitationTaskFactory;
import roboguice.activity.RoboActivity;
import android.os.Bundle; import android.os.Bundle;
import com.google.inject.Inject; import com.google.inject.Inject;
import com.google.inject.Provider;
public class AddContactActivity extends RoboActivity public class AddContactActivity extends BriarActivity
implements InvitationListener { implements InvitationListener {
private static final Logger LOG = private static final Logger LOG =
Logger.getLogger(AddContactActivity.class.getName()); Logger.getLogger(AddContactActivity.class.getName());
// This allows us to access bundleEncrypter before calling super.onCreate() @Inject private BundleEncrypter bundleEncrypter;
@Inject private static Provider<BundleEncrypter> bundleEncrypterProvider;
private final BundleEncrypter bundleEncrypter =
bundleEncrypterProvider.get();
@Inject private CryptoComponent crypto; @Inject private CryptoComponent crypto;
@Inject private DatabaseComponent db; @Inject private DatabaseComponent db;
@Inject @DatabaseExecutor private Executor dbExecutor; @Inject @DatabaseExecutor private Executor dbExecutor;
@@ -53,9 +47,8 @@ implements InvitationListener {
@Override @Override
public void onCreate(Bundle state) { public void onCreate(Bundle state) {
if(state != null && !bundleEncrypter.decrypt(state)) state = null; super.onCreate(null);
super.onCreate(state); if(state == null || !bundleEncrypter.decrypt(state)) {
if(state == null) {
// This is a new activity or the app has restarted // This is a new activity or the app has restarted
setView(new NetworkSetupView(this)); setView(new NetworkSetupView(this));
} else { } else {
@@ -120,12 +113,6 @@ implements InvitationListener {
} }
} }
@Override
public void onRestoreInstanceState(Bundle state) {
if(bundleEncrypter.decrypt(state))
super.onRestoreInstanceState(state);
}
@Override @Override
public void onResume() { public void onResume() {
super.onResume(); super.onResume();
@@ -134,7 +121,6 @@ implements InvitationListener {
@Override @Override
public void onSaveInstanceState(Bundle state) { public void onSaveInstanceState(Bundle state) {
super.onSaveInstanceState(state);
state.putString("net.sf.briar.NETWORK_NAME", networkName); state.putString("net.sf.briar.NETWORK_NAME", networkName);
state.putBoolean("net.sf.briar.USE_BLUETOOTH", useBluetooth); state.putBoolean("net.sf.briar.USE_BLUETOOTH", useBluetooth);
state.putInt("net.sf.briar.LOCAL_CODE", localInvitationCode); state.putInt("net.sf.briar.LOCAL_CODE", localInvitationCode);