Fix flickering between login and signup screens

This commit is contained in:
Gabriel Calero 2018-09-28 13:53:18 -03:00
parent 0d40d78343
commit c0c95a1d33

View file

@ -146,45 +146,44 @@ public class MainActivity extends AppCompatActivity implements NavigationView.On
private void loadHomeFragment(boolean addToBackStack) { private void loadHomeFragment(boolean addToBackStack) {
Fragment fragment = HomeFragment.newInstance(); 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() { private void loadLoginFragment() {
Fragment fragment = LoginFragment.newInstance(); 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() { private void loadSignedInFragment() {
Fragment fragment = SignedInFragment.newInstance(); 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() { private void loadSignupFragment() {
Fragment fragment = SignupFragment.newInstance(); Fragment fragment = SignupFragment.newInstance();
loadFragment(fragment, getString(R.string.signup), getString(R.string.tagFragmentSignup), true, false);
loadFragment(fragment, getString(R.string.signup), getString(R.string.tagFragmentSignup), true);
} }
private void loadPrivacyPolicyFragment() { private void loadPrivacyPolicyFragment() {
Fragment fragment = PolicyFragment.newInstance(); 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() { private void loadPeopleFragment() {
Fragment fragment = FriendsFragment.newInstance(); 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() { private void loadSettingsFragment() {
SettingsFragment fragment = SettingsFragment.newInstance(); 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(); FragmentManager fragmentManager = getFragmentManager();
// check if it's the same fragment // 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 return; // cancel as we are already in that fragment
} }
// go back until first transaction if (goBackUntilHome) {
int backStackEntryCount = fragmentManager.getBackStackEntryCount(); // go back until first transaction
for (int i = 0; i < backStackEntryCount - 1; i++) { int backStackEntryCount = fragmentManager.getBackStackEntryCount();
fragmentManager.popBackStackImmediate(); for (int i = 0; i < backStackEntryCount - 1; i++) {
fragmentManager.popBackStackImmediate();
}
} }
// this case is when we wanted to go home.. rollback already did that! // 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 // 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(); FragmentTransaction ft = fragmentManager.beginTransaction();
ft.replace(R.id.content_frame, fragment, tag); ft.replace(R.id.content_frame, newFragment, tag);
if (addToBackStack) { if (addToBackStack) {
ft.addToBackStack(title); ft.addToBackStack(title);
@ -354,7 +355,8 @@ public class MainActivity extends AppCompatActivity implements NavigationView.On
@Override @Override
public void onLoginRequested() { public void onLoginRequested() {
loadLoginFragment(); // go back from signup to login
onBackPressed();
} }
@Override @Override