From 96dc235f6e2ce102de0d4e6adb2dafb83a1699d9 Mon Sep 17 00:00:00 2001 From: Ben Lin Date: Fri, 20 Jul 2018 12:36:42 -0700 Subject: [PATCH] Check for WiFi controller for summary population. WiFiController might return not available, so we should only surface "Wi-Fi" as a summary entry if it's available in the settings page. This also checks for empty strings in case they are declared as such in the XML (since XML can be device/product overlay'd), to avoid situations such as ", data usage". Bug: 111398942 Test: Manual check, and I see Wi-Fi no longer visible for cases where Wifi controller isn't available. Test: make RunSettingsRoboTests Change-Id: I24736a6240c50e2ea38ce424fbac2316721290d8 --- .../settings/network/NetworkDashboardFragment.java | 36 ++++++++++++++-------- .../network/NetworkDashboardFragmentTest.java | 13 ++++++-- 2 files changed, 35 insertions(+), 14 deletions(-) diff --git a/src/com/android/settings/network/NetworkDashboardFragment.java b/src/com/android/settings/network/NetworkDashboardFragment.java index 27e1a98aa7..d5ef9aa050 100644 --- a/src/com/android/settings/network/NetworkDashboardFragment.java +++ b/src/com/android/settings/network/NetworkDashboardFragment.java @@ -24,6 +24,7 @@ import android.content.Context; import android.icu.text.ListFormatter; import android.provider.SearchIndexableResource; import android.text.BidiFormatter; +import android.text.TextUtils; import android.util.Log; import com.android.internal.logging.nano.MetricsProto; @@ -153,21 +154,25 @@ public class NetworkDashboardFragment extends DashboardFragment implements private final Context mContext; private final SummaryLoader mSummaryLoader; + private final WifiMasterSwitchPreferenceController mWifiPreferenceController; private final MobileNetworkPreferenceController mMobileNetworkPreferenceController; private final TetherPreferenceController mTetherPreferenceController; public SummaryProvider(Context context, SummaryLoader summaryLoader) { this(context, summaryLoader, + new WifiMasterSwitchPreferenceController(context, null), new MobileNetworkPreferenceController(context), new TetherPreferenceController(context, null /* lifecycle */)); } @VisibleForTesting(otherwise = VisibleForTesting.NONE) SummaryProvider(Context context, SummaryLoader summaryLoader, + WifiMasterSwitchPreferenceController wifiPreferenceController, MobileNetworkPreferenceController mobileNetworkPreferenceController, TetherPreferenceController tetherPreferenceController) { mContext = context; mSummaryLoader = summaryLoader; + mWifiPreferenceController = wifiPreferenceController; mMobileNetworkPreferenceController = mobileNetworkPreferenceController; mTetherPreferenceController = tetherPreferenceController; } @@ -176,20 +181,27 @@ public class NetworkDashboardFragment extends DashboardFragment implements @Override public void setListening(boolean listening) { if (listening) { - final List summaries = new ArrayList<>(); + final String wifiSummary = BidiFormatter.getInstance() + .unicodeWrap(mContext.getString(R.string.wifi_settings_title)); + final String mobileSummary = mContext.getString( + R.string.network_dashboard_summary_mobile); + final String dataUsageSummary = mContext.getString( + R.string.network_dashboard_summary_data_usage); + final String hotspotSummary = mContext.getString( + R.string.network_dashboard_summary_hotspot); - summaries.add(BidiFormatter.getInstance() - .unicodeWrap(mContext.getString(R.string.wifi_settings_title))); - if (mMobileNetworkPreferenceController.isAvailable()) { - summaries.add(mContext.getString( - R.string.network_dashboard_summary_mobile)); + final List summaries = new ArrayList<>(); + if (mWifiPreferenceController.isAvailable() && !TextUtils.isEmpty(wifiSummary)) { + summaries.add(wifiSummary); + } + if (mMobileNetworkPreferenceController.isAvailable() && !TextUtils.isEmpty(mobileSummary)) { + summaries.add(mobileSummary); + } + if (!TextUtils.isEmpty(dataUsageSummary)) { + summaries.add(dataUsageSummary); } - final String dataUsageSettingSummary = mContext.getString( - R.string.network_dashboard_summary_data_usage); - summaries.add(dataUsageSettingSummary); - if (mTetherPreferenceController.isAvailable()) { - summaries.add(mContext.getString( - R.string.network_dashboard_summary_hotspot)); + if (mTetherPreferenceController.isAvailable() && !TextUtils.isEmpty(hotspotSummary)) { + summaries.add(hotspotSummary); } mSummaryLoader.setSummary(this, ListFormatter.getInstance().format(summaries)); } diff --git a/tests/robotests/src/com/android/settings/network/NetworkDashboardFragmentTest.java b/tests/robotests/src/com/android/settings/network/NetworkDashboardFragmentTest.java index 187f0dc288..d6310ab3db 100644 --- a/tests/robotests/src/com/android/settings/network/NetworkDashboardFragmentTest.java +++ b/tests/robotests/src/com/android/settings/network/NetworkDashboardFragmentTest.java @@ -26,6 +26,7 @@ import android.provider.SearchIndexableResource; import com.android.settings.dashboard.SummaryLoader; import com.android.settings.testutils.SettingsRobolectricTestRunner; +import com.android.settings.wifi.WifiMasterSwitchPreferenceController; import com.android.settingslib.drawer.CategoryKey; import org.junit.Before; @@ -66,6 +67,8 @@ public class NetworkDashboardFragmentTest { @Test public void summaryProviderSetListening_hasMobileAndHotspot_shouldReturnMobileSummary() { + final WifiMasterSwitchPreferenceController wifiPreferenceController = + mock(WifiMasterSwitchPreferenceController.class); final MobileNetworkPreferenceController mobileNetworkPreferenceController = mock(MobileNetworkPreferenceController.class); final TetherPreferenceController tetherPreferenceController = @@ -74,12 +77,14 @@ public class NetworkDashboardFragmentTest { final SummaryLoader summaryLoader = mock(SummaryLoader.class); final SummaryLoader.SummaryProvider provider = new NetworkDashboardFragment.SummaryProvider(mContext, summaryLoader, - mobileNetworkPreferenceController, tetherPreferenceController); + wifiPreferenceController, mobileNetworkPreferenceController, + tetherPreferenceController); provider.setListening(false); verifyZeroInteractions(summaryLoader); + when(wifiPreferenceController.isAvailable()).thenReturn(true); when(mobileNetworkPreferenceController.isAvailable()).thenReturn(true); when(tetherPreferenceController.isAvailable()).thenReturn(true); @@ -90,6 +95,8 @@ public class NetworkDashboardFragmentTest { @Test public void summaryProviderSetListening_noMobileOrHotspot_shouldReturnSimpleSummary() { + final WifiMasterSwitchPreferenceController wifiPreferenceController = + mock(WifiMasterSwitchPreferenceController.class); final MobileNetworkPreferenceController mobileNetworkPreferenceController = mock(MobileNetworkPreferenceController.class); final TetherPreferenceController tetherPreferenceController = @@ -98,12 +105,14 @@ public class NetworkDashboardFragmentTest { final SummaryLoader summaryLoader = mock(SummaryLoader.class); final SummaryLoader.SummaryProvider provider = new NetworkDashboardFragment.SummaryProvider(mContext, summaryLoader, - mobileNetworkPreferenceController, tetherPreferenceController); + wifiPreferenceController, mobileNetworkPreferenceController, + tetherPreferenceController); provider.setListening(false); verifyZeroInteractions(summaryLoader); + when(wifiPreferenceController.isAvailable()).thenReturn(true); when(mobileNetworkPreferenceController.isAvailable()).thenReturn(false); when(tetherPreferenceController.isAvailable()).thenReturn(false); -- 2.11.0