From c0c95a1d33a147af907840817379481f80d2112f Mon Sep 17 00:00:00 2001
From: Gabriel Calero <gcalero1984@gmail.com>
Date: Fri, 28 Sep 2018 13:53:18 -0300
Subject: [PATCH] Fix flickering between login and signup screens

---
 .../hifiinterface/MainActivity.java           | 32 ++++++++++---------
 1 file changed, 17 insertions(+), 15 deletions(-)

diff --git a/android/app/src/main/java/io/highfidelity/hifiinterface/MainActivity.java b/android/app/src/main/java/io/highfidelity/hifiinterface/MainActivity.java
index 451dc4ee00..c9d03f4633 100644
--- a/android/app/src/main/java/io/highfidelity/hifiinterface/MainActivity.java
+++ b/android/app/src/main/java/io/highfidelity/hifiinterface/MainActivity.java
@@ -146,45 +146,44 @@ public class MainActivity extends AppCompatActivity implements NavigationView.On
 
     private void loadHomeFragment(boolean addToBackStack) {
         Fragment fragment = HomeFragment.newInstance();
-        loadFragment(fragment, getString(R.string.home), getString(R.string.tagFragmentHome), addToBackStack);
+        loadFragment(fragment, getString(R.string.home), getString(R.string.tagFragmentHome), addToBackStack, true);
     }
 
     private void loadLoginFragment() {
         Fragment fragment = LoginFragment.newInstance();
-        loadFragment(fragment, getString(R.string.login), getString(R.string.tagFragmentLogin), true);
+        loadFragment(fragment, getString(R.string.login), getString(R.string.tagFragmentLogin), true, true);
     }
 
     private void loadSignedInFragment() {
         Fragment fragment = SignedInFragment.newInstance();
-        loadFragment(fragment, getString(R.string.welcome), getString(R.string.tagFragmentSignedIn), true);
+        loadFragment(fragment, getString(R.string.welcome), getString(R.string.tagFragmentSignedIn), true, true);
     }
 
     private void loadSignupFragment() {
         Fragment fragment = SignupFragment.newInstance();
-
-        loadFragment(fragment, getString(R.string.signup), getString(R.string.tagFragmentSignup), true);
+        loadFragment(fragment, getString(R.string.signup), getString(R.string.tagFragmentSignup), true, false);
     }
 
     private void loadPrivacyPolicyFragment() {
         Fragment fragment = PolicyFragment.newInstance();
 
-        loadFragment(fragment, getString(R.string.privacyPolicy), getString(R.string.tagFragmentPolicy), true);
+        loadFragment(fragment, getString(R.string.privacyPolicy), getString(R.string.tagFragmentPolicy), true, true);
     }
 
     private void loadPeopleFragment() {
         Fragment fragment = FriendsFragment.newInstance();
 
-        loadFragment(fragment, getString(R.string.people), getString(R.string.tagFragmentPeople), true);
+        loadFragment(fragment, getString(R.string.people), getString(R.string.tagFragmentPeople), true, true);
     }
 
     private void loadSettingsFragment() {
         SettingsFragment fragment = SettingsFragment.newInstance();
 
-        loadFragment(fragment, getString(R.string.settings), getString(R.string.tagSettings), true);
+        loadFragment(fragment, getString(R.string.settings), getString(R.string.tagSettings), true, true);
     }
 
 
-    private void loadFragment(Fragment fragment, String title, String tag, boolean addToBackStack) {
+    private void loadFragment(Fragment newFragment, String title, String tag, boolean addToBackStack, boolean goBackUntilHome) {
         FragmentManager fragmentManager = getFragmentManager();
 
         // check if it's the same fragment
@@ -196,17 +195,19 @@ public class MainActivity extends AppCompatActivity implements NavigationView.On
             return; // cancel as we are already in that fragment
         }
 
-        // go back until first transaction
-        int backStackEntryCount = fragmentManager.getBackStackEntryCount();
-        for (int i = 0; i < backStackEntryCount - 1; i++) {
-            fragmentManager.popBackStackImmediate();
+        if (goBackUntilHome) {
+            // go back until first transaction
+            int backStackEntryCount = fragmentManager.getBackStackEntryCount();
+            for (int i = 0; i < backStackEntryCount - 1; i++) {
+                fragmentManager.popBackStackImmediate();
+            }
         }
 
         // this case is when we wanted to go home.. rollback already did that!
         // But asking for a new Home fragment makes it easier to have an updated list so we let it to continue
 
         FragmentTransaction ft = fragmentManager.beginTransaction();
-        ft.replace(R.id.content_frame, fragment, tag);
+        ft.replace(R.id.content_frame, newFragment, tag);
 
         if (addToBackStack) {
             ft.addToBackStack(title);
@@ -354,7 +355,8 @@ public class MainActivity extends AppCompatActivity implements NavigationView.On
 
     @Override
     public void onLoginRequested() {
-        loadLoginFragment();
+        // go back from signup to login
+        onBackPressed();
     }
 
     @Override