Ensure that I2P system vars are set in any Activity that uses I2PBote

Sometimes the Android runtime kills off the Bote process to save memory, and
recreates it when the user next opens it. If the user was on an Activity that
was not EmailListActivity, then when recreated the I2P system vars would not be
set, and the first call to I2PBote.getInstance() would create an instance with
invalid paths. This was non-fatal - killing Bote and restarting it would fix
the problem - but was bad UX, because from the user's PoV all their emails and
data had disappeared.
This commit is contained in:
str4d
2014-07-02 03:01:28 +00:00
parent 8ed6bbd0fe
commit 085778c98f
10 changed files with 47 additions and 3 deletions

View File

@@ -2,7 +2,7 @@ package i2p.bote.android;
import android.content.Context;
class InitActivities {
public class InitActivities {
private final Context ctx;
private final String myDir;
@@ -12,7 +12,7 @@ class InitActivities {
myDir = c.getFilesDir().getAbsolutePath();
}
void initialize() {
public void initialize() {
// Don't initialize twice
if (System.getProperty("i2pbote.initialized", "false").equals("true"))
return;

View File

@@ -7,7 +7,11 @@ public class NetworkInfoActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setTitle(R.string.compose);
setTitle(R.string.network_status);
// Initialize I2P settings
InitActivities init = new InitActivities(this);
init.initialize();
// Enable ActionBar app icon to behave as action to go back
getSupportActionBar().setDisplayHomeAsUpEnabled(true);

View File

@@ -11,6 +11,10 @@ public class NewEmailActivity extends ActionBarActivity implements
super.onCreate(savedInstanceState);
setTitle(R.string.compose);
// Initialize I2P settings
InitActivities init = new InitActivities(this);
init.initialize();
// Enable ActionBar app icon to behave as action to go back
getSupportActionBar().setDisplayHomeAsUpEnabled(true);

View File

@@ -39,6 +39,10 @@ public class ViewEmailActivity extends ActionBarActivity implements
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_view_email);
// Initialize I2P settings
InitActivities init = new InitActivities(this);
init.initialize();
// Enable ActionBar app icon to behave as action to go back
getSupportActionBar().setDisplayHomeAsUpEnabled(true);

View File

@@ -1,5 +1,6 @@
package i2p.bote.android.addressbook;
import i2p.bote.android.InitActivities;
import i2p.bote.android.R;
import i2p.bote.packet.dht.Contact;
import android.app.Activity;
@@ -16,6 +17,10 @@ public class AddressBookActivity extends ActionBarActivity implements
super.onCreate(savedInstanceState);
setTitle(R.string.address_book);
// Initialize I2P settings
InitActivities init = new InitActivities(this);
init.initialize();
// Enable ActionBar app icon to behave as action to go back
getSupportActionBar().setDisplayHomeAsUpEnabled(true);

View File

@@ -3,11 +3,17 @@ package i2p.bote.android.addressbook;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import i2p.bote.android.InitActivities;
public class EditContactActivity extends ActionBarActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Initialize I2P settings
InitActivities init = new InitActivities(this);
init.initialize();
// Enable ActionBar app icon to behave as action to go back
getSupportActionBar().setDisplayHomeAsUpEnabled(true);

View File

@@ -1,5 +1,6 @@
package i2p.bote.android.config;
import i2p.bote.android.InitActivities;
import i2p.bote.android.R;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
@@ -12,6 +13,10 @@ public class EditIdentityActivity extends ActionBarActivity implements
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_edit_identity);
// Initialize I2P settings
InitActivities init = new InitActivities(this);
init.initialize();
// Enable ActionBar app icon to behave as action to go back
getSupportActionBar().setDisplayHomeAsUpEnabled(true);

View File

@@ -1,5 +1,6 @@
package i2p.bote.android.config;
import i2p.bote.android.InitActivities;
import i2p.bote.android.R;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
@@ -13,6 +14,10 @@ public class SetPasswordActivity extends ActionBarActivity implements
setTitle(R.string.pref_title_change_password);
setContentView(R.layout.activity_set_password);
// Initialize I2P settings
InitActivities init = new InitActivities(this);
init.initialize();
// Enable ActionBar app icon to behave as action to go back
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}

View File

@@ -2,6 +2,7 @@ package i2p.bote.android.config;
import i2p.bote.Configuration;
import i2p.bote.I2PBote;
import i2p.bote.android.InitActivities;
import i2p.bote.android.R;
import i2p.bote.android.util.SummaryEditTextPreference;
import i2p.bote.email.EmailIdentity;
@@ -60,6 +61,10 @@ public class SettingsActivity extends PreferenceActivity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Initialize I2P settings
InitActivities init = new InitActivities(this);
init.initialize();
String action = getIntent().getAction();
if (action != null) {
loadLegacySettings(action);

View File

@@ -3,11 +3,17 @@ package i2p.bote.android.config;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import i2p.bote.android.InitActivities;
public class ViewIdentityActivity extends ActionBarActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Initialize I2P settings
InitActivities init = new InitActivities(this);
init.initialize();
// Enable ActionBar app icon to behave as action to go back
getSupportActionBar().setDisplayHomeAsUpEnabled(true);