diff --git a/src/com/android/settings/wifi/details/WifiDetailPreferenceController.java b/src/com/android/settings/wifi/details/WifiDetailPreferenceController.java index 449683802a3..965b0fffadb 100644 --- a/src/com/android/settings/wifi/details/WifiDetailPreferenceController.java +++ b/src/com/android/settings/wifi/details/WifiDetailPreferenceController.java @@ -191,6 +191,13 @@ public class WifiDetailPreferenceController extends AbstractPreferenceController private final IconInjector mIconInjector; private final IntentFilter mFilter; + + // Passpoint information - cache it in case of losing these information after + // updateAccessPointFromScannedList(). For R2, we should update these data from + // WifiManager#getPasspointConfigurations() after users manage the passpoint profile. + private boolean mIsExpired; + private boolean mIsPasspointConfigurationR1; + private final BroadcastReceiver mReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { @@ -372,6 +379,9 @@ public class WifiDetailPreferenceController extends AbstractPreferenceController updateConnectingState(STATE_FAILED); } }; + + mIsExpired = mAccessPoint.isExpired(); + mIsPasspointConfigurationR1 = mAccessPoint.isPasspointConfigurationR1(); } @Override @@ -406,6 +416,11 @@ public class WifiDetailPreferenceController extends AbstractPreferenceController .setButton4Icon(R.drawable.ic_qrcode_24dp) .setButton4OnClickListener(view -> shareNetwork()); + if (isPasspointConfigurationR1Expired()) { + // Hide Connect button. + mButtonsPref.setButton3Visible(false); + } + mSignalStrengthPref = screen.findPreference(KEY_SIGNAL_STRENGTH_PREF); mTxLinkSpeedPref = screen.findPreference(KEY_TX_LINK_SPEED); mRxLinkSpeedPref = screen.findPreference(KEY_RX_LINK_SPEED); @@ -454,9 +469,18 @@ public class WifiDetailPreferenceController extends AbstractPreferenceController if (usingDataUsageHeader(mContext)) { mSummaryHeaderController.updateState(mDataUsageSummaryPref); } else { + String summary; + if (isPasspointConfigurationR1Expired()) { + // Not able to get summary from AccessPoint because we may lost + // PasspointConfiguration information after updateAccessPointFromScannedList(). + summary = mContext.getResources().getString( + com.android.settingslib.R.string.wifi_passpoint_expired); + } else { + summary = mAccessPoint.getSettingsSummary(true /* convertSavedAsDisconnected */); + } + mEntityHeaderController - .setSummary( - mAccessPoint.getSettingsSummary(true /*convertSavedAsDisconnected*/)) + .setSummary(summary) .setRecyclerView(mFragment.getListView(), mLifecycle) .done(mFragment.getActivity(), true /* rebind */); } @@ -744,7 +768,7 @@ public class WifiDetailPreferenceController extends AbstractPreferenceController boolean canForgetNetwork = canForgetNetwork(); boolean canSignIntoNetwork = canSignIntoNetwork(); - boolean canConnectNetwork = canConnectNetwork(); + boolean canConnectNetwork = canConnectNetwork() && !isPasspointConfigurationR1Expired(); boolean canShareNetwork = canShareNetwork(); mButtonsPref.setButton1Visible(canForgetNetwork); @@ -762,6 +786,10 @@ public class WifiDetailPreferenceController extends AbstractPreferenceController return !mAccessPoint.isActive(); } + private boolean isPasspointConfigurationR1Expired() { + return mIsPasspointConfigurationR1 && mIsExpired; + } + private void refreshIpLayerInfo() { // Hide IP layer info if not a connected network. if (!mAccessPoint.isActive() || mNetwork == null || mLinkProperties == null) { @@ -1109,10 +1137,15 @@ public class WifiDetailPreferenceController extends AbstractPreferenceController case STATE_NOT_IN_RANGE: case STATE_FAILED: case STATE_ENABLE_WIFI_FAILED: - mButtonsPref.setButton3Text(R.string.wifi_connect) - .setButton3Icon(R.drawable.ic_settings_wireless) - .setButton3Enabled(true) - .setButton3Visible(true); + if (isPasspointConfigurationR1Expired()) { + // Hide Connect button. + mButtonsPref.setButton3Visible(false); + } else { + mButtonsPref.setButton3Text(R.string.wifi_connect) + .setButton3Icon(R.drawable.ic_settings_wireless) + .setButton3Enabled(true) + .setButton3Visible(true); + } break; default: Log.e(TAG, "Invalid connect button state : " + state); diff --git a/tests/robotests/src/com/android/settings/wifi/details/WifiDetailPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/wifi/details/WifiDetailPreferenceControllerTest.java index 631880adf7d..81ac06416d6 100644 --- a/tests/robotests/src/com/android/settings/wifi/details/WifiDetailPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/wifi/details/WifiDetailPreferenceControllerTest.java @@ -1877,6 +1877,21 @@ public class WifiDetailPreferenceControllerTest { verify(mockMacAddressPref).setTitle(R.string.wifi_advanced_device_mac_address_title); } + @Test + public void entityHeader_expiredPasspointR1_shouldHandleExpiration() { + setUpForDisconnectedNetwork(); + when(mockAccessPoint.isPasspoint()).thenReturn(true); + when(mockAccessPoint.isPasspointConfigurationR1()).thenReturn(true); + when(mockAccessPoint.isExpired()).thenReturn(true); + String expireSummary = mContext.getResources().getString( + com.android.settingslib.R.string.wifi_passpoint_expired); + + displayAndResume(); + + verify(mockButtonsPref).setButton3Visible(false); + verify(mockHeaderController).setSummary(expireSummary); + } + private ActionButtonsPreference createMock() { final ActionButtonsPreference pref = mock(ActionButtonsPreference.class); when(pref.setButton1Text(anyInt())).thenReturn(pref);