From 085778c98f2f8bcf73dce7ba622348a8d4f8f886 Mon Sep 17 00:00:00 2001 From: str4d Date: Wed, 2 Jul 2014 03:01:28 +0000 Subject: [PATCH] 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. --- app/src/main/java/i2p/bote/android/InitActivities.java | 4 ++-- app/src/main/java/i2p/bote/android/NetworkInfoActivity.java | 6 +++++- app/src/main/java/i2p/bote/android/NewEmailActivity.java | 4 ++++ app/src/main/java/i2p/bote/android/ViewEmailActivity.java | 4 ++++ .../i2p/bote/android/addressbook/AddressBookActivity.java | 5 +++++ .../i2p/bote/android/addressbook/EditContactActivity.java | 6 ++++++ .../java/i2p/bote/android/config/EditIdentityActivity.java | 5 +++++ .../java/i2p/bote/android/config/SetPasswordActivity.java | 5 +++++ .../main/java/i2p/bote/android/config/SettingsActivity.java | 5 +++++ .../java/i2p/bote/android/config/ViewIdentityActivity.java | 6 ++++++ 10 files changed, 47 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/i2p/bote/android/InitActivities.java b/app/src/main/java/i2p/bote/android/InitActivities.java index b61e438..4f24f31 100644 --- a/app/src/main/java/i2p/bote/android/InitActivities.java +++ b/app/src/main/java/i2p/bote/android/InitActivities.java @@ -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; diff --git a/app/src/main/java/i2p/bote/android/NetworkInfoActivity.java b/app/src/main/java/i2p/bote/android/NetworkInfoActivity.java index 1e8ae58..c0cee07 100644 --- a/app/src/main/java/i2p/bote/android/NetworkInfoActivity.java +++ b/app/src/main/java/i2p/bote/android/NetworkInfoActivity.java @@ -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); diff --git a/app/src/main/java/i2p/bote/android/NewEmailActivity.java b/app/src/main/java/i2p/bote/android/NewEmailActivity.java index e62996e..a3d4d8c 100644 --- a/app/src/main/java/i2p/bote/android/NewEmailActivity.java +++ b/app/src/main/java/i2p/bote/android/NewEmailActivity.java @@ -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); diff --git a/app/src/main/java/i2p/bote/android/ViewEmailActivity.java b/app/src/main/java/i2p/bote/android/ViewEmailActivity.java index db7e0e3..5bcaffb 100644 --- a/app/src/main/java/i2p/bote/android/ViewEmailActivity.java +++ b/app/src/main/java/i2p/bote/android/ViewEmailActivity.java @@ -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); diff --git a/app/src/main/java/i2p/bote/android/addressbook/AddressBookActivity.java b/app/src/main/java/i2p/bote/android/addressbook/AddressBookActivity.java index 52ac928..b8d5a8d 100644 --- a/app/src/main/java/i2p/bote/android/addressbook/AddressBookActivity.java +++ b/app/src/main/java/i2p/bote/android/addressbook/AddressBookActivity.java @@ -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); diff --git a/app/src/main/java/i2p/bote/android/addressbook/EditContactActivity.java b/app/src/main/java/i2p/bote/android/addressbook/EditContactActivity.java index fba3f0d..5264d58 100644 --- a/app/src/main/java/i2p/bote/android/addressbook/EditContactActivity.java +++ b/app/src/main/java/i2p/bote/android/addressbook/EditContactActivity.java @@ -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); diff --git a/app/src/main/java/i2p/bote/android/config/EditIdentityActivity.java b/app/src/main/java/i2p/bote/android/config/EditIdentityActivity.java index 14f696e..a28910a 100644 --- a/app/src/main/java/i2p/bote/android/config/EditIdentityActivity.java +++ b/app/src/main/java/i2p/bote/android/config/EditIdentityActivity.java @@ -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); diff --git a/app/src/main/java/i2p/bote/android/config/SetPasswordActivity.java b/app/src/main/java/i2p/bote/android/config/SetPasswordActivity.java index 1405a79..5379a16 100644 --- a/app/src/main/java/i2p/bote/android/config/SetPasswordActivity.java +++ b/app/src/main/java/i2p/bote/android/config/SetPasswordActivity.java @@ -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); } diff --git a/app/src/main/java/i2p/bote/android/config/SettingsActivity.java b/app/src/main/java/i2p/bote/android/config/SettingsActivity.java index 5f99270..6137480 100644 --- a/app/src/main/java/i2p/bote/android/config/SettingsActivity.java +++ b/app/src/main/java/i2p/bote/android/config/SettingsActivity.java @@ -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); diff --git a/app/src/main/java/i2p/bote/android/config/ViewIdentityActivity.java b/app/src/main/java/i2p/bote/android/config/ViewIdentityActivity.java index 1aae2c3..2bf0df5 100644 --- a/app/src/main/java/i2p/bote/android/config/ViewIdentityActivity.java +++ b/app/src/main/java/i2p/bote/android/config/ViewIdentityActivity.java @@ -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);