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