mirror of https://github.com/M66B/FairEmail.git
Added setting for roam-like-at-home
This commit is contained in:
parent
3568209a3b
commit
7533fc067c
|
@ -48,11 +48,12 @@ public class FragmentOptionsConnection extends FragmentBase implements SharedPre
|
||||||
private SwitchCompat swMetered;
|
private SwitchCompat swMetered;
|
||||||
private Spinner spDownload;
|
private Spinner spDownload;
|
||||||
private SwitchCompat swRoaming;
|
private SwitchCompat swRoaming;
|
||||||
|
private SwitchCompat swRlah;
|
||||||
private TextView tvConnectionType;
|
private TextView tvConnectionType;
|
||||||
private TextView tvConnectionRoaming;
|
private TextView tvConnectionRoaming;
|
||||||
|
|
||||||
private final static String[] RESET_OPTIONS = new String[]{
|
private final static String[] RESET_OPTIONS = new String[]{
|
||||||
"metered", "download", "roaming"
|
"metered", "download", "roaming", "rlah"
|
||||||
};
|
};
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -68,6 +69,7 @@ public class FragmentOptionsConnection extends FragmentBase implements SharedPre
|
||||||
swMetered = view.findViewById(R.id.swMetered);
|
swMetered = view.findViewById(R.id.swMetered);
|
||||||
spDownload = view.findViewById(R.id.spDownload);
|
spDownload = view.findViewById(R.id.spDownload);
|
||||||
swRoaming = view.findViewById(R.id.swRoaming);
|
swRoaming = view.findViewById(R.id.swRoaming);
|
||||||
|
swRlah = view.findViewById(R.id.swRlah);
|
||||||
|
|
||||||
tvConnectionType = view.findViewById(R.id.tvConnectionType);
|
tvConnectionType = view.findViewById(R.id.tvConnectionType);
|
||||||
tvConnectionRoaming = view.findViewById(R.id.tvConnectionRoaming);
|
tvConnectionRoaming = view.findViewById(R.id.tvConnectionRoaming);
|
||||||
|
@ -107,6 +109,14 @@ public class FragmentOptionsConnection extends FragmentBase implements SharedPre
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
swRlah.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
|
||||||
|
@Override
|
||||||
|
public void onCheckedChanged(CompoundButton compoundButton, boolean checked) {
|
||||||
|
prefs.edit().putBoolean("rlah", checked).apply();
|
||||||
|
ServiceSynchronize.reload(getContext(), "rlah=" + checked);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
PreferenceManager.getDefaultSharedPreferences(getContext()).registerOnSharedPreferenceChangeListener(this);
|
PreferenceManager.getDefaultSharedPreferences(getContext()).registerOnSharedPreferenceChangeListener(this);
|
||||||
|
|
||||||
tvConnectionType.setVisibility(View.GONE);
|
tvConnectionType.setVisibility(View.GONE);
|
||||||
|
@ -183,6 +193,7 @@ public class FragmentOptionsConnection extends FragmentBase implements SharedPre
|
||||||
}
|
}
|
||||||
|
|
||||||
swRoaming.setChecked(prefs.getBoolean("roaming", true));
|
swRoaming.setChecked(prefs.getBoolean("roaming", true));
|
||||||
|
swRlah.setChecked(prefs.getBoolean("rlah", false));
|
||||||
}
|
}
|
||||||
|
|
||||||
private ConnectivityManager.NetworkCallback networkCallback = new ConnectivityManager.NetworkCallback() {
|
private ConnectivityManager.NetworkCallback networkCallback = new ConnectivityManager.NetworkCallback() {
|
||||||
|
|
|
@ -46,6 +46,7 @@ import android.os.Build;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.Parcel;
|
import android.os.Parcel;
|
||||||
import android.os.PowerManager;
|
import android.os.PowerManager;
|
||||||
|
import android.telephony.TelephonyManager;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
import android.text.format.DateUtils;
|
import android.text.format.DateUtils;
|
||||||
import android.text.format.Time;
|
import android.text.format.Time;
|
||||||
|
@ -100,6 +101,8 @@ import java.text.DateFormat;
|
||||||
import java.text.DecimalFormat;
|
import java.text.DecimalFormat;
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.LinkedHashMap;
|
import java.util.LinkedHashMap;
|
||||||
|
@ -144,6 +147,42 @@ public class Helper {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Roam like at home
|
||||||
|
// https://en.wikipedia.org/wiki/European_Union_roaming_regulations
|
||||||
|
private static final List<String> RLAH_COUNTRY_CODES = Collections.unmodifiableList(Arrays.asList(
|
||||||
|
"AT", // Austria
|
||||||
|
"BE", // Belgium
|
||||||
|
"BG", // Bulgaria
|
||||||
|
"HR", // Croatia
|
||||||
|
"CY", // Cyprus
|
||||||
|
"CZ", // Czech Republic
|
||||||
|
"DK", // Denmark
|
||||||
|
"EE", // Estonia
|
||||||
|
"FI", // Finland
|
||||||
|
"FR", // France
|
||||||
|
"DE", // Germany
|
||||||
|
"GR", // Greece
|
||||||
|
"HU", // Hungary
|
||||||
|
"IS", // Iceland
|
||||||
|
"IE", // Ireland
|
||||||
|
"IT", // Italy
|
||||||
|
"LV", // Latvia
|
||||||
|
"LI", // Liechtenstein
|
||||||
|
"LT", // Lithuania
|
||||||
|
"LU", // Luxembourg
|
||||||
|
"MT", // Malta
|
||||||
|
"NL", // Netherlands
|
||||||
|
"NO", // Norway
|
||||||
|
"PL", // Poland
|
||||||
|
"PT", // Portugal
|
||||||
|
"RO", // Romania
|
||||||
|
"SK", // Slovakia
|
||||||
|
"SI", // Slovenia
|
||||||
|
"ES", // Spain
|
||||||
|
"SE", // Sweden
|
||||||
|
"GB" // United Kingdom
|
||||||
|
));
|
||||||
|
|
||||||
static boolean hasPermission(Context context, String name) {
|
static boolean hasPermission(Context context, String name) {
|
||||||
return (ContextCompat.checkSelfPermission(context, name) == PackageManager.PERMISSION_GRANTED);
|
return (ContextCompat.checkSelfPermission(context, name) == PackageManager.PERMISSION_GRANTED);
|
||||||
}
|
}
|
||||||
|
@ -828,6 +867,7 @@ public class Helper {
|
||||||
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
|
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
|
||||||
boolean metered = prefs.getBoolean("metered", true);
|
boolean metered = prefs.getBoolean("metered", true);
|
||||||
boolean roaming = prefs.getBoolean("roaming", true);
|
boolean roaming = prefs.getBoolean("roaming", true);
|
||||||
|
boolean rlah = prefs.getBoolean("rlah", false);
|
||||||
|
|
||||||
NetworkState state = new NetworkState();
|
NetworkState state = new NetworkState();
|
||||||
Boolean isMetered = isMetered(context);
|
Boolean isMetered = isMetered(context);
|
||||||
|
@ -837,7 +877,7 @@ public class Helper {
|
||||||
|
|
||||||
if (state.connected && !roaming) {
|
if (state.connected && !roaming) {
|
||||||
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
|
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
|
||||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
|
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.P) {
|
||||||
NetworkInfo ani = cm.getActiveNetworkInfo();
|
NetworkInfo ani = cm.getActiveNetworkInfo();
|
||||||
if (ani != null)
|
if (ani != null)
|
||||||
state.roaming = ani.isRoaming();
|
state.roaming = ani.isRoaming();
|
||||||
|
@ -849,6 +889,22 @@ public class Helper {
|
||||||
state.roaming = !caps.hasCapability(NetworkCapabilities.NET_CAPABILITY_NOT_ROAMING);
|
state.roaming = !caps.hasCapability(NetworkCapabilities.NET_CAPABILITY_NOT_ROAMING);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (state.roaming && rlah)
|
||||||
|
try {
|
||||||
|
TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
|
||||||
|
if (tm != null) {
|
||||||
|
String sim = tm.getSimCountryIso();
|
||||||
|
String network = tm.getNetworkCountryIso();
|
||||||
|
Log.i("Country SIM=" + sim + " network=" + network);
|
||||||
|
if (sim != null && network != null &&
|
||||||
|
RLAH_COUNTRY_CODES.contains(sim) &&
|
||||||
|
RLAH_COUNTRY_CODES.contains(network))
|
||||||
|
state.roaming = false;
|
||||||
|
}
|
||||||
|
} catch (Throwable ex) {
|
||||||
|
Log.w(ex);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return state;
|
return state;
|
||||||
|
|
|
@ -85,6 +85,16 @@
|
||||||
app:layout_constraintTop_toBottomOf="@id/spDownload"
|
app:layout_constraintTop_toBottomOf="@id/spDownload"
|
||||||
app:switchPadding="12dp" />
|
app:switchPadding="12dp" />
|
||||||
|
|
||||||
|
<androidx.appcompat.widget.SwitchCompat
|
||||||
|
android:id="@+id/swRlah"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="12dp"
|
||||||
|
android:text="@string/title_advanced_rlah"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toBottomOf="@id/swRoaming"
|
||||||
|
app:switchPadding="12dp" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/tvConnectionType"
|
android:id="@+id/tvConnectionType"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
|
@ -96,7 +106,7 @@
|
||||||
android:textStyle="italic"
|
android:textStyle="italic"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toBottomOf="@+id/swRoaming" />
|
app:layout_constraintTop_toBottomOf="@+id/swRlah" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/tvConnectionRoaming"
|
android:id="@+id/tvConnectionRoaming"
|
||||||
|
|
|
@ -176,6 +176,7 @@
|
||||||
<string name="title_advanced_metered">Use metered connections</string>
|
<string name="title_advanced_metered">Use metered connections</string>
|
||||||
<string name="title_advanced_download">Automatically download messages and attachments on a metered connection up to</string>
|
<string name="title_advanced_download">Automatically download messages and attachments on a metered connection up to</string>
|
||||||
<string name="title_advanced_roaming">Download messages and attachments while roaming</string>
|
<string name="title_advanced_roaming">Download messages and attachments while roaming</string>
|
||||||
|
<string name="title_advanced_rlah">Roam like at home EU</string>
|
||||||
<string name="title_advanced_browse">Browse messages on the server</string>
|
<string name="title_advanced_browse">Browse messages on the server</string>
|
||||||
|
|
||||||
<string name="title_advanced_startup">Show on start screen</string>
|
<string name="title_advanced_startup">Show on start screen</string>
|
||||||
|
|
Loading…
Reference in New Issue