create notification channel for export service

Daniel Gultsch created

Change summary

src/main/java/eu/siacs/conversations/services/ExportLogsService.java   | 207 
src/main/java/eu/siacs/conversations/services/NotificationService.java |   9 
src/main/res/values/strings.xml                                        |   1 
3 files changed, 114 insertions(+), 103 deletions(-)

Detailed changes

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

@@ -6,6 +6,7 @@ import android.content.Context;
 import android.content.Intent;
 import android.os.IBinder;
 import android.support.v4.app.NotificationCompat;
+
 import java.io.BufferedWriter;
 import java.io.File;
 import java.io.FileWriter;
@@ -25,121 +26,123 @@ import rocks.xmpp.addr.Jid;
 
 public class ExportLogsService extends Service {
 
-	private static final SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
-	private static final String DIRECTORY_STRING_FORMAT = FileBackend.getConversationsLogsDirectory() + "/logs/%s";
-	private static final String MESSAGE_STRING_FORMAT = "(%s) %s: %s\n";
-	private static final int NOTIFICATION_ID = 1;
-	private static AtomicBoolean running = new AtomicBoolean(false);
-	private DatabaseBackend mDatabaseBackend;
-	private List<Account> mAccounts;
+    private static final SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
+    private static final String DIRECTORY_STRING_FORMAT = FileBackend.getConversationsLogsDirectory() + "/logs/%s";
+    private static final String MESSAGE_STRING_FORMAT = "(%s) %s: %s\n";
+    private static final int NOTIFICATION_ID = 1;
+    private static AtomicBoolean running = new AtomicBoolean(false);
+    private DatabaseBackend mDatabaseBackend;
+    private List<Account> mAccounts;
 
-	@Override
-	public void onCreate() {
-		mDatabaseBackend = DatabaseBackend.getInstance(getBaseContext());
-		mAccounts = mDatabaseBackend.getAccounts();
-	}
+    @Override
+    public void onCreate() {
+        mDatabaseBackend = DatabaseBackend.getInstance(getBaseContext());
+        mAccounts = mDatabaseBackend.getAccounts();
+    }
 
-	@Override
-	public int onStartCommand(Intent intent, int flags, int startId) {
-		if (running.compareAndSet(false, true)) {
-			new Thread(() -> {
+    @Override
+    public int onStartCommand(Intent intent, int flags, int startId) {
+        if (running.compareAndSet(false, true)) {
+            new Thread(() -> {
                 export();
                 stopForeground(true);
                 running.set(false);
                 stopSelf();
             }).start();
-		}
-		return START_NOT_STICKY;
-	}
+        }
+        return START_NOT_STICKY;
+    }
 
-	private void export() {
-		List<Conversation> conversations = mDatabaseBackend.getConversations(Conversation.STATUS_AVAILABLE);
-		conversations.addAll(mDatabaseBackend.getConversations(Conversation.STATUS_ARCHIVED));
-		NotificationManager mNotifyManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
-		NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(getBaseContext());
-		mBuilder.setContentTitle(getString(R.string.notification_export_logs_title))
-				.setSmallIcon(R.drawable.ic_import_export_white_24dp)
-				.setProgress(conversations.size(), 0, false);
-		startForeground(NOTIFICATION_ID, mBuilder.build());
+    private void export() {
+        List<Conversation> conversations = mDatabaseBackend.getConversations(Conversation.STATUS_AVAILABLE);
+        conversations.addAll(mDatabaseBackend.getConversations(Conversation.STATUS_ARCHIVED));
+        NotificationManager mNotifyManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
+        NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(getBaseContext(), "export");
+        mBuilder.setContentTitle(getString(R.string.notification_export_logs_title))
+                .setSmallIcon(R.drawable.ic_import_export_white_24dp)
+                .setProgress(conversations.size(), 0, false);
+        startForeground(NOTIFICATION_ID, mBuilder.build());
 
-		int progress = 0;
-		for (Conversation conversation : conversations) {
-			writeToFile(conversation);
-			progress++;
-			mBuilder.setProgress(conversations.size(), progress, false);
-			mNotifyManager.notify(NOTIFICATION_ID, mBuilder.build());
-		}
-	}
+        int progress = 0;
+        for (Conversation conversation : conversations) {
+            writeToFile(conversation);
+            progress++;
+            mBuilder.setProgress(conversations.size(), progress, false);
+            if (mNotifyManager != null) {
+                mNotifyManager.notify(NOTIFICATION_ID, mBuilder.build());
+            }
+        }
+    }
 
-	private void writeToFile(Conversation conversation) {
-		Jid accountJid = resolveAccountUuid(conversation.getAccountUuid());
-		Jid contactJid = conversation.getJid();
+    private void writeToFile(Conversation conversation) {
+        Jid accountJid = resolveAccountUuid(conversation.getAccountUuid());
+        Jid contactJid = conversation.getJid();
 
-		File dir = new File(String.format(DIRECTORY_STRING_FORMAT,accountJid.asBareJid().toString()));
-		dir.mkdirs();
+        File dir = new File(String.format(DIRECTORY_STRING_FORMAT, accountJid.asBareJid().toString()));
+        dir.mkdirs();
 
-		BufferedWriter bw = null;
-		try {
-			for (Message message : mDatabaseBackend.getMessagesIterable(conversation)) {
-				if (message == null)
-					continue;
-				if (message.getType() == Message.TYPE_TEXT || message.hasFileOnRemoteHost()) {
-					String date = simpleDateFormat.format(new Date(message.getTimeSent()));
-					if (bw == null) {
-						bw = new BufferedWriter(new FileWriter(
-								new File(dir, contactJid.asBareJid().toString() + ".txt")));
-					}
-					String jid = null;
-					switch (message.getStatus()) {
-						case Message.STATUS_RECEIVED:
-							jid = getMessageCounterpart(message);
-							break;
-						case Message.STATUS_SEND:
-						case Message.STATUS_SEND_RECEIVED:
-						case Message.STATUS_SEND_DISPLAYED:
-							jid = accountJid.asBareJid().toString();
-							break;
-					}
-					if (jid != null) {
-						String body = message.hasFileOnRemoteHost() ? message.getFileParams().url.toString() : message.getBody();
-						bw.write(String.format(MESSAGE_STRING_FORMAT, date, jid,
-								body.replace("\\\n", "\\ \n").replace("\n", "\\ \n")));
-					}
-				}
-			}
-		} catch (IOException e) {
-			e.printStackTrace();
-		} finally {
-			try {
-				if (bw != null) {
-					bw.close();
-				}
-			} catch (IOException e1) {
-				e1.printStackTrace();
-			}
-		}
-	}
+        BufferedWriter bw = null;
+        try {
+            for (Message message : mDatabaseBackend.getMessagesIterable(conversation)) {
+                if (message == null)
+                    continue;
+                if (message.getType() == Message.TYPE_TEXT || message.hasFileOnRemoteHost()) {
+                    String date = simpleDateFormat.format(new Date(message.getTimeSent()));
+                    if (bw == null) {
+                        bw = new BufferedWriter(new FileWriter(
+                                new File(dir, contactJid.asBareJid().toString() + ".txt")));
+                    }
+                    String jid = null;
+                    switch (message.getStatus()) {
+                        case Message.STATUS_RECEIVED:
+                            jid = getMessageCounterpart(message);
+                            break;
+                        case Message.STATUS_SEND:
+                        case Message.STATUS_SEND_RECEIVED:
+                        case Message.STATUS_SEND_DISPLAYED:
+                            jid = accountJid.asBareJid().toString();
+                            break;
+                    }
+                    if (jid != null) {
+                        String body = message.hasFileOnRemoteHost() ? message.getFileParams().url.toString() : message.getBody();
+                        bw.write(String.format(MESSAGE_STRING_FORMAT, date, jid,
+                                body.replace("\\\n", "\\ \n").replace("\n", "\\ \n")));
+                    }
+                }
+            }
+        } catch (IOException e) {
+            e.printStackTrace();
+        } finally {
+            try {
+                if (bw != null) {
+                    bw.close();
+                }
+            } catch (IOException e1) {
+                e1.printStackTrace();
+            }
+        }
+    }
 
-	private Jid resolveAccountUuid(String accountUuid) {
-		for (Account account : mAccounts) {
-			if (account.getUuid().equals(accountUuid)) {
-				return account.getJid();
-			}
-		}
-		return null;
-	}
+    private Jid resolveAccountUuid(String accountUuid) {
+        for (Account account : mAccounts) {
+            if (account.getUuid().equals(accountUuid)) {
+                return account.getJid();
+            }
+        }
+        return null;
+    }
 
-	private String getMessageCounterpart(Message message) {
-		String trueCounterpart = (String) message.getContentValues().get(Message.TRUE_COUNTERPART);
-		if (trueCounterpart != null) {
-			return trueCounterpart;
-		} else {
-			return message.getCounterpart().toString();
-		}
-	}
+    private String getMessageCounterpart(Message message) {
+        String trueCounterpart = (String) message.getContentValues().get(Message.TRUE_COUNTERPART);
+        if (trueCounterpart != null) {
+            return trueCounterpart;
+        } else {
+            return message.getCounterpart().toString();
+        }
+    }
 
-	@Override
-	public IBinder onBind(Intent intent) {
-		return null;
-	}
+    @Override
+    public IBinder onBind(Intent intent) {
+        return null;
+    }
 }

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

@@ -100,7 +100,7 @@ public class NotificationService {
     @RequiresApi(api = Build.VERSION_CODES.O)
     public void initializeChannels() {
         final Context c = mXmppConnectionService;
-        NotificationManager notificationManager = c.getSystemService(NotificationManager.class);
+        final NotificationManager notificationManager = c.getSystemService(NotificationManager.class);
         if (notificationManager == null) {
             return;
         }
@@ -129,6 +129,13 @@ public class NotificationService {
         videoCompressionChannel.setGroup("status");
         notificationManager.createNotificationChannel(videoCompressionChannel);
 
+        final NotificationChannel exportChannel = new NotificationChannel("export",
+                c.getString(R.string.export_channel_name),
+                NotificationManager.IMPORTANCE_LOW);
+        exportChannel.setShowBadge(false);
+        exportChannel.setGroup("status");
+        notificationManager.createNotificationChannel(exportChannel);
+
         final NotificationChannel messagesChannel = new NotificationChannel("messages",
                 c.getString(R.string.messages_channel_name),
                 NotificationManager.IMPORTANCE_HIGH);

src/main/res/values/strings.xml 🔗

@@ -736,4 +736,5 @@
     <string name="video_compression_channel_name">Video compression</string>
     <string name="view_media">View media</string>
     <string name="media_browser">Media browser</string>
+    <string name="export_channel_name">History export</string>
 </resources>