From a018704ac80fe5f7beaf8df10d6e6da6212dbc5b Mon Sep 17 00:00:00 2001 From: M66B Date: Fri, 19 Apr 2019 18:54:40 +0200 Subject: [PATCH] Skip downloading messages when roaming --- app/src/main/java/eu/faircode/email/Core.java | 3 +++ .../eu/faircode/email/FragmentOptions.java | 3 +++ .../main/java/eu/faircode/email/Helper.java | 22 +++++++++++++++++++ app/src/main/res/layout/fragment_options.xml | 15 ++++++++++++- app/src/main/res/values/strings.xml | 1 + 5 files changed, 43 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/eu/faircode/email/Core.java b/app/src/main/java/eu/faircode/email/Core.java index 0897b3a974..e6566dcbed 100644 --- a/app/src/main/java/eu/faircode/email/Core.java +++ b/app/src/main/java/eu/faircode/email/Core.java @@ -1417,6 +1417,9 @@ class Core { Context context, EntityFolder folder, IMAPFolder ifolder, IMAPMessage imessage, long id, State state) throws MessagingException, IOException { + if (state.getNetworkState().isRoaming()) + return; + DB db = DB.getInstance(context); EntityMessage message = db.message().getMessage(id); if (message == null) diff --git a/app/src/main/java/eu/faircode/email/FragmentOptions.java b/app/src/main/java/eu/faircode/email/FragmentOptions.java index 26b7725f13..7011303c2b 100644 --- a/app/src/main/java/eu/faircode/email/FragmentOptions.java +++ b/app/src/main/java/eu/faircode/email/FragmentOptions.java @@ -68,6 +68,7 @@ public class FragmentOptions extends FragmentBase implements SharedPreferences.O private TextView tvScheduleEnd; private TextView tvConnectionType; + private TextView tvConnectionRoaming; private SwitchCompat swMetered; private Spinner spDownload; @@ -151,6 +152,7 @@ public class FragmentOptions extends FragmentBase implements SharedPreferences.O tvScheduleEnd = view.findViewById(R.id.tvScheduleEnd); tvConnectionType = view.findViewById(R.id.tvConnectionType); + tvConnectionRoaming = view.findViewById(R.id.tvConnectionRoaming); swMetered = view.findViewById(R.id.swMetered); spDownload = view.findViewById(R.id.spDownload); @@ -789,6 +791,7 @@ public class FragmentOptions extends FragmentBase implements SharedPreferences.O tvConnectionType.setText(networkState.isUnmetered() ? R.string.title_legend_unmetered : R.string.title_legend_metered); tvConnectionType.setVisibility(networkState.isConnected() ? View.VISIBLE : View.GONE); + tvConnectionRoaming.setVisibility(networkState.isRoaming() ? View.VISIBLE : View.GONE); } } }); diff --git a/app/src/main/java/eu/faircode/email/Helper.java b/app/src/main/java/eu/faircode/email/Helper.java index f9522b104d..93fa44eb69 100644 --- a/app/src/main/java/eu/faircode/email/Helper.java +++ b/app/src/main/java/eu/faircode/email/Helper.java @@ -780,6 +780,7 @@ public class Helper { private Boolean connected = null; private Boolean suitable = null; private Boolean unmetered = null; + private Boolean roaming = null; boolean isConnected() { return (connected != null && connected); @@ -793,6 +794,10 @@ public class Helper { return (unmetered != null && unmetered); } + boolean isRoaming() { + return (roaming != null && roaming); + } + public void update(NetworkState newState) { connected = newState.connected; unmetered = newState.unmetered; @@ -809,6 +814,23 @@ public class Helper { state.connected = (isMetered != null); state.unmetered = (isMetered != null && !isMetered); state.suitable = (isMetered != null && (metered || !isMetered)); + + if (state.connected) { + ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) { + NetworkInfo ani = cm.getActiveNetworkInfo(); + if (ani != null) + state.roaming = ani.isRoaming(); + } else { + Network active = cm.getActiveNetwork(); + if (active != null) { + NetworkCapabilities caps = cm.getNetworkCapabilities(active); + if (caps != null) + state.roaming = !caps.hasCapability(NetworkCapabilities.NET_CAPABILITY_NOT_ROAMING); + } + } + } + return state; } diff --git a/app/src/main/res/layout/fragment_options.xml b/app/src/main/res/layout/fragment_options.xml index a78b4fbb35..938369d8f5 100644 --- a/app/src/main/res/layout/fragment_options.xml +++ b/app/src/main/res/layout/fragment_options.xml @@ -149,6 +149,19 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/vSeparatorConnection" /> + + Connection is metered Connection is unmetered + Roaming Expander Avatar