From 799d0e509fc862cb5242337bb0ef03229863d2a5 Mon Sep 17 00:00:00 2001 From: danijoo Date: Mon, 4 Jan 2016 02:11:42 +0100 Subject: [PATCH] Notification details dialog --- .../NotificationInfoDialog.java | 50 +++++++++++++++++++ .../notificationlogger/PackageUtils.java | 21 +++++++- .../NotificationListFragment.java | 3 ++ app/src/main/res/values/strings.xml | 8 +++ 4 files changed, 81 insertions(+), 1 deletion(-) create mode 100644 app/src/main/java/net/headlezz/notificationlogger/NotificationInfoDialog.java diff --git a/app/src/main/java/net/headlezz/notificationlogger/NotificationInfoDialog.java b/app/src/main/java/net/headlezz/notificationlogger/NotificationInfoDialog.java new file mode 100644 index 0000000..849fa89 --- /dev/null +++ b/app/src/main/java/net/headlezz/notificationlogger/NotificationInfoDialog.java @@ -0,0 +1,50 @@ +package net.headlezz.notificationlogger; + +import android.content.Context; +import android.content.DialogInterface; +import android.support.v7.app.AlertDialog; +import android.text.Html; +import android.text.Spanned; +import android.widget.Toast; + +import net.headlezz.notificationlogger.logger.LoggedNotification; + +public class NotificationInfoDialog extends AlertDialog implements DialogInterface.OnClickListener { + + LoggedNotification mNotification; + + public NotificationInfoDialog(Context context, LoggedNotification notification) { + super(context); + mNotification = notification; + + setTitle(notification.appName); + setIcon(PackageUtils.getApplicationLauncherIcon(context, notification.packageName)); + setMessage(getDialogContent()); + setButton(AlertDialog.BUTTON_POSITIVE, context.getString(R.string.main_notification_details_button_ok), this); + setButton(AlertDialog.BUTTON_NEUTRAL, context.getString(R.string.main_notification_details_button_app_info), this); + } + + private Spanned getDialogContent() { + StringBuilder contentBuilder = new StringBuilder(); + contentBuilder.append(getContext().getString(R.string.main_notification_details_package, mNotification.packageName)); + contentBuilder.append("
"); + contentBuilder.append(getContext().getString(R.string.main_notification_details_date, + 9999)); + contentBuilder.append("
"); + contentBuilder.append(getContext().getString(R.string.main_notification_details_userid, mNotification.userId)); + contentBuilder.append("
"); + contentBuilder.append("
"); + contentBuilder.append(getContext().getString(R.string.main_notification_details_title, mNotification.title)); + contentBuilder.append("
"); + contentBuilder.append(getContext().getString(R.string.main_notification_details_message, mNotification.message)); + return Html.fromHtml(contentBuilder.toString()); + } + + @Override + public void onClick(DialogInterface dialog, int which) { + if(which == AlertDialog.BUTTON_NEUTRAL) { + if(!PackageUtils.showAppInfoActivity(getContext(), mNotification.packageName)) + Toast.makeText(getContext(), R.string.notification_info_dialog_app_info_error, Toast.LENGTH_LONG).show(); + } + } +} diff --git a/app/src/main/java/net/headlezz/notificationlogger/PackageUtils.java b/app/src/main/java/net/headlezz/notificationlogger/PackageUtils.java index e48f59a..ecc5ca9 100644 --- a/app/src/main/java/net/headlezz/notificationlogger/PackageUtils.java +++ b/app/src/main/java/net/headlezz/notificationlogger/PackageUtils.java @@ -1,10 +1,13 @@ package net.headlezz.notificationlogger; +import android.content.ActivityNotFoundException; import android.content.Context; +import android.content.Intent; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.content.res.Resources; import android.graphics.drawable.Drawable; +import android.net.Uri; import timber.log.Timber; @@ -49,5 +52,21 @@ public class PackageUtils { } - + /** + * @param context + * @param packageName + * @return true if application settings opened successful + */ + public static boolean showAppInfoActivity(Context context, String packageName) { + try { + Intent intent = new Intent(android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS); + intent.setData(Uri.parse("package:" + packageName)); + intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET); + context.startActivity(intent); + return true; + } catch ( ActivityNotFoundException e ) { + Timber.e("Failed to open app info", e); + return false; + } + } } diff --git a/app/src/main/java/net/headlezz/notificationlogger/notificationlist/NotificationListFragment.java b/app/src/main/java/net/headlezz/notificationlogger/notificationlist/NotificationListFragment.java index 3e5d3cf..5f35b34 100644 --- a/app/src/main/java/net/headlezz/notificationlogger/notificationlist/NotificationListFragment.java +++ b/app/src/main/java/net/headlezz/notificationlogger/notificationlist/NotificationListFragment.java @@ -13,6 +13,7 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import net.headlezz.notificationlogger.NotificationInfoDialog; import net.headlezz.notificationlogger.R; import net.headlezz.notificationlogger.logger.LoggedNotification; import net.headlezz.notificationlogger.logger.Logged_notificationTable; @@ -96,5 +97,7 @@ public class NotificationListFragment extends Fragment implements LoaderManager. Cursor cursor = getContext().getContentResolver().query(Logged_notificationTable.CONTENT_URI, null, qry, args, null); LoggedNotification notification = Logged_notificationTable.getRow(cursor, true); Timber.e(notification.title); + + new NotificationInfoDialog(getContext(), notification).show(); } } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index f6cd20c..8eb0bd2 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -9,6 +9,13 @@ In order to log notifcations, this app needs access to your notification system. Open settings Cancel + Package: %1$s + Date: %1$s + User ID: %1$s + Title: %1$s + Message: %1$s + App Info + OK Notification Settings Support @@ -47,6 +54,7 @@ No notifications found. Notification small icon Application icon for %s + Failed to display app info. Alarm