diff --git a/FAQ.md b/FAQ.md index 4d2c8b9266..d36e356970 100644 --- a/FAQ.md +++ b/FAQ.md @@ -2781,7 +2781,7 @@ To set the poll interval: (adb shell) adb shell am start-foreground-service -a eu.faircode.email.INTERVAL --ei minutes nnn ``` -Where *nnn* is one of 0, 15, 30, 60, 120, 240, 480, 1440. A value of 0 means push messages. +Where *nnn* is one of 0, 5, 15, 30, 60, 120, 240, 480, 1440. A value of 0 means push messages. You can automatically send commands with for example [Tasker](https://tasker.joaoapps.com/userguide/en/intents.html): diff --git a/app/build.gradle b/app/build.gradle index c61d801d16..fe8b4eb2e0 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -341,7 +341,7 @@ dependencies { def activity_version = "1.5.0" // 1.6.0-alpha03 def fragment_version = "1.5.0" def windows_version = "1.0.0" // 1.1.0-alpha01 - def webkit_version = "1.5.0-alpha01" + def webkit_version = "1.5.0-beta01" def recyclerview_version = "1.2.1" // 1.3.0-alpha02 def coordinatorlayout_version = "1.2.0" def constraintlayout_version = "2.1.4" // 2.2.0-alpha01 diff --git a/app/src/main/java/eu/faircode/email/ActivityAMP.java b/app/src/main/java/eu/faircode/email/ActivityAMP.java index bbe0c30aee..9f76007bf8 100644 --- a/app/src/main/java/eu/faircode/email/ActivityAMP.java +++ b/app/src/main/java/eu/faircode/email/ActivityAMP.java @@ -24,6 +24,7 @@ import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.net.Uri; +import android.os.Build; import android.os.Bundle; import android.view.LayoutInflater; import android.view.Menu; @@ -161,7 +162,7 @@ public class ActivityAMP extends ActivityBase { WebSettings settings = wvAmp.getSettings(); boolean dark = (Helper.isDarkTheme(this) && !force_light); boolean canDarken = WebViewEx.isFeatureSupported(this, WebViewFeature.ALGORITHMIC_DARKENING); - if (canDarken) + if (canDarken && Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) WebSettingsCompat.setAlgorithmicDarkeningAllowed(settings, dark); } diff --git a/app/src/main/java/eu/faircode/email/ActivitySetup.java b/app/src/main/java/eu/faircode/email/ActivitySetup.java index 63f18e25a5..43b3692002 100644 --- a/app/src/main/java/eu/faircode/email/ActivitySetup.java +++ b/app/src/main/java/eu/faircode/email/ActivitySetup.java @@ -239,7 +239,7 @@ public class ActivitySetup extends ActivityBase implements FragmentManager.OnBac @Override public void run() { drawerLayout.closeDrawer(drawerContainer); - onMenuOrder(R.string.title_setup_reorder_accounts, EntityAccount.class); + onMenuOrder(R.string.title_setup_reorder_accounts, EntityAccount.class.getName()); } })); @@ -247,7 +247,7 @@ public class ActivitySetup extends ActivityBase implements FragmentManager.OnBac @Override public void run() { drawerLayout.closeDrawer(drawerContainer); - onMenuOrder(R.string.title_setup_reorder_folders, TupleFolderSort.class); + onMenuOrder(R.string.title_setup_reorder_folders, TupleFolderSort.class.getName()); } }).setSeparated()); @@ -552,13 +552,13 @@ public class ActivitySetup extends ActivityBase implements FragmentManager.OnBac } } - private void onMenuOrder(int title, Class clazz) { + private void onMenuOrder(int title, String className) { if (getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.STARTED)) getSupportFragmentManager().popBackStack("order", FragmentManager.POP_BACK_STACK_INCLUSIVE); Bundle args = new Bundle(); args.putInt("title", title); - args.putString("class", clazz.getName()); + args.putString("class", className); FragmentOrder fragment = new FragmentOrder(); fragment.setArguments(args); @@ -2003,7 +2003,7 @@ public class ActivitySetup extends ActivityBase implements FragmentManager.OnBac else if (ACTION_IMPORT_CERTIFICATE.equals(action)) onImportCertificate(intent); else if (ACTION_SETUP_REORDER.equals(action)) - onMenuOrder(R.string.title_setup_reorder_accounts, EntityAccount.class); + onMenuOrder(R.string.title_setup_reorder_accounts, intent.getStringExtra("className")); else if (ACTION_SETUP_MORE.equals(action)) onSetupMore(intent); } diff --git a/app/src/main/java/eu/faircode/email/AdapterMessage.java b/app/src/main/java/eu/faircode/email/AdapterMessage.java index ea22490252..1a7f2dddc7 100644 --- a/app/src/main/java/eu/faircode/email/AdapterMessage.java +++ b/app/src/main/java/eu/faircode/email/AdapterMessage.java @@ -6248,6 +6248,25 @@ public class AdapterMessage extends RecyclerView.Adapter= Build.VERSION_CODES.Q) WebSettingsCompat.setAlgorithmicDarkeningAllowed(settings, dark); settings.setLoadsImagesAutomatically(true); diff --git a/app/src/main/java/eu/faircode/email/FragmentSetup.java b/app/src/main/java/eu/faircode/email/FragmentSetup.java index 6e8f580592..efd987431f 100644 --- a/app/src/main/java/eu/faircode/email/FragmentSetup.java +++ b/app/src/main/java/eu/faircode/email/FragmentSetup.java @@ -120,7 +120,8 @@ public class FragmentSetup extends FragmentBase { private CardView cardExtra; private TextView tvExtra; private Button btnNotification; - private Button btnReorder; + private Button btnReorderAccounts; + private Button btnReorderFolders; private Button btnDelete; private Button btnApp; private Button btnMore; @@ -199,7 +200,8 @@ public class FragmentSetup extends FragmentBase { cardExtra = view.findViewById(R.id.cardExtra); tvExtra = view.findViewById(R.id.tvExtra); btnNotification = view.findViewById(R.id.btnNotification); - btnReorder = view.findViewById(R.id.btnReorder); + btnReorderAccounts = view.findViewById(R.id.btnReorderAccounts); + btnReorderFolders = view.findViewById(R.id.btnReorderFolders); btnDelete = view.findViewById(R.id.btnDelete); btnApp = view.findViewById(R.id.btnApp); btnMore = view.findViewById(R.id.btnMore); @@ -628,14 +630,25 @@ public class FragmentSetup extends FragmentBase { } }); - btnReorder.setOnClickListener(new View.OnClickListener() { + btnReorderAccounts.setOnClickListener(new View.OnClickListener() { @Override - public void onClick(View view) { - LocalBroadcastManager lbm = LocalBroadcastManager.getInstance(getContext()); - lbm.sendBroadcast(new Intent(ActivitySetup.ACTION_SETUP_REORDER)); + public void onClick(View v) { + LocalBroadcastManager lbm = LocalBroadcastManager.getInstance(v.getContext()); + lbm.sendBroadcast(new Intent(ActivitySetup.ACTION_SETUP_REORDER) + .putExtra("className", EntityAccount.class.getName())); } }); + btnReorderFolders.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + LocalBroadcastManager lbm = LocalBroadcastManager.getInstance(v.getContext()); + lbm.sendBroadcast(new Intent(ActivitySetup.ACTION_SETUP_REORDER) + .putExtra("className", TupleFolderSort.class.getName())); + } + }); + + btnDelete.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { diff --git a/app/src/main/java/eu/faircode/email/Helper.java b/app/src/main/java/eu/faircode/email/Helper.java index 30afd425c0..9fe0268d8b 100644 --- a/app/src/main/java/eu/faircode/email/Helper.java +++ b/app/src/main/java/eu/faircode/email/Helper.java @@ -920,6 +920,7 @@ public class Helper { Intent view = new Intent(Intent.ACTION_VIEW, uri); Intent chooser = Intent.createChooser(view, context.getString(R.string.title_select_app)); try { + EntityLog.log(context, "Launching chooser uri=" + uri); context.startActivity(chooser); } catch (ActivityNotFoundException ex) { Log.w(ex); @@ -935,6 +936,9 @@ public class Helper { if (task) view.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); view.setPackage(open_with_pkg); + EntityLog.log(context, "Launching view uri=" + uri + + " intent=" + view + + " extras=" + TextUtils.join(", ", Log.getExtras(view.getExtras()))); context.startActivity(view); } catch (Throwable ex) { reportNoViewer(context, uri, ex); @@ -974,7 +978,6 @@ public class Helper { languages.add(slocale.getLanguage() + ";q=0.7"); } languages.add("*;q=0.5"); - Log.i("MMM " + TextUtils.join(", ", languages)); Bundle headers = new Bundle(); // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Language @@ -985,6 +988,9 @@ public class Helper { customTabsIntent.intent.setPackage(open_with_pkg); try { + EntityLog.log(context, "Launching tab uri=" + uri + + " intent=" + customTabsIntent.intent + + " extras=" + TextUtils.join(", ", Log.getExtras(customTabsIntent.intent.getExtras()))); customTabsIntent.launchUrl(context, uri); } catch (Throwable ex) { reportNoViewer(context, uri, ex); diff --git a/app/src/main/java/eu/faircode/email/MessageHelper.java b/app/src/main/java/eu/faircode/email/MessageHelper.java index 372ec77038..28b6d61d5f 100644 --- a/app/src/main/java/eu/faircode/email/MessageHelper.java +++ b/app/src/main/java/eu/faircode/email/MessageHelper.java @@ -2721,7 +2721,7 @@ public class MessageHelper { } } - enum AddressFormat {NAME_ONLY, EMAIL_ONLY, NAME_EMAIL} + enum AddressFormat {NAME_ONLY, EMAIL_ONLY, NAME_EMAIL, EMAIL_NAME} static AddressFormat getAddressFormat(Context context) { SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); @@ -2792,6 +2792,8 @@ public class MessageHelper { if (format == AddressFormat.NAME_EMAIL && !TextUtils.isEmpty(email)) formatted.add(personal + " <" + email + ">"); + else if (format == AddressFormat.EMAIL_NAME && !TextUtils.isEmpty(email)) + formatted.add("<" + email + "> " + personal); else formatted.add(personal); } diff --git a/app/src/main/java/eu/faircode/email/WebViewEx.java b/app/src/main/java/eu/faircode/email/WebViewEx.java index 79833096cb..633f25726e 100644 --- a/app/src/main/java/eu/faircode/email/WebViewEx.java +++ b/app/src/main/java/eu/faircode/email/WebViewEx.java @@ -121,7 +121,7 @@ public class WebViewEx extends WebView implements DownloadListener, View.OnLongC // https://developer.android.com/reference/android/webkit/WebSettings#setAlgorithmicDarkeningAllowed(boolean) // https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-color-scheme boolean canDarken = WebViewEx.isFeatureSupported(context, WebViewFeature.ALGORITHMIC_DARKENING); - if (canDarken) + if (canDarken && Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) WebSettingsCompat.setAlgorithmicDarkeningAllowed(settings, dark && !force_light); setBackgroundColor(canDarken && dark && !force_light ? Color.TRANSPARENT : Color.WHITE); @@ -368,7 +368,10 @@ public class WebViewEx extends WebView implements DownloadListener, View.OnLongC } public static boolean isFeatureSupported(Context context, String feature) { - if (WebViewFeature.ALGORITHMIC_DARKENING.equals(feature)) + if (WebViewFeature.ALGORITHMIC_DARKENING.equals(feature)) { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) + return false; + try { PackageInfo pkg = WebViewCompat.getCurrentWebViewPackage(context); if (pkg != null && pkg.versionCode / 100000 < 5005) // Version 102.* @@ -376,6 +379,7 @@ public class WebViewEx extends WebView implements DownloadListener, View.OnLongC } catch (Throwable ex) { Log.e(ex); } + } try { return WebViewFeature.isFeatureSupported(feature); diff --git a/app/src/main/res/layout/dialog_dark.xml b/app/src/main/res/layout/dialog_dark.xml new file mode 100644 index 0000000000..0a733d61c4 --- /dev/null +++ b/app/src/main/res/layout/dialog_dark.xml @@ -0,0 +1,32 @@ + + + + + + + +