1
0
Fork 0
mirror of https://github.com/M66B/NetGuard.git synced 2025-03-15 08:29:02 +00:00

Settings disable 2G/3G/4G being metered

Refs #88
This commit is contained in:
M66B 2015-11-08 15:54:12 +01:00
parent 62c6fb61fc
commit 7003f35b62
5 changed files with 76 additions and 1 deletions

View file

@ -109,6 +109,11 @@ public class ActivitySettings extends AppCompatActivity implements SharedPrefere
else if ("whitelist_roaming".equals(name))
SinkholeService.reload("other", this);
else if ("metered_2g".equals(name) ||
"metered_3g".equals(name) ||
"metered_4g".equals(name))
SinkholeService.reload(null, this);
else if ("manage_system".equals(name))
SinkholeService.reload(null, this);

View file

@ -38,6 +38,8 @@ import android.preference.PreferenceManager;
import android.support.v4.app.NotificationCompat;
import android.support.v4.app.NotificationManagerCompat;
import android.support.v4.content.ContextCompat;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
import android.util.Log;
import android.widget.Toast;
@ -291,6 +293,20 @@ public class SinkholeService extends VpnService {
}
};
private PhoneStateListener phoneStateListener = new PhoneStateListener() {
@Override
public void onDataConnectionStateChanged(int state, int networkType) {
Log.i(TAG, "Data connection state changed state=" + state + " network type=" + networkType);
if (state == TelephonyManager.DATA_CONNECTED) {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(SinkholeService.this);
if (!prefs.getBoolean("metered_2g", true) ||
!prefs.getBoolean("metered_3g", true) ||
!prefs.getBoolean("metered_4g", true))
reload(null, SinkholeService.this);
}
}
};
private BroadcastReceiver packageAddedReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
@ -327,6 +343,9 @@ public class SinkholeService extends VpnService {
ifPackage.addAction(Intent.ACTION_PACKAGE_ADDED);
ifPackage.addDataScheme("package");
registerReceiver(packageAddedReceiver, ifPackage);
TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
tm.listen(phoneStateListener, PhoneStateListener.LISTEN_DATA_CONNECTION_STATE);
}
@Override
@ -354,6 +373,9 @@ public class SinkholeService extends VpnService {
unregisterReceiver(connectivityChangedReceiver);
unregisterReceiver(packageAddedReceiver);
TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
tm.listen(phoneStateListener, PhoneStateListener.LISTEN_NONE);
if (vpn != null) {
stopDebug();
stopVPN(vpn);

View file

@ -22,6 +22,7 @@ package eu.faircode.netguard;
import android.app.ApplicationErrorReport;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
@ -37,6 +38,7 @@ import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.os.PowerManager;
import android.preference.PreferenceManager;
import android.telephony.TelephonyManager;
import android.util.Log;
import android.widget.Toast;
@ -75,7 +77,38 @@ public class Util {
public static boolean isMetered(Context context) {
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
return cm.isActiveNetworkMetered();
boolean metered = cm.isActiveNetworkMetered();
NetworkInfo ni = cm.getActiveNetworkInfo();
if (metered && ni != null && ni.getType() == ConnectivityManager.TYPE_MOBILE) {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
switch (ni.getSubtype()) {
case TelephonyManager.NETWORK_TYPE_1xRTT:
case TelephonyManager.NETWORK_TYPE_CDMA:
case TelephonyManager.NETWORK_TYPE_EDGE:
case TelephonyManager.NETWORK_TYPE_GPRS:
case TelephonyManager.NETWORK_TYPE_IDEN:
return prefs.getBoolean("metered_2g", true);
case TelephonyManager.NETWORK_TYPE_EHRPD:
case TelephonyManager.NETWORK_TYPE_EVDO_0:
case TelephonyManager.NETWORK_TYPE_EVDO_A:
case TelephonyManager.NETWORK_TYPE_EVDO_B:
case TelephonyManager.NETWORK_TYPE_HSDPA:
case TelephonyManager.NETWORK_TYPE_HSPA:
case TelephonyManager.NETWORK_TYPE_HSPAP:
case TelephonyManager.NETWORK_TYPE_HSUPA:
case TelephonyManager.NETWORK_TYPE_UMTS:
return prefs.getBoolean("metered_3g", true);
case TelephonyManager.NETWORK_TYPE_LTE:
return prefs.getBoolean("metered_4g", true);
default:
Log.w(Util.class.getName(), "Unknown network subtype=" + ni.getSubtype());
}
}
return metered;
}
public static boolean isInteractive(Context context) {

View file

@ -17,6 +17,9 @@ These issues are caused by bugs in Android, or in the software provided by the m
<string name="setting_whitelist_wifi">Block Wi-Fi by default</string>
<string name="setting_whitelist_other">Block mobile by default</string>
<string name="setting_whitelist_roaming">Block roaming by default</string>
<string name="setting_metered_2g">2G is metered</string>
<string name="setting_metered_3g">3G is metered</string>
<string name="setting_metered_4g">4G is metered</string>
<string name="setting_system">Manage system applications</string>
<string name="setting_dark">Use dark theme</string>
<string name="setting_indicators">Show state indicators</string>

View file

@ -12,6 +12,18 @@
android:defaultValue="true"
android:key="whitelist_roaming"
android:title="@string/setting_whitelist_roaming" />
<CheckBoxPreference
android:defaultValue="true"
android:key="metered_2g"
android:title="@string/setting_metered_2g" />
<CheckBoxPreference
android:defaultValue="true"
android:key="metered_3g"
android:title="@string/setting_metered_3g" />
<CheckBoxPreference
android:defaultValue="true"
android:key="metered_4g"
android:title="@string/setting_metered_4g" />
<CheckBoxPreference
android:defaultValue="false"
android:key="manage_system"