Browse Source

added back navigation for fragments

Alexander Brakowski 10 years ago
parent
commit
73c4db9ca4

+ 1 - 0
src/com/echo/holographlibrary/LineGraph.java

@@ -363,6 +363,7 @@ public class LineGraph extends View {
 
 
             paint.reset();
+	        paint.setAntiAlias(true);
 
             // DRAW LINES
 			for (Line line : lines){

+ 11 - 0
src/de/tudarmstadt/informatik/hostage/logging/UglyDbHelper.java

@@ -338,6 +338,17 @@ public class UglyDbHelper extends SQLiteOpenHelper {
 		return result > 0;
 	}
 
+	public int numBssidSeen(String BSSID){
+		String countQuery = "SELECT  * FROM " + TABLE_BSSIDS + " WHERE "
+				+ KEY_BSSID + " = " + "'" + BSSID + "'";
+		SQLiteDatabase db = this.getReadableDatabase();
+		Cursor cursor = db.rawQuery(countQuery, null);
+		int result = cursor.getCount();
+		cursor.close();
+		db.close();
+		return result;
+	}
+
 	public int numBssidSeen(String protocol, String BSSID) {
 		String countQuery = "SELECT  * FROM " + TABLE_ATTACK_INFO
 				+ " JOIN " + TABLE_BSSIDS + " USING " + "(" + KEY_BSSID + ")" + " WHERE " + TABLE_ATTACK_INFO + "." +  KEY_PROTOCOL

+ 50 - 7
src/de/tudarmstadt/informatik/hostage/ui2/activity/MainActivity.java

@@ -176,6 +176,7 @@ public class MainActivity extends Activity {
 
 		getActionBar().setDisplayHomeAsUpEnabled(true);
 		getActionBar().setHomeButtonEnabled(true);
+		getActionBar().setDisplayShowHomeEnabled(true);
 
 		mDrawerToggle = new ActionBarDrawerToggle(
 				this,                  /* host Activity */
@@ -247,6 +248,15 @@ public class MainActivity extends Activity {
 			return true;
 		}
 
+		if(item.getItemId() == android.R.id.home){
+			if(!mDrawerToggle.isDrawerIndicatorEnabled()){
+				if(getFragmentManager().getBackStackEntryCount() > 0) getFragmentManager().popBackStack();
+
+				if(getCurrentFragment().getTag() != null) mDrawerToggle.setDrawerIndicatorEnabled(true);
+				return true;
+			}
+		}
+
 		return super.onOptionsItemSelected(item);
 	}
 
@@ -335,21 +345,54 @@ public class MainActivity extends Activity {
 
 		if (fragment != null) {
 			// update selected item and title, then close the drawer if needed
-            FragmentManager fragmentManager = getFragmentManager();
-            FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
-            fragmentTransaction.replace(R.id.content_frame, fragment, fragment.getTag());
-            fragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
-            fragmentTransaction.commit();
+            injectFragment(fragment, false, menuItemPosition);
+
 		    mDrawerList.setItemChecked(position, true);
 		    mDrawerList.setSelection(position);
 		    setTitle(mDrawerItems.get(position).text);
-
-            this.mDisplayedFragment = fragment;
         }
 
 		mDrawerLayout.closeDrawer(mDrawerList);
 	}
 
+	public void injectFragment(Fragment fragment, boolean enableBack){
+		injectFragment(fragment, enableBack, null);
+	}
+	public void injectFragment(Fragment fragment, boolean enableBack, Object tagObj){
+		if(enableBack){
+			mDrawerToggle.setDrawerIndicatorEnabled(false);
+		}
+
+		String tag = (tagObj == null ? null : tagObj.toString());
+
+		FragmentManager fragmentManager = getFragmentManager();
+		FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
+		fragmentTransaction.replace(R.id.content_frame, fragment, tag);
+
+		if(tagObj == null || !(fragmentManager.getBackStackEntryCount() == 0 && tagObj.equals(MainMenuItem.HOME))) fragmentTransaction.addToBackStack(tag);
+
+		fragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
+		fragmentTransaction.commit();
+
+		this.mDisplayedFragment = fragment;
+	}
+
+	@Override
+	public void onBackPressed() {
+		super.onBackPressed();
+		if(getCurrentFragment().getTag() != null) mDrawerToggle.setDrawerIndicatorEnabled(true);
+	}
+
+	public static void displayBackStack(FragmentManager fm) {
+		int count = fm.getBackStackEntryCount();
+		Log.d("Backstack log", "There are " + count + " entries");
+		for(int i = 0; i<count; i++) {
+			// Display Backstack-entry data like
+			String name = fm.getBackStackEntryAt(i).getName();
+			Log.d("Backstack log", "entry " + i + ": " + name);
+		}
+	}
+
 	public Intent getServiceIntent() {
 		return new Intent(this, HoneyService.class);
 	}

+ 3 - 0
src/de/tudarmstadt/informatik/hostage/ui2/fragment/AboutFragment.java

@@ -14,6 +14,9 @@ import de.tudarmstadt.informatik.hostage.R;
 public class AboutFragment extends Fragment {
 	public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
 		super.onCreateView(inflater, container, savedInstanceState);
+
+		getActivity().setTitle(getResources().getString(R.string.drawer_app_info));
+
 		return inflater.inflate(R.layout.fragment_about, container, false);
 	}
 }

+ 3 - 1
src/de/tudarmstadt/informatik/hostage/ui2/fragment/HomeFragment.java

@@ -149,6 +149,7 @@ public class HomeFragment extends Fragment {
 				if(MainActivity.getInstance().getHoneyService().isRunning(protocol)){
 					hasActiveListeners = true;
 					int attacks = MainActivity.getInstance().getHoneyService().getNumberOfActiveConnections(protocol);
+					totalAttacks += attacks;
 
 					if(attacks == 0){
 						int log_attacks = dbh.numBssidSeen(protocol, mConnectionInfo.getString(getString(R.string.connection_info_bssid), null));
@@ -164,7 +165,6 @@ public class HomeFragment extends Fragment {
 							}
 						}
 					} else {
-						totalAttacks += attacks;
 						THREAT_LEVEL = ThreatIndicatorGLRenderer.ThreatLevel.LIVE_THREAT;
 					}
 				}
@@ -217,6 +217,8 @@ public class HomeFragment extends Fragment {
 
 	    super.onCreateView(inflater, container, savedInstanceState);
 
+	    getActivity().setTitle(getResources().getString(R.string.drawer_overview));
+
 	    dbh = new UglyDbHelper(getActivity());
 
 	    mProfileManager = ProfileManager.getInstance();

+ 1 - 0
src/de/tudarmstadt/informatik/hostage/ui2/fragment/ProfileManagerFragment.java

@@ -35,6 +35,7 @@ public class ProfileManagerFragment extends Fragment {
                              Bundle savedInstanceState) {
 
 	    super.onCreateView(inflater, container, savedInstanceState);
+	    getActivity().setTitle(getResources().getString(R.string.drawer_profile_manager));
 	    setHasOptionsMenu(true);
 
         View rootView = inflater.inflate(R.layout.fragment_profile_manager, container, false);

+ 4 - 6
src/de/tudarmstadt/informatik/hostage/ui2/fragment/RecordOverviewFragment.java

@@ -34,6 +34,7 @@ import de.tudarmstadt.informatik.hostage.logging.Record.TYPE;
 import de.tudarmstadt.informatik.hostage.logging.UglyDbHelper;
 import de.tudarmstadt.informatik.hostage.ui.LogFilter;
 import de.tudarmstadt.informatik.hostage.ui.LogFilter.SortType;
+import de.tudarmstadt.informatik.hostage.ui2.activity.MainActivity;
 import de.tudarmstadt.informatik.hostage.ui2.adapter.RecordListAdapter;
 import de.tudarmstadt.informatik.hostage.ui2.dialog.ChecklistDialog;
 import de.tudarmstadt.informatik.hostage.ui2.dialog.DateTimeDialogFragment;
@@ -92,6 +93,8 @@ public class RecordOverviewFragment extends Fragment implements ChecklistDialog.
 	public View onCreateView(LayoutInflater inflater, ViewGroup container,
              Bundle savedInstanceState) {
 
+		getActivity().setTitle(getResources().getString(R.string.drawer_records));
+
 		dbh = new UglyDbHelper(this.getActivity().getBaseContext());
 
 	    // Get the message from the intent
@@ -781,12 +784,7 @@ public class RecordOverviewFragment extends Fragment implements ChecklistDialog.
             RecordDetailFragment newFragment = new RecordDetailFragment();
             newFragment.setRecord(record);
 
-            FragmentTransaction transaction = fm.beginTransaction();
-            transaction.replace(R.id.content_frame, newFragment, newFragment.getTag());
-            transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
-            transaction.addToBackStack(null);
-
-            transaction.commit();
+	        MainActivity.getInstance().injectFragment(newFragment, true);
         }
 
     }

+ 1 - 0
src/de/tudarmstadt/informatik/hostage/ui2/fragment/SettingsFragment.java

@@ -18,6 +18,7 @@ import de.tudarmstadt.informatik.hostage.ui2.activity.MainActivity;
 public class SettingsFragment extends Fragment {
 	public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
 		super.onCreateView(inflater, container, savedInstanceState);
+		getActivity().setTitle(getResources().getString(R.string.drawer_settings));
 		View v = inflater.inflate(R.layout.fragment_settings, container, false);
 
 		TextView rootedText = (TextView) v.findViewById(R.id.settings_device_rooted);

+ 4 - 0
src/de/tudarmstadt/informatik/hostage/ui2/fragment/StatisticsFragment.java

@@ -161,6 +161,10 @@ public class StatisticsFragment extends Fragment implements ChecklistDialog.Chec
     public View onCreateView(LayoutInflater inflater, ViewGroup container,
                              Bundle savedInstanceState) {
 
+	    super.onCreateView(inflater, container, savedInstanceState);
+
+	    getActivity().setTitle(getResources().getString(R.string.drawer_statistics));
+
         dbh = new UglyDbHelper(this.getBaseContext());
 
         // Get the message from the intent

+ 2 - 0
src/de/tudarmstadt/informatik/hostage/ui2/fragment/ThreatMapFragment.java

@@ -255,6 +255,8 @@ public class ThreatMapFragment extends Fragment implements GoogleMap.OnInfoWindo
 	                         Bundle savedInstanceState) {
 		super.onCreateView(inflater, container, savedInstanceState);
 
+		getActivity().setTitle(getResources().getString(R.string.drawer_threat_map));
+
 		if (sView != null) {
 			ViewGroup parent = (ViewGroup) sView.getParent();
 			if (parent != null)