diff --git a/res/xml/security_settings_face.xml b/res/xml/security_settings_face.xml index 862c1a555ba..7d59f30c5ad 100644 --- a/res/xml/security_settings_face.xml +++ b/res/xml/security_settings_face.xml @@ -44,7 +44,7 @@ android:key="security_lockscreen_bypass" android:title="@string/lockscreen_bypass_title" android:summary="@string/lockscreen_bypass_summary" - settings:searchable="false" + settings:keywords="@string/keywords_lockscreen_bypass" settings:controller="com.android.settings.biometrics.face.FaceSettingsLockscreenBypassPreferenceController" /> diff --git a/src/com/android/settings/network/telephony/DisabledSubscriptionController.java b/src/com/android/settings/network/telephony/DisabledSubscriptionController.java index 22cbb138c37..cd517359227 100644 --- a/src/com/android/settings/network/telephony/DisabledSubscriptionController.java +++ b/src/com/android/settings/network/telephony/DisabledSubscriptionController.java @@ -72,7 +72,8 @@ public class DisabledSubscriptionController extends BasePreferenceController imp if (mCategory == null || mSubId == SubscriptionManager.INVALID_SUBSCRIPTION_ID) { return; } - mCategory.setVisible(mSubscriptionManager.isSubscriptionEnabled(mSubId)); + // TODO b/135222940: re-evaluate whether to use mSubscriptionManager#isSubscriptionEnabled + mCategory.setVisible(mSubscriptionManager.isActiveSubId(mSubId)); } @Override diff --git a/src/com/android/settings/network/telephony/MobileDataSlice.java b/src/com/android/settings/network/telephony/MobileDataSlice.java index e497a9e442e..65eaf8708b5 100644 --- a/src/com/android/settings/network/telephony/MobileDataSlice.java +++ b/src/com/android/settings/network/telephony/MobileDataSlice.java @@ -78,16 +78,14 @@ public class MobileDataSlice implements CustomSliceable { final String title = mContext.getText(R.string.mobile_data_settings_title).toString(); @ColorInt final int color = Utils.getColorAccentDefaultColor(mContext); - // Return a Slice without the mobile data toggle when airplane mode is on. + // Return null until we can show a disabled-action Slice, blaming Airplane mode. if (isAirplaneModeEnabled()) { - return buildUnavailableMobileDataSlice(title, - mContext.getText(R.string.mobile_data_ap_mode_disabled), icon, color); + return null; } - // Return a Slice without the mobile data toggle when mobile data disabled. + // Return null until we can show a disabled-action Slice. if (!isMobileDataAvailable()) { - return buildUnavailableMobileDataSlice(title, - mContext.getText(R.string.sim_cellular_data_unavailable), icon, color); + return null; } final CharSequence summary = getSummary(); @@ -201,22 +199,6 @@ public class MobileDataSlice implements CustomSliceable { return mTelephonyManager.isDataEnabled(); } - private Slice buildUnavailableMobileDataSlice(String title, CharSequence summary, - IconCompat icon, int color) { - final PendingIntent intent = PendingIntent.getActivity(mContext, 0 /* requestCode */, - new Intent(), 0 /* flags */); - final SliceAction deadAction = - SliceAction.create(intent, icon, ListBuilder.ICON_IMAGE, title); - final ListBuilder listBuilder = new ListBuilder(mContext, getUri(), - ListBuilder.INFINITY) - .setAccentColor(color) - .addRow(new ListBuilder.RowBuilder() - .setTitle(title) - .setSubtitle(summary) - .setPrimaryAction(deadAction)); - return listBuilder.build(); - } - /** * Listener for mobile data state changes. * diff --git a/src/com/android/settings/network/telephony/MobileNetworkSwitchController.java b/src/com/android/settings/network/telephony/MobileNetworkSwitchController.java index e6422f00d60..02396ddef70 100644 --- a/src/com/android/settings/network/telephony/MobileNetworkSwitchController.java +++ b/src/com/android/settings/network/telephony/MobileNetworkSwitchController.java @@ -81,7 +81,9 @@ public class MobileNetworkSwitchController extends BasePreferenceController impl R.string.mobile_network_use_sim_off); mSwitchBar.addOnSwitchChangeListener((switchView, isChecked) -> { - if (mSubscriptionManager.isSubscriptionEnabled(mSubId) != isChecked + // TODO b/135222940: re-evaluate whether to use + // mSubscriptionManager#isSubscriptionEnabled + if (mSubscriptionManager.isActiveSubId(mSubId) != isChecked && (!mSubscriptionManager.setSubscriptionEnabled(mSubId, isChecked))) { mSwitchBar.setChecked(!isChecked); } @@ -108,7 +110,9 @@ public class MobileNetworkSwitchController extends BasePreferenceController impl mSwitchBar.hide(); } else { mSwitchBar.show(); - mSwitchBar.setChecked(mSubscriptionManager.isSubscriptionEnabled(mSubId)); + // TODO b/135222940: re-evaluate whether to use + // mSubscriptionManager#isSubscriptionEnabled + mSwitchBar.setChecked(mSubscriptionManager.isActiveSubId(mSubId)); } } diff --git a/src/com/android/settings/sim/SimDialogFragment.java b/src/com/android/settings/sim/SimDialogFragment.java index de991ec14f8..362fccc75ab 100644 --- a/src/com/android/settings/sim/SimDialogFragment.java +++ b/src/com/android/settings/sim/SimDialogFragment.java @@ -16,20 +16,25 @@ package com.android.settings.sim; +import android.content.Context; import android.content.DialogInterface; import android.os.Bundle; import androidx.annotation.NonNull; import com.android.settings.core.instrumentation.InstrumentedDialogFragment; +import com.android.settings.network.SubscriptionsChangeListener; /** Common functionality for showing a dialog in SimDialogActivity. */ -public abstract class SimDialogFragment extends InstrumentedDialogFragment { +public abstract class SimDialogFragment extends InstrumentedDialogFragment implements + SubscriptionsChangeListener.SubscriptionsChangeListenerClient { private static final String TAG = "SimDialogFragment"; private static final String KEY_TITLE_ID = "title_id"; private static final String KEY_DIALOG_TYPE = "dialog_type"; + private SubscriptionsChangeListener mChangeListener; + protected static Bundle initArguments(int dialogType, int titleResId) { final Bundle args = new Bundle(); args.putInt(KEY_DIALOG_TYPE, dialogType); @@ -45,6 +50,24 @@ public abstract class SimDialogFragment extends InstrumentedDialogFragment { return getArguments().getInt(KEY_TITLE_ID); } + @Override + public void onAttach(Context context) { + super.onAttach(context); + mChangeListener = new SubscriptionsChangeListener(context, this); + } + + @Override + public void onPause() { + super.onPause(); + mChangeListener.stop(); + } + + @Override + public void onResume() { + super.onResume(); + mChangeListener.start(); + } + @Override public void onDismiss(@NonNull DialogInterface dialog) { super.onDismiss(dialog); @@ -55,4 +78,13 @@ public abstract class SimDialogFragment extends InstrumentedDialogFragment { } public abstract void updateDialog(); + + @Override + public void onAirplaneModeChanged(boolean airplaneModeEnabled) { + } + + @Override + public void onSubscriptionsChanged() { + updateDialog(); + } } diff --git a/src/com/android/settings/wifi/dpp/WifiDppUtils.java b/src/com/android/settings/wifi/dpp/WifiDppUtils.java index 4644f125017..7e15064b251 100644 --- a/src/com/android/settings/wifi/dpp/WifiDppUtils.java +++ b/src/com/android/settings/wifi/dpp/WifiDppUtils.java @@ -205,6 +205,11 @@ public class WifiDppUtils { final WifiConfiguration wifiConfiguration = accessPoint.getConfig(); setConfiguratorIntentExtra(intent, wifiManager, wifiConfiguration); + // For a transition mode Wi-Fi AP, creates a QR code that's compatible with more devices + if (accessPoint.getSecurity() == AccessPoint.SECURITY_PSK_SAE_TRANSITION) { + intent.putExtra(EXTRA_WIFI_SECURITY, WifiQrCode.SECURITY_WPA_PSK); + } + return intent; } @@ -400,6 +405,7 @@ public class WifiDppUtils { } break; case AccessPoint.SECURITY_PSK: + case AccessPoint.SECURITY_PSK_SAE_TRANSITION: return true; default: } @@ -412,6 +418,8 @@ public class WifiDppUtils { case AccessPoint.SECURITY_PSK: case AccessPoint.SECURITY_WEP: case AccessPoint.SECURITY_NONE: + case AccessPoint.SECURITY_PSK_SAE_TRANSITION: + case AccessPoint.SECURITY_OWE_TRANSITION: return true; case AccessPoint.SECURITY_SAE: if (wifiManager.isWpa3SaeSupported()) { diff --git a/tests/robotests/src/com/android/settings/network/telephony/DisabledSubscriptionControllerTest.java b/tests/robotests/src/com/android/settings/network/telephony/DisabledSubscriptionControllerTest.java index c1004faf572..f25ffa4532a 100644 --- a/tests/robotests/src/com/android/settings/network/telephony/DisabledSubscriptionControllerTest.java +++ b/tests/robotests/src/com/android/settings/network/telephony/DisabledSubscriptionControllerTest.java @@ -69,32 +69,32 @@ public class DisabledSubscriptionControllerTest { @Test public void displayPreference_subscriptionEnabled_categoryIsVisible() { - doReturn(true).when(mSubscriptionManager).isSubscriptionEnabled(SUB_ID); + doReturn(true).when(mSubscriptionManager).isActiveSubId(SUB_ID); mController.displayPreference(mScreen); assertThat(mCategory.isVisible()).isTrue(); } @Test public void displayPreference_subscriptionDisabled_categoryIsNotVisible() { - doReturn(false).when(mSubscriptionManager).isSubscriptionEnabled(SUB_ID); + doReturn(false).when(mSubscriptionManager).isActiveSubId(SUB_ID); mController.displayPreference(mScreen); assertThat(mCategory.isVisible()).isFalse(); } @Test public void onSubscriptionsChanged_subscriptionBecomesDisabled_categoryIsNotVisible() { - doReturn(true).when(mSubscriptionManager).isSubscriptionEnabled(SUB_ID); + doReturn(true).when(mSubscriptionManager).isActiveSubId(SUB_ID); mController.displayPreference(mScreen); - doReturn(false).when(mSubscriptionManager).isSubscriptionEnabled(SUB_ID); + doReturn(false).when(mSubscriptionManager).isActiveSubId(SUB_ID); mController.onSubscriptionsChanged(); assertThat(mCategory.isVisible()).isFalse(); } @Test public void onSubscriptionsChanged_subscriptionBecomesEnabled_categoryIsVisible() { - doReturn(false).when(mSubscriptionManager).isSubscriptionEnabled(SUB_ID); + doReturn(false).when(mSubscriptionManager).isActiveSubId(SUB_ID); mController.displayPreference(mScreen); - doReturn(true).when(mSubscriptionManager).isSubscriptionEnabled(SUB_ID); + doReturn(true).when(mSubscriptionManager).isActiveSubId(SUB_ID); mController.onSubscriptionsChanged(); assertThat(mCategory.isVisible()).isTrue(); } diff --git a/tests/robotests/src/com/android/settings/network/telephony/MobileDataSliceTest.java b/tests/robotests/src/com/android/settings/network/telephony/MobileDataSliceTest.java index ae6f5687445..c66f75f02a6 100644 --- a/tests/robotests/src/com/android/settings/network/telephony/MobileDataSliceTest.java +++ b/tests/robotests/src/com/android/settings/network/telephony/MobileDataSliceTest.java @@ -174,21 +174,7 @@ public class MobileDataSliceTest { doReturn(new ArrayList<>()).when(mSubscriptionManager).getSelectableSubscriptionInfoList(); final Slice mobileData = mMobileDataSlice.getSlice(); - final SliceMetadata metadata = SliceMetadata.from(mContext, mobileData); - assertThat(metadata.getTitle()) - .isEqualTo(mContext.getString(R.string.mobile_data_settings_title)); - - assertThat(metadata.getSubtitle()) - .isEqualTo(mContext.getString(R.string.sim_cellular_data_unavailable)); - - final List toggles = metadata.getToggles(); - assertThat(toggles).hasSize(0); - - final SliceAction primaryAction = metadata.getPrimaryAction(); - final PendingIntent pendingIntent = primaryAction.getAction(); - final Intent actionIntent = pendingIntent.getIntent(); - - assertThat(actionIntent).isNull(); + assertThat(mobileData).isNull(); } @Test @@ -196,21 +182,7 @@ public class MobileDataSliceTest { doReturn(null).when(mSubscriptionManager).getSelectableSubscriptionInfoList(); final Slice mobileData = mMobileDataSlice.getSlice(); - final SliceMetadata metadata = SliceMetadata.from(mContext, mobileData); - assertThat(metadata.getTitle()) - .isEqualTo(mContext.getString(R.string.mobile_data_settings_title)); - - assertThat(metadata.getSubtitle()) - .isEqualTo(mContext.getString(R.string.sim_cellular_data_unavailable)); - - final List toggles = metadata.getToggles(); - assertThat(toggles).hasSize(0); - - final SliceAction primaryAction = metadata.getPrimaryAction(); - final PendingIntent pendingIntent = primaryAction.getAction(); - final Intent actionIntent = pendingIntent.getIntent(); - - assertThat(actionIntent).isNull(); + assertThat(mobileData).isNull(); } @Test @@ -219,20 +191,6 @@ public class MobileDataSliceTest { doReturn(mSubscriptionInfo).when(mSubscriptionManager).getActiveSubscriptionInfo(SUB_ID); final Slice mobileData = mMobileDataSlice.getSlice(); - final SliceMetadata metadata = SliceMetadata.from(mContext, mobileData); - assertThat(metadata.getTitle()) - .isEqualTo(mContext.getString(R.string.mobile_data_settings_title)); - - assertThat(metadata.getSubtitle()) - .isEqualTo(mContext.getString(R.string.mobile_data_ap_mode_disabled)); - - final List toggles = metadata.getToggles(); - assertThat(toggles).hasSize(0); - - final SliceAction primaryAction = metadata.getPrimaryAction(); - final PendingIntent pendingIntent = primaryAction.getAction(); - final Intent actionIntent = pendingIntent.getIntent(); - - assertThat(actionIntent).isNull(); + assertThat(mobileData).isNull(); } } diff --git a/tests/robotests/src/com/android/settings/network/telephony/MobileNetworkSwitchControllerTest.java b/tests/robotests/src/com/android/settings/network/telephony/MobileNetworkSwitchControllerTest.java index 86c380e006b..ccf345f8bdd 100644 --- a/tests/robotests/src/com/android/settings/network/telephony/MobileNetworkSwitchControllerTest.java +++ b/tests/robotests/src/com/android/settings/network/telephony/MobileNetworkSwitchControllerTest.java @@ -109,7 +109,7 @@ public class MobileNetworkSwitchControllerTest { @Test public void displayPreference_oneEnabledSubscription_switchBarNotHidden() { - doReturn(true).when(mSubscriptionManager).isSubscriptionEnabled(mSubId); + doReturn(true).when(mSubscriptionManager).isActiveSubId(mSubId); SubscriptionUtil.setAvailableSubscriptionsForTesting(Arrays.asList(mSubscription)); mController.displayPreference(mScreen); assertThat(mSwitchBar.isShowing()).isTrue(); @@ -117,7 +117,7 @@ public class MobileNetworkSwitchControllerTest { @Test public void displayPreference_oneDisabledSubscription_switchBarNotHidden() { - doReturn(false).when(mSubscriptionManager).isSubscriptionEnabled(mSubId); + doReturn(false).when(mSubscriptionManager).isActiveSubId(mSubId); SubscriptionUtil.setAvailableSubscriptionsForTesting(Arrays.asList(mSubscription)); mController.displayPreference(mScreen); assertThat(mSwitchBar.isShowing()).isTrue(); @@ -125,7 +125,7 @@ public class MobileNetworkSwitchControllerTest { @Test public void displayPreference_subscriptionEnabled_switchIsOn() { - when(mSubscriptionManager.isSubscriptionEnabled(mSubId)).thenReturn(true); + when(mSubscriptionManager.isActiveSubId(mSubId)).thenReturn(true); mController.displayPreference(mScreen); assertThat(mSwitchBar.isShowing()).isTrue(); assertThat(mSwitchBar.isChecked()).isTrue(); @@ -133,7 +133,7 @@ public class MobileNetworkSwitchControllerTest { @Test public void displayPreference_subscriptionDisabled_switchIsOff() { - when(mSubscriptionManager.isSubscriptionEnabled(mSubId)).thenReturn(false); + when(mSubscriptionManager.isActiveSubId(mSubId)).thenReturn(false); mController.displayPreference(mScreen); assertThat(mSwitchBar.isShowing()).isTrue(); assertThat(mSwitchBar.isChecked()).isFalse(); @@ -141,7 +141,7 @@ public class MobileNetworkSwitchControllerTest { @Test public void switchChangeListener_fromEnabledToDisabled_setSubscriptionEnabledCalledCorrectly() { - when(mSubscriptionManager.isSubscriptionEnabled(mSubId)).thenReturn(true); + when(mSubscriptionManager.isActiveSubId(mSubId)).thenReturn(true); mController.displayPreference(mScreen); assertThat(mSwitchBar.isShowing()).isTrue(); assertThat(mSwitchBar.isChecked()).isTrue(); @@ -153,7 +153,7 @@ public class MobileNetworkSwitchControllerTest { public void switchChangeListener_fromEnabledToDisabled_setSubscriptionEnabledFailed() { when(mSubscriptionManager.setSubscriptionEnabled(eq(mSubId), anyBoolean())) .thenReturn(false); - when(mSubscriptionManager.isSubscriptionEnabled(mSubId)).thenReturn(true); + when(mSubscriptionManager.isActiveSubId(mSubId)).thenReturn(true); mController.displayPreference(mScreen); assertThat(mSwitchBar.isShowing()).isTrue(); assertThat(mSwitchBar.isChecked()).isTrue(); @@ -164,7 +164,7 @@ public class MobileNetworkSwitchControllerTest { @Test public void switchChangeListener_fromDisabledToEnabled_setSubscriptionEnabledCalledCorrectly() { - when(mSubscriptionManager.isSubscriptionEnabled(mSubId)).thenReturn(false); + when(mSubscriptionManager.isActiveSubId(mSubId)).thenReturn(false); mController.displayPreference(mScreen); assertThat(mSwitchBar.isShowing()).isTrue(); assertThat(mSwitchBar.isChecked()).isFalse(); diff --git a/tests/robotests/src/com/android/settings/sim/SimListDialogFragmentTest.java b/tests/robotests/src/com/android/settings/sim/SimListDialogFragmentTest.java index 2b33ebe6c20..6a9590be3e0 100644 --- a/tests/robotests/src/com/android/settings/sim/SimListDialogFragmentTest.java +++ b/tests/robotests/src/com/android/settings/sim/SimListDialogFragmentTest.java @@ -26,6 +26,7 @@ import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import android.telephony.SubscriptionManager; @@ -77,6 +78,22 @@ public class SimListDialogFragmentTest extends SimDialogFragmentTestBase