Browse Source

Added new layout to log overview
cleaned log overview
added filter and sort functions to the bottom bar on the log overview

Julien 10 years ago
parent
commit
c5d0d57e26

+ 3 - 2
res/layout/date_time_dialog.xml

@@ -11,11 +11,12 @@
         android:id="@+id/DatePicker"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        android:layout_marginRight="40dp" />
+         />
 
     <TimePicker
         android:id="@+id/TimePicker"
         android:layout_width="wrap_content"
-        android:layout_height="wrap_content" />
+        android:layout_height="wrap_content"
+         />
 
 </LinearLayout>

+ 18 - 12
res/layout/fragment_record_list.xml

@@ -4,15 +4,21 @@
     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:paddingBottom="50dp"
-        android:clipToPadding="false"
-        >
+            <ListView
+                xmlns:android="http://schemas.android.com/apk/res/android"
+                android:id="@+id/loglistview"
+                android:layout_width="match_parent"
+                android:layout_height="match_parent"
+                android:layout_above="@+id/linearLayout"
+                android:layout_alignParentLeft="true"
+                android:layout_alignParentTop="true"
+                android:layout_marginLeft="0dp"
+                android:layout_marginTop="0dp"
+                android:background="#F2F2F2"
+                android:choiceMode="singleChoice"
+                android:divider="@android:color/transparent"
+                android:dividerHeight="10dp"
+                android:padding="5dp" >
 
     </ListView>
 
@@ -31,7 +37,7 @@
             style="@android:style/Widget.DeviceDefault.ActionButton.Overflow"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:id="@+id/imageButton2"
+            android:id="@+id/SortButton"
             android:src="@drawable/ic_sort_by_size"
             android:layout_gravity="right"
             android:layout_alignParentTop="true"
@@ -42,10 +48,10 @@
             style="@android:style/Widget.DeviceDefault.ActionButton.Overflow"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:id="@+id/imageButton"
+            android:id="@+id/FilterButton"
             android:src="@drawable/ic_filter"
             android:layout_alignParentTop="true"
-            android:layout_toLeftOf="@+id/imageButton2"/>
+            android:layout_toLeftOf="@+id/SortButton"/>
     </RelativeLayout>
 
 </RelativeLayout>

+ 20 - 33
res/layout/loglist_row.xml

@@ -1,38 +1,25 @@
 <?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" >
 
-    <TextView
-        android:id="@+id/RecordTextFieldBSSID"
-        android:layout_width="fill_parent"
-        android:layout_height="wrap_content"
-        android:layout_alignParentLeft="true"
-        android:layout_alignParentTop="true"
-        android:text="BSSID" />
-
-    <TextView
-        android:id="@+id/RecordTextFieldSSID"
-        android:layout_width="fill_parent"
-        android:layout_height="wrap_content"
-        android:layout_alignParentLeft="true"
-        android:layout_below="@+id/RecordTextFieldBSSID"
-        android:text="SSID" />
+<RelativeLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:orientation="vertical"
+    android:layout_width="fill_parent"
+    android:layout_height="fill_parent"
+    android:id="@+id/profile_manager_root_view">
 
-    <TextView
-        android:id="@+id/RecordTextFieldProtocol"
-        android:layout_width="fill_parent"
-        android:layout_height="wrap_content"
+    <ListView
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        xmlns:android="http://schemas.android.com/apk/res/android"
+        android:id="@+id/profile_manager_listview"
+        android:choiceMode="singleChoice"
+        android:background="#F2F2F2"
+        android:dividerHeight="10dp"
+        android:divider="@android:color/transparent"
+        android:padding="5dp"
         android:layout_alignParentLeft="true"
-        android:layout_below="@+id/RecordTextFieldSSID"
-        android:text="Protocol" />
-
-    <TextView
-        android:id="@+id/RecordTextFieldTimestamp"
-        android:layout_width="fill_parent"
-        android:layout_height="wrap_content"
-        android:layout_alignParentLeft="true"
-        android:layout_below="@+id/RecordTextFieldProtocol"
-        android:text="Timestamp" />
+        android:layout_marginLeft="0dp"
+        android:layout_alignParentTop="true"
+        android:layout_marginTop="0dp" />
 
-</RelativeLayout>
+</RelativeLayout>

+ 1 - 3
src/de/tudarmstadt/informatik/hostage/ui2/activity/MainActivity.java

@@ -156,10 +156,8 @@ public class MainActivity extends Activity {
 				fragment = new HomeFragment();
 				break;
 			case 2:
-				//LogFilter filter = new LogFilter();
-				Intent intent = this.getIntent(); //new Intent(this, ViewLogTable.class);
+				Intent intent = this.getIntent();
 				intent.removeExtra(LogFilter.LOG_FILTER_INTENT_KEY);
-				//intent.putExtra(LogFilter.LOG_FILTER_INTENT_KEY, null);
 				fragment = new RecordOverviewFragment();
 				break;
 			case 4:

+ 45 - 38
src/de/tudarmstadt/informatik/hostage/ui2/dialog/ChecklistDialog.java

@@ -2,35 +2,39 @@ package de.tudarmstadt.informatik.hostage.ui2.dialog;
 
 import java.util.ArrayList;
 
+import android.annotation.SuppressLint;
 import android.app.Activity;
 import android.app.AlertDialog;
 import android.app.Dialog;
 import android.app.DialogFragment;
 import android.content.DialogInterface;
-import android.content.Intent;
+//import android.content.Intent;
 import android.os.Bundle;
 import de.tudarmstadt.informatik.hostage.R;
 import de.tudarmstadt.informatik.hostage.ui2.activity.MainActivity;
 
+@SuppressLint("ValidFragment")
 public class ChecklistDialog extends DialogFragment {
 	
 	private ArrayList<Integer> mSelectedItems;
 	private ArrayList<String> itemTitles;
     private ChecklistDialogListener mListener;
     
+    private int selectedIndex;
     private boolean isMultipleChoice;
     
     public String title;
 
-	static public final String DIALOG_TITLE_KEY = "DIALOG_TITLE_KEY";
-	static public final String DIALOG_IS_MULTIPLECHOICE_KEY = "DIALOG_IS_MULTIPLECHOICE_KEY";
-	static public final String DIALOG_SELECTED_INDEX_KEY = "DIALOG_SELECTED_INDEX_KEY";
-
-	static public final String DIALOG_TITLE_ARRAY_KEY = "DIALOG_TITLE_ARRAY_KEY";
-	static public final String DIALOG_MULTIPLECHOICE_SELECTED_KEY = "DIALOG_MULTIPLECHOICE_SELECTED_KEY";
+//	static public final String DIALOG_TITLE_KEY = "DIALOG_TITLE_KEY";
+//	static public final String DIALOG_IS_MULTIPLECHOICE_KEY = "DIALOG_IS_MULTIPLECHOICE_KEY";
+//	static public final String DIALOG_SELECTED_INDEX_KEY = "DIALOG_SELECTED_INDEX_KEY";
+//
+//	static public final String DIALOG_TITLE_ARRAY_KEY = "DIALOG_TITLE_ARRAY_KEY";
+//	static public final String DIALOG_MULTIPLECHOICE_SELECTED_KEY = "DIALOG_MULTIPLECHOICE_SELECTED_KEY";
 	
 	
-    public interface ChecklistDialogListener {
+    @SuppressLint("ValidFragment")
+	public interface ChecklistDialogListener {
         public void onDialogPositiveClick(ChecklistDialog dialog);
         public void onDialogNegativeClick(ChecklistDialog dialog);
     }
@@ -43,9 +47,38 @@ public class ChecklistDialog extends DialogFragment {
     	return this.isMultipleChoice;
     }
     
+    public ChecklistDialog(String title, ArrayList<String> itemTitles, boolean[] selected, boolean isMultipleChoice , ChecklistDialogListener listener){
+    	mListener = listener;
+    	this.mSelectedItems = new ArrayList<Integer>();
+	    
+    	this.isMultipleChoice = isMultipleChoice;
+	    this.title = title;
+	    this.itemTitles = itemTitles;
+
+	    
+	    
+	    boolean[] selectedArray = new boolean[this.itemTitles.size()];
+
+	    if(this.isMultipleChoice){
+		    for(int i = 0; i < this.itemTitles.size(); i++){
+		    	boolean isSelected = selected[i];
+		    	selectedArray[i] = isSelected;
+		    	if(isSelected) this.mSelectedItems.add(i);
+		    }
+	    } else {
+		    for(int i = 0; i < this.itemTitles.size(); i++){
+		    	boolean isSelected = selected[i];
+		    	selectedArray[i] = isSelected;
+		    	if(isSelected) this.selectedIndex = i;
+		    }
+	    }
+    }
+    
     @Override
     public void onAttach(Activity activity) {
         super.onAttach(activity);
+        
+        if(this.mListener == null)
         try {
             
             if (activity.getClass().equals(MainActivity.class)){
@@ -69,39 +102,15 @@ public class ChecklistDialog extends DialogFragment {
 	
 	@Override
 	public Dialog onCreateDialog(Bundle savedInstanceState) {
-	    mSelectedItems = new ArrayList<Integer>();
 	    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
 	    
-	    Intent intent = this.getActivity().getIntent();
-	    String title = intent.getStringExtra(DIALOG_TITLE_KEY);
-	    this.isMultipleChoice = intent.getBooleanExtra(DIALOG_IS_MULTIPLECHOICE_KEY, true);
-
-	    this.title = title;
-	    
-	    this.itemTitles =  intent.getStringArrayListExtra(DIALOG_TITLE_ARRAY_KEY);
 	    CharSequence[] titles = this.itemTitles.toArray(new CharSequence[this.itemTitles.size()]);
-
-	    ArrayList<String> selectedTitles = null;
-	    
-	    int selectedIndex = 0;
 	    
 	    boolean[] selectedArray = new boolean[this.itemTitles.size()];
-
-	    if(this.isMultipleChoice){
-	    	selectedTitles = intent.getStringArrayListExtra(DIALOG_MULTIPLECHOICE_SELECTED_KEY);
-	        int i = 0;
-		    for(String t : this.itemTitles){
-		    	boolean isSelected = selectedTitles.contains(t);
-		    	selectedArray[i] = isSelected;
-		    	if(isSelected) this.mSelectedItems.add(i);
-		    	i++;
-		    }
-	    } else {
-	    	 selectedIndex = intent.getIntExtra(DIALOG_SELECTED_INDEX_KEY,selectedIndex); 
+	    for(Integer selection : this.mSelectedItems){
+	    	selectedArray[selection.intValue()] = true;
 	    }
-	    
-	
-	    
+
 	    if(this.isMultipleChoice){
 	        builder.setTitle(title).setMultiChoiceItems(titles, selectedArray,
                     new DialogInterface.OnMultiChoiceClickListener() {
@@ -126,7 +135,7 @@ public class ChecklistDialog extends DialogFragment {
 	        
 	    } else {
 	    	
-	    	 builder.setTitle(title).setSingleChoiceItems(titles, selectedIndex, 
+	    	 builder.setTitle(title).setSingleChoiceItems(titles, this.selectedIndex, 
 	    			 new DialogInterface.OnClickListener() {
 	             public void onClick(DialogInterface dialog, int id) {
 	                 mSelectedItems.clear();
@@ -145,8 +154,6 @@ public class ChecklistDialog extends DialogFragment {
 	         });
 	    }
 	    
-	
-
 	    return builder.create();
 	}
 }

+ 223 - 144
src/de/tudarmstadt/informatik/hostage/ui2/fragment/RecordOverviewFragment.java

@@ -13,18 +13,22 @@ import android.annotation.SuppressLint;
 import android.app.Fragment;
 import android.content.Context;
 import android.content.Intent;
+import android.graphics.Color;
 import android.os.Bundle;
+import android.text.SpannableString;
+import android.text.style.ForegroundColorSpan;
 import android.view.LayoutInflater;
 import android.view.Menu;
 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.ImageButton;
 import android.widget.ListAdapter;
 import android.widget.ListView;
-import android.widget.SimpleAdapter;
+import android.widget.PopupMenu;
+import android.widget.PopupMenu.OnMenuItemClickListener;
 import android.widget.Toast;
 import de.tudarmstadt.informatik.hostage.R;
 import de.tudarmstadt.informatik.hostage.logging.DatabaseHandler;
@@ -32,6 +36,7 @@ import de.tudarmstadt.informatik.hostage.logging.Record;
 import de.tudarmstadt.informatik.hostage.logging.Record.TYPE;
 import de.tudarmstadt.informatik.hostage.ui.LogFilter;
 import de.tudarmstadt.informatik.hostage.ui.LogFilter.SortType;
+import de.tudarmstadt.informatik.hostage.ui2.adapter.RecordListAdapter;
 import de.tudarmstadt.informatik.hostage.ui2.dialog.ChecklistDialog;
 import de.tudarmstadt.informatik.hostage.ui2.dialog.DateTimeDialogFragment;
 
@@ -45,7 +50,7 @@ public class RecordOverviewFragment extends Fragment implements ChecklistDialog.
 	static final String FILTER_MENU_TITLE_TIMESTAMP_BELOW = "To Date";
 	static final String FILTER_MENU_TITLE_TIMESTAMP_ABOVE = "From Date";
 	static final String FILTER_MENU_TITLE_SORTING = "Sort by";
-	static final String FILTER_MENU_TITLE_REMOVE = "Remove";
+	static final String FILTER_MENU_TITLE_REMOVE = "Reset Filter";
 	
 	private boolean wasBelowTimePicker;
 
@@ -56,16 +61,17 @@ public class RecordOverviewFragment extends Fragment implements ChecklistDialog.
 	
 	
     public RecordOverviewFragment(){}
+    
 	
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setHasOptionsMenu(true);
     }
+    
 	public View onCreateView(LayoutInflater inflater, ViewGroup container,
              Bundle savedInstanceState) {
 
-		
 		dbh = new DatabaseHandler(this.getActivity().getBaseContext());
 	    // Get the message from the intent
 	    Intent intent = this.getActivity().getIntent();
@@ -88,19 +94,69 @@ public class RecordOverviewFragment extends Fragment implements ChecklistDialog.
 		
 		registerListClickCallback(mylist);
 		
+        ImageButton filterButton = (ImageButton) rootView.findViewById(R.id.FilterButton);
+        filterButton.setOnClickListener(new View.OnClickListener() {
+            public void onClick(View v) {
+            	RecordOverviewFragment.this.openFilterPopupMenuOnView(v);
+            }
+        });
+        filterButton.setVisibility(this.showFilterButton? View.VISIBLE : View.INVISIBLE);
+        
+        ImageButton sortButton = (ImageButton) rootView.findViewById(R.id.SortButton);
+        sortButton.setOnClickListener(new View.OnClickListener() {
+            public void onClick(View v) {
+                // Open SortMenu
+                RecordOverviewFragment.this.openSortingDialog();
+            }
+        });
+		
 		return rootView;
 	 }
-	
-	private void clearFilter(){
-    	this.filter = new LogFilter();
-    	this.filter.setProtocols(this.protocolTitles());
-    	this.filter.setBSSIDs(this.bssids());
-    	this.filter.setESSIDs(this.essids());
+
+
+
+	public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
+		super.onCreateOptionsMenu(menu, inflater);
 	}
+
+	public boolean onFilterMenuItemSelected(MenuItem item) {
+		String title = item.getTitle().toString();
+		
+		if(title.equals(FILTER_MENU_TITLE_BSSID)){
+			this.openBSSIDFilterDialog();
+		}
+		if(title.equals(FILTER_MENU_TITLE_ESSID)){
+			this.openESSIDFilterDialog();
+		}		
+		if(title.equals(FILTER_MENU_TITLE_PROTOCOLS)){
+			this.openProtocolsFilterDialog();
+		}
+		if(title.equals(FILTER_MENU_TITLE_SORTING)){
+			this.openSortingDialog();
+		}
+		if(title.equals(FILTER_MENU_TITLE_REMOVE)){
+			this.clearFilter();
+		}
+		if(title.equals(FILTER_MENU_TITLE_TIMESTAMP_BELOW)){
+			this.openTimestampToFilterDialog();
+		}
+		if(title.equals(FILTER_MENU_TITLE_TIMESTAMP_ABOVE)){
+			this.openTimestampFromFilterDialog();
+		}
+		return super.onOptionsItemSelected(item);
+	}
+	
+	
+	
+	/*****************************
+	 * 
+	 *          ListView Stuff
+	 * 
+	 * ***************************/
 	
 	private void populateListViewFromDB(ListView mylist) {
 		
-		ArrayList<HashMap<String, String>> Items = new ArrayList<HashMap<String, String>>();
+		ArrayList<HashMap<String, String>> items = new ArrayList<HashMap<String, String>>();
 
 		ArrayList<Record> data = dbh.getRecordsForFilter(this.filter);    
 		
@@ -112,14 +168,14 @@ public class RecordOverviewFragment extends Fragment implements ChecklistDialog.
 			map.put(this.getString(R.string.RecordProtocol), val.getProtocol());
 			map.put(this.getString(R.string.RecordTimestamp),
 					this.getDateAsString(val.getTimestamp()));
-			Items.add(map);
+			items.add(map);
 		}
 	        
 	     // Adding Items to ListView
 	        String keys[] = new String[] { this.getString(R.string.RecordBSSID), this.getString(R.string.RecordSSID), this.getString(R.string.RecordProtocol), this.getString(R.string.RecordTimestamp)};
 	        int ids[] = new int[] {R.id.RecordTextFieldBSSID, R.id.RecordTextFieldSSID, R.id.RecordTextFieldProtocol, R.id.RecordTextFieldTimestamp };
 	        
-	        ListAdapter adapter = new SimpleAdapter(this.getActivity(), Items, R.layout.loglist_row, keys, ids);
+	        ListAdapter adapter = new RecordListAdapter(this.getActivity(), items, R.layout.loglist_row, keys, ids);
 	        
 	        mylist.setAdapter(adapter);
 	}
@@ -176,82 +232,64 @@ public class RecordOverviewFragment extends Fragment implements ChecklistDialog.
 		});
 	}
 	
+	
+	
+	/*****************************
+	 * 
+	 *          Date Transform
+	 * 
+	 * ***************************/
+	
+	
+	@SuppressLint("SimpleDateFormat")
+	private String getDateAsString(long timeStamp) {
 
-	public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
-		super.onCreateOptionsMenu(menu, inflater);
-		if(this.showFilterButton){
-			for(String title : this.filterTitles()){
-				MenuItem item = menu.add(title);
-				
-			}
+		try {
+			DateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
+			Date netDate = (new Date(timeStamp));
+			return sdf.format(netDate);
+		} catch (Exception ex) {
+			return "xx";
 		}
 	}
+	
+	
+	/*****************************
+	 * 
+	 *          Getter / Setter
+	 * 
+	 * ***************************/
 
-	@Override
-	public boolean onOptionsItemSelected(MenuItem item) {
-		String title = item.getTitle().toString();
-		
-		if(title.equals(FILTER_MENU_TITLE_BSSID)){
-			this.openBSSIDFilterDialog();
-		}
-		if(title.equals(FILTER_MENU_TITLE_ESSID)){
-			this.openESSIDFilterDialog();
-		}		
-		if(title.equals(FILTER_MENU_TITLE_PROTOCOLS)){
-			this.openProtocolsFilterDialog();
-		}
-		if(title.equals(FILTER_MENU_TITLE_SORTING)){
-			this.openSortingDialog();
-		}
-		if(title.equals(FILTER_MENU_TITLE_REMOVE)){
-			this.clearFilter();
-		}
-		if(title.equals(FILTER_MENU_TITLE_TIMESTAMP_BELOW)){
-			this.openTimestampToFilterDialog();
-		}
-		if(title.equals(FILTER_MENU_TITLE_TIMESTAMP_ABOVE)){
-			this.openTimestampFromFilterDialog();
-		}
-		return super.onOptionsItemSelected(item);
+	public boolean isShowFilterButton() {
+		return showFilterButton;
+	}
+
+	public void setShowFilterButton(boolean showFilterButton) {
+		this.showFilterButton = showFilterButton;
 	}
 	
 	
 	
+
+	/*****************************
+	 * 
+	 *          Open Dialog Methods
+	 * 
+	 * ***************************/
+	
 	
 	private void openBSSIDFilterDialog(){
-	    Intent intent = this.getActivity().getIntent();
-	    intent.putExtra(ChecklistDialog.DIALOG_TITLE_KEY, FILTER_MENU_TITLE_BSSID);
-	    intent.putExtra(ChecklistDialog.DIALOG_IS_MULTIPLECHOICE_KEY, true);
-
-	     intent.putStringArrayListExtra(ChecklistDialog.DIALOG_TITLE_ARRAY_KEY, this.bssids());
-	     intent.putStringArrayListExtra(ChecklistDialog.DIALOG_MULTIPLECHOICE_SELECTED_KEY, this.selectedBSSIDs());
-		
-		ChecklistDialog newFragment = new ChecklistDialog();
+		ChecklistDialog newFragment = new ChecklistDialog(FILTER_MENU_TITLE_BSSID,this.bssids(), this.selectedBSSIDs(), true , this);
 	    newFragment.show(this.getActivity().getFragmentManager(), FILTER_MENU_TITLE_BSSID);
 	}
 	
 	private void openESSIDFilterDialog(){
-		
-	    Intent intent = this.getActivity().getIntent();
-	    intent.putExtra(ChecklistDialog.DIALOG_TITLE_KEY, FILTER_MENU_TITLE_ESSID);
-	    intent.putExtra(ChecklistDialog.DIALOG_IS_MULTIPLECHOICE_KEY, true);
-
-	     intent.putStringArrayListExtra(ChecklistDialog.DIALOG_TITLE_ARRAY_KEY, this.essids());
-	     intent.putStringArrayListExtra(ChecklistDialog.DIALOG_MULTIPLECHOICE_SELECTED_KEY, this.selectedESSIDs());
-		
-		ChecklistDialog newFragment = new ChecklistDialog();
+		ChecklistDialog newFragment = new ChecklistDialog(FILTER_MENU_TITLE_ESSID,this.essids(), this.selectedESSIDs(), true , this);
 	    newFragment.show(this.getActivity().getFragmentManager(), FILTER_MENU_TITLE_ESSID);
 	}
 	
 	private void openProtocolsFilterDialog(){
-	    Intent intent = this.getActivity().getIntent();
-	    intent.putExtra(ChecklistDialog.DIALOG_TITLE_KEY, FILTER_MENU_TITLE_PROTOCOLS);
-	    intent.putExtra(ChecklistDialog.DIALOG_IS_MULTIPLECHOICE_KEY, true);
-
-	     intent.putStringArrayListExtra(ChecklistDialog.DIALOG_TITLE_ARRAY_KEY, this.protocolTitles());
-	     intent.putStringArrayListExtra(ChecklistDialog.DIALOG_MULTIPLECHOICE_SELECTED_KEY, this.selectedProtocols());
-		
-		ChecklistDialog newFragment = new ChecklistDialog();
+		ChecklistDialog newFragment = new ChecklistDialog(FILTER_MENU_TITLE_PROTOCOLS,this.protocolTitles(), this.selectedProtocols(), true , this);
 	    newFragment.show(this.getActivity().getFragmentManager(), FILTER_MENU_TITLE_PROTOCOLS);
 	}
 	
@@ -268,63 +306,41 @@ public class RecordOverviewFragment extends Fragment implements ChecklistDialog.
 	}
 	
 	private void openSortingDialog(){
-	    Intent intent = this.getActivity().getIntent();
-	    intent.putExtra(ChecklistDialog.DIALOG_TITLE_KEY, FILTER_MENU_TITLE_SORTING);
-	    intent.putExtra(ChecklistDialog.DIALOG_IS_MULTIPLECHOICE_KEY, false);
-	    
-	     intent.putStringArrayListExtra(ChecklistDialog.DIALOG_TITLE_ARRAY_KEY, this.sortTypeTtiles());
-	     intent.putExtra(ChecklistDialog.DIALOG_SELECTED_INDEX_KEY, this.filter.sorttype.getValue());
-		
-		ChecklistDialog newFragment = new ChecklistDialog();
+		ChecklistDialog newFragment = new ChecklistDialog(FILTER_MENU_TITLE_SORTING,this.sortTypeTtiles(), this.selectedSorttype(), false , this);
 	    newFragment.show(this.getActivity().getFragmentManager(), FILTER_MENU_TITLE_SORTING);
 	}
 	
+
+	/*****************************
+	 * 
+	 *          Filter Stuff
+	 * 
+	 * ***************************/
 	
-	public void onDialogPositiveClick(ChecklistDialog dialog) {
-		// TODO Auto-generated method stub
-		String title = dialog.getTitle();
-		if(title.equals(FILTER_MENU_TITLE_BSSID)){
-			this.filter.setBSSIDs(dialog.getSelectedItemTitles());
-		}
-		if(title.equals(FILTER_MENU_TITLE_ESSID)){
-			this.filter.setESSIDs(dialog.getSelectedItemTitles());
-		}
-		if(title.equals(FILTER_MENU_TITLE_PROTOCOLS)){
-			this.filter.setProtocols(dialog.getSelectedItemTitles());
-		}
-		if(title.equals(FILTER_MENU_TITLE_SORTING)){
-			ArrayList<String> titles = dialog.getSelectedItemTitles();
-			String t = titles.get(0);
-			int sortType = this.sortTypeTtiles().indexOf(t);
-			this.filter.setSorttype(SortType.values()[sortType]);
+	private void openFilterPopupMenuOnView(View v){
+        // Open FilterMenu
+        PopupMenu filterMenu = new PopupMenu(getBaseContext(), v);
+		for(String title : RecordOverviewFragment.this.filterMenuTitles()){
+			// Set a white Title
+			SpannableString styledMenuTitle = new SpannableString(title);
+				styledMenuTitle.setSpan(new ForegroundColorSpan(Color.parseColor("#FFFFFF")), 0, title.length(), 0);
+				filterMenu.getMenu().add(styledMenuTitle);
 		}
-		this.populateListViewFromDB(this.listView);
-	}
-
-	public void onDialogNegativeClick(ChecklistDialog dialog) {
-		// nothing in here
+		filterMenu.setOnMenuItemClickListener(new OnMenuItemClickListener() {
+            public boolean onMenuItemClick(MenuItem item) {
+                RecordOverviewFragment.this.onFilterMenuItemSelected(item);
+                return true;
+            }
+        });
+			filterMenu.show();
 	}
-
 	
 	
-	@SuppressLint("SimpleDateFormat")
-	private String getDateAsString(long timeStamp) {
-
-		try {
-			DateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
-			Date netDate = (new Date(timeStamp));
-			return sdf.format(netDate);
-		} catch (Exception ex) {
-			return "xx";
-		}
-	}
-
-	public boolean isShowFilterButton() {
-		return showFilterButton;
-	}
-
-	public void setShowFilterButton(boolean showFilterButton) {
-		this.showFilterButton = showFilterButton;
+	private void clearFilter(){
+    	this.filter = new LogFilter();
+    	this.filter.setProtocols(this.protocolTitles());
+    	this.filter.setBSSIDs(this.bssids());
+    	this.filter.setESSIDs(this.essids());
 	}
 	
 	
@@ -336,8 +352,16 @@ public class RecordOverviewFragment extends Fragment implements ChecklistDialog.
 		}
 		return titles;
 	}
-	public ArrayList<String> selectedProtocols(){
-		return this.filter.protocols;
+	public boolean[] selectedProtocols(){
+		ArrayList<String> protocols = this.protocolTitles();
+		boolean[] selected = new boolean[protocols.size()];
+		
+		int i = 0;
+		for(String protocol : protocols){
+			selected[i] =(this.filter.protocols.contains(protocol));
+			i++;
+		}
+		return selected;
 	}
 
 	public ArrayList<String> sortTypeTtiles(){
@@ -352,42 +376,109 @@ public class RecordOverviewFragment extends Fragment implements ChecklistDialog.
 		//titles.add("ID");
 		return titles;
 	}
+	public boolean[] selectedSorttype(){
+		ArrayList<String> types = this.sortTypeTtiles();
+		boolean[] selected = new boolean[types.size()];	
+		int i = 0;
+		for(String sorttype : types){
+			selected[i] =(this.filter.sorttype.toString() == sorttype);
+			i++;
+		}
+		return selected;
+	}
 	
 	public ArrayList<String> bssids(){
-		ArrayList<String> titles = new ArrayList<String>();
 		ArrayList<String> records = dbh.getUniqueBSSIDRecords();
-
 		return records;
 	}
-	public ArrayList<String> selectedBSSIDs(){
-		return this.filter.BSSIDs;
+	public boolean[] selectedBSSIDs(){
+		ArrayList<String> bssids = this.bssids();
+		boolean[] selected = new boolean[bssids.size()];
+		
+		int i = 0;
+		for(String bssid : bssids){
+			selected[i] =(this.filter.BSSIDs.contains(bssid));
+			i++;
+		}
+		return selected;
 	}
 
 
 	public ArrayList<String> essids(){
-		ArrayList<String> titles = new ArrayList<String>();
 		ArrayList<String> records = dbh.getUniqueESSIDRecords();
-
 		return records;
 	}
-	public ArrayList<String> selectedESSIDs(){
-		return this.filter.ESSIDs;
+	public boolean[] selectedESSIDs(){
+		ArrayList<String> essids = this.essids();
+		boolean[] selected = new boolean[essids.size()];
+		
+		int i = 0;
+		for(String essid : essids){
+			selected[i] =(this.filter.ESSIDs.contains(essid));
+			i++;
+		}
+		return selected;
 	}
 
 	
-	private ArrayList<String> filterTitles(){
+	private ArrayList<String> filterMenuTitles(){
 		ArrayList<String> titles = new ArrayList<String>();
 		titles.add(FILTER_MENU_TITLE_BSSID);
 		titles.add(FILTER_MENU_TITLE_ESSID);
 		titles.add(FILTER_MENU_TITLE_PROTOCOLS);
 		titles.add(FILTER_MENU_TITLE_TIMESTAMP_ABOVE);
 		titles.add(FILTER_MENU_TITLE_TIMESTAMP_BELOW);
-		titles.add(FILTER_MENU_TITLE_SORTING);
 		titles.add(FILTER_MENU_TITLE_REMOVE);
 		return titles;
 	}
 
 	
+	/*****************************
+	 * 
+	 *          Listener Actions
+	 * 
+	 * ***************************/
+	
+	public void onDateTimePickerPositiveClick(DateTimeDialogFragment dialog) {
+		if(this.wasBelowTimePicker){
+			this.filter.setBelowTimestamp(dialog.getDate());
+		} else {
+			this.filter.setAboveTimestamp(dialog.getDate());
+		}
+		this.populateListViewFromDB(listView);
+	}
+
+	public void onDateTimePickerNegativeClick(DateTimeDialogFragment dialog) {
+		if(this.wasBelowTimePicker){
+			this.filter.setBelowTimestamp(Long.MAX_VALUE);
+		} else {
+			this.filter.setAboveTimestamp(Long.MIN_VALUE);
+		}
+	}
+	
+	public void onDialogPositiveClick(ChecklistDialog dialog) {
+		String title = dialog.getTitle();
+		if(title.equals(FILTER_MENU_TITLE_BSSID)){
+			this.filter.setBSSIDs(dialog.getSelectedItemTitles());
+		}
+		if(title.equals(FILTER_MENU_TITLE_ESSID)){
+			this.filter.setESSIDs(dialog.getSelectedItemTitles());
+		}
+		if(title.equals(FILTER_MENU_TITLE_PROTOCOLS)){
+			this.filter.setProtocols(dialog.getSelectedItemTitles());
+		}
+		if(title.equals(FILTER_MENU_TITLE_SORTING)){
+			ArrayList<String> titles = dialog.getSelectedItemTitles();
+			String t = titles.get(0);
+			int sortType = this.sortTypeTtiles().indexOf(t);
+			this.filter.setSorttype(SortType.values()[sortType]);
+		}
+		this.populateListViewFromDB(this.listView);
+	}
+
+	public void onDialogNegativeClick(ChecklistDialog dialog) {
+
+	}
 	
 	
 	/*****************************
@@ -432,17 +523,5 @@ public class RecordOverviewFragment extends Fragment implements ChecklistDialog.
 		}
 	}
 
-	public void onDateTimePickerPositiveClick(DateTimeDialogFragment dialog) {
-		if(this.wasBelowTimePicker){
-			this.filter.setBelowTimestamp(dialog.getDate());
-		} else {
-			this.filter.setAboveTimestamp(dialog.getDate());
-		}
-		this.populateListViewFromDB(listView);
-	}
-
-	public void onDateTimePickerNegativeClick(DateTimeDialogFragment dialog) {
-		// nothing in here
-	}
 
 }