From 565d44c4f8dbd8ae5987b213d904e44bdf02ecdd Mon Sep 17 00:00:00 2001 From: changbetty Date: Wed, 13 Oct 2021 12:55:07 +0000 Subject: [PATCH 1/5] Add String for information about Wi-Fi scanning when Wi-Fi is off. Bug: 202323013 Test: make Change-Id: I22618a57bfecd02508f2d4a53ff6c65071de2fd1 (cherry picked from commit b7509a307947791baf6914672e75862e35b773f3) --- res/values/strings.xml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/res/values/strings.xml b/res/values/strings.xml index 594de34ae15..c4609fb1f5c 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -13400,6 +13400,9 @@ SMS mobile data + + To improve device experience, apps and services can still scan for Wi\u2011Fi networks at any time, even when Wi\u2011Fi is off. This can be used, for example, to improve location-based features and services. You can change this in Wi\u2011Fi scanning settings. Change From ba67825a5455d122658493a1410d65e1c7a2e5ff Mon Sep 17 00:00:00 2001 From: Weng Su Date: Wed, 13 Oct 2021 23:08:50 +0800 Subject: [PATCH 2/5] Add WIFI_SCANNING_SETTINGS action to Settings - Export the interface for System UI to launch Wi-Fi Scanning Settings. Bug: 202323013 Test: manual test by adb to launch Wi-Fi scanning settings below adb shell am start -a android.settings.WIFI_SCANNING_SETTINGS Change-Id: I893d3cea40d1f3ed4a962009416f54c99a91e11f (cherry picked from commit 9e6966d1c275e4c3e4cd0dd5b8ba2e7d56d27fde) --- AndroidManifest.xml | 17 +++++++++++++++++ src/com/android/settings/Settings.java | 1 + .../settings/core/gateway/SettingsGateway.java | 2 ++ 3 files changed, 20 insertions(+) diff --git a/AndroidManifest.xml b/AndroidManifest.xml index fb3d7014471..de85af307d0 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -1397,6 +1397,23 @@ android:value="true" /> + + + + + + + + + Date: Tue, 12 Oct 2021 19:43:16 +0800 Subject: [PATCH 3/5] [Settings] Crash when resetting downloaded eSIM Context need to be maintained when performing async operation in background thread. Bug: 202787946 Test: local Change-Id: Ia5b81ae66e9482b10df5133b2f1444fc007a78e8 (cherry picked from commit 8aa98d63fd7af3c7e347c226270f942db92038cc) (cherry picked from commit 21f7095b3a3df98f8445691a7bd98bd67e2820b2) --- .../network/EraseEuiccDataDialogFragment.java | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/com/android/settings/network/EraseEuiccDataDialogFragment.java b/src/com/android/settings/network/EraseEuiccDataDialogFragment.java index 819d3b1fc6e..2c3847c9f2b 100644 --- a/src/com/android/settings/network/EraseEuiccDataDialogFragment.java +++ b/src/com/android/settings/network/EraseEuiccDataDialogFragment.java @@ -19,6 +19,7 @@ package com.android.settings.network; import android.app.AlertDialog; import android.app.Dialog; import android.app.settings.SettingsEnums; +import android.content.Context; import android.content.DialogInterface; import android.os.AsyncTask; import android.os.Bundle; @@ -75,23 +76,24 @@ public class EraseEuiccDataDialogFragment extends InstrumentedDialogFragment imp } if (which == DialogInterface.BUTTON_POSITIVE) { - if (ConfirmationSimDeletionPredicate.getSingleton().test(getContext())) { + Context context = getContext(); + if (ConfirmationSimDeletionPredicate.getSingleton().test(context)) { // Create a "verify it's you" verification over keyguard // when "erase" button been pressed. // This might protect from erasing by some automation process. - WifiDppUtils.showLockScreen(getContext(), () -> runAsyncWipe()); + WifiDppUtils.showLockScreen(context, () -> runAsyncWipe(context)); } else { - runAsyncWipe(); + runAsyncWipe(context); } } } - private void runAsyncWipe() { + private void runAsyncWipe(Context context) { AsyncTask.execute(new Runnable() { @Override public void run() { RecoverySystem.wipeEuiccData( - getContext(), PACKAGE_NAME_EUICC_DATA_MANAGEMENT_CALLBACK); + context, PACKAGE_NAME_EUICC_DATA_MANAGEMENT_CALLBACK); } }); } From 435c3385f610d110605c624208665cf4c54d12bf Mon Sep 17 00:00:00 2001 From: changbetty Date: Wed, 13 Oct 2021 15:13:36 +0000 Subject: [PATCH 4/5] For Internet Picker - Information about Wi-Fi scanning when Wi-Fi is off Bug: 202323013 Test: manual test Test: make RunSettingsRoboTests ROBOTEST_FILTER=NetworkProviderSettingsTest Change-Id: I4a26ec43bb7e1758b8170a7ff9fa7d5846cb4a35 (cherry picked from commit bfd3020038bd9351c5d9ff4aedbc30b8dd3cf1cd) --- res/xml/network_provider_settings.xml | 6 +++ .../network/NetworkProviderSettings.java | 37 +++++++++++++++++++ .../network/NetworkProviderSettingsTest.java | 31 ++++++++++++++++ 3 files changed, 74 insertions(+) diff --git a/res/xml/network_provider_settings.xml b/res/xml/network_provider_settings.xml index 9cab9241534..2d211b5fc85 100644 --- a/res/xml/network_provider_settings.xml +++ b/res/xml/network_provider_settings.xml @@ -81,4 +81,10 @@ + + diff --git a/src/com/android/settings/network/NetworkProviderSettings.java b/src/com/android/settings/network/NetworkProviderSettings.java index 88211ad17ed..8a4929a591b 100644 --- a/src/com/android/settings/network/NetworkProviderSettings.java +++ b/src/com/android/settings/network/NetworkProviderSettings.java @@ -61,7 +61,9 @@ import com.android.settings.core.FeatureFlags; import com.android.settings.core.SubSettingLauncher; import com.android.settings.datausage.DataUsagePreference; import com.android.settings.datausage.DataUsageUtils; +import com.android.settings.location.WifiScanningFragment; import com.android.settings.search.BaseSearchIndexProvider; +import com.android.settings.utils.AnnotationSpan; import com.android.settings.wifi.AddNetworkFragment; import com.android.settings.wifi.AddWifiNetworkPreference; import com.android.settings.wifi.ConfigureWifiEntryFragment; @@ -79,6 +81,7 @@ import com.android.settingslib.RestrictedLockUtilsInternal; import com.android.settingslib.search.Indexable; import com.android.settingslib.search.SearchIndexable; import com.android.settingslib.utils.ThreadUtils; +import com.android.settingslib.widget.FooterPreference; import com.android.settingslib.widget.LayoutPreference; import com.android.settingslib.wifi.LongPressWifiEntryPreference; import com.android.settingslib.wifi.WifiSavedConfigUtils; @@ -132,6 +135,7 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment @VisibleForTesting static final String PREF_KEY_DATA_USAGE = "non_carrier_data_usage"; private static final String PREF_KEY_RESET_INTERNET = "resetting_your_internet"; + private static final String PREF_KEY_WIFI_STATUS_MESSAGE = "wifi_status_message_footer"; private static final int REQUEST_CODE_WIFI_DPP_ENROLLEE_QR_CODE_SCANNER = 0; @@ -231,6 +235,8 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment LayoutPreference mResetInternetPreference; @VisibleForTesting ConnectedEthernetNetworkController mConnectedEthernetNetworkController; + @VisibleForTesting + FooterPreference mWifiStatusMessagePreference; /** * Mobile networks list for provider model @@ -305,6 +311,7 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment addNetworkMobileProviderController(); addConnectedEthernetNetworkController(); addWifiSwitchPreferenceController(); + mWifiStatusMessagePreference = findPreference(PREF_KEY_WIFI_STATUS_MESSAGE); } private void updateAirplaneModeMsgPreference(boolean visible) { @@ -717,6 +724,7 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment switch (wifiState) { case WifiManager.WIFI_STATE_ENABLED: + setWifiScanMessage(/* isWifiEnabled */ true); updateWifiEntryPreferences(); break; @@ -732,6 +740,7 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment break; case WifiManager.WIFI_STATE_DISABLED: + setWifiScanMessage(/* isWifiEnabled */ false); removeConnectedWifiEntryPreference(); removeWifiEntryPreference(); setAdditionalSettingsSummaries(); @@ -741,6 +750,34 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment } } + @VisibleForTesting + void setWifiScanMessage(boolean isWifiEnabled) { + final Context context = getContext(); + if (context == null) { + return; + } + if (isWifiEnabled || !mWifiManager.isScanAlwaysAvailable()) { + mWifiStatusMessagePreference.setVisible(false); + return; + } + if (TextUtils.isEmpty(mWifiStatusMessagePreference.getTitle())) { + AnnotationSpan.LinkInfo info = new AnnotationSpan.LinkInfo( + AnnotationSpan.LinkInfo.DEFAULT_ANNOTATION, + v -> launchWifiScanningFragment()); + CharSequence text = AnnotationSpan.linkify( + context.getText(R.string.wifi_scan_notify_message), info); + mWifiStatusMessagePreference.setTitle(text); + } + mWifiStatusMessagePreference.setVisible(true); + } + + private void launchWifiScanningFragment() { + new SubSettingLauncher(getContext()) + .setDestination(WifiScanningFragment.class.getName()) + .setSourceMetricsCategory(SettingsEnums.SETTINGS_NETWORK_CATEGORY) + .launch(); + } + @Override public void onWifiEntriesChanged() { if (mIsWifiEntryListStale) { diff --git a/tests/robotests/src/com/android/settings/network/NetworkProviderSettingsTest.java b/tests/robotests/src/com/android/settings/network/NetworkProviderSettingsTest.java index 19b044b7abf..e048849ae9c 100644 --- a/tests/robotests/src/com/android/settings/network/NetworkProviderSettingsTest.java +++ b/tests/robotests/src/com/android/settings/network/NetworkProviderSettingsTest.java @@ -67,6 +67,7 @@ import com.android.settings.wifi.AddWifiNetworkPreference; import com.android.settings.wifi.ConnectedWifiEntryPreference; import com.android.settings.wifi.WifiConfigController2; import com.android.settings.wifi.WifiDialog2; +import com.android.settingslib.widget.FooterPreference; import com.android.settingslib.widget.LayoutPreference; import com.android.settingslib.wifi.LongPressWifiEntryPreference; import com.android.wifitrackerlib.WifiEntry; @@ -144,6 +145,7 @@ public class NetworkProviderSettingsTest { mNetworkProviderSettings.mAirplaneModeMsgPreference = mAirplaneModeMsgPreference; mNetworkProviderSettings.mAirplaneModeEnabler = mAirplaneModeEnabler; mNetworkProviderSettings.mInternetUpdater = mInternetUpdater; + mNetworkProviderSettings.mWifiStatusMessagePreference = new FooterPreference(mContext); doReturn(NetworkProviderSettings.PREF_KEY_CONNECTED_ACCESS_POINTS) .when(mConnectedWifiEntryPreferenceCategory).getKey(); mNetworkProviderSettings.mConnectedWifiEntryPreferenceCategory = @@ -531,6 +533,35 @@ public class NetworkProviderSettingsTest { verify(mNetworkProviderSettings.mWifiEntryPreferenceCategory, never()).setVisible(true); } + @Test + public void setWifiScanMessage_wifiOnScanOn_footerIsInvisible() { + when(mWifiManager.isScanAlwaysAvailable()).thenReturn(true); + + mNetworkProviderSettings.setWifiScanMessage(/* isWifiEnabled */ true); + + assertThat(mNetworkProviderSettings.mWifiStatusMessagePreference.isVisible()).isFalse(); + } + + @Test + public void setWifiScanMessage_wifiOffScanOn_footerIsVisible() { + when(mWifiManager.isScanAlwaysAvailable()).thenReturn(true); + + mNetworkProviderSettings.setWifiScanMessage(/* isWifiEnabled */ false); + + assertThat(mNetworkProviderSettings.mWifiStatusMessagePreference.isVisible()).isTrue(); + assertThat(mNetworkProviderSettings.mWifiStatusMessagePreference.getTitle().length()) + .isNotEqualTo(0); + } + + @Test + public void setWifiScanMessage_wifiOffScanOff_footerIsInvisible() { + when(mWifiManager.isScanAlwaysAvailable()).thenReturn(false); + + mNetworkProviderSettings.setWifiScanMessage(/* isWifiEnabled */ false); + + assertThat(mNetworkProviderSettings.mWifiStatusMessagePreference.isVisible()).isFalse(); + } + @Test @Config(shadows = ShadowPreferenceFragmentCompat.class) public void onStop_shouldRemoveCallbacks() { From b172582c14abf47b39ee36a289a19cc2ffed0bae Mon Sep 17 00:00:00 2001 From: SongFerngWang Date: Thu, 14 Oct 2021 18:54:52 +0800 Subject: [PATCH 5/5] The Network name is not same as statusbar at SIM Edit page Using subscriptionInfo to get the network name. Bug: 203035698 Bug: 201591202 Test: make RunSettingsRoboTests ROBOTEST_FILTER=RenameMobileNetworkDialogFragmentTest (PASS) Change-Id: I84848a2801172b46f7cc3ff39d88ad57e34514a4 (cherry picked from commit 050b6d5224b078bc23b6ad212962b048d3d8a05e) --- .../telephony/RenameMobileNetworkDialogFragment.java | 5 +---- .../telephony/RenameMobileNetworkDialogFragmentTest.java | 7 +------ 2 files changed, 2 insertions(+), 10 deletions(-) diff --git a/src/com/android/settings/network/telephony/RenameMobileNetworkDialogFragment.java b/src/com/android/settings/network/telephony/RenameMobileNetworkDialogFragment.java index 8e65605eecc..5f208949e52 100644 --- a/src/com/android/settings/network/telephony/RenameMobileNetworkDialogFragment.java +++ b/src/com/android/settings/network/telephony/RenameMobileNetworkDialogFragment.java @@ -25,7 +25,6 @@ import android.graphics.Paint; import android.graphics.drawable.ShapeDrawable; import android.graphics.drawable.shapes.OvalShape; import android.os.Bundle; -import android.telephony.ServiceState; import android.telephony.SubscriptionInfo; import android.telephony.SubscriptionManager; import android.telephony.TelephonyManager; @@ -52,7 +51,6 @@ import com.android.settingslib.DeviceInfoUtils; import com.google.common.collect.ImmutableMap; -import java.util.Arrays; import java.util.List; import java.util.Map; @@ -180,8 +178,7 @@ public class RenameMobileNetworkDialogFragment extends InstrumentedDialogFragmen final TextView operatorName = view.findViewById(R.id.operator_name_value); mTelephonyManager = mTelephonyManager.createForSubscriptionId(mSubId); - final ServiceState serviceState = mTelephonyManager.getServiceState(); - operatorName.setText(serviceState == null ? "" : serviceState.getOperatorAlphaLong()); + operatorName.setText(info.getCarrierName()); final TextView phoneTitle = view.findViewById(R.id.number_label); phoneTitle.setVisibility(info.isOpportunistic() ? View.GONE : View.VISIBLE); diff --git a/tests/robotests/src/com/android/settings/network/telephony/RenameMobileNetworkDialogFragmentTest.java b/tests/robotests/src/com/android/settings/network/telephony/RenameMobileNetworkDialogFragmentTest.java index 70b05981370..ea440c771e0 100644 --- a/tests/robotests/src/com/android/settings/network/telephony/RenameMobileNetworkDialogFragmentTest.java +++ b/tests/robotests/src/com/android/settings/network/telephony/RenameMobileNetworkDialogFragmentTest.java @@ -31,7 +31,6 @@ import static org.mockito.Mockito.when; import android.content.Context; import android.content.DialogInterface; import android.graphics.Color; -import android.telephony.ServiceState; import android.telephony.SubscriptionInfo; import android.telephony.SubscriptionManager; import android.telephony.TelephonyManager; @@ -73,8 +72,6 @@ public class RenameMobileNetworkDialogFragmentTest { @Mock private TelephonyManager mTelephonyMgr; @Mock - private ServiceState mServiceState; - @Mock private SubscriptionManager mSubscriptionMgr; @Mock private SubscriptionInfo mSubscriptionInfo; @@ -95,11 +92,9 @@ public class RenameMobileNetworkDialogFragmentTest { stm.setTelephonyManagerForSubscriptionId(mSubscriptionId, mTelephonyMgr); when(mTelephonyMgr.createForSubscriptionId(anyInt())).thenReturn(mTelephonyMgr); - when(mTelephonyMgr.getServiceState()).thenReturn(mServiceState); - when(mServiceState.getOperatorAlphaLong()).thenReturn("fake carrier name"); - when(mSubscriptionInfo.getSubscriptionId()).thenReturn(mSubscriptionId); when(mSubscriptionInfo.getDisplayName()).thenReturn("test"); + when(mSubscriptionInfo.getCarrierName()).thenReturn("fake carrier name"); when(mSubscriptionMgr.setDisplayName(any(), anyInt(), anyInt())).thenReturn(0); mActivity = spy(Robolectric.buildActivity(FragmentActivity.class).setup().get());