diff --git a/app/src/main/java/eu/faircode/netguard/ActivityMain.java b/app/src/main/java/eu/faircode/netguard/ActivityMain.java
index b2c2772d..012c1371 100644
--- a/app/src/main/java/eu/faircode/netguard/ActivityMain.java
+++ b/app/src/main/java/eu/faircode/netguard/ActivityMain.java
@@ -47,6 +47,8 @@ import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.SearchView;
import android.support.v7.widget.SwitchCompat;
+import android.telephony.PhoneStateListener;
+import android.telephony.TelephonyManager;
import android.text.method.LinkMovementMethod;
import android.util.Log;
import android.view.LayoutInflater;
@@ -78,6 +80,7 @@ public class ActivityMain extends AppCompatActivity implements SharedPreferences
private ImageView ivInteractive;
private ImageView ivNetwork;
private ImageView ivMetered;
+ private TextView tvGeneration;
private SwipeRefreshLayout swipeRefresh;
private RuleAdapter adapter = null;
private MenuItem menuSearch = null;
@@ -120,6 +123,7 @@ public class ActivityMain extends AppCompatActivity implements SharedPreferences
ivInteractive = (ImageView) actionView.findViewById(R.id.ivInteractive);
ivNetwork = (ImageView) actionView.findViewById(R.id.ivNetwork);
ivMetered = (ImageView) actionView.findViewById(R.id.ivMetered);
+ tvGeneration = (TextView) actionView.findViewById(R.id.tvGeneration);
getSupportActionBar().setDisplayShowCustomEnabled(true);
getSupportActionBar().setCustomView(actionView);
@@ -221,6 +225,10 @@ public class ActivityMain extends AppCompatActivity implements SharedPreferences
intentFilter.addDataScheme("package");
registerReceiver(packageChangedReceiver, intentFilter);
+ // Listen for data connection state changes
+ TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
+ tm.listen(phoneStateListener, PhoneStateListener.LISTEN_DATA_CONNECTION_STATE);
+
// Connect to billing
if (Util.hasValidFingerprint(TAG, this)) {
Intent serviceIntent = new Intent("com.android.vending.billing.InAppBillingService.BIND");
@@ -275,6 +283,9 @@ public class ActivityMain extends AppCompatActivity implements SharedPreferences
unregisterReceiver(connectivityChangedReceiver);
unregisterReceiver(packageChangedReceiver);
+ TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
+ tm.listen(phoneStateListener, PhoneStateListener.LISTEN_NONE);
+
if (IABService != null) {
unbindService(IABConnection);
IABService = null;
@@ -410,6 +421,17 @@ public class ActivityMain extends AppCompatActivity implements SharedPreferences
}
};
+ private PhoneStateListener phoneStateListener = new PhoneStateListener() {
+ @Override
+ public void onDataConnectionStateChanged(int state, int networkType) {
+ Log.i(TAG, "Data connection changed state=" + state + " network type=" + networkType);
+ if (state == TelephonyManager.DATA_CONNECTED)
+ tvGeneration.setText(Util.getNetworkGeneration(networkType));
+ else
+ tvGeneration.setText("");
+ }
+ };
+
private ServiceConnection IABConnection = new ServiceConnection() {
@Override
public void onServiceDisconnected(ComponentName name) {
diff --git a/app/src/main/java/eu/faircode/netguard/SinkholeService.java b/app/src/main/java/eu/faircode/netguard/SinkholeService.java
index 438b076d..cb7ce849 100644
--- a/app/src/main/java/eu/faircode/netguard/SinkholeService.java
+++ b/app/src/main/java/eu/faircode/netguard/SinkholeService.java
@@ -302,14 +302,14 @@ public class SinkholeService extends VpnService {
public void onDataConnectionStateChanged(int state, int networkType) {
Log.i(TAG, "Data connection changed state=" + state + " network type=" + networkType);
- if (state == TelephonyManager.DATA_CONNECTED) {
- String networkGeneration = Util.getNetworkGeneration(networkType);
- if (!last_generation.equals(networkGeneration)) {
- // Network generation changed
- last_generation = networkGeneration;
- Log.i(TAG, "New network generation=" + last_generation);
+ String networkGeneration = (state == TelephonyManager.DATA_CONNECTED ? Util.getNetworkGeneration(networkType) : "");
+ if (!last_generation.equals(networkGeneration)) {
+ // Network generation changed
+ last_generation = networkGeneration;
+ Log.i(TAG, "New network generation=" + last_generation);
- // Check if reload needed
+ // Check if reload needed
+ if (state == TelephonyManager.DATA_CONNECTED) {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(SinkholeService.this);
if (!prefs.getBoolean("metered_2g", true) ||
!prefs.getBoolean("metered_3g", true) ||
@@ -360,6 +360,7 @@ public class SinkholeService extends VpnService {
ifPackage.addDataScheme("package");
registerReceiver(packageAddedReceiver, ifPackage);
+ // Listen for data connection state changes
TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
tm.listen(phoneStateListener, PhoneStateListener.LISTEN_DATA_CONNECTION_STATE);
}
diff --git a/app/src/main/java/eu/faircode/netguard/Util.java b/app/src/main/java/eu/faircode/netguard/Util.java
index 8e645b25..d1cdeca6 100644
--- a/app/src/main/java/eu/faircode/netguard/Util.java
+++ b/app/src/main/java/eu/faircode/netguard/Util.java
@@ -109,7 +109,7 @@ public class Util {
if (ni != null && ni.getType() == ConnectivityManager.TYPE_MOBILE)
return getNetworkGeneration(ni.getSubtype());
else
- return "?";
+ return "";
}
public static boolean isMetered(Context context) {
diff --git a/app/src/main/res/layout/action.xml b/app/src/main/res/layout/action.xml
index 312f212e..4af12043 100644
--- a/app/src/main/res/layout/action.xml
+++ b/app/src/main/res/layout/action.xml
@@ -34,7 +34,7 @@
android:layout_height="16dp"
android:layout_marginStart="4dp"
android:src="@drawable/network"
- android:visibility="gone" />
+ android:visibility="invisible" />
+ android:visibility="invisible" />
+
+
\ No newline at end of file