Created
July 26, 2017 14:52
-
-
Save anta40/1ffcccc1b5ac560683fad32d9196801a to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class NotificationUtil { | |
private static String TAG = NotificationUtil.class.getSimpleName(); | |
private Context mContext; | |
public NotificationUtil(Context mContext) { | |
this.mContext = mContext; | |
} | |
public void showNotificationMessage(String title, String message, String timeStamp, Intent intent) { | |
showNotificationMessage(title, message, timeStamp, intent, null); | |
} | |
public void showNotificationMessage(final String title, final String message, final String timeStamp, Intent intent, String imageUrl) { | |
// Check for empty push message | |
if (TextUtils.isEmpty(message)) | |
return; | |
// notification icon | |
final int icon = R.mipmap.ic_launcher; | |
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); | |
final PendingIntent resultPendingIntent = | |
PendingIntent.getActivity( | |
mContext, | |
0, | |
intent, | |
PendingIntent.FLAG_CANCEL_CURRENT | |
); | |
final NotificationCompat.Builder mBuilder = new NotificationCompat.Builder( | |
mContext); | |
final Uri alarmSound = Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE | |
+ "://" + mContext.getPackageName() + "/raw/notification"); | |
if (!TextUtils.isEmpty(imageUrl)) { | |
if (imageUrl != null && imageUrl.length() > 4 && Patterns.WEB_URL.matcher(imageUrl).matches()) { | |
Bitmap bitmap = getBitmapFromURL(imageUrl); | |
if (bitmap != null) { | |
showBigNotification(bitmap, mBuilder, icon, title, message, timeStamp, resultPendingIntent, alarmSound); | |
} else { | |
showSmallNotification(mBuilder, icon, title, message, timeStamp, resultPendingIntent, alarmSound); | |
} | |
} | |
} else { | |
showSmallNotification(mBuilder, icon, title, message, timeStamp, resultPendingIntent, alarmSound); | |
playNotificationSound(); | |
} | |
} | |
private void showSmallNotification(NotificationCompat.Builder mBuilder, int icon, String title, String message, String timeStamp, PendingIntent resultPendingIntent, Uri alarmSound) { | |
NotificationCompat.InboxStyle inboxStyle = new NotificationCompat.InboxStyle(); | |
inboxStyle.addLine(message); | |
Notification notification; | |
notification = mBuilder.setSmallIcon(icon).setTicker(title).setWhen(0) | |
.setAutoCancel(true) | |
.setContentTitle(title) | |
.setContentIntent(resultPendingIntent) | |
.setSound(alarmSound) | |
.setStyle(inboxStyle) | |
.setWhen(getTimeMilliSec(timeStamp)) | |
.setSmallIcon(R.mipmap.ic_launcher) | |
.setLargeIcon(BitmapFactory.decodeResource(mContext.getResources(), icon)) | |
.setContentText(message) | |
.build(); | |
NotificationManager notificationManager = (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE); | |
notificationManager.notify(NotificationConfig.NOTIFICATION_ID, notification); | |
} | |
private void showBigNotification(Bitmap bitmap, NotificationCompat.Builder mBuilder, int icon, String title, String message, String timeStamp, PendingIntent resultPendingIntent, Uri alarmSound) { | |
NotificationCompat.BigPictureStyle bigPictureStyle = new NotificationCompat.BigPictureStyle(); | |
bigPictureStyle.setBigContentTitle(title); | |
bigPictureStyle.setSummaryText(Html.fromHtml(message).toString()); | |
bigPictureStyle.bigPicture(bitmap); | |
Notification notification; | |
notification = mBuilder.setSmallIcon(icon).setTicker(title).setWhen(0) | |
.setAutoCancel(true) | |
.setContentTitle(title) | |
.setContentIntent(resultPendingIntent) | |
.setSound(alarmSound) | |
.setStyle(bigPictureStyle) | |
.setWhen(getTimeMilliSec(timeStamp)) | |
.setSmallIcon(R.mipmap.ic_launcher) | |
.setLargeIcon(BitmapFactory.decodeResource(mContext.getResources(), icon)) | |
.setContentText(message) | |
.build(); | |
NotificationManager notificationManager = (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE); | |
notificationManager.notify(NotificationConfig.NOTIFICATION_ID_BIG_IMAGE, notification); | |
} | |
/** | |
* Downloading push notification image before displaying it in | |
* the notification tray | |
*/ | |
public Bitmap getBitmapFromURL(String strURL) { | |
try { | |
URL url = new URL(strURL); | |
HttpURLConnection connection = (HttpURLConnection) url.openConnection(); | |
connection.setDoInput(true); | |
connection.connect(); | |
InputStream input = connection.getInputStream(); | |
Bitmap myBitmap = BitmapFactory.decodeStream(input); | |
return myBitmap; | |
} catch (IOException e) { | |
e.printStackTrace(); | |
return null; | |
} | |
} | |
// Playing notification sound | |
public void playNotificationSound() { | |
try { | |
Uri alarmSound = Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE | |
+ "://" + mContext.getPackageName() + "/raw/notification"); | |
Ringtone r = RingtoneManager.getRingtone(mContext, alarmSound); | |
r.play(); | |
} catch (Exception e) { | |
e.printStackTrace(); | |
} | |
} | |
/** | |
* Method checks if the app is in background or not | |
*/ | |
public static boolean isAppIsInBackground(Context context) { | |
boolean isInBackground = true; | |
ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); | |
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT_WATCH) { | |
List<ActivityManager.RunningAppProcessInfo> runningProcesses = am.getRunningAppProcesses(); | |
for (ActivityManager.RunningAppProcessInfo processInfo : runningProcesses) { | |
if (processInfo.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) { | |
for (String activeProcess : processInfo.pkgList) { | |
if (activeProcess.equals(context.getPackageName())) { | |
isInBackground = false; | |
} | |
} | |
} | |
} | |
} else { | |
List<ActivityManager.RunningTaskInfo> taskInfo = am.getRunningTasks(1); | |
ComponentName componentInfo = taskInfo.get(0).topActivity; | |
if (componentInfo.getPackageName().equals(context.getPackageName())) { | |
isInBackground = false; | |
} | |
} | |
return isInBackground; | |
} | |
// Clears notification tray messages | |
public static void clearNotifications(Context context) { | |
NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); | |
notificationManager.cancelAll(); | |
} | |
public static long getTimeMilliSec(String timeStamp) { | |
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); | |
try { | |
Date date = format.parse(timeStamp); | |
return date.getTime(); | |
} catch (ParseException e) { | |
e.printStackTrace(); | |
} | |
return 0; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment