mirror of
https://github.com/lubosz/overte.git
synced 2025-08-07 17:41:12 +02:00
Android - People - Better navigation after logged in prevents log in screen to appear after pressing back
This commit is contained in:
parent
a01b00b3d8
commit
99760e2b40
2 changed files with 64 additions and 13 deletions
|
@ -7,6 +7,7 @@ import android.content.Intent;
|
||||||
import android.graphics.Bitmap;
|
import android.graphics.Bitmap;
|
||||||
import android.graphics.drawable.BitmapDrawable;
|
import android.graphics.drawable.BitmapDrawable;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
import android.os.Handler;
|
||||||
import android.support.annotation.NonNull;
|
import android.support.annotation.NonNull;
|
||||||
import android.support.design.widget.NavigationView;
|
import android.support.design.widget.NavigationView;
|
||||||
import android.support.v4.content.ContextCompat;
|
import android.support.v4.content.ContextCompat;
|
||||||
|
@ -114,7 +115,7 @@ public class MainActivity extends AppCompatActivity implements NavigationView.On
|
||||||
loadLoginFragment();
|
loadLoginFragment();
|
||||||
break;
|
break;
|
||||||
case "Home":
|
case "Home":
|
||||||
loadHomeFragment();
|
loadHomeFragment(true);
|
||||||
break;
|
break;
|
||||||
case "Privacy Policy":
|
case "Privacy Policy":
|
||||||
loadPrivacyPolicyFragment();
|
loadPrivacyPolicyFragment();
|
||||||
|
@ -128,33 +129,57 @@ public class MainActivity extends AppCompatActivity implements NavigationView.On
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void loadHomeFragment() {
|
private void loadHomeFragment(boolean addToBackStack) {
|
||||||
Fragment fragment = HomeFragment.newInstance();
|
Fragment fragment = HomeFragment.newInstance();
|
||||||
loadFragment(fragment, getString(R.string.home), true);
|
loadFragment(fragment, getString(R.string.home), getString(R.string.tagFragmentHome), addToBackStack);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void loadLoginFragment() {
|
private void loadLoginFragment() {
|
||||||
Fragment fragment = LoginFragment.newInstance();
|
Fragment fragment = LoginFragment.newInstance();
|
||||||
|
|
||||||
loadFragment(fragment, getString(R.string.login), true);
|
loadFragment(fragment, getString(R.string.login), getString(R.string.tagFragmentLogin), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void loadPrivacyPolicyFragment() {
|
private void loadPrivacyPolicyFragment() {
|
||||||
Fragment fragment = PolicyFragment.newInstance();
|
Fragment fragment = PolicyFragment.newInstance();
|
||||||
|
|
||||||
loadFragment(fragment, getString(R.string.privacyPolicy), true);
|
loadFragment(fragment, getString(R.string.privacyPolicy), getString(R.string.tagFragmentPolicy), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void loadPeopleFragment() {
|
private void loadPeopleFragment() {
|
||||||
Fragment fragment = FriendsFragment.newInstance();
|
Fragment fragment = FriendsFragment.newInstance();
|
||||||
|
|
||||||
loadFragment(fragment, getString(R.string.people), true);
|
loadFragment(fragment, getString(R.string.people), getString(R.string.tagFragmentPeople), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void loadFragment(Fragment fragment, String title, boolean addToBackStack) {
|
private void loadFragment(Fragment fragment, String title, String tag, boolean addToBackStack) {
|
||||||
FragmentManager fragmentManager = getFragmentManager();
|
FragmentManager fragmentManager = getFragmentManager();
|
||||||
|
|
||||||
|
|
||||||
|
// check if it's the same fragment
|
||||||
|
String currentFragmentName = fragmentManager.getBackStackEntryCount() > 0
|
||||||
|
? fragmentManager.getBackStackEntryAt(fragmentManager.getBackStackEntryCount() - 1).getName()
|
||||||
|
: "";
|
||||||
|
|
||||||
|
Log.d("[BACK]", "Before it's " + currentFragmentName + ", now adding " + title + " (before) backstackCount " + fragmentManager.getBackStackEntryCount());
|
||||||
|
|
||||||
|
// check if it's the same fragment than the one being shown
|
||||||
|
if (currentFragmentName.equals(title)) {
|
||||||
|
mDrawerLayout.closeDrawer(mNavigationView);
|
||||||
|
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();
|
||||||
|
}
|
||||||
|
|
||||||
|
// 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();
|
FragmentTransaction ft = fragmentManager.beginTransaction();
|
||||||
ft.replace(R.id.content_frame, fragment, getString(R.string.tagFragmentPeople));
|
ft.replace(R.id.content_frame, fragment, tag);
|
||||||
|
|
||||||
if (addToBackStack) {
|
if (addToBackStack) {
|
||||||
ft.addToBackStack(title);
|
ft.addToBackStack(title);
|
||||||
|
@ -162,6 +187,14 @@ public class MainActivity extends AppCompatActivity implements NavigationView.On
|
||||||
ft.commit();
|
ft.commit();
|
||||||
setTitle(title);
|
setTitle(title);
|
||||||
mDrawerLayout.closeDrawer(mNavigationView);
|
mDrawerLayout.closeDrawer(mNavigationView);
|
||||||
|
final Handler handler = new Handler();
|
||||||
|
handler.postDelayed(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
//Do something after 100ms
|
||||||
|
Log.d("[BACK]", "added " + title + " backstackCount " + fragmentManager.getBackStackEntryCount());
|
||||||
|
}
|
||||||
|
}, 100);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -217,7 +250,7 @@ public class MainActivity extends AppCompatActivity implements NavigationView.On
|
||||||
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
|
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
|
||||||
switch(item.getItemId()) {
|
switch(item.getItemId()) {
|
||||||
case R.id.action_home:
|
case R.id.action_home:
|
||||||
loadHomeFragment();
|
loadHomeFragment(false);
|
||||||
return true;
|
return true;
|
||||||
case R.id.action_people:
|
case R.id.action_people:
|
||||||
loadPeopleFragment();
|
loadPeopleFragment();
|
||||||
|
@ -239,6 +272,19 @@ public class MainActivity extends AppCompatActivity implements NavigationView.On
|
||||||
public void onLogoutClicked(View view) {
|
public void onLogoutClicked(View view) {
|
||||||
nativeLogout();
|
nativeLogout();
|
||||||
updateLoginMenu();
|
updateLoginMenu();
|
||||||
|
exitLoggedInFragment();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void exitLoggedInFragment() {
|
||||||
|
// If we are in a "logged in" fragment (like People), go back to home. This could be expanded to multiple fragments
|
||||||
|
FragmentManager fragmentManager = getFragmentManager();
|
||||||
|
String currentFragmentName = fragmentManager.getBackStackEntryCount() > 0
|
||||||
|
? fragmentManager.getBackStackEntryAt(fragmentManager.getBackStackEntryCount() - 1).getName()
|
||||||
|
: "";
|
||||||
|
if (currentFragmentName.equals(getString(R.string.people))) {
|
||||||
|
loadHomeFragment(false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onSelectedDomain(String domainUrl) {
|
public void onSelectedDomain(String domainUrl) {
|
||||||
|
@ -267,7 +313,7 @@ public class MainActivity extends AppCompatActivity implements NavigationView.On
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onLoginCompleted() {
|
public void onLoginCompleted() {
|
||||||
loadHomeFragment();
|
loadHomeFragment(false);
|
||||||
updateLoginMenu();
|
updateLoginMenu();
|
||||||
if (backToScene) {
|
if (backToScene) {
|
||||||
backToScene = false;
|
backToScene = false;
|
||||||
|
@ -319,6 +365,7 @@ public class MainActivity extends AppCompatActivity implements NavigationView.On
|
||||||
public void onBackPressed() {
|
public void onBackPressed() {
|
||||||
// if a fragment needs to internally manage back presses..
|
// if a fragment needs to internally manage back presses..
|
||||||
FragmentManager fm = getFragmentManager();
|
FragmentManager fm = getFragmentManager();
|
||||||
|
Log.d("[BACK]", "getBackStackEntryCount " + fm.getBackStackEntryCount());
|
||||||
Fragment friendsFragment = fm.findFragmentByTag(getString(R.string.tagFragmentPeople));
|
Fragment friendsFragment = fm.findFragmentByTag(getString(R.string.tagFragmentPeople));
|
||||||
if (friendsFragment != null && friendsFragment instanceof FriendsFragment) {
|
if (friendsFragment != null && friendsFragment instanceof FriendsFragment) {
|
||||||
if (((FriendsFragment) friendsFragment).onBackPressed()) {
|
if (((FriendsFragment) friendsFragment).onBackPressed()) {
|
||||||
|
@ -326,19 +373,20 @@ public class MainActivity extends AppCompatActivity implements NavigationView.On
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int index = getFragmentManager().getBackStackEntryCount() - 1;
|
int index = fm.getBackStackEntryCount() - 1;
|
||||||
|
|
||||||
if (index > 0) {
|
if (index > 0) {
|
||||||
super.onBackPressed();
|
super.onBackPressed();
|
||||||
index--;
|
index--;
|
||||||
if (index > -1) {
|
if (index > -1) {
|
||||||
setTitle(getFragmentManager().getBackStackEntryAt(index).getName());
|
setTitle(fm.getBackStackEntryAt(index).getName());
|
||||||
}
|
}
|
||||||
if (backToScene) {
|
if (backToScene) {
|
||||||
backToScene = false;
|
backToScene = false;
|
||||||
goToLastLocation();
|
goToLastLocation();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
finishAffinity();
|
finishAffinity();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -26,5 +26,8 @@
|
||||||
<string name="online">Online</string>
|
<string name="online">Online</string>
|
||||||
|
|
||||||
<!-- tags -->
|
<!-- tags -->
|
||||||
|
<string name="tagFragmentHome">tagFragmentHome</string>
|
||||||
|
<string name="tagFragmentLogin">tagFragmentLogin</string>
|
||||||
|
<string name="tagFragmentPolicy">tagFragmentPolicy</string>
|
||||||
<string name="tagFragmentPeople">tagFragmentPeople</string>
|
<string name="tagFragmentPeople">tagFragmentPeople</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
Loading…
Reference in a new issue