Loading res/xml/wifi_network_details_fragment.xml +3 −3 Original line number Diff line number Diff line Loading @@ -28,9 +28,9 @@ android:key="general_details_category" > <!-- Buttons --> <com.android.settings.applications.LayoutPreference android:key="forget_button" android:selectable="false" android:layout="@layout/single_button_panel" /> android:key="buttons" android:layout="@layout/two_buttons_panel" android:selectable="false" /> <com.android.settings.wifi.WifiDetailPreference android:key="signal_strength" Loading src/com/android/settings/vpn2/ConnectivityManagerWrapper.java +33 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,11 @@ package com.android.settings.vpn2; import android.net.ConnectivityManager; import android.net.ConnectivityManager.NetworkCallback; import android.net.Network; import android.net.NetworkRequest; import android.os.Handler; import android.net.ProxyInfo; /** Loading @@ -26,6 +31,11 @@ import android.net.ProxyInfo; */ public interface ConnectivityManagerWrapper { /** * Returns the real ConnectivityManager object wrapped by this wrapper. */ public ConnectivityManager getConnectivityManager(); /** * Calls {@code ConnectivityManager.getAlwaysOnVpnPackageForUser()}. * Loading @@ -39,4 +49,27 @@ public interface ConnectivityManagerWrapper { * @see android.net.ConnectivityManager#getGlobalProxy */ ProxyInfo getGlobalProxy(); /** * Calls {@code ConnectivityManager.registerNetworkCallback()}. * * This is part of the ConnectivityManager public API in SDK 26 or above, but is not yet visible * to the robolectric tests, which currently build with SDK 23. * TODO: delete this once the robolectric tests build with SDK 26 or above. * * @see android.net.ConnectivityManager#registerNetworkCallback(NetworkRequest,NetworkCallback,Handler) */ public void registerNetworkCallback(NetworkRequest request, NetworkCallback callback, Handler handler); /** * Calls {@code ConnectivityManager.startCaptivePortalApp()}. * * This is part of the ConnectivityManager public API in SDK 26 or above, but is not yet visible * to the robolectric tests, which currently build with SDK 23. * TODO: delete this once the robolectric tests build with SDK 26 or above. * * @see android.net.ConnectivityManager#startCaptivePortalApp(Network) */ public void startCaptivePortalApp(Network network); } src/com/android/settings/vpn2/ConnectivityManagerWrapperImpl.java +20 −0 Original line number Diff line number Diff line Loading @@ -17,6 +17,10 @@ package com.android.settings.vpn2; import android.net.ConnectivityManager; import android.net.ConnectivityManager.NetworkCallback; import android.net.Network; import android.net.NetworkRequest; import android.os.Handler; import android.net.ProxyInfo; public class ConnectivityManagerWrapperImpl implements ConnectivityManagerWrapper { Loading @@ -27,6 +31,11 @@ public class ConnectivityManagerWrapperImpl implements ConnectivityManagerWrappe mCm = cm; } @Override public ConnectivityManager getConnectivityManager() { return mCm; } @Override public String getAlwaysOnVpnPackageForUser(int userId) { return mCm.getAlwaysOnVpnPackageForUser(userId); Loading @@ -36,4 +45,15 @@ public class ConnectivityManagerWrapperImpl implements ConnectivityManagerWrappe public ProxyInfo getGlobalProxy() { return mCm.getGlobalProxy(); } @Override public void registerNetworkCallback(NetworkRequest request, NetworkCallback callback, Handler handler) { mCm.registerNetworkCallback(request, callback, handler); } @Override public void startCaptivePortalApp(Network network) { mCm.startCaptivePortalApp(network); } } src/com/android/settings/wifi/details/WifiDetailPreferenceController.java +90 −18 Original line number Diff line number Diff line Loading @@ -22,30 +22,38 @@ import android.content.Intent; import android.content.IntentFilter; import android.graphics.drawable.Drawable; import android.net.ConnectivityManager; import android.net.ConnectivityManager.NetworkCallback; import android.net.IpPrefix; import android.net.LinkProperties; import android.net.Network; import android.net.NetworkBadging; import android.net.NetworkCapabilities; import android.net.NetworkRequest; import android.net.NetworkInfo; import android.net.NetworkUtils; import android.net.RouteInfo; import android.net.wifi.WifiConfiguration; import android.net.wifi.WifiInfo; import android.net.wifi.WifiManager; import android.os.Handler; import android.support.v7.preference.Preference; import android.support.v7.preference.PreferenceCategory; import android.support.v7.preference.PreferenceScreen; import android.text.TextUtils; import android.util.Log; import android.widget.Button; import android.view.View; import com.android.internal.annotations.VisibleForTesting; import com.android.settings.R; import com.android.settings.applications.LayoutPreference; import com.android.settings.core.PreferenceController; import com.android.settings.core.lifecycle.Lifecycle; import com.android.settings.core.lifecycle.LifecycleObserver; import com.android.settings.core.lifecycle.events.OnPause; import com.android.settings.core.lifecycle.events.OnResume; import com.android.settings.wifi.WifiDetailPreference; import com.android.settings.vpn2.ConnectivityManagerWrapper; import com.android.settingslib.wifi.AccessPoint; import java.net.Inet4Address; Loading @@ -55,6 +63,9 @@ import java.net.UnknownHostException; import java.util.List; import java.util.StringJoiner; import static android.net.NetworkCapabilities.TRANSPORT_WIFI; import static android.net.NetworkCapabilities.NET_CAPABILITY_CAPTIVE_PORTAL; /** * Controller for logic pertaining to displaying Wifi information for the * {@link WifiNetworkDetailsFragment}. Loading @@ -67,6 +78,8 @@ public class WifiDetailPreferenceController extends PreferenceController impleme @VisibleForTesting static final String KEY_CONNECTION_DETAIL_PREF = "connection_detail"; @VisibleForTesting static final String KEY_BUTTONS_PREF = "buttons"; @VisibleForTesting static final String KEY_SIGNAL_STRENGTH_PREF = "signal_strength"; @VisibleForTesting static final String KEY_LINK_SPEED = "link_speed"; Loading @@ -88,9 +101,14 @@ public class WifiDetailPreferenceController extends PreferenceController impleme static final String KEY_IPV6_ADDRESS_CATEGORY = "ipv6_details_category"; private AccessPoint mAccessPoint; private final ConnectivityManagerWrapper mConnectivityManagerWrapper; private final ConnectivityManager mConnectivityManager; private final Fragment mFragment; private final Handler mHandler; private LinkProperties mLinkProperties; private Network mNetwork; private NetworkInfo mNetworkInfo; private NetworkCapabilities mNetworkCapabilities; private Context mPrefContext; private int mRssi; private String[] mSignalStr; Loading @@ -98,8 +116,10 @@ public class WifiDetailPreferenceController extends PreferenceController impleme private WifiInfo mWifiInfo; private final WifiManager mWifiManager; // Preferences - in order of appearance // UI elements - in order of appearance private Preference mConnectionDetailPref; private LayoutPreference mButtonsPref; private Button mSignInButton; private WifiDetailPreference mSignalStrengthPref; private WifiDetailPreference mLinkSpeedPref; private WifiDetailPreference mFrequencyPref; Loading @@ -123,18 +143,50 @@ public class WifiDetailPreferenceController extends PreferenceController impleme } }; private final NetworkRequest mNetworkRequest = new NetworkRequest.Builder() .clearCapabilities().addTransportType(TRANSPORT_WIFI).build(); // Must be run on the UI thread since it directly manipulates UI state. private final NetworkCallback mNetworkCallback = new NetworkCallback() { @Override public void onLinkPropertiesChanged(Network network, LinkProperties lp) { if (network.equals(mNetwork) && !lp.equals(mLinkProperties)) { mLinkProperties = lp; updateIpLayerInfo(); } } @Override public void onCapabilitiesChanged(Network network, NetworkCapabilities nc) { if (network.equals(mNetwork) && !nc.equals(mNetworkCapabilities)) { mNetworkCapabilities = nc; updateIpLayerInfo(); } } @Override public void onLost(Network network) { if (network.equals(mNetwork)) { exitActivity(); } } }; public WifiDetailPreferenceController( AccessPoint accessPoint, ConnectivityManager connectivityManager, ConnectivityManagerWrapper connectivityManagerWrapper, Context context, Fragment fragment, Handler handler, Lifecycle lifecycle, WifiManager wifiManager) { super(context); mAccessPoint = accessPoint; mConnectivityManager = connectivityManager; mConnectivityManager = connectivityManagerWrapper.getConnectivityManager(); mConnectivityManagerWrapper = connectivityManagerWrapper; mFragment = fragment; mHandler = handler; mNetworkInfo = accessPoint.getNetworkInfo(); mRssi = accessPoint.getRssi(); mSignalStr = context.getResources().getStringArray(R.array.wifi_signal); Loading Loading @@ -167,6 +219,12 @@ public class WifiDetailPreferenceController extends PreferenceController impleme mConnectionDetailPref = screen.findPreference(KEY_CONNECTION_DETAIL_PREF); mButtonsPref = (LayoutPreference) screen.findPreference(KEY_BUTTONS_PREF); mSignInButton = (Button) mButtonsPref.findViewById(R.id.right_button); mSignInButton.setText(com.android.internal.R.string.network_available_sign_in); mSignInButton.setOnClickListener( view -> mConnectivityManagerWrapper.startCaptivePortalApp(mNetwork)); mSignalStrengthPref = (WifiDetailPreference) screen.findPreference(KEY_SIGNAL_STRENGTH_PREF); mLinkSpeedPref = (WifiDetailPreference) screen.findPreference(KEY_LINK_SPEED); Loading @@ -191,6 +249,12 @@ public class WifiDetailPreferenceController extends PreferenceController impleme @Override public void onResume() { mConnectivityManagerWrapper.registerNetworkCallback(mNetworkRequest, mNetworkCallback, mHandler); mNetwork = mWifiManager.getCurrentNetwork(); mLinkProperties = mConnectivityManager.getLinkProperties(mNetwork); mNetworkCapabilities = mConnectivityManager.getNetworkCapabilities(mNetwork); updateInfo(); mContext.registerReceiver(mReceiver, mFilter); Loading @@ -198,13 +262,17 @@ public class WifiDetailPreferenceController extends PreferenceController impleme @Override public void onPause() { mNetwork = null; mLinkProperties = null; mNetworkCapabilities = null; mContext.unregisterReceiver(mReceiver); mConnectivityManager.unregisterNetworkCallback(mNetworkCallback); } private void updateInfo() { mNetworkInfo = mConnectivityManager.getNetworkInfo(mWifiManager.getCurrentNetwork()); mNetworkInfo = mConnectivityManager.getNetworkInfo(mNetwork); mWifiInfo = mWifiManager.getConnectionInfo(); if (mNetworkInfo == null || mWifiInfo == null) { if (mNetwork == null || mNetworkInfo == null || mWifiInfo == null) { exitActivity(); return; } Loading Loading @@ -238,7 +306,7 @@ public class WifiDetailPreferenceController extends PreferenceController impleme } mFrequencyPref.setDetailText(band); setIpText(); updateIpLayerInfo(); } private void exitActivity() { Loading Loading @@ -270,7 +338,9 @@ public class WifiDetailPreferenceController extends PreferenceController impleme mSignalStrengthPref.setDetailText(mSignalStr[summarySignalLevel]); } private void setIpText() { private void updateIpLayerInfo() { mSignInButton.setVisibility(canSignIntoNetwork() ? View.VISIBLE : View.INVISIBLE); // Reset all fields mIpv6AddressCategory.removeAll(); mIpv6AddressCategory.setVisible(false); Loading @@ -279,18 +349,12 @@ public class WifiDetailPreferenceController extends PreferenceController impleme mGatewayPref.setVisible(false); mDnsPref.setVisible(false); Network currentNetwork = mWifiManager.getCurrentNetwork(); if (currentNetwork == null) { if (mNetwork == null || mLinkProperties == null) { return; } List<InetAddress> addresses = mLinkProperties.getAddresses(); LinkProperties linkProperties = mConnectivityManager.getLinkProperties(currentNetwork); if (linkProperties == null) { return; } List<InetAddress> addresses = linkProperties.getAddresses(); // Set IPv4 and Ipv6 addresses // Set IPv4 and IPv6 addresses for (int i = 0; i < addresses.size(); i++) { InetAddress addr = addresses.get(i); if (addr instanceof Inet4Address) { Loading @@ -310,7 +374,7 @@ public class WifiDetailPreferenceController extends PreferenceController impleme // Set up IPv4 gateway and subnet mask String gateway = null; String subnet = null; for (RouteInfo routeInfo : linkProperties.getRoutes()) { for (RouteInfo routeInfo : mLinkProperties.getRoutes()) { if (routeInfo.hasGateway() && routeInfo.getGateway() instanceof Inet4Address) { gateway = routeInfo.getGateway().getHostAddress(); } Loading @@ -333,7 +397,7 @@ public class WifiDetailPreferenceController extends PreferenceController impleme // Set IPv4 DNS addresses StringJoiner stringJoiner = new StringJoiner(","); for (InetAddress dnsServer : linkProperties.getDnsServers()) { for (InetAddress dnsServer : mLinkProperties.getDnsServers()) { if (dnsServer instanceof Inet4Address) { stringJoiner.add(dnsServer.getHostAddress()); } Loading Loading @@ -362,6 +426,14 @@ public class WifiDetailPreferenceController extends PreferenceController impleme return mWifiInfo != null && mWifiInfo.isEphemeral() || mWifiConfig != null; } /** * Returns whether the user can sign into the network represented by this preference. */ private boolean canSignIntoNetwork() { return mNetworkCapabilities != null && mNetworkCapabilities.hasCapability( NET_CAPABILITY_CAPTIVE_PORTAL); } /** * Forgets the wifi network associated with this preference. */ Loading src/com/android/settings/wifi/details/WifiNetworkDetailsFragment.java +13 −7 Original line number Diff line number Diff line Loading @@ -17,8 +17,12 @@ package com.android.settings.wifi.details; import android.content.Context; import android.net.ConnectivityManager; import android.net.ConnectivityManager.NetworkCallback; import android.net.NetworkRequest; import android.net.wifi.WifiManager; import android.os.Bundle; import android.os.Handler; import android.os.Looper; import android.widget.Button; import com.android.internal.logging.nano.MetricsProto; Loading @@ -26,6 +30,7 @@ import com.android.settings.R; import com.android.settings.applications.LayoutPreference; import com.android.settings.core.PreferenceController; import com.android.settings.dashboard.DashboardFragment; import com.android.settings.vpn2.ConnectivityManagerWrapperImpl; import com.android.settingslib.wifi.AccessPoint; import java.util.ArrayList; Loading @@ -40,9 +45,6 @@ import java.util.List; public class WifiNetworkDetailsFragment extends DashboardFragment { private static final String TAG = "WifiNetworkDetailsFrg"; // XML KEYS private static final String KEY_FORGET_BUTTON = "forget_button"; private AccessPoint mAccessPoint; private Button mForgetButton; private WifiDetailPreferenceController mWifiDetailPreferenceController; Loading @@ -59,9 +61,11 @@ public class WifiNetworkDetailsFragment extends DashboardFragment { // Header Title set automatically from launching Preference LayoutPreference forgetPreference = ((LayoutPreference) findPreference(KEY_FORGET_BUTTON)); forgetPreference.setVisible(mWifiDetailPreferenceController.canForgetNetwork()); mForgetButton = (Button) forgetPreference.findViewById(R.id.button); LayoutPreference buttonsPreference = ((LayoutPreference) findPreference( WifiDetailPreferenceController.KEY_BUTTONS_PREF)); buttonsPreference.setVisible(mWifiDetailPreferenceController.canForgetNetwork()); mForgetButton = (Button) buttonsPreference.findViewById(R.id.left_button); mForgetButton.setText(R.string.forget); mForgetButton.setOnClickListener(view -> forgetNetwork()); } Loading @@ -88,11 +92,13 @@ public class WifiNetworkDetailsFragment extends DashboardFragment { @Override protected List<PreferenceController> getPreferenceControllers(Context context) { ConnectivityManager cm = context.getSystemService(ConnectivityManager.class); mWifiDetailPreferenceController = new WifiDetailPreferenceController( mAccessPoint, context.getSystemService(ConnectivityManager.class), new ConnectivityManagerWrapperImpl(cm), context, this, new Handler(Looper.getMainLooper()), // UI thread. getLifecycle(), context.getSystemService(WifiManager.class)); Loading Loading
res/xml/wifi_network_details_fragment.xml +3 −3 Original line number Diff line number Diff line Loading @@ -28,9 +28,9 @@ android:key="general_details_category" > <!-- Buttons --> <com.android.settings.applications.LayoutPreference android:key="forget_button" android:selectable="false" android:layout="@layout/single_button_panel" /> android:key="buttons" android:layout="@layout/two_buttons_panel" android:selectable="false" /> <com.android.settings.wifi.WifiDetailPreference android:key="signal_strength" Loading
src/com/android/settings/vpn2/ConnectivityManagerWrapper.java +33 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,11 @@ package com.android.settings.vpn2; import android.net.ConnectivityManager; import android.net.ConnectivityManager.NetworkCallback; import android.net.Network; import android.net.NetworkRequest; import android.os.Handler; import android.net.ProxyInfo; /** Loading @@ -26,6 +31,11 @@ import android.net.ProxyInfo; */ public interface ConnectivityManagerWrapper { /** * Returns the real ConnectivityManager object wrapped by this wrapper. */ public ConnectivityManager getConnectivityManager(); /** * Calls {@code ConnectivityManager.getAlwaysOnVpnPackageForUser()}. * Loading @@ -39,4 +49,27 @@ public interface ConnectivityManagerWrapper { * @see android.net.ConnectivityManager#getGlobalProxy */ ProxyInfo getGlobalProxy(); /** * Calls {@code ConnectivityManager.registerNetworkCallback()}. * * This is part of the ConnectivityManager public API in SDK 26 or above, but is not yet visible * to the robolectric tests, which currently build with SDK 23. * TODO: delete this once the robolectric tests build with SDK 26 or above. * * @see android.net.ConnectivityManager#registerNetworkCallback(NetworkRequest,NetworkCallback,Handler) */ public void registerNetworkCallback(NetworkRequest request, NetworkCallback callback, Handler handler); /** * Calls {@code ConnectivityManager.startCaptivePortalApp()}. * * This is part of the ConnectivityManager public API in SDK 26 or above, but is not yet visible * to the robolectric tests, which currently build with SDK 23. * TODO: delete this once the robolectric tests build with SDK 26 or above. * * @see android.net.ConnectivityManager#startCaptivePortalApp(Network) */ public void startCaptivePortalApp(Network network); }
src/com/android/settings/vpn2/ConnectivityManagerWrapperImpl.java +20 −0 Original line number Diff line number Diff line Loading @@ -17,6 +17,10 @@ package com.android.settings.vpn2; import android.net.ConnectivityManager; import android.net.ConnectivityManager.NetworkCallback; import android.net.Network; import android.net.NetworkRequest; import android.os.Handler; import android.net.ProxyInfo; public class ConnectivityManagerWrapperImpl implements ConnectivityManagerWrapper { Loading @@ -27,6 +31,11 @@ public class ConnectivityManagerWrapperImpl implements ConnectivityManagerWrappe mCm = cm; } @Override public ConnectivityManager getConnectivityManager() { return mCm; } @Override public String getAlwaysOnVpnPackageForUser(int userId) { return mCm.getAlwaysOnVpnPackageForUser(userId); Loading @@ -36,4 +45,15 @@ public class ConnectivityManagerWrapperImpl implements ConnectivityManagerWrappe public ProxyInfo getGlobalProxy() { return mCm.getGlobalProxy(); } @Override public void registerNetworkCallback(NetworkRequest request, NetworkCallback callback, Handler handler) { mCm.registerNetworkCallback(request, callback, handler); } @Override public void startCaptivePortalApp(Network network) { mCm.startCaptivePortalApp(network); } }
src/com/android/settings/wifi/details/WifiDetailPreferenceController.java +90 −18 Original line number Diff line number Diff line Loading @@ -22,30 +22,38 @@ import android.content.Intent; import android.content.IntentFilter; import android.graphics.drawable.Drawable; import android.net.ConnectivityManager; import android.net.ConnectivityManager.NetworkCallback; import android.net.IpPrefix; import android.net.LinkProperties; import android.net.Network; import android.net.NetworkBadging; import android.net.NetworkCapabilities; import android.net.NetworkRequest; import android.net.NetworkInfo; import android.net.NetworkUtils; import android.net.RouteInfo; import android.net.wifi.WifiConfiguration; import android.net.wifi.WifiInfo; import android.net.wifi.WifiManager; import android.os.Handler; import android.support.v7.preference.Preference; import android.support.v7.preference.PreferenceCategory; import android.support.v7.preference.PreferenceScreen; import android.text.TextUtils; import android.util.Log; import android.widget.Button; import android.view.View; import com.android.internal.annotations.VisibleForTesting; import com.android.settings.R; import com.android.settings.applications.LayoutPreference; import com.android.settings.core.PreferenceController; import com.android.settings.core.lifecycle.Lifecycle; import com.android.settings.core.lifecycle.LifecycleObserver; import com.android.settings.core.lifecycle.events.OnPause; import com.android.settings.core.lifecycle.events.OnResume; import com.android.settings.wifi.WifiDetailPreference; import com.android.settings.vpn2.ConnectivityManagerWrapper; import com.android.settingslib.wifi.AccessPoint; import java.net.Inet4Address; Loading @@ -55,6 +63,9 @@ import java.net.UnknownHostException; import java.util.List; import java.util.StringJoiner; import static android.net.NetworkCapabilities.TRANSPORT_WIFI; import static android.net.NetworkCapabilities.NET_CAPABILITY_CAPTIVE_PORTAL; /** * Controller for logic pertaining to displaying Wifi information for the * {@link WifiNetworkDetailsFragment}. Loading @@ -67,6 +78,8 @@ public class WifiDetailPreferenceController extends PreferenceController impleme @VisibleForTesting static final String KEY_CONNECTION_DETAIL_PREF = "connection_detail"; @VisibleForTesting static final String KEY_BUTTONS_PREF = "buttons"; @VisibleForTesting static final String KEY_SIGNAL_STRENGTH_PREF = "signal_strength"; @VisibleForTesting static final String KEY_LINK_SPEED = "link_speed"; Loading @@ -88,9 +101,14 @@ public class WifiDetailPreferenceController extends PreferenceController impleme static final String KEY_IPV6_ADDRESS_CATEGORY = "ipv6_details_category"; private AccessPoint mAccessPoint; private final ConnectivityManagerWrapper mConnectivityManagerWrapper; private final ConnectivityManager mConnectivityManager; private final Fragment mFragment; private final Handler mHandler; private LinkProperties mLinkProperties; private Network mNetwork; private NetworkInfo mNetworkInfo; private NetworkCapabilities mNetworkCapabilities; private Context mPrefContext; private int mRssi; private String[] mSignalStr; Loading @@ -98,8 +116,10 @@ public class WifiDetailPreferenceController extends PreferenceController impleme private WifiInfo mWifiInfo; private final WifiManager mWifiManager; // Preferences - in order of appearance // UI elements - in order of appearance private Preference mConnectionDetailPref; private LayoutPreference mButtonsPref; private Button mSignInButton; private WifiDetailPreference mSignalStrengthPref; private WifiDetailPreference mLinkSpeedPref; private WifiDetailPreference mFrequencyPref; Loading @@ -123,18 +143,50 @@ public class WifiDetailPreferenceController extends PreferenceController impleme } }; private final NetworkRequest mNetworkRequest = new NetworkRequest.Builder() .clearCapabilities().addTransportType(TRANSPORT_WIFI).build(); // Must be run on the UI thread since it directly manipulates UI state. private final NetworkCallback mNetworkCallback = new NetworkCallback() { @Override public void onLinkPropertiesChanged(Network network, LinkProperties lp) { if (network.equals(mNetwork) && !lp.equals(mLinkProperties)) { mLinkProperties = lp; updateIpLayerInfo(); } } @Override public void onCapabilitiesChanged(Network network, NetworkCapabilities nc) { if (network.equals(mNetwork) && !nc.equals(mNetworkCapabilities)) { mNetworkCapabilities = nc; updateIpLayerInfo(); } } @Override public void onLost(Network network) { if (network.equals(mNetwork)) { exitActivity(); } } }; public WifiDetailPreferenceController( AccessPoint accessPoint, ConnectivityManager connectivityManager, ConnectivityManagerWrapper connectivityManagerWrapper, Context context, Fragment fragment, Handler handler, Lifecycle lifecycle, WifiManager wifiManager) { super(context); mAccessPoint = accessPoint; mConnectivityManager = connectivityManager; mConnectivityManager = connectivityManagerWrapper.getConnectivityManager(); mConnectivityManagerWrapper = connectivityManagerWrapper; mFragment = fragment; mHandler = handler; mNetworkInfo = accessPoint.getNetworkInfo(); mRssi = accessPoint.getRssi(); mSignalStr = context.getResources().getStringArray(R.array.wifi_signal); Loading Loading @@ -167,6 +219,12 @@ public class WifiDetailPreferenceController extends PreferenceController impleme mConnectionDetailPref = screen.findPreference(KEY_CONNECTION_DETAIL_PREF); mButtonsPref = (LayoutPreference) screen.findPreference(KEY_BUTTONS_PREF); mSignInButton = (Button) mButtonsPref.findViewById(R.id.right_button); mSignInButton.setText(com.android.internal.R.string.network_available_sign_in); mSignInButton.setOnClickListener( view -> mConnectivityManagerWrapper.startCaptivePortalApp(mNetwork)); mSignalStrengthPref = (WifiDetailPreference) screen.findPreference(KEY_SIGNAL_STRENGTH_PREF); mLinkSpeedPref = (WifiDetailPreference) screen.findPreference(KEY_LINK_SPEED); Loading @@ -191,6 +249,12 @@ public class WifiDetailPreferenceController extends PreferenceController impleme @Override public void onResume() { mConnectivityManagerWrapper.registerNetworkCallback(mNetworkRequest, mNetworkCallback, mHandler); mNetwork = mWifiManager.getCurrentNetwork(); mLinkProperties = mConnectivityManager.getLinkProperties(mNetwork); mNetworkCapabilities = mConnectivityManager.getNetworkCapabilities(mNetwork); updateInfo(); mContext.registerReceiver(mReceiver, mFilter); Loading @@ -198,13 +262,17 @@ public class WifiDetailPreferenceController extends PreferenceController impleme @Override public void onPause() { mNetwork = null; mLinkProperties = null; mNetworkCapabilities = null; mContext.unregisterReceiver(mReceiver); mConnectivityManager.unregisterNetworkCallback(mNetworkCallback); } private void updateInfo() { mNetworkInfo = mConnectivityManager.getNetworkInfo(mWifiManager.getCurrentNetwork()); mNetworkInfo = mConnectivityManager.getNetworkInfo(mNetwork); mWifiInfo = mWifiManager.getConnectionInfo(); if (mNetworkInfo == null || mWifiInfo == null) { if (mNetwork == null || mNetworkInfo == null || mWifiInfo == null) { exitActivity(); return; } Loading Loading @@ -238,7 +306,7 @@ public class WifiDetailPreferenceController extends PreferenceController impleme } mFrequencyPref.setDetailText(band); setIpText(); updateIpLayerInfo(); } private void exitActivity() { Loading Loading @@ -270,7 +338,9 @@ public class WifiDetailPreferenceController extends PreferenceController impleme mSignalStrengthPref.setDetailText(mSignalStr[summarySignalLevel]); } private void setIpText() { private void updateIpLayerInfo() { mSignInButton.setVisibility(canSignIntoNetwork() ? View.VISIBLE : View.INVISIBLE); // Reset all fields mIpv6AddressCategory.removeAll(); mIpv6AddressCategory.setVisible(false); Loading @@ -279,18 +349,12 @@ public class WifiDetailPreferenceController extends PreferenceController impleme mGatewayPref.setVisible(false); mDnsPref.setVisible(false); Network currentNetwork = mWifiManager.getCurrentNetwork(); if (currentNetwork == null) { if (mNetwork == null || mLinkProperties == null) { return; } List<InetAddress> addresses = mLinkProperties.getAddresses(); LinkProperties linkProperties = mConnectivityManager.getLinkProperties(currentNetwork); if (linkProperties == null) { return; } List<InetAddress> addresses = linkProperties.getAddresses(); // Set IPv4 and Ipv6 addresses // Set IPv4 and IPv6 addresses for (int i = 0; i < addresses.size(); i++) { InetAddress addr = addresses.get(i); if (addr instanceof Inet4Address) { Loading @@ -310,7 +374,7 @@ public class WifiDetailPreferenceController extends PreferenceController impleme // Set up IPv4 gateway and subnet mask String gateway = null; String subnet = null; for (RouteInfo routeInfo : linkProperties.getRoutes()) { for (RouteInfo routeInfo : mLinkProperties.getRoutes()) { if (routeInfo.hasGateway() && routeInfo.getGateway() instanceof Inet4Address) { gateway = routeInfo.getGateway().getHostAddress(); } Loading @@ -333,7 +397,7 @@ public class WifiDetailPreferenceController extends PreferenceController impleme // Set IPv4 DNS addresses StringJoiner stringJoiner = new StringJoiner(","); for (InetAddress dnsServer : linkProperties.getDnsServers()) { for (InetAddress dnsServer : mLinkProperties.getDnsServers()) { if (dnsServer instanceof Inet4Address) { stringJoiner.add(dnsServer.getHostAddress()); } Loading Loading @@ -362,6 +426,14 @@ public class WifiDetailPreferenceController extends PreferenceController impleme return mWifiInfo != null && mWifiInfo.isEphemeral() || mWifiConfig != null; } /** * Returns whether the user can sign into the network represented by this preference. */ private boolean canSignIntoNetwork() { return mNetworkCapabilities != null && mNetworkCapabilities.hasCapability( NET_CAPABILITY_CAPTIVE_PORTAL); } /** * Forgets the wifi network associated with this preference. */ Loading
src/com/android/settings/wifi/details/WifiNetworkDetailsFragment.java +13 −7 Original line number Diff line number Diff line Loading @@ -17,8 +17,12 @@ package com.android.settings.wifi.details; import android.content.Context; import android.net.ConnectivityManager; import android.net.ConnectivityManager.NetworkCallback; import android.net.NetworkRequest; import android.net.wifi.WifiManager; import android.os.Bundle; import android.os.Handler; import android.os.Looper; import android.widget.Button; import com.android.internal.logging.nano.MetricsProto; Loading @@ -26,6 +30,7 @@ import com.android.settings.R; import com.android.settings.applications.LayoutPreference; import com.android.settings.core.PreferenceController; import com.android.settings.dashboard.DashboardFragment; import com.android.settings.vpn2.ConnectivityManagerWrapperImpl; import com.android.settingslib.wifi.AccessPoint; import java.util.ArrayList; Loading @@ -40,9 +45,6 @@ import java.util.List; public class WifiNetworkDetailsFragment extends DashboardFragment { private static final String TAG = "WifiNetworkDetailsFrg"; // XML KEYS private static final String KEY_FORGET_BUTTON = "forget_button"; private AccessPoint mAccessPoint; private Button mForgetButton; private WifiDetailPreferenceController mWifiDetailPreferenceController; Loading @@ -59,9 +61,11 @@ public class WifiNetworkDetailsFragment extends DashboardFragment { // Header Title set automatically from launching Preference LayoutPreference forgetPreference = ((LayoutPreference) findPreference(KEY_FORGET_BUTTON)); forgetPreference.setVisible(mWifiDetailPreferenceController.canForgetNetwork()); mForgetButton = (Button) forgetPreference.findViewById(R.id.button); LayoutPreference buttonsPreference = ((LayoutPreference) findPreference( WifiDetailPreferenceController.KEY_BUTTONS_PREF)); buttonsPreference.setVisible(mWifiDetailPreferenceController.canForgetNetwork()); mForgetButton = (Button) buttonsPreference.findViewById(R.id.left_button); mForgetButton.setText(R.string.forget); mForgetButton.setOnClickListener(view -> forgetNetwork()); } Loading @@ -88,11 +92,13 @@ public class WifiNetworkDetailsFragment extends DashboardFragment { @Override protected List<PreferenceController> getPreferenceControllers(Context context) { ConnectivityManager cm = context.getSystemService(ConnectivityManager.class); mWifiDetailPreferenceController = new WifiDetailPreferenceController( mAccessPoint, context.getSystemService(ConnectivityManager.class), new ConnectivityManagerWrapperImpl(cm), context, this, new Handler(Looper.getMainLooper()), // UI thread. getLifecycle(), context.getSystemService(WifiManager.class)); Loading