diff options
author | Oleg Kibirev <olegk@google.com> | 2023-11-29 23:48:26 +0000 |
---|---|---|
committer | Oleg Kibirev <olegk@google.com> | 2023-11-30 00:07:47 +0000 |
commit | bce83d6c372617a55a051e475c0bb76e0143f9ea (patch) | |
tree | 23f4b10aa18c3072667c9756a0debcd44752946f | |
parent | 654adad60d0af62dc83b3aa2d92ef5d0e7c08f9d (diff) | |
download | TvSettings-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.java | 161 | ||||
-rw-r--r-- | Settings/src/com/android/tv/settings/connectivity/setup/ConnectState.java | 6 |
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(); } |