From f7a85deeec4f613b0e27d67f3204138356f0b5b4 Mon Sep 17 00:00:00 2001 From: M66B Date: Thu, 25 Mar 2021 09:36:45 +0100 Subject: [PATCH] Run start service on foreground --- .../eu/faircode/email/AdapterAttachment.java | 7 +- .../java/eu/faircode/email/AdapterFolder.java | 13 +- .../java/eu/faircode/email/AdapterImage.java | 7 +- .../eu/faircode/email/AdapterMessage.java | 45 ++++--- .../eu/faircode/email/FragmentAccount.java | 12 +- .../eu/faircode/email/FragmentAccounts.java | 23 ++-- .../eu/faircode/email/FragmentCompose.java | 35 ++++-- .../eu/faircode/email/FragmentDialogSync.java | 9 +- .../eu/faircode/email/FragmentFolder.java | 15 ++- .../eu/faircode/email/FragmentFolders.java | 32 +++-- .../java/eu/faircode/email/FragmentGmail.java | 9 +- .../eu/faircode/email/FragmentMessages.java | 118 +++++++++++++----- .../java/eu/faircode/email/FragmentOAuth.java | 9 +- .../email/FragmentOptionsNotifications.java | 2 +- .../email/FragmentOptionsSynchronize.java | 9 +- .../java/eu/faircode/email/FragmentPop.java | 12 +- .../eu/faircode/email/FragmentQuickSetup.java | 6 +- .../eu/faircode/email/ServiceSynchronize.java | 14 ++- 18 files changed, 263 insertions(+), 114 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/AdapterAttachment.java b/app/src/main/java/eu/faircode/email/AdapterAttachment.java index 1fbf8908db..a29a3d5ee7 100644 --- a/app/src/main/java/eu/faircode/email/AdapterAttachment.java +++ b/app/src/main/java/eu/faircode/email/AdapterAttachment.java @@ -309,11 +309,14 @@ public class AdapterAttachment extends RecyclerView.Adapter() { + @Override + protected void onPostExecute(Bundle args) { + ServiceSynchronize.eval(context, "refresh/folder"); + } + @Override protected Void onExecute(Context context, Bundle args) { long fid = args.getLong("folder"); @@ -704,8 +709,6 @@ public class AdapterFolder extends RecyclerView.Adapter db.endTransaction(); } - ServiceSynchronize.eval(context, "attachment"); - return null; } + @Override + protected void onExecuted(Bundle args, Void data) { + ServiceSynchronize.eval(context, "attachment"); + } + @Override protected void onException(Bundle args, Throwable ex) { Log.unexpectedError(parentFragment.getParentFragmentManager(), ex); diff --git a/app/src/main/java/eu/faircode/email/AdapterMessage.java b/app/src/main/java/eu/faircode/email/AdapterMessage.java index a09c6ca559..df45ff0640 100644 --- a/app/src/main/java/eu/faircode/email/AdapterMessage.java +++ b/app/src/main/java/eu/faircode/email/AdapterMessage.java @@ -3197,11 +3197,14 @@ public class AdapterMessage extends RecyclerView.Adapter() { @Override protected void onPostExecute(Bundle args) { + Context context = getContext(); + if (context != null) { + boolean force = args.getBoolean("force"); + boolean outbox = args.getBoolean("outbox"); + + if (force) + ServiceSynchronize.reload(context, null, true, "refresh"); + else + ServiceSynchronize.eval(context, "refresh"); + + if (outbox) + ServiceSend.start(context); + } + swipeRefresh.setRefreshing(false); } @@ -375,13 +389,8 @@ public class FragmentFolders extends FragmentBase { db.endTransaction(); } - if (force) - ServiceSynchronize.reload(context, null, true, "refresh"); - else - ServiceSynchronize.eval(context, "refresh"); - - if (outbox) - ServiceSend.start(context); + args.putBoolean("force", force); + args.putBoolean("outbox", outbox); if (!now) throw new IllegalArgumentException(context.getString(R.string.title_no_connection)); @@ -691,11 +700,16 @@ public class FragmentFolders extends FragmentBase { db.endTransaction(); } - ServiceSynchronize.eval(context, "purge"); - return null; } + @Override + protected void onExecuted(Bundle args, Void data) { + Context context = getContext(); + if (context != null) + ServiceSynchronize.eval(context, "purge"); + } + @Override protected void onException(Bundle args, Throwable ex) { Log.unexpectedError(getParentFragmentManager(), ex); diff --git a/app/src/main/java/eu/faircode/email/FragmentGmail.java b/app/src/main/java/eu/faircode/email/FragmentGmail.java index 26bde01c0b..979088d104 100644 --- a/app/src/main/java/eu/faircode/email/FragmentGmail.java +++ b/app/src/main/java/eu/faircode/email/FragmentGmail.java @@ -497,16 +497,19 @@ public class FragmentGmail extends FragmentBase { db.endTransaction(); } - ServiceSynchronize.eval(context, "Gmail"); - return null; } @Override protected void onExecuted(Bundle args, Void data) { + Context context = getContext(); + if (context != null) + ServiceSynchronize.eval(context, "Gmail"); + if (args.getLong("account") < 0) { finish(); - ToastEx.makeText(getContext(), R.string.title_setup_oauth_updated, Toast.LENGTH_LONG).show(); + if (context != null) + ToastEx.makeText(context, R.string.title_setup_oauth_updated, Toast.LENGTH_LONG).show(); } else { FragmentReview fragment = new FragmentReview(); fragment.setArguments(args); diff --git a/app/src/main/java/eu/faircode/email/FragmentMessages.java b/app/src/main/java/eu/faircode/email/FragmentMessages.java index 2a1699c0ca..e48c5abb67 100644 --- a/app/src/main/java/eu/faircode/email/FragmentMessages.java +++ b/app/src/main/java/eu/faircode/email/FragmentMessages.java @@ -1451,6 +1451,19 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences. args.putString("type", type); new SimpleTask() { + + @Override + protected void onPostExecute(Bundle args) { + Context context = getContext(); + if (context != null) { + boolean force = args.getBoolean("force"); + if (force) + ServiceSynchronize.reload(context, null, true, "refresh"); + else + ServiceSynchronize.eval(context, "refresh"); + } + } + @Override protected Void onExecute(Context context, Bundle args) { long fid = args.getLong("folder"); @@ -1502,10 +1515,7 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences. db.endTransaction(); } - if (force) - ServiceSynchronize.reload(context, null, true, "refresh"); - else - ServiceSynchronize.eval(context, "refresh"); + args.putBoolean("force", force); if (!now) throw new IllegalArgumentException(context.getString(R.string.title_no_connection)); @@ -2965,11 +2975,16 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences. db.endTransaction(); } - ServiceSynchronize.eval(context, "seen"); - return null; } + @Override + protected void onExecuted(Bundle args, Void data) { + Context context = getContext(); + if (context != null) + ServiceSynchronize.eval(context, "seen"); + } + @Override protected void onException(Bundle args, Throwable ex) { Log.unexpectedError(getParentFragmentManager(), ex); @@ -3104,11 +3119,16 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences. db.endTransaction(); } - ServiceSynchronize.eval(context, "flag"); - return null; } + @Override + protected void onExecuted(Bundle args, Void data) { + Context context = getContext(); + if (context != null) + ServiceSynchronize.eval(context, "flag"); + } + @Override protected void onException(Bundle args, Throwable ex) { Log.unexpectedError(getParentFragmentManager(), ex); @@ -3677,8 +3697,6 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences. db.endTransaction(); } - ServiceSynchronize.eval(context, "outbox/drafts"); - NotificationManager nm = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); nm.cancel("send:" + id, 1); @@ -3687,11 +3705,13 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences. @Override protected void onExecuted(Bundle args, EntityMessage draft) { - if (draft != null) + if (draft != null) { + ServiceSynchronize.eval(context, "outbox/drafts"); context.startActivity( new Intent(context, ActivityCompose.class) .putExtra("action", "edit") .putExtra("id", draft.id)); + } } @Override @@ -5196,11 +5216,16 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences. db.endTransaction(); } - ServiceSynchronize.eval(context, "expand"); - return null; } + @Override + protected void onExecuted(Bundle args, Void data) { + Context context = getContext(); + if (context != null) + ServiceSynchronize.eval(context, "expand"); + } + @Override protected void onException(Bundle args, Throwable ex) { Log.unexpectedError(getParentFragmentManager(), ex); @@ -5395,13 +5420,15 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences. db.endTransaction(); } - ServiceSynchronize.eval(context, "move"); - return null; } @Override protected void onExecuted(Bundle args, Void data) { + Context context = getContext(); + if (context != null) + ServiceSynchronize.eval(context, "move"); + if (viewType == AdapterMessage.ViewType.THREAD) { PagedList messages = adapter.getCurrentList(); if (messages != null && result.size() > 0) { @@ -5492,11 +5519,16 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences. db.endTransaction(); } - ServiceSynchronize.eval(context, "move"); - return null; } + @Override + protected void onExecuted(Bundle args, Void data) { + Context context = getContext(); + if (context != null) + ServiceSynchronize.eval(context, "move"); + } + @Override protected void onException(Bundle args, Throwable ex) { Log.e(ex); @@ -7166,8 +7198,6 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences. db.endTransaction(); } - ServiceSynchronize.eval(context, "delete"); - NotificationManager nm = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); nm.cancel("send:" + id, 1); @@ -7176,6 +7206,10 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences. @Override protected void onExecuted(Bundle args, Void data) { + Context context = getContext(); + if (context != null) + ServiceSynchronize.eval(context, "delete"); + if (viewType == AdapterMessage.ViewType.THREAD) { PagedList messages = adapter.getCurrentList(); if (messages != null) { @@ -7218,13 +7252,15 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences. db.endTransaction(); } - ServiceSynchronize.eval(context, "delete"); - return null; } @Override protected void onExecuted(Bundle args, Void data) { + Context context = getContext(); + if (context != null) + ServiceSynchronize.eval(context, "delete"); + if (viewType == AdapterMessage.ViewType.THREAD) { long[] ids = args.getLongArray("ids"); PagedList messages = adapter.getCurrentList(); @@ -7286,11 +7322,16 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences. db.endTransaction(); } - ServiceSynchronize.eval(context, "junk"); - return null; } + @Override + protected void onExecuted(Bundle args, Void data) { + Context context = getContext(); + if (context != null) + ServiceSynchronize.eval(context, "junk"); + } + @Override protected void onException(Bundle args, Throwable ex) { if (ex instanceof IllegalArgumentException) { @@ -7357,11 +7398,16 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences. } }); - ServiceSynchronize.eval(context, "flag"); - return null; } + @Override + protected void onExecuted(Bundle args, Void data) { + Context context = getContext(); + if (context != null) + ServiceSynchronize.eval(context, "flag"); + } + @Override protected void onException(Bundle args, Throwable ex) { Log.unexpectedError(getParentFragmentManager(), ex); @@ -7542,18 +7588,19 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences. db.endTransaction(); } - if (copy) - ServiceSynchronize.eval(context, "copy"); - return result; } @Override protected void onExecuted(Bundle args, ArrayList result) { boolean copy = args.getBoolean("copy"); - if (copy) - ToastEx.makeText(getContext(), R.string.title_completed, Toast.LENGTH_LONG).show(); - else + if (copy) { + Context context = getContext(); + if (context != null) { + ServiceSynchronize.eval(context, "copy"); + ToastEx.makeText(context, R.string.title_completed, Toast.LENGTH_LONG).show(); + } + } else moveAsk(result, false, !autoclose && onclose == null); } @@ -7866,11 +7913,16 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences. db.endTransaction(); } - ServiceSynchronize.eval(context, "purge"); - return null; } + @Override + protected void onExecuted(Bundle args, Void data) { + Context context = getContext(); + if (context != null) + ServiceSynchronize.eval(context, "purge"); + } + @Override protected void onException(Bundle args, Throwable ex) { Log.unexpectedError(getParentFragmentManager(), ex); diff --git a/app/src/main/java/eu/faircode/email/FragmentOAuth.java b/app/src/main/java/eu/faircode/email/FragmentOAuth.java index 711cc0a29a..7abd0777d9 100644 --- a/app/src/main/java/eu/faircode/email/FragmentOAuth.java +++ b/app/src/main/java/eu/faircode/email/FragmentOAuth.java @@ -608,8 +608,6 @@ public class FragmentOAuth extends FragmentBase { db.endTransaction(); } - ServiceSynchronize.eval(context, "OAuth"); - return null; } @@ -617,9 +615,14 @@ public class FragmentOAuth extends FragmentBase { protected void onExecuted(Bundle args, Void data) { pbOAuth.setVisibility(View.GONE); + Context context = getContext(); + if (context != null) + ServiceSynchronize.eval(context, "OAuth"); + if (args.getLong("account") < 0) { finish(); - ToastEx.makeText(getContext(), R.string.title_setup_oauth_updated, Toast.LENGTH_LONG).show(); + if (context != null) + ToastEx.makeText(context, R.string.title_setup_oauth_updated, Toast.LENGTH_LONG).show(); } else { FragmentReview fragment = new FragmentReview(); fragment.setArguments(args); diff --git a/app/src/main/java/eu/faircode/email/FragmentOptionsNotifications.java b/app/src/main/java/eu/faircode/email/FragmentOptionsNotifications.java index a48d3d2648..3cf391919a 100644 --- a/app/src/main/java/eu/faircode/email/FragmentOptionsNotifications.java +++ b/app/src/main/java/eu/faircode/email/FragmentOptionsNotifications.java @@ -229,7 +229,7 @@ public class FragmentOptionsNotifications extends FragmentBase implements Shared @Override public void onCheckedChanged(CompoundButton compoundButton, boolean checked) { prefs.edit().putBoolean("background_service", checked).apply(); - ServiceSynchronize.eval(getContext(), "background=" + checked); + ServiceSynchronize.eval(compoundButton.getContext(), "background=" + checked); } }); diff --git a/app/src/main/java/eu/faircode/email/FragmentOptionsSynchronize.java b/app/src/main/java/eu/faircode/email/FragmentOptionsSynchronize.java index 66213fc6bf..8a1f4053ed 100644 --- a/app/src/main/java/eu/faircode/email/FragmentOptionsSynchronize.java +++ b/app/src/main/java/eu/faircode/email/FragmentOptionsSynchronize.java @@ -506,11 +506,16 @@ public class FragmentOptionsSynchronize extends FragmentBase implements SharedPr DB db = DB.getInstance(context); db.account().setAccountPollExempted(id, exempted); - ServiceSynchronize.eval(context, "exempted"); - return null; } + @Override + protected void onExecuted(Bundle args, Void data) { + Context context = getContext(); + if (context != null) + ServiceSynchronize.eval(context, "exempted"); + } + @Override protected void onException(Bundle args, Throwable ex) { Log.e(ex); diff --git a/app/src/main/java/eu/faircode/email/FragmentPop.java b/app/src/main/java/eu/faircode/email/FragmentPop.java index 9bae082d13..ba2ddd73be 100644 --- a/app/src/main/java/eu/faircode/email/FragmentPop.java +++ b/app/src/main/java/eu/faircode/email/FragmentPop.java @@ -611,8 +611,6 @@ public class FragmentPop extends FragmentBase { db.endTransaction(); } - ServiceSynchronize.eval(context, "POP3"); - if (!synchronize) { NotificationManager nm = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); nm.cancel("receive:" + account.id, 1); @@ -634,8 +632,10 @@ public class FragmentPop extends FragmentBase { fragment.show(getParentFragmentManager(), "account:save"); } else { Context context = getContext(); - if (context != null) + if (context != null) { + ServiceSynchronize.eval(context, "POP3"); WidgetUnified.updateData(context); // Update color stripe + } if (getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.STARTED)) { getParentFragmentManager().popBackStack(); @@ -879,13 +879,15 @@ public class FragmentPop extends FragmentBase { DB db = DB.getInstance(context); db.account().setAccountTbd(id); - ServiceSynchronize.eval(context, "delete account"); - return null; } @Override protected void onExecuted(Bundle args, Void data) { + Context context = getContext(); + if (context != null) + ServiceSynchronize.eval(context, "delete account"); + if (getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.STARTED)) getParentFragmentManager().popBackStack(); } diff --git a/app/src/main/java/eu/faircode/email/FragmentQuickSetup.java b/app/src/main/java/eu/faircode/email/FragmentQuickSetup.java index 9a6ca2cd94..11b2aa7d40 100644 --- a/app/src/main/java/eu/faircode/email/FragmentQuickSetup.java +++ b/app/src/main/java/eu/faircode/email/FragmentQuickSetup.java @@ -452,13 +452,15 @@ public class FragmentQuickSetup extends FragmentBase { db.endTransaction(); } - ServiceSynchronize.eval(context, "quick setup"); - return null; } @Override protected void onExecuted(Bundle args, EmailProvider result) { + Context context = getContext(); + if (context != null) + ServiceSynchronize.eval(context, "quick setup"); + boolean check = args.getBoolean("check"); if (check) { tvImap.setText(result == null ? null diff --git a/app/src/main/java/eu/faircode/email/ServiceSynchronize.java b/app/src/main/java/eu/faircode/email/ServiceSynchronize.java index 2b07ef1fab..5d4e35867f 100644 --- a/app/src/main/java/eu/faircode/email/ServiceSynchronize.java +++ b/app/src/main/java/eu/faircode/email/ServiceSynchronize.java @@ -2023,7 +2023,16 @@ public class ServiceSynchronize extends ServiceBase implements SharedPreferences prefs.edit().putInt("poll_interval", OPTIMIZE_POLL_INTERVAL).apply(); } else if (pollInterval <= 60 && account.poll_exempted) { db.account().setAccountPollExempted(account.id, false); - ServiceSynchronize.eval(this, "Optimize=" + reason); + ApplicationEx.getMainHandler().post(new Runnable() { + @Override + public void run() { + try { + onEval(new Intent().putExtra("account", account.id)); + } catch (Throwable ex) { + Log.e(ex); + } + } + }); } } @@ -2432,12 +2441,13 @@ public class ServiceSynchronize extends ServiceBase implements SharedPreferences private static void start(Context context, Intent intent) { if (isBackgroundService(context)) context.startService(intent); - else + else { try { ContextCompat.startForegroundService(context, intent); } catch (Throwable ex) { Log.e(ex); } + } } private static boolean isBackgroundService(Context context) {