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);