diff --git a/app/build.gradle b/app/build.gradle index cadb5a5..46c9486 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,7 +9,7 @@ android { defaultConfig { applicationId "net.headlezz.notificationlogger" - minSdkVersion 18 + minSdkVersion 19 targetSdkVersion 23 versionCode 1 versionName "1.0" diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 292c1b9..ca006b4 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -14,15 +14,31 @@ - + - + + + + + + + + diff --git a/app/src/main/java/net/headlezz/notificationlogger/MainActivity.java b/app/src/main/java/net/headlezz/notificationlogger/MainActivity.java index e3f7d4b..169eff9 100644 --- a/app/src/main/java/net/headlezz/notificationlogger/MainActivity.java +++ b/app/src/main/java/net/headlezz/notificationlogger/MainActivity.java @@ -14,6 +14,7 @@ import net.headlezz.notificationlogger.createnotification.NotificationCreationFr import butterknife.Bind; import butterknife.ButterKnife; +import timber.log.Timber; public class MainActivity extends AppCompatActivity { diff --git a/app/src/main/java/net/headlezz/notificationlogger/PackageUtils.java b/app/src/main/java/net/headlezz/notificationlogger/PackageUtils.java new file mode 100644 index 0000000..0d32c08 --- /dev/null +++ b/app/src/main/java/net/headlezz/notificationlogger/PackageUtils.java @@ -0,0 +1,16 @@ +package net.headlezz.notificationlogger; + +import android.content.Context; +import android.content.pm.ApplicationInfo; +import android.content.pm.PackageManager; + +public class PackageUtils { + + public static String getAppName(Context context, String packageName) throws PackageManager.NameNotFoundException { + PackageManager pm = context.getPackageManager(); + ApplicationInfo appInfo = pm.getApplicationInfo(packageName, PackageManager.GET_META_DATA); + return (String) pm.getApplicationLabel(appInfo); + } + + +} diff --git a/app/src/main/java/net/headlezz/notificationlogger/logger/LoggedNotification.java b/app/src/main/java/net/headlezz/notificationlogger/logger/LoggedNotification.java new file mode 100644 index 0000000..ac2d56c --- /dev/null +++ b/app/src/main/java/net/headlezz/notificationlogger/logger/LoggedNotification.java @@ -0,0 +1,36 @@ +package net.headlezz.notificationlogger.logger; + +import java.util.Date; + +import ckm.simple.sql_provider.annotation.SimpleSQLColumn; +import ckm.simple.sql_provider.annotation.SimpleSQLTable; + +@SimpleSQLTable(table="logged_notification", provider="NotificationProvider") +public class LoggedNotification { + + + @SimpleSQLColumn("title") + public String title; + + @SimpleSQLColumn("message") + public String message; + + @SimpleSQLColumn("date") + public Date date; + + @SimpleSQLColumn("app_name") + public String appName; + + @SimpleSQLColumn("package_name") + public String packageName; + + @SimpleSQLColumn("notification_id") + public int notificationId; + + @SimpleSQLColumn("user_id") + public int userId; + + @SimpleSQLColumn("small_icon_id") + public int smallIconId; + +} diff --git a/app/src/main/java/net/headlezz/notificationlogger/logger/NotificationLoggerService.java b/app/src/main/java/net/headlezz/notificationlogger/logger/NotificationLoggerService.java new file mode 100644 index 0000000..c2bee81 --- /dev/null +++ b/app/src/main/java/net/headlezz/notificationlogger/logger/NotificationLoggerService.java @@ -0,0 +1,69 @@ +package net.headlezz.notificationlogger.logger; + +import android.app.Notification; +import android.content.pm.PackageManager; +import android.os.Bundle; +import android.service.notification.NotificationListenerService; +import android.service.notification.StatusBarNotification; +import android.util.Log; + +import net.headlezz.notificationlogger.PackageUtils; + +import java.util.Date; + +public class NotificationLoggerService extends NotificationListenerService { + + public String TAG = NotificationLoggerService.class.getSimpleName(); + + @Override + public void onNotificationPosted(StatusBarNotification sbn) { + super.onNotificationPosted(sbn); + Log.d(TAG, "Notificaton logged (id: " + sbn.getId() + ")"); + + LoggedNotification ln = buildLoggedNotification(sbn); + getApplicationContext().getContentResolver().insert( + Logged_notificationTable.CONTENT_URI, + Logged_notificationTable.getContentValues(ln, false) + ); + } + + private LoggedNotification buildLoggedNotification(StatusBarNotification sbn) { + int notificationId = sbn.getId(); + + int userId = sbn.getUserId(); + Date date = new Date(sbn.getPostTime()); + String packageName = sbn.getPackageName(); + int iconId = sbn.getNotification().icon; + + String appName; + try { + appName = PackageUtils.getAppName(getApplicationContext(), packageName); + } catch (PackageManager.NameNotFoundException e) { + Log.w(TAG, "App name not found for " + packageName); + appName = ""; + } + + Notification notification = sbn.getNotification(); + Bundle extras = notification.extras; + + String title = extras.getString("android.title", ""); + String message = extras.getCharSequence("android.text", "").toString(); + + if(message.isEmpty() && notification.tickerText != null) + message = notification.tickerText.toString(); + if(message.isEmpty() && extras.containsKey("android.infoText")) + message = extras.get("android.infoText").toString(); + + LoggedNotification ln = new LoggedNotification(); + ln.title = title; + ln.message = message; + ln.date = date; + ln.appName = appName; + ln.packageName = packageName; + ln.notificationId = notificationId; + ln.userId = userId; + ln.smallIconId = iconId; + return ln; + } + +} diff --git a/app/src/main/java/net/headlezz/notificationlogger/logger/NotificationProviderConfig.java b/app/src/main/java/net/headlezz/notificationlogger/logger/NotificationProviderConfig.java new file mode 100644 index 0000000..ffd6084 --- /dev/null +++ b/app/src/main/java/net/headlezz/notificationlogger/logger/NotificationProviderConfig.java @@ -0,0 +1,18 @@ +package net.headlezz.notificationlogger.logger; + +import ckm.simple.sql_provider.UpgradeScript; +import ckm.simple.sql_provider.annotation.ProviderConfig; +import ckm.simple.sql_provider.annotation.SimpleSQLConfig; + +@SimpleSQLConfig( + name="NotificationProvider", + authority = "net.headlezz.notificationlogger.logger.authority", + database = "notifications.db", + version = 1 +) +public class NotificationProviderConfig implements ProviderConfig { + @Override + public UpgradeScript[] getUpdateScripts() { + return new UpgradeScript[0]; + } +}