diff --git a/app/src/main/java/com/notificationmonitor/data/PreferencesManager.java b/app/src/main/java/com/notificationmonitor/data/PreferencesManager.java index c921b60..66031dc 100644 --- a/app/src/main/java/com/notificationmonitor/data/PreferencesManager.java +++ b/app/src/main/java/com/notificationmonitor/data/PreferencesManager.java @@ -79,6 +79,14 @@ public class PreferencesManager { prefs.edit().remove(KEY_LOG).apply(); } + public void removeNotificationEntry(int position) { + List entries = getNotificationLog(); + if (position >= 0 && position < entries.size()) { + entries.remove(position); + saveLog(entries); + } + } + private void saveLog(List entries) { JSONArray arr = new JSONArray(); for (NotificationEntry e : entries) { diff --git a/app/src/main/java/com/notificationmonitor/ui/MainActivity.java b/app/src/main/java/com/notificationmonitor/ui/MainActivity.java index 246f2da..bea125c 100644 --- a/app/src/main/java/com/notificationmonitor/ui/MainActivity.java +++ b/app/src/main/java/com/notificationmonitor/ui/MainActivity.java @@ -9,10 +9,13 @@ import android.provider.Settings; import android.view.Menu; import android.view.MenuItem; +import androidx.annotation.NonNull; import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AppCompatActivity; import androidx.localbroadcastmanager.content.LocalBroadcastManager; +import androidx.recyclerview.widget.ItemTouchHelper; import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; import com.notificationmonitor.R; import com.notificationmonitor.data.NotificationEntry; @@ -59,6 +62,22 @@ public class MainActivity extends AppCompatActivity { binding.recyclerNotifications.setLayoutManager(new LinearLayoutManager(this)); binding.recyclerNotifications.setAdapter(adapter); + // Add Swipe to Delete + new ItemTouchHelper(new ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT) { + @Override + public boolean onMove(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, @NonNull RecyclerView.ViewHolder target) { + return false; + } + + @Override + public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) { + int position = viewHolder.getAdapterPosition(); + prefsManager.removeNotificationEntry(position); + adapter.removeEntry(position); + updateEmptyState(); + } + }).attachToRecyclerView(binding.recyclerNotifications); + // Load persisted log List log = prefsManager.getNotificationLog(); adapter.setEntries(log); @@ -72,6 +91,20 @@ public class MainActivity extends AppCompatActivity { // Select apps FAB binding.fabSelectApps.setOnClickListener(v -> startActivity(new Intent(this, AppSelectorActivity.class))); + + // Clear all FAB + binding.fabClearAll.setOnClickListener(v -> { + new AlertDialog.Builder(this) + .setTitle("Clear Log") + .setMessage("Are you sure you want to delete all notification entries?") + .setPositiveButton("Clear All", (d, w) -> { + prefsManager.clearLog(); + adapter.clearEntries(); + updateEmptyState(); + }) + .setNegativeButton(android.R.string.cancel, null) + .show(); + }); } @Override diff --git a/app/src/main/java/com/notificationmonitor/ui/NotificationLogAdapter.java b/app/src/main/java/com/notificationmonitor/ui/NotificationLogAdapter.java index 56e5573..d56254a 100644 --- a/app/src/main/java/com/notificationmonitor/ui/NotificationLogAdapter.java +++ b/app/src/main/java/com/notificationmonitor/ui/NotificationLogAdapter.java @@ -40,6 +40,13 @@ public class NotificationLogAdapter notifyDataSetChanged(); } + public void removeEntry(int position) { + if (position >= 0 && position < entries.size()) { + entries.remove(position); + notifyItemRemoved(position); + } + } + @NonNull @Override public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { diff --git a/app/src/main/res/layout/activity_app_selector.xml b/app/src/main/res/layout/activity_app_selector.xml index 2a230e8..6864836 100644 --- a/app/src/main/res/layout/activity_app_selector.xml +++ b/app/src/main/res/layout/activity_app_selector.xml @@ -5,6 +5,7 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/background" + android:fitsSystemWindows="true" android:orientation="vertical"> + + + diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index c2b3e8d..8be473b 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -15,6 +15,10 @@ #FFF3CD #856404 + + #B00020 + #FFFFFF + #FFBB86FC #FF6200EE