diff --git a/res/layout/connection_detail_pref.xml b/res/layout/connection_detail_pref.xml
deleted file mode 100644
index 182f2cb9ef6..00000000000
--- a/res/layout/connection_detail_pref.xml
+++ /dev/null
@@ -1,51 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/res/xml/wifi_network_details_fragment.xml b/res/xml/wifi_network_details_fragment.xml
index f9926cafd28..64e61b196b5 100644
--- a/res/xml/wifi_network_details_fragment.xml
+++ b/res/xml/wifi_network_details_fragment.xml
@@ -18,10 +18,11 @@
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:settings="http://schemas.android.com/apk/res/com.android.settings" >
-
-
+
signIntoNetwork());
@@ -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
@@ -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() {
@@ -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(
diff --git a/tests/robotests/src/com/android/settings/wifi/details/WifiDetailPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/wifi/details/WifiDetailPreferenceControllerTest.java
index d4c64022f7c..dc360e857aa 100644
--- a/tests/robotests/src/com/android/settings/wifi/details/WifiDetailPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/wifi/details/WifiDetailPreferenceControllerTest.java
@@ -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;
@@ -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;
@@ -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;
@@ -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;
@@ -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();
}
@@ -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))
@@ -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 connectionDetailPref_shouldHaveTitleSet() {
+ public void entityHeader_shouldHaveLabelSetToSsid() {
+ String label = "ssid";
+ when(mockAccessPoint.getSsidStr()).thenReturn(label);
+
+ displayAndResume();
+
+ verify(mockHeaderController).setLabel(label);
+ }
+
+ @Test
+ public void entityHeader_shouldHaveSummarySet() {
String summary = "summary";
when(mockAccessPoint.getSettingsSummary()).thenReturn(summary);
displayAndResume();
- verify(mockConnectionDetailPref).setTitle(summary);
+ verify(mockHeaderController).setSummary(summary);
}
@Test
@@ -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