Loading res/layout/connection_detail_pref.xmldeleted 100644 → 0 +0 −51 Original line number Diff line number Diff line <?xml version="1.0" encoding="utf-8"?> <!-- Copyright (C) 2017 The Android Open Source Project Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/connection_detail_layout" android:background="?android:attr/colorAccent" android:layout_width="match_parent" android:layout_height="144dp" android:gravity="center_vertical" android:orientation="horizontal"> <FrameLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/ic_settings_widget_background" android:layout_marginLeft="72dp" android:elevation="2dp"> <ImageView android:id="@android:id/icon" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center"/> </FrameLayout> <TextView android:id="@android:id/title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:singleLine="false" android:paddingLeft="20dp" android:textAppearance="@android:style/TextAppearance.Material.Medium" android:textColor="@android:color/white"/> </LinearLayout> res/xml/wifi_network_details_fragment.xml +5 −4 Original line number Diff line number Diff line Loading @@ -18,10 +18,11 @@ xmlns:android="http://schemas.android.com/apk/res/android" xmlns:settings="http://schemas.android.com/apk/res/com.android.settings" > <!-- Connected Network Header --> <Preference android:key="connection_detail" android:layout="@layout/connection_detail_pref"/> <com.android.settings.applications.LayoutPreference android:key="connection_header" android:layout="@layout/settings_entity_header" android:selectable="false" android:order="-10000"/> <!-- General Details Category --> <PreferenceCategory Loading src/com/android/settings/wifi/details/WifiDetailPreferenceController.java +28 −13 Original line number Diff line number Diff line Loading @@ -27,7 +27,6 @@ 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.LinkAddress; import android.net.LinkProperties; import android.net.Network; Loading @@ -48,14 +47,17 @@ import android.text.TextUtils; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.ImageView; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.logging.nano.MetricsProto; import com.android.settings.R; import com.android.settings.Utils; import com.android.settings.applications.LayoutPreference; import com.android.settings.core.PreferenceController; import com.android.settings.core.instrumentation.MetricsFeatureProvider; import com.android.settings.vpn2.ConnectivityManagerWrapper; import com.android.settings.widget.EntityHeaderController; import com.android.settings.wifi.WifiDetailPreference; import com.android.settingslib.core.lifecycle.Lifecycle; import com.android.settingslib.core.lifecycle.LifecycleObserver; Loading @@ -67,7 +69,6 @@ import java.net.Inet4Address; import java.net.Inet6Address; import java.net.InetAddress; import java.net.UnknownHostException; import java.util.List; import java.util.StringJoiner; import java.util.stream.Collectors; Loading @@ -81,7 +82,7 @@ public class WifiDetailPreferenceController extends PreferenceController impleme private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG); @VisibleForTesting static final String KEY_CONNECTION_DETAIL_PREF = "connection_detail"; static final String KEY_HEADER = "connection_header"; @VisibleForTesting static final String KEY_BUTTONS_PREF = "buttons"; @VisibleForTesting Loading Loading @@ -116,7 +117,6 @@ public class WifiDetailPreferenceController extends PreferenceController impleme private Network mNetwork; private NetworkInfo mNetworkInfo; private NetworkCapabilities mNetworkCapabilities; private Context mPrefContext; private int mRssi; private String[] mSignalStr; private final WifiConfiguration mWifiConfig; Loading @@ -125,8 +125,8 @@ public class WifiDetailPreferenceController extends PreferenceController impleme private final MetricsFeatureProvider mMetricsFeatureProvider; // UI elements - in order of appearance private Preference mConnectionDetailPref; private LayoutPreference mButtonsPref; private EntityHeaderController mEntityHeaderController; private Button mForgetButton; private Button mSignInButton; private WifiDetailPreference mSignalStrengthPref; Loading Loading @@ -240,12 +240,10 @@ public class WifiDetailPreferenceController extends PreferenceController impleme public void displayPreference(PreferenceScreen screen) { super.displayPreference(screen); mPrefContext = screen.getPreferenceManager().getContext(); mConnectionDetailPref = screen.findPreference(KEY_CONNECTION_DETAIL_PREF); setupEntityHeader(screen); mButtonsPref = (LayoutPreference) screen.findPreference(KEY_BUTTONS_PREF); mSignInButton = (Button) mButtonsPref.findViewById(R.id.signin_button); mSignInButton = mButtonsPref.findViewById(R.id.signin_button); mSignInButton.setText(R.string.support_sign_in_button_text); mSignInButton.setOnClickListener(view -> signIntoNetwork()); Loading @@ -262,14 +260,29 @@ public class WifiDetailPreferenceController extends PreferenceController impleme mDnsPref = (WifiDetailPreference) screen.findPreference(KEY_DNS_PREF); mIpv6Category = (PreferenceCategory) screen.findPreference(KEY_IPV6_CATEGORY); mIpv6AddressPref = (Preference) screen.findPreference(KEY_IPV6_ADDRESSES_PREF); mIpv6AddressPref = screen.findPreference(KEY_IPV6_ADDRESSES_PREF); mSecurityPref.setDetailText(mAccessPoint.getSecurityString(false /* concise */)); mForgetButton = (Button) mButtonsPref.findViewById(R.id.forget_button); mForgetButton = mButtonsPref.findViewById(R.id.forget_button); mForgetButton.setText(R.string.forget); mForgetButton.setOnClickListener(view -> forgetNetwork()); } private void setupEntityHeader(PreferenceScreen screen) { LayoutPreference headerPref = (LayoutPreference) screen.findPreference(KEY_HEADER); mEntityHeaderController = EntityHeaderController.newInstance( mFragment.getActivity(), mFragment, headerPref.findViewById(R.id.entity_header)); ImageView iconView = headerPref.findViewById(R.id.entity_header_icon); iconView.setBackground( mContext.getDrawable(R.drawable.ic_settings_widget_background)); iconView.setScaleType(ImageView.ScaleType.CENTER_INSIDE); mEntityHeaderController.setLabel(mAccessPoint.getSsidStr()); } @Override public void onResume() { // Ensure mNetwork is set before any callbacks above are delivered, since our Loading Loading @@ -348,7 +361,8 @@ public class WifiDetailPreferenceController extends PreferenceController impleme private void refreshNetworkState() { mAccessPoint.update(mWifiConfig, mWifiInfo, mNetworkInfo); mConnectionDetailPref.setTitle(mAccessPoint.getSettingsSummary()); mEntityHeaderController.setSummary(mAccessPoint.getSettingsSummary()) .done(mFragment.getActivity(), true /* rebind */); } private void refreshRssiViews() { Loading @@ -357,7 +371,8 @@ public class WifiDetailPreferenceController extends PreferenceController impleme Drawable wifiIcon = NetworkBadging.getWifiIcon( iconSignalLevel, NetworkBadging.BADGING_NONE, mContext.getTheme()).mutate(); mConnectionDetailPref.setIcon(wifiIcon); wifiIcon.setTint(Utils.getColorAccent(mContext)); mEntityHeaderController.setIcon(wifiIcon).done(mFragment.getActivity(), true /* rebind */); Drawable wifiIconDark = wifiIcon.getConstantState().newDrawable().mutate(); wifiIconDark.setTint(mContext.getResources().getColor( Loading tests/robotests/src/com/android/settings/wifi/details/WifiDetailPreferenceControllerTest.java +44 −15 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ package com.android.settings.wifi.details; import static com.google.common.truth.Truth.assertThat; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.nullable; import static org.mockito.Matchers.any; import static org.mockito.Mockito.doNothing; Loading Loading @@ -52,14 +53,17 @@ import android.support.v7.preference.PreferenceScreen; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.ImageView; import com.android.internal.logging.nano.MetricsProto; import com.android.settings.R; import com.android.settings.testutils.SettingsRobolectricTestRunner; import com.android.settings.TestConfig; import com.android.settings.applications.LayoutPreference; import com.android.settings.core.instrumentation.MetricsFeatureProvider; import com.android.settings.testutils.SettingsRobolectricTestRunner; import com.android.settings.testutils.shadow.ShadowEntityHeaderController; import com.android.settings.vpn2.ConnectivityManagerWrapperImpl; import com.android.settings.widget.EntityHeaderController; import com.android.settings.wifi.WifiDetailPreference; import com.android.settingslib.core.lifecycle.Lifecycle; import com.android.settingslib.wifi.AccessPoint; Loading @@ -84,7 +88,8 @@ import java.util.List; import java.util.stream.Collectors; @RunWith(SettingsRobolectricTestRunner.class) @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION, shadows = ShadowEntityHeaderController.class) public class WifiDetailPreferenceControllerTest { private static final int LEVEL = 1; Loading @@ -108,7 +113,12 @@ public class WifiDetailPreferenceControllerTest { @Mock private WifiManager mockWifiManager; @Mock private MetricsFeatureProvider mockMetricsFeatureProvider; @Mock private Preference mockConnectionDetailPref; @Mock (answer = Answers.RETURNS_DEEP_STUBS) private EntityHeaderController mockHeaderController; @Mock (answer = Answers.RETURNS_DEEP_STUBS) private LayoutPreference mockHeaderLayoutPreference; @Mock private ImageView mockHeaderIcon; @Mock private LayoutPreference mockButtonsPref; @Mock private Button mockSignInButton; @Mock private WifiDetailPreference mockSignalStrengthPref; Loading Loading @@ -214,6 +224,12 @@ public class WifiDetailPreferenceControllerTest { when(mockFragment.getActivity()).thenReturn(mockActivity); ShadowEntityHeaderController.setUseMock(mockHeaderController); // builder pattern when(mockHeaderController.setRecyclerView(mockFragment.getListView(), mLifecycle)) .thenReturn(mockHeaderController); when(mockHeaderController.setSummary(anyString())).thenReturn(mockHeaderController); setupMockedPreferenceScreen(); mController = newWifiDetailPreferenceController(); } Loading @@ -233,8 +249,11 @@ public class WifiDetailPreferenceControllerTest { private void setupMockedPreferenceScreen() { when(mockScreen.getPreferenceManager().getContext()).thenReturn(mContext); when(mockScreen.findPreference(WifiDetailPreferenceController.KEY_CONNECTION_DETAIL_PREF)) .thenReturn(mockConnectionDetailPref); when(mockScreen.findPreference(WifiDetailPreferenceController.KEY_HEADER)) .thenReturn(mockHeaderLayoutPreference); when(mockHeaderLayoutPreference.findViewById(R.id.entity_header_icon)) .thenReturn(mockHeaderIcon); when(mockScreen.findPreference(WifiDetailPreferenceController.KEY_BUTTONS_PREF)) .thenReturn(mockButtonsPref); when(mockButtonsPref.findViewById(R.id.forget_button)) Loading Loading @@ -316,23 +335,33 @@ public class WifiDetailPreferenceControllerTest { } @Test public void connectionDetailPref_shouldHaveIconSet() { public void entityHeader_shouldHaveIconSet() { Drawable expectedIcon = NetworkBadging.getWifiIcon(LEVEL, NetworkBadging.BADGING_NONE, mContext.getTheme()); displayAndResume(); verify(mockConnectionDetailPref).setIcon(expectedIcon); verify(mockHeaderController).setIcon(expectedIcon); } @Test public void entityHeader_shouldHaveLabelSetToSsid() { String label = "ssid"; when(mockAccessPoint.getSsidStr()).thenReturn(label); displayAndResume(); verify(mockHeaderController).setLabel(label); } @Test public void connectionDetailPref_shouldHaveTitleSet() { public void entityHeader_shouldHaveSummarySet() { String summary = "summary"; when(mockAccessPoint.getSettingsSummary()).thenReturn(summary); displayAndResume(); verify(mockConnectionDetailPref).setTitle(summary); verify(mockHeaderController).setSummary(summary); } @Test Loading Loading @@ -531,33 +560,33 @@ public class WifiDetailPreferenceControllerTest { String summary = "Connected, no Internet"; when(mockAccessPoint.getSettingsSummary()).thenReturn(summary); InOrder inOrder = inOrder(mockConnectionDetailPref); InOrder inOrder = inOrder(mockHeaderController); displayAndResume(); inOrder.verify(mockConnectionDetailPref).setTitle(summary); inOrder.verify(mockHeaderController).setSummary(summary); // Check that an irrelevant capability update does not update the access point summary, as // doing so could cause unnecessary jank... summary = "Connected"; when(mockAccessPoint.getSettingsSummary()).thenReturn(summary); updateNetworkCapabilities(nc); inOrder.verify(mockConnectionDetailPref, never()).setTitle(any()); inOrder.verify(mockHeaderController, never()).setSummary(any(CharSequence.class)); // ... but that if the network validates, then we do refresh. nc.addCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED); updateNetworkCapabilities(nc); inOrder.verify(mockConnectionDetailPref).setTitle(summary); inOrder.verify(mockHeaderController).setSummary(summary); summary = "Connected, no Internet"; when(mockAccessPoint.getSettingsSummary()).thenReturn(summary); // Another irrelevant update won't cause the UI to refresh... updateNetworkCapabilities(nc); inOrder.verify(mockConnectionDetailPref, never()).setTitle(any()); inOrder.verify(mockHeaderController, never()).setSummary(any(CharSequence.class)); // ... but if the network is no longer validated, then we display "connected, no Internet". nc.removeCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED); updateNetworkCapabilities(nc); inOrder.verify(mockConnectionDetailPref).setTitle(summary); inOrder.verify(mockHeaderController).setSummary(summary); } @Test Loading Loading
res/layout/connection_detail_pref.xmldeleted 100644 → 0 +0 −51 Original line number Diff line number Diff line <?xml version="1.0" encoding="utf-8"?> <!-- Copyright (C) 2017 The Android Open Source Project Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/connection_detail_layout" android:background="?android:attr/colorAccent" android:layout_width="match_parent" android:layout_height="144dp" android:gravity="center_vertical" android:orientation="horizontal"> <FrameLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/ic_settings_widget_background" android:layout_marginLeft="72dp" android:elevation="2dp"> <ImageView android:id="@android:id/icon" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center"/> </FrameLayout> <TextView android:id="@android:id/title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:singleLine="false" android:paddingLeft="20dp" android:textAppearance="@android:style/TextAppearance.Material.Medium" android:textColor="@android:color/white"/> </LinearLayout>
res/xml/wifi_network_details_fragment.xml +5 −4 Original line number Diff line number Diff line Loading @@ -18,10 +18,11 @@ xmlns:android="http://schemas.android.com/apk/res/android" xmlns:settings="http://schemas.android.com/apk/res/com.android.settings" > <!-- Connected Network Header --> <Preference android:key="connection_detail" android:layout="@layout/connection_detail_pref"/> <com.android.settings.applications.LayoutPreference android:key="connection_header" android:layout="@layout/settings_entity_header" android:selectable="false" android:order="-10000"/> <!-- General Details Category --> <PreferenceCategory Loading
src/com/android/settings/wifi/details/WifiDetailPreferenceController.java +28 −13 Original line number Diff line number Diff line Loading @@ -27,7 +27,6 @@ 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.LinkAddress; import android.net.LinkProperties; import android.net.Network; Loading @@ -48,14 +47,17 @@ import android.text.TextUtils; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.ImageView; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.logging.nano.MetricsProto; import com.android.settings.R; import com.android.settings.Utils; import com.android.settings.applications.LayoutPreference; import com.android.settings.core.PreferenceController; import com.android.settings.core.instrumentation.MetricsFeatureProvider; import com.android.settings.vpn2.ConnectivityManagerWrapper; import com.android.settings.widget.EntityHeaderController; import com.android.settings.wifi.WifiDetailPreference; import com.android.settingslib.core.lifecycle.Lifecycle; import com.android.settingslib.core.lifecycle.LifecycleObserver; Loading @@ -67,7 +69,6 @@ import java.net.Inet4Address; import java.net.Inet6Address; import java.net.InetAddress; import java.net.UnknownHostException; import java.util.List; import java.util.StringJoiner; import java.util.stream.Collectors; Loading @@ -81,7 +82,7 @@ public class WifiDetailPreferenceController extends PreferenceController impleme private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG); @VisibleForTesting static final String KEY_CONNECTION_DETAIL_PREF = "connection_detail"; static final String KEY_HEADER = "connection_header"; @VisibleForTesting static final String KEY_BUTTONS_PREF = "buttons"; @VisibleForTesting Loading Loading @@ -116,7 +117,6 @@ public class WifiDetailPreferenceController extends PreferenceController impleme private Network mNetwork; private NetworkInfo mNetworkInfo; private NetworkCapabilities mNetworkCapabilities; private Context mPrefContext; private int mRssi; private String[] mSignalStr; private final WifiConfiguration mWifiConfig; Loading @@ -125,8 +125,8 @@ public class WifiDetailPreferenceController extends PreferenceController impleme private final MetricsFeatureProvider mMetricsFeatureProvider; // UI elements - in order of appearance private Preference mConnectionDetailPref; private LayoutPreference mButtonsPref; private EntityHeaderController mEntityHeaderController; private Button mForgetButton; private Button mSignInButton; private WifiDetailPreference mSignalStrengthPref; Loading Loading @@ -240,12 +240,10 @@ public class WifiDetailPreferenceController extends PreferenceController impleme public void displayPreference(PreferenceScreen screen) { super.displayPreference(screen); mPrefContext = screen.getPreferenceManager().getContext(); mConnectionDetailPref = screen.findPreference(KEY_CONNECTION_DETAIL_PREF); setupEntityHeader(screen); mButtonsPref = (LayoutPreference) screen.findPreference(KEY_BUTTONS_PREF); mSignInButton = (Button) mButtonsPref.findViewById(R.id.signin_button); mSignInButton = mButtonsPref.findViewById(R.id.signin_button); mSignInButton.setText(R.string.support_sign_in_button_text); mSignInButton.setOnClickListener(view -> signIntoNetwork()); Loading @@ -262,14 +260,29 @@ public class WifiDetailPreferenceController extends PreferenceController impleme mDnsPref = (WifiDetailPreference) screen.findPreference(KEY_DNS_PREF); mIpv6Category = (PreferenceCategory) screen.findPreference(KEY_IPV6_CATEGORY); mIpv6AddressPref = (Preference) screen.findPreference(KEY_IPV6_ADDRESSES_PREF); mIpv6AddressPref = screen.findPreference(KEY_IPV6_ADDRESSES_PREF); mSecurityPref.setDetailText(mAccessPoint.getSecurityString(false /* concise */)); mForgetButton = (Button) mButtonsPref.findViewById(R.id.forget_button); mForgetButton = mButtonsPref.findViewById(R.id.forget_button); mForgetButton.setText(R.string.forget); mForgetButton.setOnClickListener(view -> forgetNetwork()); } private void setupEntityHeader(PreferenceScreen screen) { LayoutPreference headerPref = (LayoutPreference) screen.findPreference(KEY_HEADER); mEntityHeaderController = EntityHeaderController.newInstance( mFragment.getActivity(), mFragment, headerPref.findViewById(R.id.entity_header)); ImageView iconView = headerPref.findViewById(R.id.entity_header_icon); iconView.setBackground( mContext.getDrawable(R.drawable.ic_settings_widget_background)); iconView.setScaleType(ImageView.ScaleType.CENTER_INSIDE); mEntityHeaderController.setLabel(mAccessPoint.getSsidStr()); } @Override public void onResume() { // Ensure mNetwork is set before any callbacks above are delivered, since our Loading Loading @@ -348,7 +361,8 @@ public class WifiDetailPreferenceController extends PreferenceController impleme private void refreshNetworkState() { mAccessPoint.update(mWifiConfig, mWifiInfo, mNetworkInfo); mConnectionDetailPref.setTitle(mAccessPoint.getSettingsSummary()); mEntityHeaderController.setSummary(mAccessPoint.getSettingsSummary()) .done(mFragment.getActivity(), true /* rebind */); } private void refreshRssiViews() { Loading @@ -357,7 +371,8 @@ public class WifiDetailPreferenceController extends PreferenceController impleme Drawable wifiIcon = NetworkBadging.getWifiIcon( iconSignalLevel, NetworkBadging.BADGING_NONE, mContext.getTheme()).mutate(); mConnectionDetailPref.setIcon(wifiIcon); wifiIcon.setTint(Utils.getColorAccent(mContext)); mEntityHeaderController.setIcon(wifiIcon).done(mFragment.getActivity(), true /* rebind */); Drawable wifiIconDark = wifiIcon.getConstantState().newDrawable().mutate(); wifiIconDark.setTint(mContext.getResources().getColor( Loading
tests/robotests/src/com/android/settings/wifi/details/WifiDetailPreferenceControllerTest.java +44 −15 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ package com.android.settings.wifi.details; import static com.google.common.truth.Truth.assertThat; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.nullable; import static org.mockito.Matchers.any; import static org.mockito.Mockito.doNothing; Loading Loading @@ -52,14 +53,17 @@ import android.support.v7.preference.PreferenceScreen; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.ImageView; import com.android.internal.logging.nano.MetricsProto; import com.android.settings.R; import com.android.settings.testutils.SettingsRobolectricTestRunner; import com.android.settings.TestConfig; import com.android.settings.applications.LayoutPreference; import com.android.settings.core.instrumentation.MetricsFeatureProvider; import com.android.settings.testutils.SettingsRobolectricTestRunner; import com.android.settings.testutils.shadow.ShadowEntityHeaderController; import com.android.settings.vpn2.ConnectivityManagerWrapperImpl; import com.android.settings.widget.EntityHeaderController; import com.android.settings.wifi.WifiDetailPreference; import com.android.settingslib.core.lifecycle.Lifecycle; import com.android.settingslib.wifi.AccessPoint; Loading @@ -84,7 +88,8 @@ import java.util.List; import java.util.stream.Collectors; @RunWith(SettingsRobolectricTestRunner.class) @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION, shadows = ShadowEntityHeaderController.class) public class WifiDetailPreferenceControllerTest { private static final int LEVEL = 1; Loading @@ -108,7 +113,12 @@ public class WifiDetailPreferenceControllerTest { @Mock private WifiManager mockWifiManager; @Mock private MetricsFeatureProvider mockMetricsFeatureProvider; @Mock private Preference mockConnectionDetailPref; @Mock (answer = Answers.RETURNS_DEEP_STUBS) private EntityHeaderController mockHeaderController; @Mock (answer = Answers.RETURNS_DEEP_STUBS) private LayoutPreference mockHeaderLayoutPreference; @Mock private ImageView mockHeaderIcon; @Mock private LayoutPreference mockButtonsPref; @Mock private Button mockSignInButton; @Mock private WifiDetailPreference mockSignalStrengthPref; Loading Loading @@ -214,6 +224,12 @@ public class WifiDetailPreferenceControllerTest { when(mockFragment.getActivity()).thenReturn(mockActivity); ShadowEntityHeaderController.setUseMock(mockHeaderController); // builder pattern when(mockHeaderController.setRecyclerView(mockFragment.getListView(), mLifecycle)) .thenReturn(mockHeaderController); when(mockHeaderController.setSummary(anyString())).thenReturn(mockHeaderController); setupMockedPreferenceScreen(); mController = newWifiDetailPreferenceController(); } Loading @@ -233,8 +249,11 @@ public class WifiDetailPreferenceControllerTest { private void setupMockedPreferenceScreen() { when(mockScreen.getPreferenceManager().getContext()).thenReturn(mContext); when(mockScreen.findPreference(WifiDetailPreferenceController.KEY_CONNECTION_DETAIL_PREF)) .thenReturn(mockConnectionDetailPref); when(mockScreen.findPreference(WifiDetailPreferenceController.KEY_HEADER)) .thenReturn(mockHeaderLayoutPreference); when(mockHeaderLayoutPreference.findViewById(R.id.entity_header_icon)) .thenReturn(mockHeaderIcon); when(mockScreen.findPreference(WifiDetailPreferenceController.KEY_BUTTONS_PREF)) .thenReturn(mockButtonsPref); when(mockButtonsPref.findViewById(R.id.forget_button)) Loading Loading @@ -316,23 +335,33 @@ public class WifiDetailPreferenceControllerTest { } @Test public void connectionDetailPref_shouldHaveIconSet() { public void entityHeader_shouldHaveIconSet() { Drawable expectedIcon = NetworkBadging.getWifiIcon(LEVEL, NetworkBadging.BADGING_NONE, mContext.getTheme()); displayAndResume(); verify(mockConnectionDetailPref).setIcon(expectedIcon); verify(mockHeaderController).setIcon(expectedIcon); } @Test public void entityHeader_shouldHaveLabelSetToSsid() { String label = "ssid"; when(mockAccessPoint.getSsidStr()).thenReturn(label); displayAndResume(); verify(mockHeaderController).setLabel(label); } @Test public void connectionDetailPref_shouldHaveTitleSet() { public void entityHeader_shouldHaveSummarySet() { String summary = "summary"; when(mockAccessPoint.getSettingsSummary()).thenReturn(summary); displayAndResume(); verify(mockConnectionDetailPref).setTitle(summary); verify(mockHeaderController).setSummary(summary); } @Test Loading Loading @@ -531,33 +560,33 @@ public class WifiDetailPreferenceControllerTest { String summary = "Connected, no Internet"; when(mockAccessPoint.getSettingsSummary()).thenReturn(summary); InOrder inOrder = inOrder(mockConnectionDetailPref); InOrder inOrder = inOrder(mockHeaderController); displayAndResume(); inOrder.verify(mockConnectionDetailPref).setTitle(summary); inOrder.verify(mockHeaderController).setSummary(summary); // Check that an irrelevant capability update does not update the access point summary, as // doing so could cause unnecessary jank... summary = "Connected"; when(mockAccessPoint.getSettingsSummary()).thenReturn(summary); updateNetworkCapabilities(nc); inOrder.verify(mockConnectionDetailPref, never()).setTitle(any()); inOrder.verify(mockHeaderController, never()).setSummary(any(CharSequence.class)); // ... but that if the network validates, then we do refresh. nc.addCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED); updateNetworkCapabilities(nc); inOrder.verify(mockConnectionDetailPref).setTitle(summary); inOrder.verify(mockHeaderController).setSummary(summary); summary = "Connected, no Internet"; when(mockAccessPoint.getSettingsSummary()).thenReturn(summary); // Another irrelevant update won't cause the UI to refresh... updateNetworkCapabilities(nc); inOrder.verify(mockConnectionDetailPref, never()).setTitle(any()); inOrder.verify(mockHeaderController, never()).setSummary(any(CharSequence.class)); // ... but if the network is no longer validated, then we display "connected, no Internet". nc.removeCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED); updateNetworkCapabilities(nc); inOrder.verify(mockConnectionDetailPref).setTitle(summary); inOrder.verify(mockHeaderController).setSummary(summary); } @Test Loading