Added export progress notification

This commit is contained in:
M66B
2021-04-18 07:41:25 +02:00
parent 9fb1a58036
commit 02a82a8bd9
3 changed files with 41 additions and 1 deletions

View File

@@ -20,6 +20,7 @@ package eu.faircode.email;
*/
import android.app.Dialog;
import android.app.NotificationManager;
import android.content.ContentResolver;
import android.content.Context;
import android.content.DialogInterface;
@@ -47,6 +48,7 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AlertDialog;
import androidx.constraintlayout.widget.Group;
import androidx.core.app.NotificationCompat;
import androidx.core.content.ContextCompat;
import androidx.fragment.app.FragmentTransaction;
import androidx.lifecycle.Observer;
@@ -71,6 +73,7 @@ import java.text.NumberFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import java.util.Properties;
@@ -115,6 +118,8 @@ public class FragmentFolders extends FragmentBase {
static final int REQUEST_EXECUTE_RULES = 4;
static final int REQUEST_EXPORT_MESSAGES = 5;
private static final long EXPORT_PROGRESS_INTERVAL = 5000L; // milliseconds
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -885,6 +890,20 @@ public class FragmentFolders extends FragmentBase {
throw new IllegalArgumentException(context.getString(R.string.title_no_stream));
}
NotificationManager nm =
(NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
NotificationCompat.Builder builder =
new NotificationCompat.Builder(context, "progress")
.setSmallIcon(R.drawable.baseline_get_app_white_24)
.setContentTitle(getString(R.string.title_export_messages))
.setAutoCancel(false)
.setOngoing(true)
.setShowWhen(false)
.setLocalOnly(true)
.setPriority(NotificationCompat.PRIORITY_DEFAULT)
.setCategory(NotificationCompat.CATEGORY_PROGRESS)
.setVisibility(NotificationCompat.VISIBILITY_SECRET);
DB db = DB.getInstance(context);
List<Long> ids = db.message().getMessageIdsByFolder(fid);
if (ids == null)
@@ -898,9 +917,18 @@ public class FragmentFolders extends FragmentBase {
// https://www.ietf.org/rfc/rfc4155.txt (Appendix A)
// http://qmail.org./man/man5/mbox.html
long last = new Date().getTime();
ContentResolver resolver = context.getContentResolver();
try (OutputStream out = new BufferedOutputStream(resolver.openOutputStream(uri))) {
for (long id : ids) {
for (int i = 0; i < ids.size(); i++) {
long now = new Date().getTime();
if (now - last > EXPORT_PROGRESS_INTERVAL) {
last = now;
builder.setProgress(ids.size(), i, false);
nm.notify("export", 1, builder.build());
}
long id = ids.get(i);
EntityMessage message = db.message().getMessage(id);
if (message == null)
continue;
@@ -967,6 +995,8 @@ public class FragmentFolders extends FragmentBase {
}
});
}
} finally {
nm.cancel("export", 1);
}
return null;

View File

@@ -76,6 +76,14 @@ class NotificationHelper {
notification.setLockscreenVisibility(Notification.VISIBILITY_PRIVATE);
nm.createNotificationChannel(notification);
NotificationChannel progress = new NotificationChannel(
"progress", context.getString(R.string.channel_progress),
NotificationManager.IMPORTANCE_DEFAULT);
notification.setDescription(context.getString(R.string.channel_progress_description));
progress.setSound(null, Notification.AUDIO_ATTRIBUTES_DEFAULT);
progress.setLockscreenVisibility(Notification.VISIBILITY_PRIVATE);
nm.createNotificationChannel(progress);
// Update
if (!Helper.isPlayStoreInstall()) {
NotificationChannel update = new NotificationChannel(