Merge cherrypicks of ['googleplex-android-review.googlesource.com/31001557', 'googleplex-android-review.googlesource.com/31490962', 'googleplex-android-review.googlesource.com/31614329'] into 25Q1-release.
Change-Id: I96ccc04d2770e0ba351490e39498c80e9f86f090
diff --git a/src/com/android/settings/notification/NotificationAccessConfirmationActivity.java b/src/com/android/settings/notification/NotificationAccessConfirmationActivity.java
index 8448a8e..541c105 100644
--- a/src/com/android/settings/notification/NotificationAccessConfirmationActivity.java
+++ b/src/com/android/settings/notification/NotificationAccessConfirmationActivity.java
@@ -123,7 +123,7 @@
NLSIntent, /* flags */ 0, mUserId);
boolean hasNLSIntentFilter = false;
for (ResolveInfo service : matchedServiceList) {
- if (service.serviceInfo.packageName.equals(mComponentName.getPackageName())) {
+ if (service.serviceInfo.getComponentName().equals(mComponentName)) {
if (!requiredPermission.equals(service.serviceInfo.permission)) {
Slog.e(LOG_TAG, "Service " + mComponentName + " lacks permission "
+ requiredPermission);
@@ -157,7 +157,7 @@
.installContent(p);
// Consistent with the permission dialog
// Used instead of p.mCancelable as that is only honored for AlertDialog
- getWindow().setCloseOnTouchOutside(false);
+ getWindow().setCloseOnTouchOutside(false);
}
private void onAllow() {
diff --git a/src/com/android/settings/security/ContentProtectionTogglePreferenceController.java b/src/com/android/settings/security/ContentProtectionTogglePreferenceController.java
index 9203d61..69ac6b1 100644
--- a/src/com/android/settings/security/ContentProtectionTogglePreferenceController.java
+++ b/src/com/android/settings/security/ContentProtectionTogglePreferenceController.java
@@ -21,6 +21,7 @@
import android.content.ContentResolver;
import android.content.Context;
import android.os.UserHandle;
+import android.os.UserManager;
import android.provider.Settings;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
@@ -126,6 +127,14 @@
&& mContentProtectionPolicy
!= DevicePolicyManager.CONTENT_PROTECTION_NOT_CONTROLLED_BY_POLICY) {
mSwitchBar.setDisabledByAdmin(mEnforcedAdmin);
+ return;
+ }
+
+ UserManager userManager = mContext.getSystemService(UserManager.class);
+ if (userManager != null
+ && userManager.isGuestUser()
+ && mSwitchBar != null) {
+ mSwitchBar.setEnabled(false);
}
}
diff --git a/src/com/android/settings/spa/SpaAppBridgeActivity.kt b/src/com/android/settings/spa/SpaAppBridgeActivity.kt
index a68d220..67a5be9 100644
--- a/src/com/android/settings/spa/SpaAppBridgeActivity.kt
+++ b/src/com/android/settings/spa/SpaAppBridgeActivity.kt
@@ -38,7 +38,7 @@
companion object {
fun getDestinationForApp(destinationPrefix: String, intent: Intent): String? {
- val packageName = intent.data?.schemeSpecificPart ?: return null
+ val packageName = intent.data?.schemeSpecificPart?.takeIf { Regex("^([a-zA-Z]\\w*\\.)*[a-zA-Z]\\w*$").matches(it) } ?: return null
return "$destinationPrefix/$packageName/${UserHandle.myUserId()}"
}
}
diff --git a/tests/robotests/src/com/android/settings/security/ContentProtectionTogglePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/security/ContentProtectionTogglePreferenceControllerTest.java
index 075ac6c..6514a4e 100644
--- a/tests/robotests/src/com/android/settings/security/ContentProtectionTogglePreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/security/ContentProtectionTogglePreferenceControllerTest.java
@@ -24,8 +24,11 @@
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
+import static org.robolectric.Shadows.shadowOf;
import android.app.admin.DevicePolicyManager;
import android.content.Context;
@@ -38,6 +41,7 @@
import androidx.test.core.app.ApplicationProvider;
import com.android.settings.testutils.shadow.ShadowUtils;
+import com.android.settings.testutils.shadow.ShadowUserManager;
import com.android.settings.widget.SettingsMainSwitchPreference;
import com.android.settingslib.RestrictedLockUtils;
@@ -53,7 +57,8 @@
import org.robolectric.annotation.Config;
@RunWith(RobolectricTestRunner.class)
-@Config(shadows = {ShadowUtils.class})
+@Config(shadows = {ShadowUtils.class,
+ ShadowUserManager.class})
public class ContentProtectionTogglePreferenceControllerTest {
@Rule public final MockitoRule mMockitoRule = MockitoJUnit.rule();
@@ -62,7 +67,7 @@
private final Context mContext = ApplicationProvider.getApplicationContext();
- @Mock private PreferenceScreen mMockPreferenceScreen;
+ @Mock private PreferenceScreen mMockPreferenceScreen;
@Mock private SettingsMainSwitchPreference mMockSwitchPreference;
@@ -74,9 +79,13 @@
private TestContentProtectionTogglePreferenceController mController;
private int mSettingBackupValue;
+ private ShadowUserManager mShadowUserManager;
+
@Before
public void setUp() {
+ mShadowUserManager = ShadowUserManager.getShadow();
+ mShadowUserManager.setGuestUser(false);
mController = new TestContentProtectionTogglePreferenceController();
SettingsMainSwitchPreference switchPreference = new SettingsMainSwitchPreference(mContext);
when(mMockPreferenceScreen.findPreference(mController.getPreferenceKey()))
@@ -225,6 +234,7 @@
assertThat(mController.mCounterGetEnforcedAdmin).isEqualTo(1);
verify(mMockSwitchPreference, never()).setDisabledByAdmin(any());
+ verify(mMockSwitchPreference, never()).setEnabled(false);
}
@Test
@@ -237,6 +247,7 @@
assertThat(mController.mCounterGetEnforcedAdmin).isEqualTo(1);
verify(mMockSwitchPreference).setDisabledByAdmin(mEnforcedAdmin);
+ verify(mMockSwitchPreference, never()).setEnabled(false);
}
@Test
@@ -249,6 +260,7 @@
assertThat(mController.mCounterGetEnforcedAdmin).isEqualTo(1);
verify(mMockSwitchPreference, never()).setDisabledByAdmin(any());
+ verify(mMockSwitchPreference, never()).setEnabled(false);
}
@Test
@@ -261,6 +273,30 @@
assertThat(mController.mCounterGetEnforcedAdmin).isEqualTo(1);
verify(mMockSwitchPreference, never()).setDisabledByAdmin(any());
+ verify(mMockSwitchPreference, never()).setEnabled(false);
+ }
+
+ @Test
+ public void updateState_flagEnabled_noEnforcedAdmin_guestUser_switchBarDisabled() {
+ mShadowUserManager.setGuestUser(true);
+ mSetFlagsRule.enableFlags(FLAG_MANAGE_DEVICE_POLICY_ENABLED);
+ mContentProtectionPolicy = DevicePolicyManager.CONTENT_PROTECTION_ENABLED;
+ setupForUpdateState();
+
+ mController.updateState(mMockSwitchPreference);
+
+ verify(mMockSwitchPreference).setEnabled(false);
+ }
+
+ @Test
+ public void updateState_flagEnabled_noEnforcedAdmin_nonGuestUser_switchBarEnabled() {
+ mSetFlagsRule.enableFlags(FLAG_MANAGE_DEVICE_POLICY_ENABLED);
+ mContentProtectionPolicy = DevicePolicyManager.CONTENT_PROTECTION_ENABLED;
+ setupForUpdateState();
+
+ mController.updateState(mMockSwitchPreference);
+
+ verify(mMockSwitchPreference, never()).setEnabled(false);
}
@Test
@@ -273,6 +309,7 @@
assertThat(mController.mCounterGetEnforcedAdmin).isEqualTo(1);
verify(mMockSwitchPreference, never()).setDisabledByAdmin(any());
+ verify(mMockSwitchPreference, never()).setEnabled(false);
}
@Test
@@ -286,6 +323,7 @@
assertThat(mController.mCounterGetEnforcedAdmin).isEqualTo(1);
verify(mMockSwitchPreference).setDisabledByAdmin(mEnforcedAdmin);
+ verify(mMockSwitchPreference, never()).setEnabled(false);
}
@Test
@@ -299,6 +337,7 @@
assertThat(mController.mCounterGetEnforcedAdmin).isEqualTo(1);
verify(mMockSwitchPreference).setDisabledByAdmin(mEnforcedAdmin);
+ verify(mMockSwitchPreference, never()).setEnabled(false);
}
@Test
@@ -312,6 +351,7 @@
assertThat(mController.mCounterGetEnforcedAdmin).isEqualTo(1);
verify(mMockSwitchPreference, never()).setDisabledByAdmin(any());
+ verify(mMockSwitchPreference, never()).setEnabled(false);
}
@Test
diff --git a/tests/spa_unit/src/com/android/settings/spa/SpaAppBridgeActivityTest.kt b/tests/spa_unit/src/com/android/settings/spa/SpaAppBridgeActivityTest.kt
index be2b5e0..134cdb4 100644
--- a/tests/spa_unit/src/com/android/settings/spa/SpaAppBridgeActivityTest.kt
+++ b/tests/spa_unit/src/com/android/settings/spa/SpaAppBridgeActivityTest.kt
@@ -37,6 +37,16 @@
assertThat(destination).isEqualTo("$DESTINATION/$PACKAGE_NAME/${UserHandle.myUserId()}")
}
+ @Test
+ fun getDestinationForApp_hasMalformedPackageName() {
+ val intent = Intent().apply {
+ data = Uri.parse("package:package.name/10#")
+ }
+
+ val destination = getDestinationForApp(DESTINATION, intent)
+
+ assertThat(destination).isNull()
+ }
@Test
fun getDestinationForApp_noPackageName() {