/*
* Copyright 2017 rootkiwi
*
* AN2Linux-client is licensed under GNU General Public License 3.
*
* See LICENSE for more details.
*/
package kiwi.root.an2linuxclient.data;
import android.content.Context;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.service.notification.StatusBarNotification;
public class Notification {
private String title;
private String message;
private Bitmap icon;
private NotificationSettings ns;
public Notification(StatusBarNotification sbn, Context c){
ns = new NotificationSettings(c, sbn.getPackageName());
extractStatusBarNotification(sbn, c);
}
private void extractStatusBarNotification(StatusBarNotification sbn, Context c){
Bundle extras = sbn.getNotification().extras;
PackageManager pm = c.getPackageManager();
String packageName = sbn.getPackageName();
if (ns.includeTitle()){
String contentTitle = "";
CharSequence temp = extras.getCharSequence(android.app.Notification.EXTRA_TITLE);
if (temp != null){
contentTitle = temp.toString();
}
String appName;
try {
appName = (String) pm.getApplicationLabel(pm.getApplicationInfo(packageName, PackageManager.GET_META_DATA));
} catch (PackageManager.NameNotFoundException e) {
appName = packageName;
}
title = "";
if (ns.forceTitle()){
title = appName;
} else {
if (!contentTitle.equals("")){
title = contentTitle;
} else {
title = appName;
}
}
title = title.trim();
if (title.length() > ns.getTitleMax()){
title = title.substring(0, ns.getTitleMax()) + "…";
}
}
if (ns.includeMessage()){
String contentText = "";
String subText = "";
CharSequence temp = extras.getCharSequence(android.app.Notification.EXTRA_TEXT);
if (temp != null){
contentText = temp.toString();
}
temp = extras.getCharSequence(android.app.Notification.EXTRA_SUB_TEXT);
if (temp != null){
subText = temp.toString();
}
message = "";
if (!contentText.equals("")) message += contentText;
if (!subText.equals("")) message += "\n" + subText;
message = message.replace("\n\n", "\n").trim();
if (message.length() > ns.getMessageMax()){
message = message.substring(0, ns.getMessageMax()) + "…";
}
}
if (ns.includeIcon()){
try {
int iconSize = ns.getIconSize();
icon = Bitmap.createScaledBitmap(drawableToBitmap(pm.getApplicationIcon(packageName)), iconSize, iconSize, true);
} catch (PackageManager.NameNotFoundException e){
ns.removeIconFlag();
}
}
}
private Bitmap drawableToBitmap(Drawable drawable) {
if (drawable instanceof BitmapDrawable) {
BitmapDrawable bitmapDrawable = (BitmapDrawable) drawable;
if(bitmapDrawable.getBitmap() != null) {
return bitmapDrawable.getBitmap();
}
}
Bitmap bitmap;
if(drawable.getIntrinsicWidth() <= 0 || drawable.getIntrinsicHeight() <= 0) {
bitmap = Bitmap.createBitmap(1, 1, Bitmap.Config.ARGB_8888); // Single color bitmap will be created of 1x1 pixel
} else {
bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
}
Canvas canvas = new Canvas(bitmap);
drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
drawable.draw(canvas);
return bitmap;
}
public String getTitle() {
return this.title;
}
public String getMessage() {
return this.message;
}
public Bitmap getIcon() {
return this.icon;
}
public NotificationSettings getNotificationSettings(){
return this.ns;
}
}