diff --git a/app/src/main/java/eu/faircode/email/AdapterMessage.java b/app/src/main/java/eu/faircode/email/AdapterMessage.java index 0499b67a28..2e4d8b350b 100644 --- a/app/src/main/java/eu/faircode/email/AdapterMessage.java +++ b/app/src/main/java/eu/faircode/email/AdapterMessage.java @@ -4201,7 +4201,7 @@ public class AdapterMessage extends RecyclerView.Adapter= Build.VERSION_CODES.M) { Intent intent = new Intent(Settings.ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS); if (intent.resolveActivity(getContext().getPackageManager()) != null) { - PowerManager pm = (PowerManager) getContext().getSystemService(Context.POWER_SERVICE); - ignoring = (pm != null && pm.isIgnoringBatteryOptimizations(BuildConfig.APPLICATION_ID)); + ignoring = Helper.isIgnoringOptimizations(getContext()); + if (ignoring == null) + ignoring = true; } } diff --git a/app/src/main/java/eu/faircode/email/Helper.java b/app/src/main/java/eu/faircode/email/Helper.java index bbc5f65113..b11804d763 100644 --- a/app/src/main/java/eu/faircode/email/Helper.java +++ b/app/src/main/java/eu/faircode/email/Helper.java @@ -40,6 +40,7 @@ import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.os.Parcel; +import android.os.PowerManager; import android.text.Spannable; import android.text.Spanned; import android.text.format.DateUtils; @@ -178,6 +179,20 @@ public class Helper { return pm.hasSystemFeature(PackageManager.FEATURE_PRINTING); } + static Boolean isIgnoringOptimizations(Context context) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE); + if (pm == null) + return null; + return pm.isIgnoringBatteryOptimizations(BuildConfig.APPLICATION_ID); + } + return null; + } + + static boolean isPlayStoreInstall() { + return BuildConfig.PLAY_STORE_RELEASE; + } + // View static Intent getChooser(Context context, Intent intent) { @@ -522,6 +537,20 @@ public class Helper { } } + static void linkPro(final TextView tv) { + if (ActivityBilling.isPro(tv.getContext()) && !BuildConfig.DEBUG) + hide(tv); + else { + tv.getPaint().setUnderlineText(true); + tv.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + tv.getContext().startActivity(new Intent(tv.getContext(), ActivityBilling.class)); + } + }); + } + } + // Files static String sanitizeFilename(String name) { @@ -796,49 +825,6 @@ public class Helper { // Miscellaneous - static String sanitizeKeyword(String keyword) { - // https://tools.ietf.org/html/rfc3501 - StringBuilder sb = new StringBuilder(); - for (int i = 0; i < keyword.length(); i++) { - // flag-keyword = atom - // atom = 1*ATOM-CHAR - // ATOM-CHAR = - char kar = keyword.charAt(i); - // atom-specials = "(" / ")" / "{" / SP / CTL / list-wildcards / quoted-specials / resp-specials - if (kar == '(' || kar == ')' || kar == '{' || kar == ' ' || Character.isISOControl(kar)) - continue; - // list-wildcards = "%" / "*" - if (kar == '%' || kar == '*') - continue; - // quoted-specials = DQUOTE / "\" - if (kar == '"' || kar == '\\') - continue; - // resp-specials = "]" - if (kar == ']') - continue; - sb.append(kar); - } - return sb.toString(); - } - - static boolean isPlayStoreInstall() { - return BuildConfig.PLAY_STORE_RELEASE; - } - - static void linkPro(final TextView tv) { - if (ActivityBilling.isPro(tv.getContext()) && !BuildConfig.DEBUG) - hide(tv); - else { - tv.getPaint().setUnderlineText(true); - tv.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - tv.getContext().startActivity(new Intent(tv.getContext(), ActivityBilling.class)); - } - }); - } - } - static List> chunkList(List list, int size) { List> result = new ArrayList<>(list.size() / size); for (int i = 0; i < list.size(); i += size) diff --git a/app/src/main/java/eu/faircode/email/MessageHelper.java b/app/src/main/java/eu/faircode/email/MessageHelper.java index 41757daa2d..8f263dfa09 100644 --- a/app/src/main/java/eu/faircode/email/MessageHelper.java +++ b/app/src/main/java/eu/faircode/email/MessageHelper.java @@ -1266,6 +1266,31 @@ public class MessageHelper { "Unable to load BODYSTRUCTURE".equals(ex.getMessage())); } + static String sanitizeKeyword(String keyword) { + // https://tools.ietf.org/html/rfc3501 + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < keyword.length(); i++) { + // flag-keyword = atom + // atom = 1*ATOM-CHAR + // ATOM-CHAR = + char kar = keyword.charAt(i); + // atom-specials = "(" / ")" / "{" / SP / CTL / list-wildcards / quoted-specials / resp-specials + if (kar == '(' || kar == ')' || kar == '{' || kar == ' ' || Character.isISOControl(kar)) + continue; + // list-wildcards = "%" / "*" + if (kar == '%' || kar == '*') + continue; + // quoted-specials = DQUOTE / "\" + if (kar == '"' || kar == '\\') + continue; + // resp-specials = "]" + if (kar == ']') + continue; + sb.append(kar); + } + return sb.toString(); + } + static boolean equal(Address[] a1, Address[] a2) { if (a1 == null && a2 == null) return true; diff --git a/app/src/main/java/eu/faircode/email/ServiceSynchronize.java b/app/src/main/java/eu/faircode/email/ServiceSynchronize.java index 10058270ed..10e1ecc7bf 100644 --- a/app/src/main/java/eu/faircode/email/ServiceSynchronize.java +++ b/app/src/main/java/eu/faircode/email/ServiceSynchronize.java @@ -289,12 +289,7 @@ public class ServiceSynchronize extends ServiceBase { setUnseen(null); if (state != null && state.isRunning()) { - Boolean ignoring = null; - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { - PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); - ignoring = (pm != null && pm.isIgnoringBatteryOptimizations(BuildConfig.APPLICATION_ID)); - } - Log.e("Destroy while running ignoring=" + ignoring); + Log.e("Destroy while monitor running ignoring=" + Helper.isIgnoringOptimizations(this)); state.stop(); } @@ -576,6 +571,11 @@ public class ServiceSynchronize extends ServiceBase { final Thread main = Thread.currentThread(); + if (state != null && state.isRunning()) { + Log.e("Monitor running ignoring=" + Helper.isIgnoringOptimizations(this)); + state.stop(); + } + state = new Core.State(networkState); state.runnable(new Runnable() { private PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);