Merge "Avoid launching captive portal pages when uri is empty" into main
diff --git a/src/com/android/settings/wifi/details2/WifiDetailPreferenceController2.java b/src/com/android/settings/wifi/details2/WifiDetailPreferenceController2.java
index 927d2ee..a8d7f41 100644
--- a/src/com/android/settings/wifi/details2/WifiDetailPreferenceController2.java
+++ b/src/com/android/settings/wifi/details2/WifiDetailPreferenceController2.java
@@ -392,12 +392,7 @@
mButtonsPref.setButton2Text(R.string.wifi_venue_website_button_text)
.setButton2Icon(R.drawable.ic_settings_sign_in)
- .setButton2OnClickListener(view -> {
- final Intent infoIntent = new Intent(Intent.ACTION_VIEW);
- infoIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- infoIntent.setData(venueInfoUrl);
- mContext.startActivity(infoIntent);
- });
+ .setButton2OnClickListener(view -> launchCaptivePortal(venueInfoUrl));
// Only show the venue website when the network is connected.
return mWifiEntry.getConnectedState() == WifiEntry.CONNECTED_STATE_CONNECTED;
}
@@ -414,6 +409,18 @@
return data.getVenueInfoUrl();
}
+ @VisibleForTesting
+ void launchCaptivePortal(Uri uri) {
+ if (uri == null) {
+ Log.e(TAG, "Launch captive portal with a null Uri!");
+ return;
+ }
+ final Intent infoIntent = new Intent(Intent.ACTION_VIEW);
+ infoIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ infoIntent.setData(uri);
+ mContext.startActivity(infoIntent);
+ }
+
private void setupEntityHeader(PreferenceScreen screen) {
LayoutPreference headerPref = screen.findPreference(KEY_HEADER);
diff --git a/tests/robotests/src/com/android/settings/wifi/details2/WifiDetailPreferenceController2Test.java b/tests/robotests/src/com/android/settings/wifi/details2/WifiDetailPreferenceController2Test.java
index 3923cf8..71cdd0b 100644
--- a/tests/robotests/src/com/android/settings/wifi/details2/WifiDetailPreferenceController2Test.java
+++ b/tests/robotests/src/com/android/settings/wifi/details2/WifiDetailPreferenceController2Test.java
@@ -137,6 +137,7 @@
private static final String FACTORY_MAC_ADDRESS = "FACTORY_MAC_ADDRESS";
private static final String SECURITY = "None";
private static final String FQDN = "fqdn";
+ private static final Uri TEST_URI = Uri.parse("content://test/test");
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
private PreferenceScreen mMockScreen;
@@ -1876,6 +1877,24 @@
verify(mMockSignalStrengthPref).setTitle(R.string.hotspot_connection_strength);
}
+ @Test
+ public void launchCaptivePortal_uriNull_doNothing() {
+ setUpSpyController();
+
+ mController.launchCaptivePortal(null);
+
+ verify(mContext, never()).startActivity(any());
+ }
+
+ @Test
+ public void launchCaptivePortal_uriNotNull_startActivity() {
+ setUpSpyController();
+
+ mController.launchCaptivePortal(TEST_URI);
+
+ verify(mContext).startActivity(any());
+ }
+
private SubscriptionInfo mockSubscriptionInfo(int subId, String displayName, int carrierId) {
SubscriptionInfo info = mock(SubscriptionInfo.class);
when(info.getSubscriptionId()).thenReturn(subId);