mirror of
https://github.com/M66B/NetGuard.git
synced 2025-03-15 08:29:02 +00:00
parent
62c6fb61fc
commit
7003f35b62
5 changed files with 76 additions and 1 deletions
|
@ -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);
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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"
|
||||
|
|
Loading…
Add table
Reference in a new issue