Parcourir la source

navigation works now as expected in an hierachical manner

Alexander Brakowski il y a 10 ans
Parent
commit
5936304b0d

+ 39 - 9
src/de/tudarmstadt/informatik/hostage/ui2/activity/MainActivity.java

@@ -31,6 +31,8 @@ import android.view.MenuItem;
 import android.view.View;
 import android.widget.AdapterView;
 import android.widget.ListView;
+import android.widget.Toast;
+
 import de.tudarmstadt.informatik.hostage.Hostage;
 import de.tudarmstadt.informatik.hostage.R;
 import de.tudarmstadt.informatik.hostage.model.Profile;
@@ -81,6 +83,8 @@ public class MainActivity extends Activity {
 
 	private ProfileManager mProfileManager;
 
+	private Fragment rootFragment;
+
 	/**
 	 * Connection to bind the background service
 	 * 
@@ -115,6 +119,8 @@ public class MainActivity extends Activity {
 
 	private HashMap<String, Boolean> mAttacksOnProtocol = new HashMap<String, Boolean>();
 
+	private boolean mCloseWarning = false;
+
 	/**
 	 * Retrieve the singleton latest instance of the activity
 	 * 
@@ -395,15 +401,19 @@ public class MainActivity extends Activity {
 		}
 
 		if (fragment != null) {
+			if(position == 0 && rootFragment == null){
+				rootFragment = fragment;
+			}
+
 			boolean isFirst = getFragmentManager().getBackStackEntryCount() == 0;
 
-			getFragmentManager().popBackStackImmediate(HomeFragment.class.getName(), 0);
+			//getFragmentManager().popBackStackImmediate(HomeFragment.class.getName(), FragmentManager.POP_BACK_STACK_INCLUSIVE);
 			// update selected item and title, then close the drawer if needed
-			if(!(fragment instanceof HomeFragment) || isFirst) {
+			//if(!(fragment instanceof HomeFragment) || isFirst) {
 				injectFragment(fragment);// , false, menuItemPosition);
-			} else {
-				this.mDisplayedFragment = fragment;
-			}
+			//} else {
+			//	injectFragment(rootFragment);
+			//}
 
 			mDrawerList.setItemChecked(position, true);
 			mDrawerList.setSelection(position);
@@ -418,6 +428,8 @@ public class MainActivity extends Activity {
 	}
 
 	public void injectFragment(Fragment fragment) {
+		this.mCloseWarning = false;
+
 		// set orientation fixed to portrait in home fragment
 		if (fragment instanceof UpNavigatibleFragment) {
 			UpNavigatibleFragment upFrag = (UpNavigatibleFragment) fragment;
@@ -465,10 +477,20 @@ public class MainActivity extends Activity {
 
 	@Override
 	public void onBackPressed() {
-		if (getFragmentManager().getBackStackEntryCount() == 1) {
-			MainActivity.getInstance().getHostageService().stopListeners();
-			MainActivity.getInstance().stopAndUnbind();
-			finish();
+		if (mDisplayedFragment instanceof HomeFragment) {
+
+			if (this.mCloseWarning) {
+				MainActivity.getInstance().getHostageService().stopListeners();
+				MainActivity.getInstance().stopAndUnbind();
+				this.mCloseWarning = false;
+				finish();
+			} else {
+				Toast.makeText(this, "Press the back button again to close HosTaGe", Toast.LENGTH_SHORT).show();
+				this.mCloseWarning = true;
+			}
+			//}
+		} else if (MainMenuItem.hasClass(mDisplayedFragment.getClass())){
+			injectFragment(rootFragment);
 		} else {
 			super.onBackPressed();
 			this.mDisplayedFragment = getFragmentManager().findFragmentById(R.id.content_frame);
@@ -566,6 +588,14 @@ public class MainActivity extends Activity {
 			return MainMenuItem.values()[value];
 		}
 
+		public static boolean hasClass(Class<?> klass){
+			for(MainMenuItem m: MainMenuItem.values()){
+				if(m.getKlass().equals(klass)) return true;
+			}
+
+			return false;
+		}
+
 		public int getValue() {
 			return value;
 		}

+ 1 - 2
src/de/tudarmstadt/informatik/hostage/ui2/fragment/StatisticsFragment.java

@@ -975,8 +975,7 @@ public class StatisticsFragment extends Fragment implements ChecklistDialog.Chec
             slice.setTitle(item.getTitle());
             piegraph.addSlice(slice);
         }
-        piegraph.invalidate();
-
+        //piegraph.invalidate();
     }