diff --git a/briar-android/src/org/briarproject/android/ActivityModule.java b/briar-android/src/org/briarproject/android/ActivityModule.java index b42007acb1746727e7bed6b2e8249f7e2ea33047..0e13fbd0d7aa59311bf86b0b664a8afd6bfc5f46 100644 --- a/briar-android/src/org/briarproject/android/ActivityModule.java +++ b/briar-android/src/org/briarproject/android/ActivityModule.java @@ -10,6 +10,8 @@ import org.briarproject.android.controller.BriarController; import org.briarproject.android.controller.BriarControllerImpl; import org.briarproject.android.controller.ConfigController; import org.briarproject.android.controller.ConfigControllerImpl; +import org.briarproject.android.controller.DbController; +import org.briarproject.android.controller.DbControllerImpl; import org.briarproject.android.controller.NavDrawerController; import org.briarproject.android.controller.NavDrawerControllerImpl; import org.briarproject.android.controller.PasswordController; @@ -89,6 +91,13 @@ public class ActivityModule { return briarControllerImpl; } + @ActivityScope + @Provides + protected DbController provideDBController( + DbControllerImpl dbController) { + return dbController; + } + @ActivityScope @Provides protected NavDrawerController provideNavDrawerController( diff --git a/briar-android/src/org/briarproject/android/BriarActivity.java b/briar-android/src/org/briarproject/android/BriarActivity.java index ed9c8dd87e4d32e805a763f4d7840289c82564cb..24cc0dd974c3b9dc03ca8e0ccecf5b76d89b46e8 100644 --- a/briar-android/src/org/briarproject/android/BriarActivity.java +++ b/briar-android/src/org/briarproject/android/BriarActivity.java @@ -5,6 +5,7 @@ import android.content.Intent; import android.os.Build; import org.briarproject.android.controller.BriarController; +import org.briarproject.android.controller.DbController; import org.briarproject.android.controller.handler.UiResultHandler; import org.briarproject.android.panic.ExitActivity; @@ -33,6 +34,9 @@ public abstract class BriarActivity extends BaseActivity { @Inject protected BriarController briarController; + // TODO remove this when the deprecated method runOnDbThread is removed + @Inject + protected DbController dbController; @Override protected void onActivityResult(int request, int result, Intent data) { @@ -87,7 +91,7 @@ public abstract class BriarActivity extends BaseActivity { @Deprecated public void runOnDbThread(Runnable task) { - briarController.runOnDbThread(task); + dbController.runOnDbThread(task); } @Deprecated diff --git a/briar-android/src/org/briarproject/android/NavDrawerActivity.java b/briar-android/src/org/briarproject/android/NavDrawerActivity.java index 56caa5c8fbb48f7a266a4a143c32ddfd44e68fb7..3c61bbf4883ae8fe5754c69c8d6cbb89b6750cb6 100644 --- a/briar-android/src/org/briarproject/android/NavDrawerActivity.java +++ b/briar-android/src/org/briarproject/android/NavDrawerActivity.java @@ -45,6 +45,8 @@ public class NavDrawerActivity extends BriarFragmentActivity implements public static final String INTENT_CONTACTS = "intent_contacts"; public static final String INTENT_FORUMS = "intent_forums"; + private static final String KEY_CURRENT_FRAGMENT_ID = "key_current_id"; + private static final Logger LOG = Logger.getLogger(NavDrawerActivity.class.getName()); @@ -60,18 +62,18 @@ public class NavDrawerActivity extends BriarFragmentActivity implements private List<Transport> transports; private BaseAdapter transportsAdapter; + private int currentFragmentId = R.id.nav_btn_contacts; @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); - if (!isStartupFailed(intent)) { - checkAuthorHandle(intent); - clearBackStack(); - if (intent.getBooleanExtra(INTENT_FORUMS, false)) - startFragment(activityComponent.newForumListFragment()); - else if (intent.getBooleanExtra(INTENT_CONTACTS, false)) - startFragment(activityComponent.newContactListFragment()); - } + exitIfStartupFailed(intent); + checkAuthorHandle(intent); + clearBackStack(); + if (intent.getBooleanExtra(INTENT_FORUMS, false)) + startFragment(activityComponent.newForumListFragment()); + else if (intent.getBooleanExtra(INTENT_CONTACTS, false)) + startFragment(activityComponent.newContactListFragment()); } @Override @@ -83,10 +85,7 @@ public class NavDrawerActivity extends BriarFragmentActivity implements @Override public void onCreate(Bundle state) { super.onCreate(state); - - if (isStartupFailed(getIntent())) - return; - + exitIfStartupFailed(getIntent()); setContentView(R.layout.activity_nav_drawer); toolbar = (Toolbar) findViewById(R.id.toolbar); @@ -103,8 +102,12 @@ public class NavDrawerActivity extends BriarFragmentActivity implements R.string.nav_drawer_open_description, R.string.nav_drawer_close_description); drawerLayout.setDrawerListener(drawerToggle); - if (state == null) + if (state == null) { startFragment(activityComponent.newContactListFragment()); + } else { + currentFragmentId = state.getInt(KEY_CURRENT_FRAGMENT_ID); + loadCurrentFragment(); + } checkAuthorHandle(getIntent()); initializeTransports(getLayoutInflater()); @@ -113,6 +116,12 @@ public class NavDrawerActivity extends BriarFragmentActivity implements welcomeMessageCheck(); } + @Override + public void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + outState.putInt(KEY_CURRENT_FRAGMENT_ID, currentFragmentId); + } + private void welcomeMessageCheck() { SharedPreferences prefs = getPreferences(Context.MODE_PRIVATE); if (!prefs.getBoolean(PREF_SEEN_WELCOME_MESSAGE, false)) { @@ -140,14 +149,12 @@ public class NavDrawerActivity extends BriarFragmentActivity implements } } - private boolean isStartupFailed(Intent intent) { + private void exitIfStartupFailed(Intent intent) { if (intent.getBooleanExtra(KEY_STARTUP_FAILED, false)) { finish(); LOG.info("Exiting"); System.exit(0); - return true; } - return false; } private void storeLocalAuthor(LocalAuthor a) { @@ -159,10 +166,8 @@ public class NavDrawerActivity extends BriarFragmentActivity implements }); } - public void onNavigationClick(View view) { - drawerLayout.closeDrawer(START); - clearBackStack(); - switch (view.getId()) { + private void loadCurrentFragment() { + switch (currentFragmentId) { case R.id.nav_btn_contacts: startFragment(activityComponent.newContactListFragment()); break; @@ -178,6 +183,13 @@ public class NavDrawerActivity extends BriarFragmentActivity implements } } + public void onNavigationClick(View view) { + drawerLayout.closeDrawer(START); + clearBackStack(); + currentFragmentId = view.getId(); + loadCurrentFragment(); + } + @Override public void onBackPressed() { diff --git a/briar-android/src/org/briarproject/android/controller/BriarController.java b/briar-android/src/org/briarproject/android/controller/BriarController.java index e2253c3dc76723f76891f331e23f4aed854763be..cbb61cde1e58c3b94d0005ed0fc398bef24f7dde 100644 --- a/briar-android/src/org/briarproject/android/controller/BriarController.java +++ b/briar-android/src/org/briarproject/android/controller/BriarController.java @@ -4,8 +4,6 @@ import org.briarproject.android.controller.handler.ResultHandler; public interface BriarController extends ActivityLifecycleController { - void runOnDbThread(final Runnable task); - void startAndBindService(); boolean hasEncryptionKey(); diff --git a/briar-android/src/org/briarproject/android/controller/BriarControllerImpl.java b/briar-android/src/org/briarproject/android/controller/BriarControllerImpl.java index 337e0436e3646974e532a6a5907306d8c2b3e5cc..7dd180a448b0b9fbc3b31204e44ad38f918c1337 100644 --- a/briar-android/src/org/briarproject/android/controller/BriarControllerImpl.java +++ b/briar-android/src/org/briarproject/android/controller/BriarControllerImpl.java @@ -9,10 +9,7 @@ import org.briarproject.android.BriarService; import org.briarproject.android.BriarService.BriarServiceConnection; import org.briarproject.android.controller.handler.ResultHandler; import org.briarproject.api.db.DatabaseConfig; -import org.briarproject.api.db.DatabaseExecutor; -import org.briarproject.api.lifecycle.LifecycleManager; -import java.util.concurrent.Executor; import java.util.logging.Logger; import javax.inject.Inject; @@ -29,13 +26,6 @@ public class BriarControllerImpl implements BriarController { @Inject protected Activity activity; - // Fields that are accessed from background threads must be volatile - @Inject - @DatabaseExecutor - protected volatile Executor dbExecutor; - @Inject - protected volatile LifecycleManager lifecycleManager; - private boolean bound = false; @Inject @@ -100,23 +90,8 @@ public class BriarControllerImpl implements BriarController { }.start(); } - private void unbindService() { + protected void unbindService() { if (bound) activity.unbindService(serviceConnection); } - @Override - public void runOnDbThread(final Runnable task) { - dbExecutor.execute(new Runnable() { - @Override - public void run() { - try { - lifecycleManager.waitForDatabase(); - task.run(); - } catch (InterruptedException e) { - LOG.warning("Interrupted while waiting for database"); - Thread.currentThread().interrupt(); - } - } - }); - } } diff --git a/briar-android/src/org/briarproject/android/controller/DbController.java b/briar-android/src/org/briarproject/android/controller/DbController.java new file mode 100644 index 0000000000000000000000000000000000000000..f0c186bf3485f062e3cc1fa93f7d60bf213d0d1b --- /dev/null +++ b/briar-android/src/org/briarproject/android/controller/DbController.java @@ -0,0 +1,6 @@ +package org.briarproject.android.controller; + +public interface DbController { + + void runOnDbThread(Runnable task); +} diff --git a/briar-android/src/org/briarproject/android/controller/DbControllerImpl.java b/briar-android/src/org/briarproject/android/controller/DbControllerImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..14f5d41aee85232372bddc96743962c10ad150c5 --- /dev/null +++ b/briar-android/src/org/briarproject/android/controller/DbControllerImpl.java @@ -0,0 +1,43 @@ +package org.briarproject.android.controller; + +import org.briarproject.api.db.DatabaseExecutor; +import org.briarproject.api.lifecycle.LifecycleManager; + +import java.util.concurrent.Executor; +import java.util.logging.Logger; + +import javax.inject.Inject; + +public class DbControllerImpl implements DbController { + + private static final Logger LOG = + Logger.getLogger(DbControllerImpl.class.getName()); + + // Fields that are accessed from background threads must be volatile + @Inject + @DatabaseExecutor + protected volatile Executor dbExecutor; + @Inject + protected volatile LifecycleManager lifecycleManager; + + @Inject + public DbControllerImpl() { + + } + + @Override + public void runOnDbThread(final Runnable task) { + dbExecutor.execute(new Runnable() { + @Override + public void run() { + try { + lifecycleManager.waitForDatabase(); + task.run(); + } catch (InterruptedException e) { + LOG.warning("Interrupted while waiting for database"); + Thread.currentThread().interrupt(); + } + } + }); + } +} diff --git a/briar-android/src/org/briarproject/android/controller/NavDrawerController.java b/briar-android/src/org/briarproject/android/controller/NavDrawerController.java index db389706b4b8c8586b61a1ef66ab263740157925..a2f339990f0bf8915c885822d287c599394c0e78 100644 --- a/briar-android/src/org/briarproject/android/controller/NavDrawerController.java +++ b/briar-android/src/org/briarproject/android/controller/NavDrawerController.java @@ -4,7 +4,7 @@ import org.briarproject.android.controller.handler.UiResultHandler; import org.briarproject.api.TransportId; import org.briarproject.api.identity.LocalAuthor; -public interface NavDrawerController extends BriarController { +public interface NavDrawerController extends ActivityLifecycleController { void setTransportListener(TransportStateListener transportListener); diff --git a/briar-android/src/org/briarproject/android/controller/NavDrawerControllerImpl.java b/briar-android/src/org/briarproject/android/controller/NavDrawerControllerImpl.java index 651f60bcbd304aec89b6a7f7f95d498e652cf942..7ca4fe4758440d7bd6c4664ce817e369979a9db5 100644 --- a/briar-android/src/org/briarproject/android/controller/NavDrawerControllerImpl.java +++ b/briar-android/src/org/briarproject/android/controller/NavDrawerControllerImpl.java @@ -23,7 +23,7 @@ import javax.inject.Inject; import static java.util.logging.Level.INFO; import static java.util.logging.Level.WARNING; -public class NavDrawerControllerImpl extends BriarControllerImpl +public class NavDrawerControllerImpl extends DbControllerImpl implements NavDrawerController, EventListener { private static final Logger LOG = @@ -51,21 +51,24 @@ public class NavDrawerControllerImpl extends BriarControllerImpl @Override public void onActivityCreate() { - super.onActivityCreate(); + } @Override public void onActivityResume() { - super.onActivityResume(); eventBus.addListener(this); } @Override public void onActivityPause() { - super.onActivityPause(); eventBus.removeListener(this); } + @Override + public void onActivityDestroy() { + + } + @Override public void eventOccurred(Event e) { if (e instanceof TransportEnabledEvent) { @@ -131,4 +134,5 @@ public class NavDrawerControllerImpl extends BriarControllerImpl public LocalAuthor removeAuthorHandle(long handle) { return referenceManager.removeReference(handle, LocalAuthor.class); } + }