Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Unverified Commit 7dbe5060 authored by Michael Bestas's avatar Michael Bestas
Browse files

Merge tag 'android-15.0.0_r32' into staging/lineage-22.2_merge-android-15.0.0_r32

Android 15.0.0 Release 32 (BP1A.250505.005)

# -----BEGIN PGP SIGNATURE-----
#
# iF0EABECAB0WIQRDQNE1cO+UXoOBCWTorT+BmrEOeAUCaBqG7wAKCRDorT+BmrEO
# eN8+AJ9TNgvlSTY6abB3OPLyl46f+tS91wCffuIlbJvEf2ldp6c346bwVhhZXEs=
# =Pn1K
# -----END PGP SIGNATURE-----
# gpg: Signature made Wed May  7 01:02:23 2025 EEST
# gpg:                using DSA key 4340D13570EF945E83810964E8AD3F819AB10E78
# gpg: Good signature from "The Android Open Source Project <initial-contribution@android.com>" [ultimate]

* tag 'android-15.0.0_r32':
  Disable the ContentProtection setting switch bar when current user is a guest user.
  [CDM] Checks NLS component name instead of package name
  Check package name format before using it for SPA nav

Change-Id: I69273243d9f136550153578efecfd94e49f6d0e6
parents eace8b38 d56148b3
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -123,7 +123,7 @@ public class NotificationAccessConfirmationActivity extends Activity
                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);
+9 −0
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ import android.app.admin.DevicePolicyManager;
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 @@ public class ContentProtectionTogglePreferenceController extends TogglePreferenc
                && 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);
        }
    }

+1 −1
Original line number Diff line number Diff line
@@ -38,7 +38,7 @@ class SpaAppBridgeActivity : Activity() {

    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()}"
        }
    }
+42 −2
Original line number Diff line number Diff line
@@ -24,8 +24,11 @@ import static com.google.common.truth.Truth.assertThat;

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.preference.PreferenceScreen;
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.RobolectricTestRunner;
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();
@@ -74,9 +79,13 @@ public class ContentProtectionTogglePreferenceControllerTest {
    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 @@ public class ContentProtectionTogglePreferenceControllerTest {

        assertThat(mController.mCounterGetEnforcedAdmin).isEqualTo(1);
        verify(mMockSwitchPreference, never()).setDisabledByAdmin(any());
        verify(mMockSwitchPreference, never()).setEnabled(false);
    }

    @Test
@@ -237,6 +247,7 @@ public class ContentProtectionTogglePreferenceControllerTest {

        assertThat(mController.mCounterGetEnforcedAdmin).isEqualTo(1);
        verify(mMockSwitchPreference).setDisabledByAdmin(mEnforcedAdmin);
        verify(mMockSwitchPreference, never()).setEnabled(false);
    }

    @Test
@@ -249,6 +260,7 @@ public class ContentProtectionTogglePreferenceControllerTest {

        assertThat(mController.mCounterGetEnforcedAdmin).isEqualTo(1);
        verify(mMockSwitchPreference, never()).setDisabledByAdmin(any());
        verify(mMockSwitchPreference, never()).setEnabled(false);
    }

    @Test
@@ -261,6 +273,30 @@ public class ContentProtectionTogglePreferenceControllerTest {

        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 @@ public class ContentProtectionTogglePreferenceControllerTest {

        assertThat(mController.mCounterGetEnforcedAdmin).isEqualTo(1);
        verify(mMockSwitchPreference, never()).setDisabledByAdmin(any());
        verify(mMockSwitchPreference, never()).setEnabled(false);
    }

    @Test
@@ -286,6 +323,7 @@ public class ContentProtectionTogglePreferenceControllerTest {

        assertThat(mController.mCounterGetEnforcedAdmin).isEqualTo(1);
        verify(mMockSwitchPreference).setDisabledByAdmin(mEnforcedAdmin);
        verify(mMockSwitchPreference, never()).setEnabled(false);
    }

    @Test
@@ -299,6 +337,7 @@ public class ContentProtectionTogglePreferenceControllerTest {

        assertThat(mController.mCounterGetEnforcedAdmin).isEqualTo(1);
        verify(mMockSwitchPreference).setDisabledByAdmin(mEnforcedAdmin);
        verify(mMockSwitchPreference, never()).setEnabled(false);
    }

    @Test
@@ -312,6 +351,7 @@ public class ContentProtectionTogglePreferenceControllerTest {

        assertThat(mController.mCounterGetEnforcedAdmin).isEqualTo(1);
        verify(mMockSwitchPreference, never()).setDisabledByAdmin(any());
        verify(mMockSwitchPreference, never()).setEnabled(false);
    }

    @Test
+10 −0
Original line number Diff line number Diff line
@@ -37,6 +37,16 @@ class SpaAppBridgeActivityTest {

        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() {