summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTreehugger Robot <android-test-infra-autosubmit@system.gserviceaccount.com>2023-11-13 09:14:46 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2023-11-13 09:14:46 +0000
commit65953636f94c92c032b2bc8f1249b189fbd14cd6 (patch)
tree03cf5b43e9e3b6e37e017e88bf1047142be7d364
parentf8f3a8e50a787f9b3d3169f1f77f01014de6e873 (diff)
parent992de231dbbc1c55a844727fc7231280cd896911 (diff)
downloadTvSettings-65953636f94c92c032b2bc8f1249b189fbd14cd6.tar.gz
Merge "Net: IPv6/IPv4 will not disaply when hot-plug in Ethernet [1/1]" into main
-rw-r--r--Settings/src/com/android/tv/settings/connectivity/ConnectivityListener.java31
1 files changed, 31 insertions, 0 deletions
diff --git a/Settings/src/com/android/tv/settings/connectivity/ConnectivityListener.java b/Settings/src/com/android/tv/settings/connectivity/ConnectivityListener.java
index 8ad1f25bf..f75527580 100644
--- a/Settings/src/com/android/tv/settings/connectivity/ConnectivityListener.java
+++ b/Settings/src/com/android/tv/settings/connectivity/ConnectivityListener.java
@@ -54,6 +54,11 @@ import com.android.settingslib.wifi.WifiTracker;
import java.util.ArrayList;
import java.util.List;
+import java.util.Objects;
+
+import android.net.ConnectivityManager.NetworkCallback;
+import android.os.Handler;
+
/**
* Listens for changes to the current connectivity status.
*/
@@ -93,6 +98,8 @@ public class ConnectivityListener implements WifiTracker.WifiListener, Lifecycle
private int mNetworkType;
private String mWifiSsid;
private int mWifiSignalStrength;
+ private final Handler mHandler = new Handler();
+ private LinkProperties mLateLp = null;
private final InterfaceStateListener mEthernetListener;
private final ArrayMap<String, IpConfiguration> mAvailableInterfaces = new ArrayMap<>();
private final Handler mUiHandler = ThreadUtils.getUiThreadHandler();
@@ -166,6 +173,7 @@ public class ConnectivityListener implements WifiTracker.WifiListener, Lifecycle
telephonyManager.listen(mPhoneStateListener,
PhoneStateListener.LISTEN_SIGNAL_STRENGTHS);
}
+ mConnectivityManager.registerDefaultNetworkCallback(mNetworkCallback, mHandler);
if (mEthernetManager != null) {
mEthernetManager.addInterfaceStateListener(r -> mUiHandler.post(r),
mEthernetListener);
@@ -198,6 +206,7 @@ public class ConnectivityListener implements WifiTracker.WifiListener, Lifecycle
if (telephonyManager != null) {
telephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_NONE);
}
+ mConnectivityManager.unregisterNetworkCallback(mNetworkCallback);
if (mEthernetManager != null) {
mEthernetManager.removeInterfaceStateListener(mEthernetListener);
}
@@ -499,10 +508,32 @@ public class ConnectivityListener implements WifiTracker.WifiListener, Lifecycle
}
}
+ public void onIpAddrChanged() {
+ if (mListener != null) {
+ mListener.onConnectivityChange();
+ }
+ }
+
public interface Listener {
void onConnectivityChange();
}
+ private final NetworkCallback mNetworkCallback = new NetworkCallback() {
+ @Override
+ public void onLinkPropertiesChanged(Network network, LinkProperties lp) {
+
+ if (mLateLp != null) {
+ if (!Objects.equals(mLateLp, lp)) {
+ if ((lp.hasIpv4Address() && !mLateLp.hasIpv4Address())
+ ||(lp.hasGlobalIpv6Address() && !mLateLp.hasGlobalIpv6Address())) {
+ onIpAddrChanged();
+ }
+ }
+ }
+ mLateLp = lp;
+ }
+ };
+
public interface WifiNetworkListener {
void onWifiListChanged();
}