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 1d34470146..28af228541 100644
--- a/android/app/src/main/java/io/highfidelity/hifiinterface/MainActivity.java
+++ b/android/app/src/main/java/io/highfidelity/hifiinterface/MainActivity.java
@@ -7,6 +7,7 @@ import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.os.Bundle;
+import android.os.Handler;
import android.support.annotation.NonNull;
import android.support.design.widget.NavigationView;
import android.support.v4.content.ContextCompat;
@@ -114,7 +115,7 @@ public class MainActivity extends AppCompatActivity implements NavigationView.On
loadLoginFragment();
break;
case "Home":
- loadHomeFragment();
+ loadHomeFragment(true);
break;
case "Privacy Policy":
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();
- loadFragment(fragment, getString(R.string.home), true);
+ loadFragment(fragment, getString(R.string.home), getString(R.string.tagFragmentHome), addToBackStack);
}
private void loadLoginFragment() {
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() {
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() {
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();
+
+
+ // 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();
- ft.replace(R.id.content_frame, fragment, getString(R.string.tagFragmentPeople));
+ ft.replace(R.id.content_frame, fragment, tag);
if (addToBackStack) {
ft.addToBackStack(title);
@@ -162,6 +187,14 @@ public class MainActivity extends AppCompatActivity implements NavigationView.On
ft.commit();
setTitle(title);
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) {
switch(item.getItemId()) {
case R.id.action_home:
- loadHomeFragment();
+ loadHomeFragment(false);
return true;
case R.id.action_people:
loadPeopleFragment();
@@ -239,6 +272,19 @@ public class MainActivity extends AppCompatActivity implements NavigationView.On
public void onLogoutClicked(View view) {
nativeLogout();
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) {
@@ -267,7 +313,7 @@ public class MainActivity extends AppCompatActivity implements NavigationView.On
@Override
public void onLoginCompleted() {
- loadHomeFragment();
+ loadHomeFragment(false);
updateLoginMenu();
if (backToScene) {
backToScene = false;
@@ -319,6 +365,7 @@ public class MainActivity extends AppCompatActivity implements NavigationView.On
public void onBackPressed() {
// if a fragment needs to internally manage back presses..
FragmentManager fm = getFragmentManager();
+ Log.d("[BACK]", "getBackStackEntryCount " + fm.getBackStackEntryCount());
Fragment friendsFragment = fm.findFragmentByTag(getString(R.string.tagFragmentPeople));
if (friendsFragment != null && friendsFragment instanceof FriendsFragment) {
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) {
super.onBackPressed();
index--;
if (index > -1) {
- setTitle(getFragmentManager().getBackStackEntryAt(index).getName());
+ setTitle(fm.getBackStackEntryAt(index).getName());
}
if (backToScene) {
backToScene = false;
goToLastLocation();
}
} else {
- finishAffinity();
+ finishAffinity();
}
}
diff --git a/android/app/src/main/res/values/strings.xml b/android/app/src/main/res/values/strings.xml
index ea4e59a35a..dae4fe26f9 100644
--- a/android/app/src/main/res/values/strings.xml
+++ b/android/app/src/main/res/values/strings.xml
@@ -26,5 +26,8 @@
Online
+ tagFragmentHome
+ tagFragmentLogin
+ tagFragmentPolicy
tagFragmentPeople