ソースを参照

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

Julien 10 年 前
コミット
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
-	}
 
 }