diff --git a/app/src/main/java/eu/faircode/netguard/ActivityLog.java b/app/src/main/java/eu/faircode/netguard/ActivityLog.java
index 7be43e90..6a5865cc 100644
--- a/app/src/main/java/eu/faircode/netguard/ActivityLog.java
+++ b/app/src/main/java/eu/faircode/netguard/ActivityLog.java
@@ -28,14 +28,18 @@ import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.preference.PreferenceManager;
+import android.support.v4.view.MenuItemCompat;
import android.support.v7.app.AppCompatActivity;
+import android.support.v7.widget.SearchView;
import android.text.TextUtils;
+import android.util.Log;
import android.view.Gravity;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
+import android.widget.FilterQueryProvider;
import android.widget.ListView;
import android.widget.PopupMenu;
import android.widget.Toast;
@@ -47,6 +51,7 @@ public class ActivityLog extends AppCompatActivity {
private LogAdapter adapter;
private DatabaseHelper dh;
private boolean live;
+ private MenuItem menuSearch = null;
private DatabaseHelper.LogChangedListener listener = new DatabaseHelper.LogChangedListener() {
@Override
@@ -76,6 +81,13 @@ public class ActivityLog extends AppCompatActivity {
adapter = new LogAdapter(this, dh.getLog());
lvLog.setAdapter(adapter);
+ adapter.setFilterQueryProvider(new FilterQueryProvider() {
+
+ public Cursor runQuery(CharSequence constraint) {
+ return dh.getLog(constraint.toString());
+ }
+
+ });
lvLog.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
@@ -151,6 +163,36 @@ public class ActivityLog extends AppCompatActivity {
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.log, menu);
+
+ menuSearch = menu.findItem(R.id.menu_search);
+ SearchView searchView = (SearchView) MenuItemCompat.getActionView(menuSearch);
+ searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
+ @Override
+ public boolean onQueryTextSubmit(String query) {
+ if (adapter != null) {
+ adapter.getFilter().filter(query);
+ adapter.notifyDataSetChanged();
+ }
+
+ return true;
+ }
+
+ @Override
+ public boolean onQueryTextChange(String newText) {
+ if (adapter != null)
+ adapter.getFilter().filter(newText);
+ return true;
+ }
+ });
+ searchView.setOnCloseListener(new SearchView.OnCloseListener() {
+ @Override
+ public boolean onClose() {
+ if (adapter != null)
+ adapter.getFilter().filter(null);
+ return true;
+ }
+ });
+
return true;
}
diff --git a/app/src/main/java/eu/faircode/netguard/DatabaseHelper.java b/app/src/main/java/eu/faircode/netguard/DatabaseHelper.java
index e708d17f..5b979912 100644
--- a/app/src/main/java/eu/faircode/netguard/DatabaseHelper.java
+++ b/app/src/main/java/eu/faircode/netguard/DatabaseHelper.java
@@ -156,6 +156,15 @@ public class DatabaseHelper extends SQLiteOpenHelper {
return db.rawQuery(query, new String[]{});
}
+ public Cursor getLog(String filter) {
+ SQLiteDatabase db = this.getReadableDatabase();
+ String query = "SELECT ID AS _id, * FROM log";
+ query += " WHERE ip like ?";
+ query += " ORDER BY time DESC";
+
+ return db.rawQuery(query, new String[]{"%" + filter + "%"});
+ }
+
public static void addLogChangedListener(LogChangedListener listener) {
logChangedListeners.add(listener);
}
diff --git a/app/src/main/res/menu/log.xml b/app/src/main/res/menu/log.xml
index d919443d..a4fe6908 100644
--- a/app/src/main/res/menu/log.xml
+++ b/app/src/main/res/menu/log.xml
@@ -15,4 +15,10 @@
+