Browse Source

Merge branch 'master' of https://git.tk.informatik.tu-darmstadt.de/scm-ssi-student-hostagev2

Daniel Lazar 10 years ago
parent
commit
587edd5ab2

+ 89 - 0
res/layout/fragment_connectioninfo_dialog.xml

@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+			  android:orientation="vertical"
+			  android:layout_width="fill_parent"
+			  android:layout_height="fill_parent"
+			  android:gravity="center_horizontal">
+	<TableLayout
+			android:layout_width="wrap_content"
+			android:layout_height="wrap_content"
+			android:layout_marginTop="16dp" android:layout_marginBottom="16dp">
+		<TableRow
+				android:layout_width="fill_parent"
+				android:layout_height="fill_parent">
+			<TextView
+					android:layout_width="wrap_content"
+					android:layout_height="wrap_content"
+					android:textAppearance="?android:attr/textAppearanceMedium"
+					android:text="@string/ssid"
+					android:id="@+id/textView1" android:layout_column="0"
+					android:layout_margin="4dp"
+					android:textStyle="bold"/>
+			<TextView
+					android:layout_width="fill_parent"
+					android:layout_height="wrap_content"
+					android:textAppearance="?android:attr/textAppearanceMedium"
+					android:text="undefined"
+					android:id="@+id/connectioninfo_ssid_value" android:layout_column="1"
+					android:layout_margin="4dp" android:gravity="right"/>
+		</TableRow>
+		<TableRow
+				android:layout_width="fill_parent"
+				android:layout_height="fill_parent">
+			<TextView
+					android:layout_width="wrap_content"
+					android:layout_height="wrap_content"
+					android:textAppearance="?android:attr/textAppearanceMedium"
+					android:text="@string/bssid"
+					android:id="@+id/textView2" android:layout_column="0"
+					android:layout_margin="4dp"
+					android:textStyle="bold"/>
+			<TextView
+					android:layout_width="fill_parent"
+					android:layout_height="wrap_content"
+					android:textAppearance="?android:attr/textAppearanceMedium"
+					android:text="undefined"
+					android:id="@+id/connectioninfo_bssid_value" android:layout_column="1"
+					android:layout_margin="4dp" android:gravity="right"/>
+		</TableRow>
+		<TableRow
+				android:layout_width="fill_parent"
+				android:layout_height="fill_parent">
+			<TextView
+					android:layout_width="wrap_content"
+					android:layout_height="wrap_content"
+					android:textAppearance="?android:attr/textAppearanceMedium"
+					android:text="@string/internal_ip"
+					android:id="@+id/textView3" android:layout_column="0"
+					android:layout_margin="4dp"
+					android:textStyle="bold"/>
+			<TextView
+					android:layout_width="wrap_content"
+					android:layout_height="wrap_content"
+					android:textAppearance="?android:attr/textAppearanceMedium"
+					android:text="undefined"
+					android:id="@+id/connectioninfo_internalip_value" android:layout_column="1"
+					android:layout_margin="4dp" android:gravity="right"/>
+		</TableRow>
+		<TableRow
+				android:layout_width="fill_parent"
+				android:layout_height="fill_parent">
+			<TextView
+					android:layout_width="wrap_content"
+					android:layout_height="wrap_content"
+					android:textAppearance="?android:attr/textAppearanceMedium"
+					android:text="@string/external_ip"
+					android:id="@+id/textView4" android:layout_column="0"
+					android:layout_margin="4dp"
+					android:textStyle="bold"/>
+			<TextView
+					android:layout_width="wrap_content"
+					android:layout_height="wrap_content"
+					android:textAppearance="?android:attr/textAppearanceMedium"
+					android:text="undefined"
+					android:id="@+id/connectioninfo_externalip_value" android:layout_column="1"
+					android:layout_margin="4dp" android:gravity="right"/>
+		</TableRow>
+	</TableLayout>
+</LinearLayout>

+ 1 - 1
res/layout/fragment_home.xml

@@ -88,7 +88,7 @@
                 android:textSize="26sp" />
 
             <ImageView
-                android:id="@+id/imageView2"
+                android:id="@+id/home_button_connection_info"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
                 android:layout_alignParentEnd="true"

+ 1 - 1
res/layout/fragment_services.xml

@@ -23,7 +23,7 @@
                 android:textStyle="bold" />
 
         <ImageView
-                android:id="@+id/imageView2"
+                android:id="@+id/services_button_connection_info"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
                 android:layout_alignParentEnd="true"

+ 3 - 0
res/values/strings.xml

@@ -6,6 +6,7 @@
     <string name="action_about">About</string>
     <string name="capital_on">OFF</string>
     <string name="capital_off">ON</string>
+	<string name="title_connection_info">Connection Info</string>
     <string name="status">Status</string>
     <string name="paranoid">Paranoid Mode</string>
     <string name="details">Connection info</string>
@@ -23,6 +24,8 @@
 	<string name="clear">Clear</string>
 	<string name="delete">Delete</string>
 	<string name="cancel">Cancel</string>
+	<string name="close">Close</string>
+	<string name="show_records">Show records</string>
 	<string name="dialog_clear_database">Clear all data?</string>	
 	<string name="export_dialog_title">Choose Export Format</string>		
 	<string name="delete_dialog_title">Delete data sets by:</string>	

+ 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

+ 58 - 8
src/de/tudarmstadt/informatik/hostage/ui2/activity/MainActivity.java

@@ -107,6 +107,8 @@ public class MainActivity extends Activity {
 
 	};
 
+	private boolean mInvalidMenuItem;
+
 	/**
 	 * Retrieve the singleton latest instance of the activity
 	 * @return MainActivity - the singleton instance
@@ -176,6 +178,7 @@ public class MainActivity extends Activity {
 
 		getActionBar().setDisplayHomeAsUpEnabled(true);
 		getActionBar().setHomeButtonEnabled(true);
+		getActionBar().setDisplayShowHomeEnabled(true);
 
 		mDrawerToggle = new ActionBarDrawerToggle(
 				this,                  /* host Activity */
@@ -247,6 +250,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);
 	}
 
@@ -280,12 +292,13 @@ public class MainActivity extends Activity {
 	}
 
 	public void displayView(int position) {
-		if(mSelectedMenuItem != null && position == mSelectedMenuItem.value) {
+		if(mSelectedMenuItem != null && position == mSelectedMenuItem.value && !mInvalidMenuItem) {
 			mDrawerLayout.closeDrawer(mDrawerList);
 			return;
 		}
 
         // DONT OPEN SAME VIEW AGAIN
+		mInvalidMenuItem = false;
 		MainMenuItem menuItemPosition = mSelectedMenuItem = MainMenuItem.create(position);
 
         Fragment fragment = null;
@@ -335,21 +348,58 @@ 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;
+		
+		if(tagObj == null){
+			this.mInvalidMenuItem = true;
+		}
+	}
+
+	@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);
 	}
 }

+ 68 - 0
src/de/tudarmstadt/informatik/hostage/ui2/fragment/ConnectionInfoDialogFragment.java

@@ -0,0 +1,68 @@
+package de.tudarmstadt.informatik.hostage.ui2.fragment;
+
+import android.app.AlertDialog;
+import android.app.Dialog;
+import android.app.DialogFragment;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.SharedPreferences;
+import android.os.Bundle;
+import android.view.ContextThemeWrapper;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.TextView;
+
+import java.util.ArrayList;
+
+import de.tudarmstadt.informatik.hostage.R;
+import de.tudarmstadt.informatik.hostage.ui.LogFilter;
+import de.tudarmstadt.informatik.hostage.ui2.activity.MainActivity;
+
+/**
+ * Created by Fabio Arnold on 03.03.14.
+ */
+public class ConnectionInfoDialogFragment extends DialogFragment {
+	public Dialog onCreateDialog(Bundle savedInstance) {
+		// get connection infos
+		SharedPreferences sharedPreferences = getActivity().getSharedPreferences(getString(R.string.connection_info), Context.MODE_PRIVATE);
+		final String ssid = sharedPreferences.getString(getString(R.string.connection_info_ssid), "");
+		String bssid = sharedPreferences.getString(getString(R.string.connection_info_bssid), "");
+		String internalIP = sharedPreferences.getString(getString(R.string.connection_info_internal_ip), "");
+		String externalIP = sharedPreferences.getString(getString(R.string.connection_info_external_ip), "");
+
+		// inflate the layout with a dark theme
+		Context context = new ContextThemeWrapper(getActivity(), android.R.style.Theme_Holo);
+		LayoutInflater localInflater = getActivity().getLayoutInflater().cloneInContext(context);
+		View view = localInflater.inflate(R.layout.fragment_connectioninfo_dialog, null);
+
+		// assign values in layout
+		((TextView)view.findViewById(R.id.connectioninfo_ssid_value)).setText(ssid);
+		((TextView)view.findViewById(R.id.connectioninfo_bssid_value)).setText(bssid);
+		((TextView)view.findViewById(R.id.connectioninfo_internalip_value)).setText(internalIP);
+		((TextView)view.findViewById(R.id.connectioninfo_externalip_value)).setText(externalIP);
+
+		// build the dialog
+		AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), AlertDialog.THEME_HOLO_DARK);
+		builder.setView(view);
+		builder.setTitle(R.string.title_connection_info);
+		builder.setPositiveButton(R.string.show_records, new DialogInterface.OnClickListener() {
+			@Override
+			public void onClick(DialogInterface dialog, int which) {
+				ArrayList<String> ssids = new ArrayList<String>();
+				ssids.add(ssid);
+
+				LogFilter filter = new LogFilter();
+				filter.setESSIDs(ssids);
+
+				RecordOverviewFragment recordOverviewFragment = new RecordOverviewFragment();
+				recordOverviewFragment.setFilter(filter);
+				recordOverviewFragment.setGroupKey("ESSID");
+
+				MainActivity.getInstance().injectFragment(recordOverviewFragment, false);
+			}
+		});
+		builder.setNegativeButton(R.string.close, null);
+
+		return builder.create();
+	}
+}

+ 29 - 2
src/de/tudarmstadt/informatik/hostage/ui2/fragment/HomeFragment.java

@@ -1,6 +1,7 @@
 package de.tudarmstadt.informatik.hostage.ui2.fragment;
 import android.app.AlertDialog;
 import android.app.Fragment;
+import android.app.FragmentManager;
 import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.DialogInterface;
@@ -9,6 +10,7 @@ import android.content.IntentFilter;
 import android.content.SharedPreferences;
 import android.os.Bundle;
 import android.support.v4.content.LocalBroadcastManager;
+import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
@@ -39,6 +41,7 @@ public class HomeFragment extends Fragment {
 	private TextView mHomeTextProfile;
 	private TextView mHomeTextProfileHeader;
 	private ImageView mHomeProfileImage;
+	private ImageView mHomeConnectionInfoButton;
 
 	private View rootView;
 	private BroadcastReceiver mReceiver;
@@ -61,6 +64,7 @@ public class HomeFragment extends Fragment {
 		mHomeTextProfile = (TextView) rootView.findViewById(R.id.home_text_profile);
 		mHomeTextProfileHeader = (TextView) rootView.findViewById(R.id.home_text_profile_header);
 		mHomeProfileImage = (ImageView) rootView.findViewById(R.id.home_image_profile);
+		mHomeConnectionInfoButton = (ImageView) rootView.findViewById(R.id.home_button_connection_info);
 	}
 
 	private void registerBroadcastReceiver(){
@@ -118,6 +122,8 @@ public class HomeFragment extends Fragment {
 		mHomeTextAttacks.setVisibility(View.INVISIBLE);
 		mHomeTextProfile.setVisibility(View.INVISIBLE);
 		mHomeTextProfileHeader.setVisibility(View.INVISIBLE);
+		mHomeProfileImage.setVisibility(View.INVISIBLE);
+		mHomeConnectionInfoButton.setVisibility(View.INVISIBLE);
 
 		mHomeTextName.setText("Not connected");
 	}
@@ -125,6 +131,8 @@ public class HomeFragment extends Fragment {
 	public void setStateConnected(){
 		mHomeTextProfile.setVisibility(View.VISIBLE);
 		mHomeTextProfileHeader.setVisibility(View.VISIBLE);
+		mHomeProfileImage.setVisibility(View.VISIBLE);
+		mHomeConnectionInfoButton.setVisibility(View.VISIBLE);
 	}
 
 	public void updateUI(){
@@ -139,7 +147,6 @@ public class HomeFragment extends Fragment {
 			mHomeTextName.setText(mConnectionInfo.getString(getString(R.string.connection_info_ssid), ""));
 		}
 
-		int dangerLevel = 0;
 		boolean hasActiveListeners = false;
 		int totalAttacks = 0;
 		int totalLogged = 0;
@@ -149,6 +156,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 +172,6 @@ public class HomeFragment extends Fragment {
 							}
 						}
 					} else {
-						totalAttacks += attacks;
 						THREAT_LEVEL = ThreatIndicatorGLRenderer.ThreatLevel.LIVE_THREAT;
 					}
 				}
@@ -217,6 +224,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();
@@ -225,6 +234,15 @@ public class HomeFragment extends Fragment {
         rootView = inflater.inflate(R.layout.fragment_home, container, false);
 	    assignViews();
 
+		// hook up the connection info button
+		mHomeConnectionInfoButton.setOnClickListener(new View.OnClickListener() {
+			@Override
+			public void onClick(View v) {
+				ConnectionInfoDialogFragment connectionInfoDialogFragment = new ConnectionInfoDialogFragment();
+				connectionInfoDialogFragment.show(getFragmentManager().beginTransaction(), connectionInfoDialogFragment.getTag());
+			}
+		});
+
 	    defaultTextColor = mHomeTextName.getCurrentTextColor();
 
 	    setStateNotActive(true);
@@ -274,6 +292,15 @@ public class HomeFragment extends Fragment {
 	    }
 	    mHomeSwitchConnection.setOnCheckedChangeListener(switchChangeListener);
 
+	    rootView.findViewById(R.id.home_profile_details).setOnClickListener(
+		    new View.OnClickListener() {
+			    @Override
+			    public void onClick(View v) {
+					Fragment fragment = new ProfileManagerFragment();
+				    MainActivity.getInstance().injectFragment(fragment, false);
+			    }
+		    }
+	    );
         return rootView;
     }
 

+ 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);
         }
 
     }

+ 8 - 0
src/de/tudarmstadt/informatik/hostage/ui2/fragment/ServicesFragment.java

@@ -58,6 +58,14 @@ public class ServicesFragment extends Fragment{
 	private void assignViews(){
 		mServicesSwitchService = (Switch) rootView.findViewById(R.id.service_switch_connection);
 		mServicesTextName = (TextView) rootView.findViewById(R.id.services_text_name);
+
+		rootView.findViewById(R.id.services_button_connection_info).setOnClickListener(new View.OnClickListener() {
+			@Override
+			public void onClick(View v) {
+				ConnectionInfoDialogFragment connectionInfoDialogFragment = new ConnectionInfoDialogFragment();
+				connectionInfoDialogFragment.show(getFragmentManager().beginTransaction(), connectionInfoDialogFragment.getTag());
+			}
+		});
 	}
 
 	public void updateUI(){

+ 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

+ 19 - 11
src/de/tudarmstadt/informatik/hostage/ui2/fragment/ThreatMapFragment.java

@@ -77,18 +77,24 @@ public class ThreatMapFragment extends Fragment implements GoogleMap.OnInfoWindo
 	 */
 	@Override
 	public void onInfoWindowClick(Marker marker) {
-		MainActivity.getInstance().displayView(MainActivity.MainMenuItem.RECORDS.getValue());
-		RecordOverviewFragment recordOverviewFragment = (RecordOverviewFragment)MainActivity.getInstance().getCurrentFragment();
-		if (recordOverviewFragment != null) {
-			String ssid = sMarkerIDToSSID.get(marker.getId());
-			ArrayList<String> ssids = new ArrayList<String>();
-			ssids.add(ssid);
-			LogFilter filter = new LogFilter();
-			filter.setESSIDs(ssids);
-			recordOverviewFragment.setFilter(filter);
-			recordOverviewFragment.setGroupKey("ESSID");
+		//MainActivity.getInstance().displayView(MainActivity.MainMenuItem.RECORDS.getValue());
+		//RecordOverviewFragment recordOverviewFragment = (RecordOverviewFragment)MainActivity.getInstance().getCurrentFragment();
+		//if (recordOverviewFragment != null) {
+		String ssid = sMarkerIDToSSID.get(marker.getId());
+
+		ArrayList<String> ssids = new ArrayList<String>();
+		ssids.add(ssid);
+
+		LogFilter filter = new LogFilter();
+		filter.setESSIDs(ssids);
+
+		RecordOverviewFragment recordOverviewFragment = new RecordOverviewFragment();
+		recordOverviewFragment.setFilter(filter);
+		recordOverviewFragment.setGroupKey("ESSID");
+
+		MainActivity.getInstance().injectFragment(recordOverviewFragment, false);
 			//recordOverviewFragment.showDetailsForSSID(getActivity(), ssid);
-		}
+		//}
 	}
 
 	/**
@@ -255,6 +261,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)

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

@@ -32,7 +32,7 @@ public class ThreatIndicatorGLRenderer implements Renderer {
 		NO_THREAT,
 		PAST_THREAT,
 		LIVE_THREAT
-	};
+	}
 	
 	/**
 	 * Set the threat level which should be indicated
@@ -97,6 +97,8 @@ public class ThreatIndicatorGLRenderer implements Renderer {
 			if (sPlayGreetingAnimation) {
 				androidMesh.startAction("greet", false, false);
 				sPlayGreetingAnimation = false;
+			} else if (mCurrentThreatLevel == ThreatLevel.NO_THREAT) { // default state
+				androidMesh.startAction("happy", true, false); // play NO_THREAT animation
 			}
 		} catch (IOException e) {
 			Log.e("gl", "Couldn't open android mesh");