Browse Source

added wifi monitoring, profile manager improvments and bottom bar in the records list

Alexander Brakowski 10 years ago
parent
commit
7d112a47de

+ 10 - 32
res/layout/fragment_home.xml

@@ -39,7 +39,7 @@
             android:textStyle="bold" />
 
         <Switch
-            android:id="@+id/switch1"
+            android:id="@+id/home_switch_connection"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:layout_alignParentBottom="false"
@@ -52,7 +52,7 @@
             android:layout_marginRight="15dp"
             android:layout_marginTop="0dp"
             android:layout_weight="1"
-            android:checked="true"
+            android:checked="false"
             android:textSize="10sp" />
     </RelativeLayout>
 
@@ -66,7 +66,6 @@
     <LinearLayout
         android:layout_width="match_parent"
         android:layout_height="171dp"
-        android:layout_gravity="bottom"
         android:layout_marginLeft="15dp"
         android:layout_marginRight="15dp"
         android:orientation="vertical"
@@ -77,19 +76,7 @@
             android:layout_height="wrap_content" >
 
             <TextView
-                android:id="@+id/textView5"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:layout_below="@+id/textView2"
-                android:layout_centerHorizontal="true"
-                android:layout_gravity="center"
-                android:text="This network is being monitored by HosTaGe"
-                android:textAppearance="?android:attr/textAppearanceSmall"
-                android:textColor="@color/holo_dark_green"
-                android:textSize="11sp" />
-
-            <TextView
-                android:id="@+id/textView2"
+                android:id="@+id/home_text_name"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
                 android:layout_alignParentTop="true"
@@ -100,15 +87,6 @@
                 android:textAppearance="?android:attr/textAppearanceLarge"
                 android:textSize="26sp" />
 
-            <ImageView
-                android:id="@+id/imageView"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:layout_alignBottom="@+id/textView5"
-                android:layout_marginRight="10dp"
-                android:layout_toLeftOf="@+id/textView5"
-                android:src="@android:drawable/presence_online" />
-
             <ImageView
                 android:id="@+id/imageView2"
                 android:layout_width="wrap_content"
@@ -120,7 +98,7 @@
         </RelativeLayout>
 
         <TextView
-            android:id="@+id/textView3"
+            android:id="@+id/home_text_security"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:layout_gravity="center_horizontal"
@@ -131,7 +109,7 @@
             android:textSize="13sp" />
 
         <TextView
-            android:id="@+id/textView4"
+            android:id="@+id/home_text_attacks"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:layout_gravity="center_horizontal"
@@ -144,21 +122,21 @@
             android:layout_height="match_parent" >
 
             <TextView
-                android:id="@+id/textView6"
+                android:id="@+id/home_text_profile_header"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
                 android:layout_alignParentTop="true"
                 android:layout_centerHorizontal="true"
-                android:layout_marginTop="10dp"
                 android:text="Active profile: "
                 android:textSize="11sp"
-                android:textStyle="bold" />
+                android:textStyle="bold"
+                android:layout_marginTop="15dp"/>
 
             <TextView
-                android:id="@+id/textView7"
+                android:id="@+id/home_text_profile"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
-                android:layout_below="@+id/textView6"
+                android:layout_below="@+id/home_text_profile_header"
                 android:layout_centerHorizontal="true"
                 android:text="Windows 7"
                 android:textSize="11sp" />

+ 0 - 20
res/layout/fragment_profile_manager.xml

@@ -22,24 +22,4 @@
         android:layout_alignParentTop="true"
         android:layout_marginTop="0dp" />
 
-    <LinearLayout
-        android:orientation="horizontal"
-        android:layout_width="fill_parent"
-        android:layout_height="wrap_content"
-        android:layout_alignParentBottom="true"
-        android:layout_alignParentLeft="true"
-        android:layout_alignParentStart="true"
-        style="@android:style/Widget.Holo.Light.ActionBar.Solid.Inverse"
-        android:alpha="0.8">
-
-        <Button
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:text="New Button"
-            android:id="@+id/button"
-            android:layout_gravity="center_vertical"
-            style="@android:style/Widget.DeviceDefault.ActionButton.Overflow"
-            android:textColor="@android:color/primary_text_dark" />
-    </LinearLayout>
-
 </RelativeLayout>

+ 38 - 2
res/layout/fragment_record_list.xml

@@ -1,15 +1,51 @@
 <?xml version="1.0" encoding="utf-8"?>
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
-    android:layout_height="match_parent" >
+    android:layout_height="match_parent"
+    >
 
     <ListView
         android:id="@+id/loglistview"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:layout_alignParentLeft="true"
-        android:layout_alignParentTop="true" >
+        android:layout_alignParentTop="true"
+        android:paddingBottom="50dp"
+        android:clipToPadding="false"
+        >
 
     </ListView>
 
+    <RelativeLayout
+        style="@android:style/Widget.Holo.Light.ActionBar.Solid.Inverse"
+        android:orientation="horizontal"
+        android:layout_width="fill_parent"
+        android:layout_height="wrap_content"
+        android:alpha="0.8"
+        android:id="@+id/linearLayout"
+        android:layout_alignParentBottom="true"
+        android:layout_alignParentLeft="true"
+        android:layout_alignParentStart="true">
+
+        <ImageButton
+            style="@android:style/Widget.DeviceDefault.ActionButton.Overflow"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:id="@+id/imageButton2"
+            android:src="@drawable/ic_sort_by_size"
+            android:layout_gravity="right"
+            android:layout_alignParentTop="true"
+            android:layout_alignParentRight="true"
+            android:layout_alignParentEnd="true"/>
+
+        <ImageButton
+            style="@android:style/Widget.DeviceDefault.ActionButton.Overflow"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:id="@+id/imageButton"
+            android:src="@drawable/ic_filter"
+            android:layout_alignParentTop="true"
+            android:layout_toLeftOf="@+id/imageButton2"/>
+    </RelativeLayout>
+
 </RelativeLayout>

+ 2 - 2
res/layout/profile_manager_list_item.xml

@@ -19,7 +19,7 @@
         android:minHeight="?android:attr/listPreferredItemHeightSmall"
         android:text="Sample title"
         android:layout_alignParentTop="true"
-        android:layout_toRightOf="@+id/imageView" />
+        android:layout_toRightOf="@+id/profile_manager_item_image" />
 
     <TextView
         android:layout_width="match_parent"
@@ -53,7 +53,7 @@
     <ImageView
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        android:id="@+id/imageView"
+        android:id="@+id/profile_manager_item_image"
         android:src="@drawable/ic_launcher"
         android:layout_above="@+id/profile_manager_item_text"
         android:layout_alignParentLeft="true"

+ 7 - 0
src/de/tudarmstadt/informatik/hostage/commons/HelperUtils.java

@@ -268,4 +268,11 @@ public final class HelperUtils {
 	    }
 	    return bytes;
 	}
+
+	public static boolean isWifiConnected(Context context){
+		ConnectivityManager connManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
+		NetworkInfo mWifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
+
+		return mWifi.isConnected();
+	}
 }

+ 2 - 0
src/de/tudarmstadt/informatik/hostage/ui2/adapter/ProfileManagerListAdapter.java

@@ -38,10 +38,12 @@ public class ProfileManagerListAdapter extends ArrayAdapter<ProfileListItem> {
         TextView labelView = (TextView) rowView.findViewById(R.id.profile_manager_item_label);
         TextView textView = (TextView) rowView.findViewById(R.id.profile_manager_item_text);
         ImageView imageSelected = (ImageView) rowView.findViewById(R.id.profile_manager_item_activated);
+		ImageView itemIcon = (ImageView) rowView.findViewById(R.id.profile_manager_item_image);
 
         ProfileListItem item = values.get(position);
         textView.setText(item.label);
         labelView.setText(item.text);
+		itemIcon.setImageBitmap(item.icon);
 
         if(!item.activated){
             RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams )textView.getLayoutParams();

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

@@ -1,27 +1,190 @@
 package de.tudarmstadt.informatik.hostage.ui2.fragment;
+import android.app.AlertDialog;
 import android.app.Fragment;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.net.wifi.WifiManager;
 import android.os.Bundle;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
+import android.widget.CompoundButton;
+import android.widget.Switch;
+import android.widget.TextView;
+
+import javax.xml.soap.Text;
 
 import de.tudarmstadt.informatik.hostage.R;
+import de.tudarmstadt.informatik.hostage.commons.HelperUtils;
+import de.tudarmstadt.informatik.hostage.ui2.activity.MainActivity;
 
 /**
  * @author Alexander Brakowski
  * @created 13.01.14 19:06
  */
 
+
 public class HomeFragment extends Fragment {
+	private Switch mHomeSwitchConnection;
+	private TextView mHomeTextName;
+	private TextView mHomeTextSecurity;
+	private TextView mHomeTextAttacks;
+	private TextView mHomeTextProfile;
+	private TextView mHomeTextProfileHeader;
+
+	private View rootView;
+	private BroadcastReceiver wifiReceiver;
+
+	private CompoundButton.OnCheckedChangeListener switchChangeListener = null;
+
+	private int defaultTextColor;
+
+	private void assignViews() {
+		mHomeSwitchConnection = (Switch) rootView.findViewById(R.id.home_switch_connection);
+		mHomeTextName = (TextView) rootView.findViewById(R.id.home_text_name);
+		mHomeTextSecurity = (TextView) rootView.findViewById(R.id.home_text_security);
+		mHomeTextAttacks = (TextView) rootView.findViewById(R.id.home_text_attacks);
+		mHomeTextProfile = (TextView) rootView.findViewById(R.id.home_text_profile);
+		mHomeTextProfileHeader = (TextView) rootView.findViewById(R.id.home_text_profile_header);
+	}
+
+	private void registerBroadcastReceiver(){
+		wifiReceiver = new BroadcastReceiver() {
+			@Override
+			public void onReceive(Context context, Intent intent) {
+				final String action = intent.getAction();
+				//if (action.equals(WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION) || action.equals(WifiManager.SUPPLICANT_STATE_CHANGED_ACTION)) {
+					updateUI();
+					/*if (intent.getBooleanExtra(WifiManager.EXTRA_SUPPLICANT_CONNECTED, false)){
+
+					} else {
+						// wifi connection was lost
+					}*/
+				//}
+			}
+		};
+
+		IntentFilter intentFilter = new IntentFilter();
+		intentFilter.addAction(WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION);
+		intentFilter.addAction(WifiManager.SUPPLICANT_STATE_CHANGED_ACTION);
+		intentFilter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
+		intentFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
+
+		getActivity().registerReceiver(wifiReceiver, intentFilter);
+	}
+
+	public HomeFragment(){}
+
+	public void setStateNotActive(){
+		mHomeTextName.setTextColor(getResources().getColor(R.color.light_grey));
+		mHomeTextSecurity.setTextColor(getResources().getColor(R.color.light_grey));
+		mHomeTextAttacks.setTextColor(getResources().getColor(R.color.light_grey));
+		mHomeTextProfile.setTextColor(getResources().getColor(R.color.light_grey));
+		mHomeTextProfileHeader.setTextColor(getResources().getColor(R.color.light_grey));
+
+		mHomeSwitchConnection.setChecked(false);
+	}
+
+	public void setStateActive(){
+		mHomeTextAttacks.setText("0 attacks recorded");
+		mHomeTextSecurity.setText("Secure");
+		mHomeTextAttacks.setTextColor(getResources().getColor(R.color.holo_dark_green));
+		mHomeTextSecurity.setTextColor(getResources().getColor(R.color.holo_dark_green));
+
+		mHomeTextAttacks.setVisibility(View.VISIBLE);
+		mHomeTextSecurity.setVisibility(View.VISIBLE);
 
-    public HomeFragment(){}
+		mHomeTextName.setTextColor(defaultTextColor);
+		mHomeTextProfile.setTextColor(defaultTextColor);
+		mHomeTextProfileHeader.setTextColor(defaultTextColor);
+
+		mHomeSwitchConnection.setChecked(true);
+	}
+
+	public void setStateNotConnected(){
+		mHomeTextSecurity.setVisibility(View.INVISIBLE);
+		mHomeTextAttacks.setVisibility(View.INVISIBLE);
+		mHomeTextProfile.setVisibility(View.INVISIBLE);
+		mHomeTextProfileHeader.setVisibility(View.INVISIBLE);
+
+		mHomeTextName.setText("Not connected");
+	}
+
+	public void setStateConnected(){
+		mHomeTextProfile.setVisibility(View.VISIBLE);
+		mHomeTextProfileHeader.setVisibility(View.VISIBLE);
+	}
+
+	public void updateUI(){
+		if(!HelperUtils.isWifiConnected(getActivity())){
+			mHomeSwitchConnection.setOnCheckedChangeListener(null);
+			setStateNotConnected();
+			setStateNotActive();
+			mHomeSwitchConnection.setOnCheckedChangeListener(switchChangeListener);
+		} else {
+			setStateConnected();
+			mHomeTextName.setText(HelperUtils.getSSID(getActivity()));
+		}
+	}
 
     @Override
     public View onCreateView(LayoutInflater inflater, ViewGroup container,
                              Bundle savedInstanceState) {
 
-        View rootView = inflater.inflate(R.layout.fragment_home, container, false);
+        rootView = inflater.inflate(R.layout.fragment_home, container, false);
+	    assignViews();
+
+	    defaultTextColor = mHomeTextName.getCurrentTextColor();
+
+	    setStateNotActive();
+	    setStateNotConnected();
+
+	    registerBroadcastReceiver();
+
+	    updateUI();
+
+	    mHomeSwitchConnection = (Switch) rootView.findViewById(R.id.home_switch_connection);
+
+	    if(switchChangeListener == null){
+		    switchChangeListener = new CompoundButton.OnCheckedChangeListener() {
+			    @Override
+			    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
+				    if(!HelperUtils.isWifiConnected(getActivity())){
+					    new AlertDialog.Builder(getActivity())
+							    .setTitle("Information")
+							    .setMessage("You are not connected to a WiFi network. \n\nPlease connect to one, before trying to activate HosTaGe.")
+							    .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
+								    public void onClick(DialogInterface dialog, int which) {
+
+								    }
+							    })
+							    .setIcon(android.R.drawable.ic_dialog_info)
+							    .show();
+
+
+					    setStateNotActive();
+					    setStateNotConnected();
+				    } else {
+					    if(isChecked){
+						    setStateActive();
+					    } else {
+						    setStateNotActive();
+					    }
+				    }
+			    }
+		    };
+	    }
+	    mHomeSwitchConnection.setOnCheckedChangeListener(switchChangeListener);
 
         return rootView;
     }
+
+	@Override
+	public void onDestroy(){
+		super.onDestroy();
+		getActivity().unregisterReceiver(wifiReceiver);
+	}
 }

+ 16 - 12
src/de/tudarmstadt/informatik/hostage/ui2/fragment/ProfileManagerFragment.java

@@ -32,25 +32,29 @@ public class ProfileManagerFragment extends Fragment {
         ArrayList<ProfileListItem> strList = new ArrayList<ProfileListItem>();
 
         ProfileListItem nitem = new ProfileListItem(
-                "Test!!",
-                "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.",
-                R.drawable.ic_service_green);
+                "Windows 7",
+                "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat.",
+                R.drawable.ic_profile_w7);
 
         nitem.activated = true;
 
         strList.add(nitem);
         strList.add(new ProfileListItem(
-                "Test1!",
-                "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.",
-                R.drawable.ic_service_green));
+                "Windows Vista",
+		        "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat.",
+		        R.drawable.ic_profile_vista));
         strList.add(new ProfileListItem(
-                "Test2!",
-                "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.",
-                R.drawable.ic_service_green));
+                "Unix Distro",
+		        "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat.",
+		        R.drawable.ic_profile_unix));
         strList.add(new ProfileListItem(
-                "Test3!",
-                "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.",
-                R.drawable.ic_service_green));
+                "Random",
+		        "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat.",
+		        R.drawable.ic_service_green));
+	    strList.add(new ProfileListItem(
+			    "Mix",
+			    "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat.",
+			    R.drawable.ic_service_green));
 
         ProfileManagerListAdapter adapter = new ProfileManagerListAdapter(getActivity().getBaseContext(), strList);
         list.setAdapter(adapter);

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

@@ -20,6 +20,7 @@ import android.view.MenuInflater;
 import android.view.MenuItem;
 import android.view.View;
 import android.view.ViewGroup;
+import android.widget.AbsListView;
 import android.widget.AdapterView;
 import android.widget.ListAdapter;
 import android.widget.ListView;