From 10d0cd52d6dd985788fc12718947ba5f904c441f Mon Sep 17 00:00:00 2001 From: Joshua McCloskey Date: Thu, 21 Apr 2022 00:25:07 +0000 Subject: [PATCH 1/8] Modified Fp -> Face setup flow Test: Skip FP, Enroll Face, hit back button, observe that you will go back to Fingerprint enrollment. Test: Verify that after completing a biometric enroll we no longer show the introduction activity with a "Done" button. Fixes: 229813512 Change-Id: Ie0d7ce5d5cef084b3614afce10e05dc72c86b492 --- .../biometrics/BiometricEnrollBase.java | 2 + .../BiometricEnrollIntroduction.java | 15 ++++++-- .../biometrics/face/FaceEnrollEducation.java | 6 ++- .../face/FaceEnrollIntroduction.java | 13 ++++++- .../FingerprintEnrollFindSensor.java | 11 ++++++ .../fingerprint/FingerprintEnrollFinish.java | 5 ++- .../SetupFingerprintEnrollIntroduction.java | 38 +++++++++++++++++++ 7 files changed, 82 insertions(+), 8 deletions(-) diff --git a/src/com/android/settings/biometrics/BiometricEnrollBase.java b/src/com/android/settings/biometrics/BiometricEnrollBase.java index 98cface2bc1..ad9b64e3fcb 100644 --- a/src/com/android/settings/biometrics/BiometricEnrollBase.java +++ b/src/com/android/settings/biometrics/BiometricEnrollBase.java @@ -60,6 +60,8 @@ public abstract class BiometricEnrollBase extends InstrumentedActivity { public static final String EXTRA_KEY_SENSOR_ID = "sensor_id"; public static final String EXTRA_KEY_CHALLENGE = "challenge"; public static final String EXTRA_KEY_MODALITY = "sensor_modality"; + public static final String EXTRA_FINISHED_ENROLL_FACE = "finished_enrolling_face"; + public static final String EXTRA_FINISHED_ENROLL_FINGERPRINT = "finished_enrolling_fingerprint"; /** * Used by the choose fingerprint wizard to indicate the wizard is diff --git a/src/com/android/settings/biometrics/BiometricEnrollIntroduction.java b/src/com/android/settings/biometrics/BiometricEnrollIntroduction.java index 61783c5164c..62114d25353 100644 --- a/src/com/android/settings/biometrics/BiometricEnrollIntroduction.java +++ b/src/com/android/settings/biometrics/BiometricEnrollIntroduction.java @@ -302,6 +302,7 @@ public abstract class BiometricEnrollIntroduction extends BiometricEnrollBase @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { + // TODO(b/229924331): Add tests for the enrollment flows. final boolean cameFromMultiBioFpAuthAddAnother = requestCode == BiometricUtils.REQUEST_ADD_ANOTHER && BiometricUtils.isMultiBiometricFingerprintEnrollmentFlow(this); @@ -397,14 +398,20 @@ public abstract class BiometricEnrollIntroduction extends BiometricEnrollBase return isResultSkipped(resultCode) || isResultFinished(resultCode); } - private void handleBiometricResultSkipOrFinished(int resultCode, @Nullable Intent data) { + protected void removeEnrollNextBiometric() { + getIntent().removeExtra(MultiBiometricEnrollHelper.EXTRA_ENROLL_AFTER_FACE); + getIntent().removeExtra(MultiBiometricEnrollHelper.EXTRA_ENROLL_AFTER_FINGERPRINT); + } + + protected void removeEnrollNextBiometricIfSkipEnroll(@Nullable Intent data) { if (data != null && data.getBooleanExtra( MultiBiometricEnrollHelper.EXTRA_SKIP_PENDING_ENROLL, false)) { - getIntent().removeExtra(MultiBiometricEnrollHelper.EXTRA_ENROLL_AFTER_FACE); - getIntent().removeExtra(MultiBiometricEnrollHelper.EXTRA_ENROLL_AFTER_FINGERPRINT); + removeEnrollNextBiometric(); } - + } + protected void handleBiometricResultSkipOrFinished(int resultCode, @Nullable Intent data) { + removeEnrollNextBiometricIfSkipEnroll(data); if (resultCode == RESULT_SKIP) { onEnrollmentSkipped(data); } else if (resultCode == RESULT_FINISHED) { diff --git a/src/com/android/settings/biometrics/face/FaceEnrollEducation.java b/src/com/android/settings/biometrics/face/FaceEnrollEducation.java index 6509d4e6e2e..d2d356b1104 100644 --- a/src/com/android/settings/biometrics/face/FaceEnrollEducation.java +++ b/src/com/android/settings/biometrics/face/FaceEnrollEducation.java @@ -227,6 +227,10 @@ public class FaceEnrollEducation extends BiometricEnrollBase { protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); mResultIntent = data; + boolean hasEnrolledFace = false; + if (data != null) { + hasEnrolledFace = data.getBooleanExtra(EXTRA_FINISHED_ENROLL_FACE, false); + } if (resultCode == RESULT_TIMEOUT) { setResult(resultCode, data); finish(); @@ -234,7 +238,7 @@ public class FaceEnrollEducation extends BiometricEnrollBase { || requestCode == ENROLL_NEXT_BIOMETRIC_REQUEST) { // If the user finished or skipped enrollment, finish this activity if (resultCode == RESULT_SKIP || resultCode == RESULT_FINISHED - || resultCode == SetupSkipDialog.RESULT_SKIP) { + || resultCode == SetupSkipDialog.RESULT_SKIP || hasEnrolledFace) { setResult(resultCode, data); finish(); } diff --git a/src/com/android/settings/biometrics/face/FaceEnrollIntroduction.java b/src/com/android/settings/biometrics/face/FaceEnrollIntroduction.java index f8f34f91092..aa081bd82dc 100644 --- a/src/com/android/settings/biometrics/face/FaceEnrollIntroduction.java +++ b/src/com/android/settings/biometrics/face/FaceEnrollIntroduction.java @@ -176,7 +176,18 @@ public class FaceEnrollIntroduction extends BiometricEnrollIntroduction { || requestCode == ENROLL_NEXT_BIOMETRIC_REQUEST; final boolean isResultSkipOrFinished = resultCode == RESULT_SKIP || resultCode == SetupSkipDialog.RESULT_SKIP || resultCode == RESULT_FINISHED; - if (isEnrollRequest && isResultSkipOrFinished) { + boolean hasEnrolledFace = false; + if (data != null) { + hasEnrolledFace = data.getBooleanExtra(EXTRA_FINISHED_ENROLL_FACE, false); + } + + if (resultCode == RESULT_CANCELED && hasEnrolledFace) { + setResult(resultCode, data); + finish(); + return; + } + + if (isEnrollRequest && isResultSkipOrFinished || hasEnrolledFace) { data = setSkipPendingEnroll(data); } super.onActivityResult(requestCode, resultCode, data); diff --git a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFindSensor.java b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFindSensor.java index 66059e71256..547869f7393 100644 --- a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFindSensor.java +++ b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFindSensor.java @@ -289,6 +289,17 @@ public class FingerprintEnrollFindSensor extends BiometricEnrollBase implements @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { + boolean enrolledFingerprint = false; + if (data != null) { + enrolledFingerprint = data.getBooleanExtra(EXTRA_FINISHED_ENROLL_FINGERPRINT, false); + } + + if (resultCode == RESULT_CANCELED && enrolledFingerprint) { + setResult(resultCode, data); + finish(); + return; + } + if (requestCode == CONFIRM_REQUEST) { if (resultCode == RESULT_OK && data != null) { throw new IllegalStateException("Pretty sure this is dead code"); diff --git a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFinish.java b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFinish.java index 784c5438a38..0f0d047272d 100644 --- a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFinish.java +++ b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFinish.java @@ -79,9 +79,10 @@ public class FingerprintEnrollFinish extends BiometricEnrollBase { @Override public void onBackPressed() { - super.onBackPressed(); - updateFingerprintSuggestionEnableState(); + Intent intent = getIntent().putExtra(EXTRA_FINISHED_ENROLL_FINGERPRINT, true); + setResult(RESULT_CANCELED, intent); + finish(); } @Override diff --git a/src/com/android/settings/biometrics/fingerprint/SetupFingerprintEnrollIntroduction.java b/src/com/android/settings/biometrics/fingerprint/SetupFingerprintEnrollIntroduction.java index e88e50d9425..af25ecd8e28 100644 --- a/src/com/android/settings/biometrics/fingerprint/SetupFingerprintEnrollIntroduction.java +++ b/src/com/android/settings/biometrics/fingerprint/SetupFingerprintEnrollIntroduction.java @@ -74,6 +74,16 @@ public class SetupFingerprintEnrollIntroduction extends FingerprintEnrollIntrodu @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { + boolean hasEnrolledFace = false; + boolean hasEnrolledFingerprint = false; + if (data != null) { + hasEnrolledFace = data.getBooleanExtra(EXTRA_FINISHED_ENROLL_FACE, false); + hasEnrolledFingerprint = data.getBooleanExtra(EXTRA_FINISHED_ENROLL_FINGERPRINT, false); + // If we've enrolled a face, we can remove the pending intent to launch FaceEnrollIntro. + if (hasEnrolledFace) { + removeEnrollNextBiometric(); + } + } if (requestCode == BIOMETRIC_FIND_SENSOR_REQUEST && isKeyguardSecure()) { // if lock was already present, do not return intent data since it must have been // reported in previous attempts @@ -85,6 +95,34 @@ public class SetupFingerprintEnrollIntroduction extends FingerprintEnrollIntrodu if (resultCode == RESULT_FINISHED) { data = setFingerprintCount(data); } + + if (resultCode == RESULT_CANCELED && hasEnrolledFingerprint) { + // If we are coming from a back press from an already enrolled fingerprint, + // we can finish this activity. + setResult(resultCode, data); + finish(); + return; + } + } else if (requestCode == ENROLL_NEXT_BIOMETRIC_REQUEST) { + // See if we can still enroll a fingerprint + boolean canEnrollFinger = checkMaxEnrolled() == 0; + // If we came from the next biometric flow and a user has either + // finished or skipped, we will also finish. + if (resultCode == RESULT_SKIP || resultCode == RESULT_FINISHED) { + // If user skips the enroll next biometric, we will also finish + setResult(RESULT_FINISHED, data); + finish(); + } else if (resultCode == RESULT_CANCELED) { + // Note that result_canceled comes from onBackPressed. + // If we can enroll a finger, Stay on this page, else we cannot, + // and finish entirely. + if (!canEnrollFinger) { + finish(); + } + } else { + super.onActivityResult(requestCode, resultCode, data); + } + return; } super.onActivityResult(requestCode, resultCode, data); } From b76feffe4f5c174e095940d9fc5d3b73fc66a1bb Mon Sep 17 00:00:00 2001 From: SongFerngWang Date: Thu, 24 Mar 2022 18:47:34 +0800 Subject: [PATCH 2/8] Gray out the network mode UI before the carrier config is ready Bug: 202167671 Test: atest EnabledNetworkModePreferenceControllerTest Change-Id: Ib502ac19ea2c19dae95025302dd82aa2b1c7ff88 --- .../EnabledNetworkModePreferenceController.java | 3 ++- .../EnabledNetworkModePreferenceControllerTest.java | 9 +++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceController.java b/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceController.java index cb5b5d0fe68..919913f3efd 100644 --- a/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceController.java +++ b/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceController.java @@ -87,7 +87,8 @@ public class EnabledNetworkModePreferenceController extends final PersistableBundle carrierConfig = mCarrierConfigCache.getConfigForSubId(subId); if (subId == SubscriptionManager.INVALID_SUBSCRIPTION_ID) { visible = false; - } else if (carrierConfig == null) { + } else if (carrierConfig == null + || !CarrierConfigManager.isConfigForIdentifiedCarrier(carrierConfig)) { visible = false; } else if (carrierConfig.getBoolean( CarrierConfigManager.KEY_HIDE_CARRIER_NETWORK_SETTINGS_BOOL) diff --git a/tests/unit/src/com/android/settings/network/EnabledNetworkModePreferenceControllerTest.java b/tests/unit/src/com/android/settings/network/EnabledNetworkModePreferenceControllerTest.java index 5672df793b3..c9452063a95 100644 --- a/tests/unit/src/com/android/settings/network/EnabledNetworkModePreferenceControllerTest.java +++ b/tests/unit/src/com/android/settings/network/EnabledNetworkModePreferenceControllerTest.java @@ -106,6 +106,7 @@ public class EnabledNetworkModePreferenceControllerTest { mPersistableBundle = new PersistableBundle(); doReturn(mPersistableBundle).when(mCarrierConfigCache).getConfig(); doReturn(mPersistableBundle).when(mCarrierConfigCache).getConfigForSubId(SUB_ID); + mPersistableBundle.putBoolean(CarrierConfigManager.KEY_CARRIER_CONFIG_APPLIED_BOOL, true); mPreference = new ListPreference(mContext); mController = new EnabledNetworkModePreferenceController(mContext, KEY); mockAllowedNetworkTypes(ALLOWED_ALL_NETWORK_TYPE); @@ -145,6 +146,14 @@ public class EnabledNetworkModePreferenceControllerTest { assertThat(mController.getAvailabilityStatus()).isEqualTo(CONDITIONALLY_UNAVAILABLE); } + @UiThreadTest + @Test + public void getAvailabilityStatus_carrierConfigNotReady_returnUnavailable() { + mPersistableBundle.putBoolean(CarrierConfigManager.KEY_CARRIER_CONFIG_APPLIED_BOOL, false); + + assertThat(mController.getAvailabilityStatus()).isEqualTo(CONDITIONALLY_UNAVAILABLE); + } + @UiThreadTest @Test public void getAvailabilityStatus_notWorldPhone_returnAvailable() { From d1749cfbabb61a77f8c0f26959d94400239a85a6 Mon Sep 17 00:00:00 2001 From: Nate Myren Date: Fri, 22 Apr 2022 13:58:50 -0700 Subject: [PATCH 3/8] Allow intent into Privacy Controls page Test: manual Bug: 222127397 Change-Id: If98ce8b89332eaaaa9be70885afe9d8465c191dd --- AndroidManifest.xml | 12 ++++++++++++ src/com/android/settings/Settings.java | 1 + .../settings/core/gateway/SettingsGateway.java | 2 ++ 3 files changed, 15 insertions(+) diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 4d3b6d0e3f9..762d84da36e 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -1789,6 +1789,18 @@ android:value="true" /> + + + + + + + + diff --git a/src/com/android/settings/Settings.java b/src/com/android/settings/Settings.java index c7375a36088..9f191f61cc1 100644 --- a/src/com/android/settings/Settings.java +++ b/src/com/android/settings/Settings.java @@ -224,6 +224,7 @@ public class Settings extends SettingsActivity { } } } + public static class PrivacyControlsActivity extends SettingsActivity { /* empty */ } public static class PrivacySettingsActivity extends SettingsActivity { /* empty */ } public static class FactoryResetActivity extends SettingsActivity { @Override diff --git a/src/com/android/settings/core/gateway/SettingsGateway.java b/src/com/android/settings/core/gateway/SettingsGateway.java index 81de7565af1..11ceeaf67b7 100644 --- a/src/com/android/settings/core/gateway/SettingsGateway.java +++ b/src/com/android/settings/core/gateway/SettingsGateway.java @@ -152,6 +152,7 @@ import com.android.settings.password.ChooseLockPassword; import com.android.settings.password.ChooseLockPattern; import com.android.settings.print.PrintJobSettingsFragment; import com.android.settings.print.PrintSettingsFragment; +import com.android.settings.privacy.PrivacyControlsFragment; import com.android.settings.privacy.PrivacyDashboardFragment; import com.android.settings.security.LockscreenDashboardFragment; import com.android.settings.security.SecurityAdvancedSettings; @@ -218,6 +219,7 @@ public class SettingsGateway { LocationSettings.class.getName(), WifiScanningFragment.class.getName(), PrivacyDashboardFragment.class.getName(), + PrivacyControlsFragment.class.getName(), LocationServices.class.getName(), SecuritySettings.class.getName(), SecurityAdvancedSettings.class.getName(), From 67007e5933dff730263aded500c47aaa0b36eb29 Mon Sep 17 00:00:00 2001 From: Prabal Singh Date: Sat, 23 Apr 2022 20:15:34 +0100 Subject: [PATCH 4/8] Use settingslib util methods for work policy info Bug: b/229889270 Test: make ROBOTEST_FILTER=EnterprisePrivacyFeatureProviderImplTest RunSettingsRoboTests -j40 Change-Id: I0d968732a4dd601955e18b2ebb2af365638b450f --- .../EnterprisePrivacyFeatureProviderImpl.java | 61 ++----------------- ...erprisePrivacyFeatureProviderImplTest.java | 20 ++++-- 2 files changed, 21 insertions(+), 60 deletions(-) diff --git a/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProviderImpl.java b/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProviderImpl.java index 6cadbdaace7..f3085bccbfb 100644 --- a/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProviderImpl.java +++ b/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProviderImpl.java @@ -38,6 +38,7 @@ import android.view.View; import com.android.settings.R; import com.android.settings.vpn2.VpnUtils; +import com.android.settingslib.utils.WorkPolicyUtils; import java.util.Date; import java.util.List; @@ -54,6 +55,7 @@ public class EnterprisePrivacyFeatureProviderImpl implements EnterprisePrivacyFe private final ConnectivityManager mCm; private final VpnManager mVm; private final Resources mResources; + private final WorkPolicyUtils mWorkPolicyUtils; private static final int MY_USER_ID = UserHandle.myUserId(); @@ -67,6 +69,7 @@ public class EnterprisePrivacyFeatureProviderImpl implements EnterprisePrivacyFe mCm = cm; mVm = vm; mResources = resources; + mWorkPolicyUtils = new WorkPolicyUtils(mContext, mPm, mUm, mDpm); } @Override @@ -228,25 +231,12 @@ public class EnterprisePrivacyFeatureProviderImpl implements EnterprisePrivacyFe @Override public boolean hasWorkPolicyInfo() { - return (getWorkPolicyInfoIntentDO() != null) || (getWorkPolicyInfoIntentPO() != null); + return mWorkPolicyUtils.hasWorkPolicy(); } @Override public boolean showWorkPolicyInfo(Context activityContext) { - Intent intent = getWorkPolicyInfoIntentDO(); - if (intent != null) { - activityContext.startActivity(intent); - return true; - } - - intent = getWorkPolicyInfoIntentPO(); - final UserInfo userInfo = getManagedProfileUserInfo(); - if (intent != null && userInfo != null) { - activityContext.startActivityAsUser(intent, userInfo.getUserHandle()); - return true; - } - - return false; + return mWorkPolicyUtils.showWorkPolicyInfo(activityContext); } @Override @@ -301,47 +291,6 @@ public class EnterprisePrivacyFeatureProviderImpl implements EnterprisePrivacyFe return UserHandle.USER_NULL; } - private Intent getWorkPolicyInfoIntentDO() { - final ComponentName ownerComponent = getDeviceOwnerComponent(); - if (ownerComponent == null) { - return null; - } - - // Only search for the required action in the Device Owner's package - final Intent intent = - new Intent(Settings.ACTION_SHOW_WORK_POLICY_INFO) - .setPackage(ownerComponent.getPackageName()); - final List activities = mPm.queryIntentActivities(intent, 0); - if (activities.size() != 0) { - return intent; - } - - return null; - } - - private Intent getWorkPolicyInfoIntentPO() { - final int userId = getManagedProfileUserId(); - if (userId == UserHandle.USER_NULL) { - return null; - } - - final ComponentName ownerComponent = mDpm.getProfileOwnerAsUser(userId); - if (ownerComponent == null) { - return null; - } - - // Only search for the required action in the Profile Owner's package - final Intent intent = - new Intent(Settings.ACTION_SHOW_WORK_POLICY_INFO) - .setPackage(ownerComponent.getPackageName()); - final List activities = mPm.queryIntentActivitiesAsUser(intent, 0, userId); - if (activities.size() != 0) { - return intent; - } - - return null; - } - protected static class EnterprisePrivacySpan extends ClickableSpan { private final Context mContext; diff --git a/tests/robotests/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProviderImplTest.java b/tests/robotests/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProviderImplTest.java index 2b64c198c66..0005e71628a 100644 --- a/tests/robotests/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProviderImplTest.java +++ b/tests/robotests/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProviderImplTest.java @@ -377,10 +377,22 @@ public class EnterprisePrivacyFeatureProviderImplTest { } @Test - public void workPolicyInfo_profileOwner_shouldResolveIntent() { + public void workPolicyInfo_profileOwner_shouldResolveIntent() + throws PackageManager.NameNotFoundException { when(mDevicePolicyManager.getDeviceOwnerComponentOnAnyUser()).thenReturn(null); - mProfiles.add(new UserInfo(mManagedProfileUserId, "", "", UserInfo.FLAG_MANAGED_PROFILE)); - when(mDevicePolicyManager.getProfileOwnerAsUser(mManagedProfileUserId)).thenReturn(mOwner); + List mAllProfiles = new ArrayList<>(); + mAllProfiles.add(new UserHandle(mManagedProfileUserId)); + when(mUserManager.getAllProfiles()).thenReturn(mAllProfiles); + when(mUserManager.isManagedProfile(mManagedProfileUserId)).thenReturn(true); + when(mContext.getPackageName()).thenReturn("somePackageName"); + when(mContext.createPackageContextAsUser( + eq(mContext.getPackageName()), + anyInt(), + any(UserHandle.class)) + ).thenReturn(mContext); + when(mContext.getSystemService(Context.DEVICE_POLICY_SERVICE)) + .thenReturn(mDevicePolicyManager); + when(mDevicePolicyManager.getProfileOwner()).thenReturn(mOwner); // If the intent is not resolved, then there's no info to show for PO assertThat(mProvider.hasWorkPolicyInfo()).isFalse(); @@ -441,7 +453,7 @@ public class EnterprisePrivacyFeatureProviderImplTest { } if (profileOwner) { when(mPackageManager.queryIntentActivitiesAsUser( - intentEquals(intent), anyInt(), eq(mManagedProfileUserId))) + intentEquals(intent), anyInt(), eq(UserHandle.of(mManagedProfileUserId)))) .thenReturn(activities); } From 03b1b23c740bb9e1393b614027ad2b367cedb93d Mon Sep 17 00:00:00 2001 From: Arc Wang Date: Sun, 24 Apr 2022 15:30:16 +0800 Subject: [PATCH 5/8] Fix 'Documents & other' missing problem Should check if 'Documents & other' is visible when mVolume is updated. Bug: 230215783 Test: manual visual Settings -> Storage Change-Id: Ife36b71bee66ff16802e352785824e10c17dceb8 --- .../deviceinfo/storage/StorageItemPreferenceController.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/com/android/settings/deviceinfo/storage/StorageItemPreferenceController.java b/src/com/android/settings/deviceinfo/storage/StorageItemPreferenceController.java index 7e27414ec2d..dcd2bd89097 100644 --- a/src/com/android/settings/deviceinfo/storage/StorageItemPreferenceController.java +++ b/src/com/android/settings/deviceinfo/storage/StorageItemPreferenceController.java @@ -234,7 +234,9 @@ public class StorageItemPreferenceController extends AbstractPreferenceControlle // If isValidPrivateVolume() is true, these preferences will become visible at // onLoadFinished. - if (!isValidPrivateVolume()) { + if (isValidPrivateVolume()) { + mIsDocumentsPrefShown = isDocumentsPrefShown(); + } else { setPrivateStorageCategoryPreferencesVisibility(false); } } From d1d9798a5dd46bc06df681f05b9a6d926956e3a1 Mon Sep 17 00:00:00 2001 From: changbetty Date: Sat, 9 Apr 2022 05:04:17 +0000 Subject: [PATCH 6/8] [LE Audio] Add entry point in Media Volume slice for broadcast sink Bug: 228274114 Test: make RunSettingsRoboTests Test: Manual test Change-Id: I331232c30291348faf7166d4de8060a1cfe12bff --- res/values/styles.xml | 3 + .../core/SliderPreferenceController.java | 8 ++ .../media/MediaOutputIndicatorWorker.java | 14 +++- .../MediaVolumePreferenceController.java | 80 ++++++++++++++++++- .../settings/panel/PanelSlicesAdapter.java | 3 + .../settings/slices/SliceBuilderUtils.java | 5 ++ 6 files changed, 110 insertions(+), 3 deletions(-) diff --git a/res/values/styles.xml b/res/values/styles.xml index 5e4e5a48f98..e2a8423cd12 100644 --- a/res/values/styles.xml +++ b/res/values/styles.xml @@ -579,6 +579,9 @@ 12dp 16dp + + + 25dp