Skip to content
Snippets Groups Projects
Commit d701f4f0 authored by Adrien Béraud's avatar Adrien Béraud Committed by Thibault Wittemberg
Browse files

ui: onBackPressed

handle correctly fragment stack when clicking on back button

Tuleap: #1087
Change-Id: I06f6a63d3fb3d465b29df55c7ba516ea015ef095
parent c0f89fc2
No related branches found
No related tags found
No related merge requests found
......@@ -45,6 +45,7 @@ import android.support.annotation.Nullable;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.NavigationView;
import android.support.v4.app.ActivityCompat;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity;
......@@ -52,7 +53,6 @@ import android.support.v7.widget.Toolbar;
import android.transition.Explode;
import android.transition.Fade;
import android.util.Log;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.View;
......@@ -97,6 +97,10 @@ public class HomeActivity extends AppCompatActivity implements LocalService.Call
public static final int REQUEST_CODE_CALL = 3;
public static final int REQUEST_CODE_CONVERSATION = 4;
private static final String HOME_TAG = "Home";
private static final String ACCOUNTS_TAG = "Accounts";
private static final String ABOUT_TAG = "About";
private LocalService service;
private boolean mBound = false;
private boolean mNoAccountOpened = false;
......@@ -392,7 +396,6 @@ public class HomeActivity extends AppCompatActivity implements LocalService.Call
mToolbarSpacerView.setVisibility(View.GONE);
actionButton.setVisibility(View.GONE);
mToolbar.setTitle(titleRes);
}
}
......@@ -430,10 +433,8 @@ public class HomeActivity extends AppCompatActivity implements LocalService.Call
out = new FileOutputStream(toPath);
copyFile(in, out);
in.close();
in = null;
out.flush();
out.close();
out = null;
return true;
} catch (Exception e) {
Log.e(TAG, "Error while copying asset", e);
......@@ -449,12 +450,6 @@ public class HomeActivity extends AppCompatActivity implements LocalService.Call
}
}
/* user gets back to the activity, e.g. through task manager */
@Override
protected void onRestart() {
super.onRestart();
}
/* activity gets back to the foreground and user input */
@Override
protected void onResume() {
......@@ -464,34 +459,19 @@ public class HomeActivity extends AppCompatActivity implements LocalService.Call
@Override
public void onBackPressed() {
if (mNavigationDrawer.isDrawerVisible(Gravity.LEFT)) {
mNavigationDrawer.closeDrawer(Gravity.LEFT);
if (mNavigationDrawer.isDrawerVisible(GravityCompat.START)) {
mNavigationDrawer.closeDrawer(GravityCompat.START);
return;
}
if (getFragmentManager().getBackStackEntryCount() > 1) {
popCustomBackStack();
fMenu.getMenu().findItem(R.id.menuitem_home).setChecked(true);
return;
}
finish();
}
private void popCustomBackStack() {
FragmentManager fragmentManager = getFragmentManager();
FragmentManager.BackStackEntry entry = fragmentManager.getBackStackEntryAt(0);
fContent = fragmentManager.findFragmentByTag(entry.getName());
for (int i = 0; i < fragmentManager.getBackStackEntryCount() - 1; ++i) {
fragmentManager.popBackStack();
}
super.onBackPressed();
FragmentManager fm = getFragmentManager();
int count = fm.getBackStackEntryCount();
if (count == 0) {
fContent = fm.findFragmentByTag(HOME_TAG);
} else {
FragmentManager.BackStackEntry entry = fm.getBackStackEntryAt(count - 1);
fContent = fm.findFragmentById(entry.getId());
}
/* activity no more in foreground */
@Override
protected void onPause() {
super.onPause();
Log.d(TAG, "onPause");
}
/* activity finishes itself or is being killed by the system */
......@@ -536,9 +516,9 @@ public class HomeActivity extends AppCompatActivity implements LocalService.Call
fContent = fragmentManager.findFragmentById(R.id.main_frame);
if (fContent == null) {
fContent = new SmartListFragment();
fragmentManager.beginTransaction().replace(R.id.main_frame, fContent, "Home").addToBackStack("Home").commit();
fragmentManager.beginTransaction().replace(R.id.main_frame, fContent, HOME_TAG).commitAllowingStateLoss();
} else if (fContent instanceof Refreshable) {
fragmentManager.beginTransaction().replace(R.id.main_frame, fContent).addToBackStack("Home").commit();
fragmentManager.beginTransaction().replace(R.id.main_frame, fContent).addToBackStack(HOME_TAG).commit();
((Refreshable) fContent).refresh();
}
}
......@@ -590,37 +570,32 @@ public class HomeActivity extends AppCompatActivity implements LocalService.Call
}
@Override
public boolean onNavigationItemSelected(MenuItem pos) {
public boolean onNavigationItemSelected(@NonNull MenuItem pos) {
pos.setChecked(true);
mNavigationDrawer.closeDrawers();
switch (pos.getItemId()) {
case R.id.menuitem_home:
if (fContent instanceof SmartListFragment) {
break;
}
if (getFragmentManager().getBackStackEntryCount() == 1) {
break;
while (getFragmentManager().popBackStackImmediate()) {
}
popCustomBackStack();
fContent = getFragmentManager().findFragmentByTag(HOME_TAG);
break;
case R.id.menuitem_accounts:
if (fContent instanceof AccountsManagementFragment) {
break;
}
fContent = new AccountsManagementFragment();
getFragmentManager().beginTransaction().setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE).replace(R.id.main_frame, fContent, "Accounts").addToBackStack("Accounts").commit();
getFragmentManager().beginTransaction().setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE).replace(R.id.main_frame, fContent, ACCOUNTS_TAG).addToBackStack(ACCOUNTS_TAG).commit();
break;
case R.id.menuitem_about:
if (fContent instanceof AboutFragment) {
break;
}
fContent = new AboutFragment();
getFragmentManager().beginTransaction().setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE).replace(R.id.main_frame, fContent, "About").addToBackStack("About").commit();
getFragmentManager().beginTransaction().setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE).replace(R.id.main_frame, fContent, ABOUT_TAG).addToBackStack(ABOUT_TAG).commit();
break;
case R.id.menuitem_prefs:
this.goToSettings();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment