From 4fec12cbbf290f0cf24060379ef134745ee19901 Mon Sep 17 00:00:00 2001 From: Lei Yu Date: Thu, 17 May 2018 12:32:02 -0700 Subject: [PATCH] Fix tethering summary when airplane mode is off When airplane mode is off, fall back to default summary (tether off summary). It should be fine because once tether state get updated again, it will go through original listener to update the summary. Change-Id: Iba9b56f452e72365ea964d841ee156a2625c0ae1 Fixes: 79721162 Test: RunSettingsRoboTests --- .../tether/WifiTetherPreferenceController.java | 9 ++++++++- .../WifiTetherPreferenceControllerTest.java | 17 ++++++++++++++++- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/src/com/android/settings/wifi/tether/WifiTetherPreferenceController.java b/src/com/android/settings/wifi/tether/WifiTetherPreferenceController.java index 1d9d3cd3cc5..9764a454719 100644 --- a/src/com/android/settings/wifi/tether/WifiTetherPreferenceController.java +++ b/src/com/android/settings/wifi/tether/WifiTetherPreferenceController.java @@ -44,6 +44,7 @@ public class WifiTetherPreferenceController extends AbstractPreferenceController private static final String WIFI_TETHER_SETTINGS = "wifi_tether"; private static final IntentFilter AIRPLANE_INTENT_FILTER = new IntentFilter( Intent.ACTION_AIRPLANE_MODE_CHANGED); + private static final int ID_NULL = -1; private final ConnectivityManager mConnectivityManager; private final String[] mWifiRegexs; @@ -152,7 +153,7 @@ public class WifiTetherPreferenceController extends AbstractPreferenceController public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (Intent.ACTION_AIRPLANE_MODE_CHANGED.equals(action)) { - clearSummaryForAirplaneMode(); + clearSummaryForAirplaneMode(R.string.wifi_hotspot_off_subtext); } } }; @@ -194,10 +195,16 @@ public class WifiTetherPreferenceController extends AbstractPreferenceController } private void clearSummaryForAirplaneMode() { + clearSummaryForAirplaneMode(ID_NULL); + } + + private void clearSummaryForAirplaneMode(int defaultId) { boolean isAirplaneMode = Settings.Global.getInt(mContext.getContentResolver(), Settings.Global.AIRPLANE_MODE_ON, 0) != 0; if (isAirplaneMode) { mPreference.setSummary(R.string.wifi_tether_disabled_by_airplane); + } else if (defaultId != ID_NULL){ + mPreference.setSummary(defaultId); } } // diff --git a/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherPreferenceControllerTest.java index b5d0f9dba54..149cd225072 100644 --- a/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherPreferenceControllerTest.java @@ -123,7 +123,7 @@ public class WifiTetherPreferenceControllerTest { } @Test - public void testReceiver_goingToAirplaneMode_shouldClearPreferenceSummary() { + public void testReceiver_turnOnAirplaneMode_clearPreferenceSummary() { final ContentResolver cr = mock(ContentResolver.class); when(mContext.getContentResolver()).thenReturn(cr); Settings.Global.putInt(cr, Settings.Global.AIRPLANE_MODE_ON, 1); @@ -137,6 +137,21 @@ public class WifiTetherPreferenceControllerTest { "Unavailable because airplane mode is turned on"); } + @Test + public void testReceiver_turnOffAirplaneMode_displayOffSummary() { + final ContentResolver cr = mock(ContentResolver.class); + when(mContext.getContentResolver()).thenReturn(cr); + Settings.Global.putInt(cr, Settings.Global.AIRPLANE_MODE_ON, 0); + mController.displayPreference(mScreen); + final BroadcastReceiver receiver = ReflectionHelpers.getField(mController, "mReceiver"); + final Intent broadcast = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED); + + receiver.onReceive(RuntimeEnvironment.application, broadcast); + + assertThat(mPreference.getSummary().toString()).isEqualTo( + "Not sharing internet or content with other devices"); + } + @Test public void testHandleWifiApStateChanged_stateEnabling_showEnablingSummary() { mController.handleWifiApStateChanged(WifiManager.WIFI_AP_STATE_ENABLING, 0 /* reason */);