add local only flag to foreground service

Daniel Gultsch created

Change summary

src/main/java/eu/siacs/conversations/services/NotificationService.java | 628 
1 file changed, 436 insertions(+), 192 deletions(-)

Detailed changes

src/main/java/eu/siacs/conversations/services/NotificationService.java 🔗

@@ -79,7 +79,8 @@ import eu.siacs.conversations.xmpp.jingle.Media;
 
 public class NotificationService {
 
-    private static final ScheduledExecutorService SCHEDULED_EXECUTOR_SERVICE = Executors.newSingleThreadScheduledExecutor();
+    private static final ScheduledExecutorService SCHEDULED_EXECUTOR_SERVICE =
+            Executors.newSingleThreadScheduledExecutor();
 
     public static final Object CATCHUP_LOCK = new Object();
 
@@ -137,7 +138,8 @@ public class NotificationService {
     @RequiresApi(api = Build.VERSION_CODES.O)
     void initializeChannels() {
         final Context c = mXmppConnectionService;
-        final NotificationManager notificationManager = c.getSystemService(NotificationManager.class);
+        final NotificationManager notificationManager =
+                c.getSystemService(NotificationManager.class);
         if (notificationManager == null) {
             return;
         }
@@ -145,41 +147,60 @@ public class NotificationService {
         notificationManager.deleteNotificationChannel("export");
         notificationManager.deleteNotificationChannel("incoming_calls");
 
-        notificationManager.createNotificationChannelGroup(new NotificationChannelGroup("status", c.getString(R.string.notification_group_status_information)));
-        notificationManager.createNotificationChannelGroup(new NotificationChannelGroup("chats", c.getString(R.string.notification_group_messages)));
-        notificationManager.createNotificationChannelGroup(new NotificationChannelGroup("calls", c.getString(R.string.notification_group_calls)));
-        final NotificationChannel foregroundServiceChannel = new NotificationChannel("foreground",
-                c.getString(R.string.foreground_service_channel_name),
-                NotificationManager.IMPORTANCE_MIN);
-        foregroundServiceChannel.setDescription(c.getString(R.string.foreground_service_channel_description, c.getString(R.string.app_name)));
+        notificationManager.createNotificationChannelGroup(
+                new NotificationChannelGroup(
+                        "status", c.getString(R.string.notification_group_status_information)));
+        notificationManager.createNotificationChannelGroup(
+                new NotificationChannelGroup(
+                        "chats", c.getString(R.string.notification_group_messages)));
+        notificationManager.createNotificationChannelGroup(
+                new NotificationChannelGroup(
+                        "calls", c.getString(R.string.notification_group_calls)));
+        final NotificationChannel foregroundServiceChannel =
+                new NotificationChannel(
+                        "foreground",
+                        c.getString(R.string.foreground_service_channel_name),
+                        NotificationManager.IMPORTANCE_MIN);
+        foregroundServiceChannel.setDescription(
+                c.getString(
+                        R.string.foreground_service_channel_description,
+                        c.getString(R.string.app_name)));
         foregroundServiceChannel.setShowBadge(false);
         foregroundServiceChannel.setGroup("status");
         notificationManager.createNotificationChannel(foregroundServiceChannel);
-        final NotificationChannel errorChannel = new NotificationChannel("error",
-                c.getString(R.string.error_channel_name),
-                NotificationManager.IMPORTANCE_LOW);
+        final NotificationChannel errorChannel =
+                new NotificationChannel(
+                        "error",
+                        c.getString(R.string.error_channel_name),
+                        NotificationManager.IMPORTANCE_LOW);
         errorChannel.setDescription(c.getString(R.string.error_channel_description));
         errorChannel.setShowBadge(false);
         errorChannel.setGroup("status");
         notificationManager.createNotificationChannel(errorChannel);
 
-        final NotificationChannel videoCompressionChannel = new NotificationChannel("compression",
-                c.getString(R.string.video_compression_channel_name),
-                NotificationManager.IMPORTANCE_LOW);
+        final NotificationChannel videoCompressionChannel =
+                new NotificationChannel(
+                        "compression",
+                        c.getString(R.string.video_compression_channel_name),
+                        NotificationManager.IMPORTANCE_LOW);
         videoCompressionChannel.setShowBadge(false);
         videoCompressionChannel.setGroup("status");
         notificationManager.createNotificationChannel(videoCompressionChannel);
 
-        final NotificationChannel exportChannel = new NotificationChannel("backup",
-                c.getString(R.string.backup_channel_name),
-                NotificationManager.IMPORTANCE_LOW);
+        final NotificationChannel exportChannel =
+                new NotificationChannel(
+                        "backup",
+                        c.getString(R.string.backup_channel_name),
+                        NotificationManager.IMPORTANCE_LOW);
         exportChannel.setShowBadge(false);
         exportChannel.setGroup("status");
         notificationManager.createNotificationChannel(exportChannel);
 
-        final NotificationChannel incomingCallsChannel = new NotificationChannel(INCOMING_CALLS_NOTIFICATION_CHANNEL,
-                c.getString(R.string.incoming_calls_channel_name),
-                NotificationManager.IMPORTANCE_HIGH);
+        final NotificationChannel incomingCallsChannel =
+                new NotificationChannel(
+                        INCOMING_CALLS_NOTIFICATION_CHANNEL,
+                        c.getString(R.string.incoming_calls_channel_name),
+                        NotificationManager.IMPORTANCE_HIGH);
         incomingCallsChannel.setSound(null, null);
         incomingCallsChannel.setShowBadge(false);
         incomingCallsChannel.setLightColor(LED_COLOR);
@@ -189,22 +210,27 @@ public class NotificationService {
         incomingCallsChannel.enableVibration(false);
         notificationManager.createNotificationChannel(incomingCallsChannel);
 
-        final NotificationChannel ongoingCallsChannel = new NotificationChannel("ongoing_calls",
-                c.getString(R.string.ongoing_calls_channel_name),
-                NotificationManager.IMPORTANCE_LOW);
+        final NotificationChannel ongoingCallsChannel =
+                new NotificationChannel(
+                        "ongoing_calls",
+                        c.getString(R.string.ongoing_calls_channel_name),
+                        NotificationManager.IMPORTANCE_LOW);
         ongoingCallsChannel.setShowBadge(false);
         ongoingCallsChannel.setGroup("calls");
         notificationManager.createNotificationChannel(ongoingCallsChannel);
 
-
-        final NotificationChannel messagesChannel = new NotificationChannel("messages",
-                c.getString(R.string.messages_channel_name),
-                NotificationManager.IMPORTANCE_HIGH);
+        final NotificationChannel messagesChannel =
+                new NotificationChannel(
+                        "messages",
+                        c.getString(R.string.messages_channel_name),
+                        NotificationManager.IMPORTANCE_HIGH);
         messagesChannel.setShowBadge(true);
-        messagesChannel.setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION), new AudioAttributes.Builder()
-                .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
-                .setUsage(AudioAttributes.USAGE_NOTIFICATION_COMMUNICATION_INSTANT)
-                .build());
+        messagesChannel.setSound(
+                RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION),
+                new AudioAttributes.Builder()
+                        .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
+                        .setUsage(AudioAttributes.USAGE_NOTIFICATION_COMMUNICATION_INSTANT)
+                        .build());
         messagesChannel.setLightColor(LED_COLOR);
         final int dat = 70;
         final long[] pattern = {0, 3 * dat, dat, dat};
@@ -213,19 +239,24 @@ public class NotificationService {
         messagesChannel.enableLights(true);
         messagesChannel.setGroup("chats");
         notificationManager.createNotificationChannel(messagesChannel);
-        final NotificationChannel silentMessagesChannel = new NotificationChannel("silent_messages",
-                c.getString(R.string.silent_messages_channel_name),
-                NotificationManager.IMPORTANCE_LOW);
-        silentMessagesChannel.setDescription(c.getString(R.string.silent_messages_channel_description));
+        final NotificationChannel silentMessagesChannel =
+                new NotificationChannel(
+                        "silent_messages",
+                        c.getString(R.string.silent_messages_channel_name),
+                        NotificationManager.IMPORTANCE_LOW);
+        silentMessagesChannel.setDescription(
+                c.getString(R.string.silent_messages_channel_description));
         silentMessagesChannel.setShowBadge(true);
         silentMessagesChannel.setLightColor(LED_COLOR);
         silentMessagesChannel.enableLights(true);
         silentMessagesChannel.setGroup("chats");
         notificationManager.createNotificationChannel(silentMessagesChannel);
 
-        final NotificationChannel quietHoursChannel = new NotificationChannel("quiet_hours",
-                c.getString(R.string.title_pref_quiet_hours),
-                NotificationManager.IMPORTANCE_LOW);
+        final NotificationChannel quietHoursChannel =
+                new NotificationChannel(
+                        "quiet_hours",
+                        c.getString(R.string.title_pref_quiet_hours),
+                        NotificationManager.IMPORTANCE_LOW);
         quietHoursChannel.setShowBadge(true);
         quietHoursChannel.setLightColor(LED_COLOR);
         quietHoursChannel.enableLights(true);
@@ -235,14 +266,18 @@ public class NotificationService {
 
         notificationManager.createNotificationChannel(quietHoursChannel);
 
-        final NotificationChannel deliveryFailedChannel = new NotificationChannel("delivery_failed",
-                c.getString(R.string.delivery_failed_channel_name),
-                NotificationManager.IMPORTANCE_DEFAULT);
+        final NotificationChannel deliveryFailedChannel =
+                new NotificationChannel(
+                        "delivery_failed",
+                        c.getString(R.string.delivery_failed_channel_name),
+                        NotificationManager.IMPORTANCE_DEFAULT);
         deliveryFailedChannel.setShowBadge(false);
-        deliveryFailedChannel.setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION), new AudioAttributes.Builder()
-                .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
-                .setUsage(AudioAttributes.USAGE_NOTIFICATION_COMMUNICATION_INSTANT)
-                .build());
+        deliveryFailedChannel.setSound(
+                RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION),
+                new AudioAttributes.Builder()
+                        .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
+                        .setUsage(AudioAttributes.USAGE_NOTIFICATION_COMMUNICATION_INSTANT)
+                        .build());
         deliveryFailedChannel.setGroup("chats");
         notificationManager.createNotificationChannel(deliveryFailedChannel);
     }
@@ -256,16 +291,23 @@ public class NotificationService {
     }
 
     public boolean notificationsFromStrangers() {
-        return mXmppConnectionService.getBooleanPreference("notifications_from_strangers", R.bool.notifications_from_strangers);
+        return mXmppConnectionService.getBooleanPreference(
+                "notifications_from_strangers", R.bool.notifications_from_strangers);
     }
 
     private boolean isQuietHours() {
-        if (!mXmppConnectionService.getBooleanPreference("enable_quiet_hours", R.bool.enable_quiet_hours)) {
+        if (!mXmppConnectionService.getBooleanPreference(
+                "enable_quiet_hours", R.bool.enable_quiet_hours)) {
             return false;
         }
-        final SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(mXmppConnectionService);
-        final long startTime = TimePreference.minutesToTimestamp(preferences.getLong("quiet_hours_start", TimePreference.DEFAULT_VALUE));
-        final long endTime = TimePreference.minutesToTimestamp(preferences.getLong("quiet_hours_end", TimePreference.DEFAULT_VALUE));
+        final SharedPreferences preferences =
+                PreferenceManager.getDefaultSharedPreferences(mXmppConnectionService);
+        final long startTime =
+                TimePreference.minutesToTimestamp(
+                        preferences.getLong("quiet_hours_start", TimePreference.DEFAULT_VALUE));
+        final long endTime =
+                TimePreference.minutesToTimestamp(
+                        preferences.getLong("quiet_hours_end", TimePreference.DEFAULT_VALUE));
         final long nowTime = Calendar.getInstance().getTimeInMillis();
 
         if (endTime < startTime) {
@@ -278,7 +320,8 @@ public class NotificationService {
     public void pushFromBacklog(final Message message) {
         if (notify(message)) {
             synchronized (notifications) {
-                getBacklogMessageCounter((Conversation) message.getConversation()).incrementAndGet();
+                getBacklogMessageCounter((Conversation) message.getConversation())
+                        .incrementAndGet();
                 pushToStack(message);
             }
         }
@@ -329,7 +372,9 @@ public class NotificationService {
 
     private int getBacklogMessageCount(Account account) {
         int count = 0;
-        for (Iterator<Map.Entry<Conversation, AtomicInteger>> it = mBacklogMessageCounter.entrySet().iterator(); it.hasNext(); ) {
+        for (Iterator<Map.Entry<Conversation, AtomicInteger>> it =
+                        mBacklogMessageCounter.entrySet().iterator();
+                it.hasNext(); ) {
             Map.Entry<Conversation, AtomicInteger> entry = it.next();
             if (entry.getKey().getAccount() == account) {
                 count += entry.getValue().get();
@@ -357,7 +402,8 @@ public class NotificationService {
 
     public void push(final Message message) {
         synchronized (CATCHUP_LOCK) {
-            final XmppConnection connection = message.getConversation().getAccount().getXmppConnection();
+            final XmppConnection connection =
+                    message.getConversation().getAccount().getXmppConnection();
             if (connection != null && connection.isWaitingForSmCatchup()) {
                 connection.incrementSmCatchupMessageCounter();
                 pushFromBacklog(message);
@@ -370,25 +416,43 @@ public class NotificationService {
     public void pushFailedDelivery(final Message message) {
         final Conversation conversation = (Conversation) message.getConversation();
         final boolean isScreenLocked = !mXmppConnectionService.isScreenLocked();
-        if (this.mIsInForeground && isScreenLocked && this.mOpenConversation == message.getConversation()) {
-            Log.d(Config.LOGTAG, message.getConversation().getAccount().getJid().asBareJid() + ": suppressing failed delivery notification because conversation is open");
+        if (this.mIsInForeground
+                && isScreenLocked
+                && this.mOpenConversation == message.getConversation()) {
+            Log.d(
+                    Config.LOGTAG,
+                    message.getConversation().getAccount().getJid().asBareJid()
+                            + ": suppressing failed delivery notification because conversation is open");
             return;
         }
         final PendingIntent pendingIntent = createContentIntent(conversation);
-        final int notificationId = generateRequestCode(conversation, 0) + DELIVERY_FAILED_NOTIFICATION_ID;
+        final int notificationId =
+                generateRequestCode(conversation, 0) + DELIVERY_FAILED_NOTIFICATION_ID;
         final int failedDeliveries = conversation.countFailedDeliveries();
         final Notification notification =
                 new Builder(mXmppConnectionService, "delivery_failed")
                         .setContentTitle(conversation.getName())
                         .setAutoCancel(true)
                         .setSmallIcon(R.drawable.ic_error_white_24dp)
-                        .setContentText(mXmppConnectionService.getResources().getQuantityText(R.plurals.some_messages_could_not_be_delivered, failedDeliveries))
+                        .setContentText(
+                                mXmppConnectionService
+                                        .getResources()
+                                        .getQuantityText(
+                                                R.plurals.some_messages_could_not_be_delivered,
+                                                failedDeliveries))
                         .setGroup("delivery_failed")
-                        .setContentIntent(pendingIntent).build();
+                        .setContentIntent(pendingIntent)
+                        .build();
         final Notification summaryNotification =
                 new Builder(mXmppConnectionService, "delivery_failed")
-                        .setContentTitle(mXmppConnectionService.getString(R.string.failed_deliveries))
-                        .setContentText(mXmppConnectionService.getResources().getQuantityText(R.plurals.some_messages_could_not_be_delivered, 1024))
+                        .setContentTitle(
+                                mXmppConnectionService.getString(R.string.failed_deliveries))
+                        .setContentText(
+                                mXmppConnectionService
+                                        .getResources()
+                                        .getQuantityText(
+                                                R.plurals.some_messages_could_not_be_delivered,
+                                                1024))
                         .setSmallIcon(R.drawable.ic_error_white_24dp)
                         .setGroup("delivery_failed")
                         .setGroupSummary(true)
@@ -398,32 +462,38 @@ public class NotificationService {
         notify(DELIVERY_FAILED_NOTIFICATION_ID, summaryNotification);
     }
 
-    public synchronized void startRinging(final AbstractJingleConnection.Id id, final Set<Media> media) {
+    public synchronized void startRinging(
+            final AbstractJingleConnection.Id id, final Set<Media> media) {
         showIncomingCallNotification(id, media);
-        final NotificationManager notificationManager = (NotificationManager) mXmppConnectionService.getSystemService(Context.NOTIFICATION_SERVICE);
+        final NotificationManager notificationManager =
+                (NotificationManager)
+                        mXmppConnectionService.getSystemService(Context.NOTIFICATION_SERVICE);
         final int currentInterruptionFilter;
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && notificationManager != null) {
             currentInterruptionFilter = notificationManager.getCurrentInterruptionFilter();
         } else {
-            currentInterruptionFilter = 1; //INTERRUPTION_FILTER_ALL
+            currentInterruptionFilter = 1; // INTERRUPTION_FILTER_ALL
         }
         if (currentInterruptionFilter != 1) {
-            Log.d(Config.LOGTAG, "do not ring or vibrate because interruption filter has been set to " + currentInterruptionFilter);
+            Log.d(
+                    Config.LOGTAG,
+                    "do not ring or vibrate because interruption filter has been set to "
+                            + currentInterruptionFilter);
             return;
         }
         final ScheduledFuture<?> currentVibrationFuture = this.vibrationFuture;
-        this.vibrationFuture = SCHEDULED_EXECUTOR_SERVICE.scheduleAtFixedRate(
-                new VibrationRunnable(),
-                0,
-                3,
-                TimeUnit.SECONDS
-        );
+        this.vibrationFuture =
+                SCHEDULED_EXECUTOR_SERVICE.scheduleAtFixedRate(
+                        new VibrationRunnable(), 0, 3, TimeUnit.SECONDS);
         if (currentVibrationFuture != null) {
             currentVibrationFuture.cancel(true);
         }
-        final SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(mXmppConnectionService);
+        final SharedPreferences preferences =
+                PreferenceManager.getDefaultSharedPreferences(mXmppConnectionService);
         final Resources resources = mXmppConnectionService.getResources();
-        final String ringtonePreference = preferences.getString("call_ringtone", resources.getString(R.string.incoming_call_ringtone));
+        final String ringtonePreference =
+                preferences.getString(
+                        "call_ringtone", resources.getString(R.string.incoming_call_ringtone));
         if (Strings.isNullOrEmpty(ringtonePreference)) {
             Log.d(Config.LOGTAG, "ringtone has been set to none");
             return;
@@ -440,26 +510,34 @@ public class NotificationService {
         this.currentlyPlayingRingtone.play();
     }
 
-    private void showIncomingCallNotification(final AbstractJingleConnection.Id id, final Set<Media> media) {
-        final Intent fullScreenIntent = new Intent(mXmppConnectionService, RtpSessionActivity.class);
-        fullScreenIntent.putExtra(RtpSessionActivity.EXTRA_ACCOUNT, id.account.getJid().asBareJid().toEscapedString());
+    private void showIncomingCallNotification(
+            final AbstractJingleConnection.Id id, final Set<Media> media) {
+        final Intent fullScreenIntent =
+                new Intent(mXmppConnectionService, RtpSessionActivity.class);
+        fullScreenIntent.putExtra(
+                RtpSessionActivity.EXTRA_ACCOUNT,
+                id.account.getJid().asBareJid().toEscapedString());
         fullScreenIntent.putExtra(RtpSessionActivity.EXTRA_WITH, id.with.toEscapedString());
         fullScreenIntent.putExtra(RtpSessionActivity.EXTRA_SESSION_ID, id.sessionId);
         fullScreenIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
         fullScreenIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
-        final NotificationCompat.Builder builder = new NotificationCompat.Builder(mXmppConnectionService, INCOMING_CALLS_NOTIFICATION_CHANNEL);
+        final NotificationCompat.Builder builder =
+                new NotificationCompat.Builder(
+                        mXmppConnectionService, INCOMING_CALLS_NOTIFICATION_CHANNEL);
         if (media.contains(Media.VIDEO)) {
             builder.setSmallIcon(R.drawable.ic_videocam_white_24dp);
-            builder.setContentTitle(mXmppConnectionService.getString(R.string.rtp_state_incoming_video_call));
+            builder.setContentTitle(
+                    mXmppConnectionService.getString(R.string.rtp_state_incoming_video_call));
         } else {
             builder.setSmallIcon(R.drawable.ic_call_white_24dp);
-            builder.setContentTitle(mXmppConnectionService.getString(R.string.rtp_state_incoming_call));
+            builder.setContentTitle(
+                    mXmppConnectionService.getString(R.string.rtp_state_incoming_call));
         }
         final Contact contact = id.getContact();
-        builder.setLargeIcon(mXmppConnectionService.getAvatarService().get(
-                contact,
-                AvatarService.getSystemUiAvatarSize(mXmppConnectionService))
-        );
+        builder.setLargeIcon(
+                mXmppConnectionService
+                        .getAvatarService()
+                        .get(contact, AvatarService.getSystemUiAvatarSize(mXmppConnectionService)));
         final Uri systemAccount = contact.getSystemAccount();
         if (systemAccount != null) {
             builder.addPerson(systemAccount.toString());
@@ -470,38 +548,49 @@ public class NotificationService {
         builder.setCategory(NotificationCompat.CATEGORY_CALL);
         PendingIntent pendingIntent = createPendingRtpSession(id, Intent.ACTION_VIEW, 101);
         builder.setFullScreenIntent(pendingIntent, true);
-        builder.setContentIntent(pendingIntent); //old androids need this?
+        builder.setContentIntent(pendingIntent); // old androids need this?
         builder.setOngoing(true);
-        builder.addAction(new NotificationCompat.Action.Builder(
-                R.drawable.ic_call_end_white_48dp,
-                mXmppConnectionService.getString(R.string.dismiss_call),
-                createCallAction(id.sessionId, XmppConnectionService.ACTION_DISMISS_CALL, 102))
-                .build());
-        builder.addAction(new NotificationCompat.Action.Builder(
-                R.drawable.ic_call_white_24dp,
-                mXmppConnectionService.getString(R.string.answer_call),
-                createPendingRtpSession(id, RtpSessionActivity.ACTION_ACCEPT_CALL, 103))
-                .build());
+        builder.addAction(
+                new NotificationCompat.Action.Builder(
+                                R.drawable.ic_call_end_white_48dp,
+                                mXmppConnectionService.getString(R.string.dismiss_call),
+                                createCallAction(
+                                        id.sessionId,
+                                        XmppConnectionService.ACTION_DISMISS_CALL,
+                                        102))
+                        .build());
+        builder.addAction(
+                new NotificationCompat.Action.Builder(
+                                R.drawable.ic_call_white_24dp,
+                                mXmppConnectionService.getString(R.string.answer_call),
+                                createPendingRtpSession(
+                                        id, RtpSessionActivity.ACTION_ACCEPT_CALL, 103))
+                        .build());
         modifyIncomingCall(builder);
         final Notification notification = builder.build();
         notification.flags = notification.flags | Notification.FLAG_INSISTENT;
         notify(INCOMING_CALL_NOTIFICATION_ID, notification);
     }
 
-    public Notification getOngoingCallNotification(final XmppConnectionService.OngoingCall ongoingCall) {
+    public Notification getOngoingCallNotification(
+            final XmppConnectionService.OngoingCall ongoingCall) {
         final AbstractJingleConnection.Id id = ongoingCall.id;
-        final NotificationCompat.Builder builder = new NotificationCompat.Builder(mXmppConnectionService, "ongoing_calls");
+        final NotificationCompat.Builder builder =
+                new NotificationCompat.Builder(mXmppConnectionService, "ongoing_calls");
         if (ongoingCall.media.contains(Media.VIDEO)) {
             builder.setSmallIcon(R.drawable.ic_videocam_white_24dp);
             if (ongoingCall.reconnecting) {
-                builder.setContentTitle(mXmppConnectionService.getString(R.string.reconnecting_video_call));
+                builder.setContentTitle(
+                        mXmppConnectionService.getString(R.string.reconnecting_video_call));
             } else {
-                builder.setContentTitle(mXmppConnectionService.getString(R.string.ongoing_video_call));
+                builder.setContentTitle(
+                        mXmppConnectionService.getString(R.string.ongoing_video_call));
             }
         } else {
             builder.setSmallIcon(R.drawable.ic_call_white_24dp);
             if (ongoingCall.reconnecting) {
-                builder.setContentTitle(mXmppConnectionService.getString(R.string.reconnecting_call));
+                builder.setContentTitle(
+                        mXmppConnectionService.getString(R.string.reconnecting_call));
             } else {
                 builder.setContentTitle(mXmppConnectionService.getString(R.string.ongoing_call));
             }
@@ -512,21 +601,31 @@ public class NotificationService {
         builder.setCategory(NotificationCompat.CATEGORY_CALL);
         builder.setContentIntent(createPendingRtpSession(id, Intent.ACTION_VIEW, 101));
         builder.setOngoing(true);
-        builder.addAction(new NotificationCompat.Action.Builder(
-                R.drawable.ic_call_end_white_48dp,
-                mXmppConnectionService.getString(R.string.hang_up),
-                createCallAction(id.sessionId, XmppConnectionService.ACTION_END_CALL, 104))
-                .build());
+        builder.addAction(
+                new NotificationCompat.Action.Builder(
+                                R.drawable.ic_call_end_white_48dp,
+                                mXmppConnectionService.getString(R.string.hang_up),
+                                createCallAction(
+                                        id.sessionId, XmppConnectionService.ACTION_END_CALL, 104))
+                        .build());
         return builder.build();
     }
 
-    private PendingIntent createPendingRtpSession(final AbstractJingleConnection.Id id, final String action, final int requestCode) {
-        final Intent fullScreenIntent = new Intent(mXmppConnectionService, RtpSessionActivity.class);
+    private PendingIntent createPendingRtpSession(
+            final AbstractJingleConnection.Id id, final String action, final int requestCode) {
+        final Intent fullScreenIntent =
+                new Intent(mXmppConnectionService, RtpSessionActivity.class);
         fullScreenIntent.setAction(action);
-        fullScreenIntent.putExtra(RtpSessionActivity.EXTRA_ACCOUNT, id.account.getJid().asBareJid().toEscapedString());
+        fullScreenIntent.putExtra(
+                RtpSessionActivity.EXTRA_ACCOUNT,
+                id.account.getJid().asBareJid().toEscapedString());
         fullScreenIntent.putExtra(RtpSessionActivity.EXTRA_WITH, id.with.toEscapedString());
         fullScreenIntent.putExtra(RtpSessionActivity.EXTRA_SESSION_ID, id.sessionId);
-        return PendingIntent.getActivity(mXmppConnectionService, requestCode, fullScreenIntent, PendingIntent.FLAG_UPDATE_CURRENT);
+        return PendingIntent.getActivity(
+                mXmppConnectionService,
+                requestCode,
+                fullScreenIntent,
+                PendingIntent.FLAG_UPDATE_CURRENT);
     }
 
     public void cancelIncomingCallNotification() {
@@ -552,7 +651,8 @@ public class NotificationService {
     }
 
     public static void cancelIncomingCallNotification(final Context context) {
-        final NotificationManagerCompat notificationManager = NotificationManagerCompat.from(context);
+        final NotificationManagerCompat notificationManager =
+                NotificationManagerCompat.from(context);
         try {
             notificationManager.cancel(INCOMING_CALL_NOTIFICATION_ID);
         } catch (RuntimeException e) {
@@ -563,21 +663,30 @@ public class NotificationService {
     private void pushNow(final Message message) {
         mXmppConnectionService.updateUnreadCountBadge();
         if (!notify(message)) {
-            Log.d(Config.LOGTAG, message.getConversation().getAccount().getJid().asBareJid() + ": suppressing notification because turned off");
+            Log.d(
+                    Config.LOGTAG,
+                    message.getConversation().getAccount().getJid().asBareJid()
+                            + ": suppressing notification because turned off");
             return;
         }
         final boolean isScreenLocked = mXmppConnectionService.isScreenLocked();
-        if (this.mIsInForeground && !isScreenLocked && this.mOpenConversation == message.getConversation()) {
-            Log.d(Config.LOGTAG, message.getConversation().getAccount().getJid().asBareJid() + ": suppressing notification because conversation is open");
+        if (this.mIsInForeground
+                && !isScreenLocked
+                && this.mOpenConversation == message.getConversation()) {
+            Log.d(
+                    Config.LOGTAG,
+                    message.getConversation().getAccount().getJid().asBareJid()
+                            + ": suppressing notification because conversation is open");
             return;
         }
         synchronized (notifications) {
             pushToStack(message);
             final Conversational conversation = message.getConversation();
             final Account account = conversation.getAccount();
-            final boolean doNotify = (!(this.mIsInForeground && this.mOpenConversation == null) || isScreenLocked)
-                    && !account.inGracePeriod()
-                    && !this.inMiniGracePeriod(account);
+            final boolean doNotify =
+                    (!(this.mIsInForeground && this.mOpenConversation == null) || isScreenLocked)
+                            && !account.inGracePeriod()
+                            && !this.inMiniGracePeriod(account);
             updateNotification(doNotify, Collections.singletonList(conversation.getUuid()));
         }
     }
@@ -638,13 +747,19 @@ public class NotificationService {
         updateNotification(notify, conversations, false);
     }
 
-    private void updateNotification(final boolean notify, final List<String> conversations, final boolean summaryOnly) {
-        final SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(mXmppConnectionService);
+    private void updateNotification(
+            final boolean notify, final List<String> conversations, final boolean summaryOnly) {
+        final SharedPreferences preferences =
+                PreferenceManager.getDefaultSharedPreferences(mXmppConnectionService);
 
         final boolean quiteHours = isQuietHours();
 
-        final boolean notifyOnlyOneChild = notify && conversations != null && conversations.size() == 1; //if this check is changed to > 0 catchup messages will create one notification per conversation
-
+        final boolean notifyOnlyOneChild =
+                notify
+                        && conversations != null
+                        && conversations.size()
+                                == 1; // if this check is changed to > 0 catchup messages will
+                                      // create one notification per conversation
 
         if (notifications.size() == 0) {
             cancel(NOTIFICATION_ID);
@@ -654,7 +769,9 @@ public class NotificationService {
             }
             final Builder mBuilder;
             if (notifications.size() == 1 && Build.VERSION.SDK_INT < Build.VERSION_CODES.N) {
-                mBuilder = buildSingleConversations(notifications.values().iterator().next(), notify, quiteHours);
+                mBuilder =
+                        buildSingleConversations(
+                                notifications.values().iterator().next(), notify, quiteHours);
                 modifyForSoundVibrationAndLight(mBuilder, notify, quiteHours, preferences);
                 notify(NOTIFICATION_ID, mBuilder.build());
             } else {
@@ -666,12 +783,16 @@ public class NotificationService {
                 if (!summaryOnly) {
                     for (Map.Entry<String, ArrayList<Message>> entry : notifications.entrySet()) {
                         String uuid = entry.getKey();
-                        final boolean notifyThis = notifyOnlyOneChild ? conversations.contains(uuid) : notify;
-                        Builder singleBuilder = buildSingleConversations(entry.getValue(), notifyThis, quiteHours);
+                        final boolean notifyThis =
+                                notifyOnlyOneChild ? conversations.contains(uuid) : notify;
+                        Builder singleBuilder =
+                                buildSingleConversations(entry.getValue(), notifyThis, quiteHours);
                         if (!notifyOnlyOneChild) {
-                            singleBuilder.setGroupAlertBehavior(NotificationCompat.GROUP_ALERT_SUMMARY);
+                            singleBuilder.setGroupAlertBehavior(
+                                    NotificationCompat.GROUP_ALERT_SUMMARY);
                         }
-                        modifyForSoundVibrationAndLight(singleBuilder, notifyThis, quiteHours, preferences);
+                        modifyForSoundVibrationAndLight(
+                                singleBuilder, notifyThis, quiteHours, preferences);
                         singleBuilder.setGroup(CONVERSATIONS_GROUP);
                         setNotificationColor(singleBuilder);
                         notify(entry.getKey(), NOTIFICATION_ID, singleBuilder.build());
@@ -682,19 +803,28 @@ public class NotificationService {
         }
     }
 
-    private void modifyForSoundVibrationAndLight(Builder mBuilder, boolean notify, boolean quietHours, SharedPreferences preferences) {
+    private void modifyForSoundVibrationAndLight(
+            Builder mBuilder, boolean notify, boolean quietHours, SharedPreferences preferences) {
         final Resources resources = mXmppConnectionService.getResources();
-        final String ringtone = preferences.getString("notification_ringtone", resources.getString(R.string.notification_ringtone));
-        final boolean vibrate = preferences.getBoolean("vibrate_on_notification", resources.getBoolean(R.bool.vibrate_on_notification));
+        final String ringtone =
+                preferences.getString(
+                        "notification_ringtone",
+                        resources.getString(R.string.notification_ringtone));
+        final boolean vibrate =
+                preferences.getBoolean(
+                        "vibrate_on_notification",
+                        resources.getBoolean(R.bool.vibrate_on_notification));
         final boolean led = preferences.getBoolean("led", resources.getBoolean(R.bool.led));
-        final boolean headsup = preferences.getBoolean("notification_headsup", resources.getBoolean(R.bool.headsup_notifications));
+        final boolean headsup =
+                preferences.getBoolean(
+                        "notification_headsup", resources.getBoolean(R.bool.headsup_notifications));
         if (notify && !quietHours) {
             if (vibrate) {
                 final int dat = 70;
                 final long[] pattern = {0, 3 * dat, dat, dat};
                 mBuilder.setVibrate(pattern);
             } else {
-                mBuilder.setVibrate(new long[]{0});
+                mBuilder.setVibrate(new long[] {0});
             }
             Uri uri = Uri.parse(ringtone);
             try {
@@ -708,7 +838,12 @@ public class NotificationService {
         if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
             mBuilder.setCategory(Notification.CATEGORY_MESSAGE);
         }
-        mBuilder.setPriority(notify ? (headsup ? NotificationCompat.PRIORITY_HIGH : NotificationCompat.PRIORITY_DEFAULT) : NotificationCompat.PRIORITY_LOW);
+        mBuilder.setPriority(
+                notify
+                        ? (headsup
+                                ? NotificationCompat.PRIORITY_HIGH
+                                : NotificationCompat.PRIORITY_DEFAULT)
+                        : NotificationCompat.PRIORITY_LOW);
         setNotificationColor(mBuilder);
         mBuilder.setDefaults(0);
         if (led) {
@@ -731,9 +866,18 @@ public class NotificationService {
     }
 
     private Builder buildMultipleConversation(final boolean notify, final boolean quietHours) {
-        final Builder mBuilder = new NotificationCompat.Builder(mXmppConnectionService, quietHours ? "quiet_hours" : (notify ? "messages" : "silent_messages"));
+        final Builder mBuilder =
+                new NotificationCompat.Builder(
+                        mXmppConnectionService,
+                        quietHours ? "quiet_hours" : (notify ? "messages" : "silent_messages"));
         final NotificationCompat.InboxStyle style = new NotificationCompat.InboxStyle();
-        style.setBigContentTitle(mXmppConnectionService.getResources().getQuantityString(R.plurals.x_unread_conversations, notifications.size(), notifications.size()));
+        style.setBigContentTitle(
+                mXmppConnectionService
+                        .getResources()
+                        .getQuantityString(
+                                R.plurals.x_unread_conversations,
+                                notifications.size(),
+                                notifications.size()));
         final StringBuilder names = new StringBuilder();
         Conversation conversation = null;
         for (final ArrayList<Message> messages : notifications.values()) {
@@ -743,11 +887,24 @@ public class NotificationService {
                 SpannableString styledString;
                 if (Config.HIDE_MESSAGE_TEXT_IN_NOTIFICATION) {
                     int count = messages.size();
-                    styledString = new SpannableString(name + ": " + mXmppConnectionService.getResources().getQuantityString(R.plurals.x_messages, count, count));
+                    styledString =
+                            new SpannableString(
+                                    name
+                                            + ": "
+                                            + mXmppConnectionService
+                                                    .getResources()
+                                                    .getQuantityString(
+                                                            R.plurals.x_messages, count, count));
                     styledString.setSpan(new StyleSpan(Typeface.BOLD), 0, name.length(), 0);
                     style.addLine(styledString);
                 } else {
-                    styledString = new SpannableString(name + ": " + UIHelper.getMessagePreview(mXmppConnectionService, messages.get(0)).first);
+                    styledString =
+                            new SpannableString(
+                                    name
+                                            + ": "
+                                            + UIHelper.getMessagePreview(
+                                                            mXmppConnectionService, messages.get(0))
+                                                    .first);
                     styledString.setSpan(new StyleSpan(Typeface.BOLD), 0, name.length(), 0);
                     style.addLine(styledString);
                 }
@@ -758,7 +915,13 @@ public class NotificationService {
         if (names.length() >= 2) {
             names.delete(names.length() - 2, names.length());
         }
-        final String contentTitle = mXmppConnectionService.getResources().getQuantityString(R.plurals.x_unread_conversations, notifications.size(), notifications.size());
+        final String contentTitle =
+                mXmppConnectionService
+                        .getResources()
+                        .getQuantityString(
+                                R.plurals.x_unread_conversations,
+                                notifications.size(),
+                                notifications.size());
         mBuilder.setContentTitle(contentTitle);
         mBuilder.setTicker(contentTitle);
         mBuilder.setContentText(names.toString());
@@ -773,46 +936,72 @@ public class NotificationService {
         return mBuilder;
     }
 
-    private Builder buildSingleConversations(final ArrayList<Message> messages, final boolean notify, final boolean quietHours) {
-        final Builder mBuilder = new NotificationCompat.Builder(mXmppConnectionService, quietHours ? "quiet_hours" : (notify ? "messages" : "silent_messages"));
+    private Builder buildSingleConversations(
+            final ArrayList<Message> messages, final boolean notify, final boolean quietHours) {
+        final Builder mBuilder =
+                new NotificationCompat.Builder(
+                        mXmppConnectionService,
+                        quietHours ? "quiet_hours" : (notify ? "messages" : "silent_messages"));
         if (messages.size() >= 1) {
             final Conversation conversation = (Conversation) messages.get(0).getConversation();
-            mBuilder.setLargeIcon(mXmppConnectionService.getAvatarService()
-                    .get(conversation, AvatarService.getSystemUiAvatarSize(mXmppConnectionService)));
+            mBuilder.setLargeIcon(
+                    mXmppConnectionService
+                            .getAvatarService()
+                            .get(
+                                    conversation,
+                                    AvatarService.getSystemUiAvatarSize(mXmppConnectionService)));
             mBuilder.setContentTitle(conversation.getName());
             if (Config.HIDE_MESSAGE_TEXT_IN_NOTIFICATION) {
                 int count = messages.size();
-                mBuilder.setContentText(mXmppConnectionService.getResources().getQuantityString(R.plurals.x_messages, count, count));
+                mBuilder.setContentText(
+                        mXmppConnectionService
+                                .getResources()
+                                .getQuantityString(R.plurals.x_messages, count, count));
             } else {
                 Message message;
-                //TODO starting with Android 9 we might want to put images in MessageStyle
-                if (Build.VERSION.SDK_INT < Build.VERSION_CODES.P && (message = getImage(messages)) != null) {
+                // TODO starting with Android 9 we might want to put images in MessageStyle
+                if (Build.VERSION.SDK_INT < Build.VERSION_CODES.P
+                        && (message = getImage(messages)) != null) {
                     modifyForImage(mBuilder, message, messages);
                 } else {
                     modifyForTextOnly(mBuilder, messages);
                 }
-                RemoteInput remoteInput = new RemoteInput.Builder("text_reply").setLabel(UIHelper.getMessageHint(mXmppConnectionService, conversation)).build();
+                RemoteInput remoteInput =
+                        new RemoteInput.Builder("text_reply")
+                                .setLabel(
+                                        UIHelper.getMessageHint(
+                                                mXmppConnectionService, conversation))
+                                .build();
                 PendingIntent markAsReadPendingIntent = createReadPendingIntent(conversation);
-                NotificationCompat.Action markReadAction = new NotificationCompat.Action.Builder(
-                        R.drawable.ic_drafts_white_24dp,
-                        mXmppConnectionService.getString(R.string.mark_as_read),
-                        markAsReadPendingIntent)
-                        .setSemanticAction(NotificationCompat.Action.SEMANTIC_ACTION_MARK_AS_READ)
-                        .setShowsUserInterface(false)
-                        .build();
+                NotificationCompat.Action markReadAction =
+                        new NotificationCompat.Action.Builder(
+                                        R.drawable.ic_drafts_white_24dp,
+                                        mXmppConnectionService.getString(R.string.mark_as_read),
+                                        markAsReadPendingIntent)
+                                .setSemanticAction(
+                                        NotificationCompat.Action.SEMANTIC_ACTION_MARK_AS_READ)
+                                .setShowsUserInterface(false)
+                                .build();
                 final String replyLabel = mXmppConnectionService.getString(R.string.reply);
                 final String lastMessageUuid = Iterables.getLast(messages).getUuid();
-                final NotificationCompat.Action replyAction = new NotificationCompat.Action.Builder(
-                        R.drawable.ic_send_text_offline,
-                        replyLabel,
-                        createReplyIntent(conversation, lastMessageUuid, false))
-                        .setSemanticAction(NotificationCompat.Action.SEMANTIC_ACTION_REPLY)
-                        .setShowsUserInterface(false)
-                        .addRemoteInput(remoteInput).build();
-                final NotificationCompat.Action wearReplyAction = new NotificationCompat.Action.Builder(R.drawable.ic_wear_reply,
-                        replyLabel,
-                        createReplyIntent(conversation, lastMessageUuid, true)).addRemoteInput(remoteInput).build();
-                mBuilder.extend(new NotificationCompat.WearableExtender().addAction(wearReplyAction));
+                final NotificationCompat.Action replyAction =
+                        new NotificationCompat.Action.Builder(
+                                        R.drawable.ic_send_text_offline,
+                                        replyLabel,
+                                        createReplyIntent(conversation, lastMessageUuid, false))
+                                .setSemanticAction(NotificationCompat.Action.SEMANTIC_ACTION_REPLY)
+                                .setShowsUserInterface(false)
+                                .addRemoteInput(remoteInput)
+                                .build();
+                final NotificationCompat.Action wearReplyAction =
+                        new NotificationCompat.Action.Builder(
+                                        R.drawable.ic_wear_reply,
+                                        replyLabel,
+                                        createReplyIntent(conversation, lastMessageUuid, true))
+                                .addRemoteInput(remoteInput)
+                                .build();
+                mBuilder.extend(
+                        new NotificationCompat.WearableExtender().addAction(wearReplyAction));
                 int addedActionsCount = 1;
                 mBuilder.addAction(markReadAction);
                 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
@@ -823,23 +1012,31 @@ public class NotificationService {
                 if (displaySnoozeAction(messages)) {
                     String label = mXmppConnectionService.getString(R.string.snooze);
                     PendingIntent pendingSnoozeIntent = createSnoozeIntent(conversation);
-                    NotificationCompat.Action snoozeAction = new NotificationCompat.Action.Builder(
-                            R.drawable.ic_notifications_paused_white_24dp,
-                            label,
-                            pendingSnoozeIntent).build();
+                    NotificationCompat.Action snoozeAction =
+                            new NotificationCompat.Action.Builder(
+                                            R.drawable.ic_notifications_paused_white_24dp,
+                                            label,
+                                            pendingSnoozeIntent)
+                                    .build();
                     mBuilder.addAction(snoozeAction);
                     ++addedActionsCount;
                 }
                 if (addedActionsCount < 3) {
                     final Message firstLocationMessage = getFirstLocationMessage(messages);
                     if (firstLocationMessage != null) {
-                        final PendingIntent pendingShowLocationIntent = createShowLocationIntent(firstLocationMessage);
+                        final PendingIntent pendingShowLocationIntent =
+                                createShowLocationIntent(firstLocationMessage);
                         if (pendingShowLocationIntent != null) {
-                            final String label = mXmppConnectionService.getResources().getString(R.string.show_location);
-                            NotificationCompat.Action locationAction = new NotificationCompat.Action.Builder(
-                                    R.drawable.ic_room_white_24dp,
-                                    label,
-                                    pendingShowLocationIntent).build();
+                            final String label =
+                                    mXmppConnectionService
+                                            .getResources()
+                                            .getString(R.string.show_location);
+                            NotificationCompat.Action locationAction =
+                                    new NotificationCompat.Action.Builder(
+                                                    R.drawable.ic_room_white_24dp,
+                                                    label,
+                                                    pendingShowLocationIntent)
+                                            .build();
                             mBuilder.addAction(locationAction);
                             ++addedActionsCount;
                         }
@@ -848,12 +1045,22 @@ public class NotificationService {
                 if (addedActionsCount < 3) {
                     Message firstDownloadableMessage = getFirstDownloadableMessage(messages);
                     if (firstDownloadableMessage != null) {
-                        String label = mXmppConnectionService.getResources().getString(R.string.download_x_file, UIHelper.getFileDescriptionString(mXmppConnectionService, firstDownloadableMessage));
-                        PendingIntent pendingDownloadIntent = createDownloadIntent(firstDownloadableMessage);
-                        NotificationCompat.Action downloadAction = new NotificationCompat.Action.Builder(
-                                R.drawable.ic_file_download_white_24dp,
-                                label,
-                                pendingDownloadIntent).build();
+                        String label =
+                                mXmppConnectionService
+                                        .getResources()
+                                        .getString(
+                                                R.string.download_x_file,
+                                                UIHelper.getFileDescriptionString(
+                                                        mXmppConnectionService,
+                                                        firstDownloadableMessage));
+                        PendingIntent pendingDownloadIntent =
+                                createDownloadIntent(firstDownloadableMessage);
+                        NotificationCompat.Action downloadAction =
+                                new NotificationCompat.Action.Builder(
+                                                R.drawable.ic_file_download_white_24dp,
+                                                label,
+                                                pendingDownloadIntent)
+                                        .build();
                         mBuilder.addAction(downloadAction);
                         ++addedActionsCount;
                     }
@@ -874,13 +1081,16 @@ public class NotificationService {
         return mBuilder;
     }
 
-    private void modifyForImage(final Builder builder, final Message message, final ArrayList<Message> messages) {
+    private void modifyForImage(
+            final Builder builder, final Message message, final ArrayList<Message> messages) {
         try {
-            final Bitmap bitmap = mXmppConnectionService.getFileBackend().getThumbnail(message, getPixel(288), false);
+            final Bitmap bitmap =
+                    mXmppConnectionService
+                            .getFileBackend()
+                            .getThumbnail(message, getPixel(288), false);
             final ArrayList<Message> tmp = new ArrayList<>();
             for (final Message msg : messages) {
-                if (msg.getType() == Message.TYPE_TEXT
-                        && msg.getTransferable() == null) {
+                if (msg.getType() == Message.TYPE_TEXT && msg.getTransferable() == null) {
                     tmp.add(msg);
                 }
             }
@@ -892,7 +1102,8 @@ public class NotificationService {
                 builder.setContentText(text);
                 builder.setTicker(text);
             } else {
-                final String description = UIHelper.getFileDescriptionString(mXmppConnectionService, message);
+                final String description =
+                        UIHelper.getFileDescriptionString(mXmppConnectionService, message);
                 builder.setContentText(description);
                 builder.setTicker(description);
             }
@@ -915,7 +1126,15 @@ public class NotificationService {
             builder.setName(UIHelper.getMessageDisplayName(message));
         }
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
-            builder.setIcon(IconCompat.createWithBitmap(mXmppConnectionService.getAvatarService().get(message, AvatarService.getSystemUiAvatarSize(mXmppConnectionService), false)));
+            builder.setIcon(
+                    IconCompat.createWithBitmap(
+                            mXmppConnectionService
+                                    .getAvatarService()
+                                    .get(
+                                            message,
+                                            AvatarService.getSystemUiAvatarSize(
+                                                    mXmppConnectionService),
+                                            false)));
         }
         return builder.build();
     }
@@ -923,35 +1142,60 @@ public class NotificationService {
     private void modifyForTextOnly(final Builder builder, final ArrayList<Message> messages) {
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
             final Conversation conversation = (Conversation) messages.get(0).getConversation();
-            final Person.Builder meBuilder = new Person.Builder().setName(mXmppConnectionService.getString(R.string.me));
+            final Person.Builder meBuilder =
+                    new Person.Builder().setName(mXmppConnectionService.getString(R.string.me));
             if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
-                meBuilder.setIcon(IconCompat.createWithBitmap(mXmppConnectionService.getAvatarService().get(conversation.getAccount(), AvatarService.getSystemUiAvatarSize(mXmppConnectionService))));
+                meBuilder.setIcon(
+                        IconCompat.createWithBitmap(
+                                mXmppConnectionService
+                                        .getAvatarService()
+                                        .get(
+                                                conversation.getAccount(),
+                                                AvatarService.getSystemUiAvatarSize(
+                                                        mXmppConnectionService))));
             }
             final Person me = meBuilder.build();
-            NotificationCompat.MessagingStyle messagingStyle = new NotificationCompat.MessagingStyle(me);
+            NotificationCompat.MessagingStyle messagingStyle =
+                    new NotificationCompat.MessagingStyle(me);
             final boolean multiple = conversation.getMode() == Conversation.MODE_MULTI;
             if (multiple) {
                 messagingStyle.setConversationTitle(conversation.getName());
             }
             for (Message message : messages) {
-                final Person sender = message.getStatus() == Message.STATUS_RECEIVED ? getPerson(message) : null;
+                final Person sender =
+                        message.getStatus() == Message.STATUS_RECEIVED ? getPerson(message) : null;
                 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P && isImageMessage(message)) {
-                    final Uri dataUri = FileBackend.getMediaUri(mXmppConnectionService, mXmppConnectionService.getFileBackend().getFile(message));
-                    NotificationCompat.MessagingStyle.Message imageMessage = new NotificationCompat.MessagingStyle.Message(UIHelper.getMessagePreview(mXmppConnectionService, message).first, message.getTimeSent(), sender);
+                    final Uri dataUri =
+                            FileBackend.getMediaUri(
+                                    mXmppConnectionService,
+                                    mXmppConnectionService.getFileBackend().getFile(message));
+                    NotificationCompat.MessagingStyle.Message imageMessage =
+                            new NotificationCompat.MessagingStyle.Message(
+                                    UIHelper.getMessagePreview(mXmppConnectionService, message)
+                                            .first,
+                                    message.getTimeSent(),
+                                    sender);
                     if (dataUri != null) {
                         imageMessage.setData(message.getMimeType(), dataUri);
                     }
                     messagingStyle.addMessage(imageMessage);
                 } else {
-                    messagingStyle.addMessage(UIHelper.getMessagePreview(mXmppConnectionService, message).first, message.getTimeSent(), sender);
+                    messagingStyle.addMessage(
+                            UIHelper.getMessagePreview(mXmppConnectionService, message).first,
+                            message.getTimeSent(),
+                            sender);
                 }
             }
             messagingStyle.setGroupConversation(multiple);
             builder.setStyle(messagingStyle);
         } else {
             if (messages.get(0).getConversation().getMode() == Conversation.MODE_SINGLE) {
-                builder.setStyle(new NotificationCompat.BigTextStyle().bigText(getMergedBodies(messages)));
-                final CharSequence preview = UIHelper.getMessagePreview(mXmppConnectionService, messages.get(messages.size() - 1)).first;
+                builder.setStyle(
+                        new NotificationCompat.BigTextStyle().bigText(getMergedBodies(messages)));
+                final CharSequence preview =
+                        UIHelper.getMessagePreview(
+                                        mXmppConnectionService, messages.get(messages.size() - 1))
+                                .first;
                 builder.setContentText(preview);
                 builder.setTicker(preview);
                 builder.setNumber(messages.size());