notification list context menu

This commit is contained in:
danijoo
2016-01-08 19:10:04 +01:00
parent 05a9382aae
commit bb58c4d6f3
5 changed files with 141 additions and 5 deletions

View File

@@ -75,4 +75,11 @@ public class DatabaseUtils {
);
}
public static void deleteNotification(Context context, long id) {
context.getContentResolver().delete(
Logged_notificationTable.CONTENT_URI,
Logged_notificationTable.FIELD__ID + " = ?",
new String[] {String.valueOf(id)}
);
}
}

View File

@@ -22,7 +22,7 @@ import butterknife.Bind;
import butterknife.ButterKnife;
public class NotificationListAdapter extends CursorRecyclerViewAdapter<NotificationListAdapter.NotificationViewHolder> implements View.OnClickListener {
public class NotificationListAdapter extends CursorRecyclerViewAdapter<NotificationListAdapter.NotificationViewHolder> implements View.OnClickListener, View.OnLongClickListener {
class NotificationViewHolder extends RecyclerView.ViewHolder {
@@ -74,6 +74,7 @@ public class NotificationListAdapter extends CursorRecyclerViewAdapter<Notificat
interface NotificationClickListener {
void onNotificationClick(long id);
void onNotificationLongClick(long id);
}
private NotificationClickListener mNotificationClickListener;
@@ -96,6 +97,7 @@ public class NotificationListAdapter extends CursorRecyclerViewAdapter<Notificat
public NotificationViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.notification_list_item, parent, false);
v.setOnClickListener(this);
v.setOnLongClickListener(this);
return new NotificationViewHolder(v);
}
@@ -107,4 +109,15 @@ public class NotificationListAdapter extends CursorRecyclerViewAdapter<Notificat
mNotificationClickListener.onNotificationClick(id);
}
}
@Override
public boolean onLongClick(View v) {
if(mNotificationClickListener != null) {
long id = (long) v.getTag();
mNotificationClickListener.onNotificationLongClick(id);
}
return true;
}
}

View File

@@ -29,6 +29,9 @@ public class NotificationListFilterDialog extends AlertDialog implements DialogI
@Bind(R.id.notification_filter_etPackage)
EditText etPackageName;
boolean hasPreselection = false;
String message, title, appName, packageName;
interface NotificationListFilterDialogCallbacks {
void onFilterNotificationList(
String title,
@@ -51,10 +54,29 @@ public class NotificationListFilterDialog extends AlertDialog implements DialogI
setTitle(context.getString(R.string.filter_dialog_title));
}
public NotificationListFilterDialog(Context context, NotificationListFilterDialogCallbacks cb, String title, String message, String appName, String packageName) {
this(context, cb);
this.title = title;
this.message = message;
this.appName = appName;
this.packageName = packageName;
hasPreselection = true;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ButterKnife.bind(this);
if(hasPreselection) {
if(title != null)
etTitle.setText(title);
if(message != null)
etMessage.setText(message);
if(packageName != null)
etPackageName.setText(packageName);
if(appName != null)
etAppName.setText(appName);
}
}
@Override

View File

@@ -1,9 +1,13 @@
package net.headlezz.notificationlogger.notificationlist;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.design.widget.Snackbar;
import android.support.v4.app.Fragment;
import android.support.v7.app.AlertDialog;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
@@ -16,6 +20,7 @@ import android.view.ViewGroup;
import net.headlezz.notificationlogger.DatabaseUtils;
import net.headlezz.notificationlogger.NotificationInfoDialog;
import net.headlezz.notificationlogger.R;
import net.headlezz.notificationlogger.logger.BlacklistItem;
import net.headlezz.notificationlogger.logger.LoggedNotification;
import butterknife.Bind;
@@ -107,10 +112,7 @@ public class NotificationListFragment extends Fragment implements NotificationLi
@Override
public void onNotificationClick(long id) {
LoggedNotification notification = DatabaseUtils.getNotificationById(getContext(), id);
Timber.e(notification.title);
new NotificationInfoDialog(getContext(), notification).show();
showNotificationInfo(id);
}
@Override
@@ -119,4 +121,85 @@ public class NotificationListFragment extends Fragment implements NotificationLi
setIsFiltered(true);
mLoaderManager.loadNotificationsFiltered(title, message, appName, packageName);
}
private void showNotificationInfo(long id) {
LoggedNotification notification = DatabaseUtils.getNotificationById(getContext(), id);
new NotificationInfoDialog(getContext(), notification).show();
}
@Override
public void onNotificationLongClick(final long id) {
String[] options = getResources().getStringArray(R.array.notification_list_options);
new AlertDialog.Builder(getContext())
.setItems(options, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
switch (which) {
case 0:
showNotificationInfo(id);
break;
case 1:
DatabaseUtils.deleteNotification(getContext(), id);
break;
case 2:
showPreselectedFilter(id);
break;
case 3:
blacklistNotificationPackage(id);
break;
case 4:
shareMessage(id);
break;
}
}
})
.create().show();
}
private void shareMessage(long id) {
LoggedNotification notification = DatabaseUtils.getNotificationById(getContext(), id);
Intent shareIntent = new Intent(Intent.ACTION_SEND);
shareIntent.setType("text/plain");
shareIntent.putExtra(Intent.EXTRA_TEXT, notification.message);
shareIntent.putExtra(Intent.EXTRA_TITLE, notification.title);
shareIntent.putExtra(Intent.EXTRA_SUBJECT, notification.title);
startActivity(Intent.createChooser(shareIntent, getContext().getString(R.string.share_title)));
}
private void showPreselectedFilter(long id) {
LoggedNotification notification = DatabaseUtils.getNotificationById(getContext(), id);
new NotificationListFilterDialog(
getContext(),
this,
notification.title,
notification.message,
notification.appName,
notification.packageName)
.show();
}
private void blacklistNotificationPackage(long id) {
final LoggedNotification ln = DatabaseUtils.getNotificationById(getContext(), id);
if (!DatabaseUtils.isPackageBlacklisted(getContext(), ln.packageName)) {
BlacklistItem item = new BlacklistItem();
item.packageName = ln.packageName;
DatabaseUtils.insertBlacklistItem(getContext(), item);
}
if (getActivity() != null) {
Snackbar snackbar = Snackbar.make(
getActivity().findViewById(android.R.id.content),
String.format(getContext().getString(R.string.notification_list_frag_blacklist_snack), ln.packageName),
Snackbar.LENGTH_LONG
);
snackbar.setAction(R.string.notification_list_frag_blacklist_snack_action, new View.OnClickListener() {
@Override
public void onClick(View v) {
DatabaseUtils.deleteBlacklistItem(getContext(), ln.packageName);
}
});
snackbar.show();
}
}
}