summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOleg Kibirev <olegk@google.com>2023-11-29 23:48:26 +0000
committerOleg Kibirev <olegk@google.com>2023-11-30 00:07:47 +0000
commitbce83d6c372617a55a051e475c0bb76e0143f9ea (patch)
tree23f4b10aa18c3072667c9756a0debcd44752946f
parent654adad60d0af62dc83b3aa2d92ef5d0e7c08f9d (diff)
downloadTvSettings-bce83d6c372617a55a051e475c0bb76e0143f9ea.tar.gz
Use native Android lifecycles for Wifi connectivity listener
This will facilitate further migration of TVSettings to use WifiPickerTracker instead of ad hoc code with some missing functionality. Bug: 153627947 Change-Id: I15b777cf115a0087f47d1c4ced69570a9e80da5c
-rw-r--r--Settings/src/com/android/tv/settings/connectivity/ConnectivityListener.java161
-rw-r--r--Settings/src/com/android/tv/settings/connectivity/setup/ConnectState.java6
2 files changed, 60 insertions, 107 deletions
diff --git a/Settings/src/com/android/tv/settings/connectivity/ConnectivityListener.java b/Settings/src/com/android/tv/settings/connectivity/ConnectivityListener.java
index 1491e61eb..cb46d3faf 100644
--- a/Settings/src/com/android/tv/settings/connectivity/ConnectivityListener.java
+++ b/Settings/src/com/android/tv/settings/connectivity/ConnectivityListener.java
@@ -22,6 +22,7 @@ import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.ConnectivityManager;
+import android.net.ConnectivityManager.NetworkCallback;
import android.net.EthernetManager;
import android.net.EthernetManager.InterfaceStateListener;
import android.net.IpConfiguration;
@@ -40,36 +41,28 @@ import android.text.TextUtils;
import android.util.ArrayMap;
import android.util.Log;
+import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
-import androidx.annotation.UiThread;
+import androidx.lifecycle.DefaultLifecycleObserver;
+import androidx.lifecycle.Lifecycle;
+import androidx.lifecycle.LifecycleOwner;
-import com.android.settingslib.core.lifecycle.Lifecycle;
-import com.android.settingslib.core.lifecycle.LifecycleObserver;
-import com.android.settingslib.core.lifecycle.events.OnStart;
-import com.android.settingslib.core.lifecycle.events.OnStop;
import com.android.settingslib.utils.ThreadUtils;
import com.android.tv.settings.library.network.AccessPoint;
import com.android.tv.settings.library.network.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.
*/
-public class ConnectivityListener implements WifiTracker.WifiListener, LifecycleObserver, OnStart,
- OnStop {
-
+public class ConnectivityListener implements WifiTracker.WifiListener {
private static final String TAG = "ConnectivityListener";
private final Context mContext;
private final Listener mListener;
- private boolean mStarted;
private WifiTracker mWifiTracker;
@@ -104,14 +97,6 @@ public class ConnectivityListener implements WifiTracker.WifiListener, Lifecycle
private final ArrayMap<String, IpConfiguration> mAvailableInterfaces = new ArrayMap<>();
private final Handler mUiHandler = ThreadUtils.getUiThreadHandler();
- /**
- * @deprecated use the constructor that provides a {@link Lifecycle} instead
- */
- @Deprecated
- public ConnectivityListener(Context context, Listener listener) {
- this(context, listener, null);
- }
-
public ConnectivityListener(Context context, Listener listener, Lifecycle lifecycle) {
mContext = context;
mConnectivityManager = (ConnectivityManager) mContext.getSystemService(
@@ -120,9 +105,17 @@ public class ConnectivityListener implements WifiTracker.WifiListener, Lifecycle
mEthernetManager = mContext.getSystemService(EthernetManager.class);
mListener = listener;
if (mWifiManager != null) {
- if (lifecycle != null) {
- lifecycle.addObserver(this);
- }
+ lifecycle.addObserver(new DefaultLifecycleObserver() {
+ @Override
+ public void onStart(LifecycleOwner owner) {
+ start();
+ }
+
+ @Override
+ public void onStop(@NonNull LifecycleOwner owner) {
+ stop();
+ }
+ });
mWifiTracker = new WifiTracker(context, this, lifecycle, mWifiManager,
mConnectivityManager);
@@ -141,86 +134,39 @@ public class ConnectivityListener implements WifiTracker.WifiListener, Lifecycle
updateConnectivityStatus();
}
- /**
- * Starts {@link ConnectivityListener}.
- * This should be called only from main thread.
- * @deprecated not needed when a {@link Lifecycle} is provided
- */
- @UiThread
- @Deprecated
- public void start() {
- if (!mStarted && mWifiTracker != null) {
- mWifiTracker.onStart();
- }
- onStart();
- }
+ private void start() {
+ updateConnectivityStatus();
+ IntentFilter networkIntentFilter = new IntentFilter();
+ networkIntentFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
+ networkIntentFilter.addAction(WifiManager.RSSI_CHANGED_ACTION);
+ networkIntentFilter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
+ networkIntentFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
- @Override
- public void onStart() {
- if (!mStarted) {
- mStarted = true;
- updateConnectivityStatus();
- IntentFilter networkIntentFilter = new IntentFilter();
- networkIntentFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
- networkIntentFilter.addAction(WifiManager.RSSI_CHANGED_ACTION);
- networkIntentFilter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
- networkIntentFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
-
- mContext.registerReceiver(mNetworkReceiver, networkIntentFilter);
- final TelephonyManager telephonyManager = mContext
- .getSystemService(TelephonyManager.class);
- if (telephonyManager != null) {
- telephonyManager.listen(mPhoneStateListener,
- PhoneStateListener.LISTEN_SIGNAL_STRENGTHS);
- }
- mConnectivityManager.registerDefaultNetworkCallback(mNetworkCallback, mHandler);
- if (mEthernetManager != null) {
- mEthernetManager.addInterfaceStateListener(r -> mUiHandler.post(r),
- mEthernetListener);
- }
+ mContext.registerReceiver(mNetworkReceiver, networkIntentFilter);
+ final TelephonyManager telephonyManager = mContext
+ .getSystemService(TelephonyManager.class);
+ if (telephonyManager != null) {
+ telephonyManager.listen(mPhoneStateListener,
+ PhoneStateListener.LISTEN_SIGNAL_STRENGTHS);
}
- }
-
- /**
- * Stops {@link ConnectivityListener}.
- * This should be called only from main thread.
- * @deprecated not needed when a {@link Lifecycle} is provided
- */
- @UiThread
- @Deprecated
- public void stop() {
- if (mStarted && mWifiTracker != null) {
- mWifiTracker.onStop();
+ mConnectivityManager.registerDefaultNetworkCallback(mNetworkCallback, mHandler);
+ if (mEthernetManager != null) {
+ mEthernetManager.addInterfaceStateListener(r -> mUiHandler.post(r),
+ mEthernetListener);
}
- onStop();
}
- @Override
- public void onStop() {
- if (mStarted) {
- mStarted = false;
- mContext.unregisterReceiver(mNetworkReceiver);
- mWifiListener = null;
- final TelephonyManager telephonyManager = mContext
- .getSystemService(TelephonyManager.class);
- if (telephonyManager != null) {
- telephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_NONE);
- }
- mConnectivityManager.unregisterNetworkCallback(mNetworkCallback);
- if (mEthernetManager != null) {
- mEthernetManager.removeInterfaceStateListener(mEthernetListener);
- }
+ private void stop() {
+ mContext.unregisterReceiver(mNetworkReceiver);
+ mWifiListener = null;
+ final TelephonyManager telephonyManager = mContext
+ .getSystemService(TelephonyManager.class);
+ if (telephonyManager != null) {
+ telephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_NONE);
}
- }
-
- /**
- * Causes the background thread to quit.
- * @deprecated not needed when a {@link Lifecycle} is provided
- */
- @Deprecated
- public void destroy() {
- if (mWifiTracker != null) {
- mWifiTracker.onDestroy();
+ mConnectivityManager.unregisterNetworkCallback(mNetworkCallback);
+ if (mEthernetManager != null) {
+ mEthernetManager.removeInterfaceStateListener(mEthernetListener);
}
}
@@ -263,12 +209,16 @@ public class ConnectivityListener implements WifiTracker.WifiListener, Lifecycle
return "";
}
- /** Return whether the connected Wifi supports MAC address randomization. */
+ /**
+ * Return whether the connected Wifi supports MAC address randomization.
+ */
public boolean isMacAddressRandomizationSupported() {
return mWifiManager.isConnectedMacRandomizationSupported();
}
- /** Return whether the MAC address of the currently connected Wifi AP is randomized. */
+ /**
+ * Return whether the MAC address of the currently connected Wifi AP is randomized.
+ */
public int getWifiMacRandomizationSetting(AccessPoint ap) {
if (ap == null || ap.getConfig() == null) {
return WifiConfiguration.RANDOMIZATION_NONE;
@@ -276,12 +226,16 @@ public class ConnectivityListener implements WifiTracker.WifiListener, Lifecycle
return ap.getConfig().macRandomizationSetting;
}
- /** Return whether the randomized MAC address is used. */
+ /**
+ * Return whether the randomized MAC address is used.
+ */
public boolean isWifiMacAddressRandomized(AccessPoint ap) {
return getWifiMacRandomizationSetting(ap) != WifiConfiguration.RANDOMIZATION_NONE;
}
- /** Apply the setting of whether to use MAC address randimization. */
+ /**
+ * Apply the setting of whether to use MAC address randimization.
+ */
public void applyMacRandomizationSetting(AccessPoint ap, boolean enable) {
if (ap != null && ap.getConfig() != null) {
ap.getConfig().macRandomizationSetting = enable
@@ -525,7 +479,7 @@ public class ConnectivityListener implements WifiTracker.WifiListener, Lifecycle
if (mLateLp != null) {
if (!Objects.equals(mLateLp, lp)) {
if ((lp.hasIpv4Address() && !mLateLp.hasIpv4Address())
- ||(lp.hasGlobalIpv6Address() && !mLateLp.hasGlobalIpv6Address())) {
+ || (lp.hasGlobalIpv6Address() && !mLateLp.hasGlobalIpv6Address())) {
onIpAddrChanged();
}
}
@@ -540,6 +494,7 @@ public class ConnectivityListener implements WifiTracker.WifiListener, Lifecycle
/**
* Get the SSID of current connected network.
+ *
* @return SSID
*/
public String getSsid() {
diff --git a/Settings/src/com/android/tv/settings/connectivity/setup/ConnectState.java b/Settings/src/com/android/tv/settings/connectivity/setup/ConnectState.java
index 930f9ad92..1959d3ee7 100644
--- a/Settings/src/com/android/tv/settings/connectivity/setup/ConnectState.java
+++ b/Settings/src/com/android/tv/settings/connectivity/setup/ConnectState.java
@@ -126,8 +126,8 @@ public class ConnectState implements State {
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
mUserChoiceInfo = ViewModelProviders.of(getActivity()).get(UserChoiceInfo.class);
- mConnectivityListener = new ConnectivityListener(getActivity(), null);
- mConnectivityListener.start();
+ mConnectivityListener = new ConnectivityListener(getActivity(), null,
+ getLifecycle());
mConnectivityManager = (ConnectivityManager) getActivity().getSystemService(
Context.CONNECTIVITY_SERVICE);
@@ -192,8 +192,6 @@ public class ConnectState implements State {
mWifiManager.disconnect();
}
- mConnectivityListener.stop();
- mConnectivityListener.destroy();
mHandler.removeMessages(MSG_TIMEOUT);
super.onDestroy();
}