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

Commit 65f8b5ac authored by Hani Kazmi's avatar Hani Kazmi
Browse files

Wired remaining SpecialAppAccess for ECM.

This change enables the remaining settings for ECM, and adds tests for
both this and previous ECM changes.

Bug: 297372999
Test: Tested on device
Test: atest SpaPrivilegedLibTests
Test: atest com.android.settings.applications.specialaccess.notificationaccess
Test: atest com.android.settings.datausage
Test: atest PremiumSmsAccessTest
Test: atest RestrictedPreferenceHelperTest
Change-Id: Id9500c82a100b939d965aa7932ccb968e85f690a
parent 591408db
Loading
Loading
Loading
Loading
+25 −0
Original line number Diff line number Diff line
@@ -32,6 +32,7 @@ import com.android.settingslib.spaprivileged.model.enterprise.BaseUserRestricted
import com.android.settingslib.spaprivileged.model.enterprise.NoRestricted
import com.android.settingslib.spaprivileged.model.enterprise.Restrictions
import com.android.settingslib.spaprivileged.tests.testutils.FakeBlockedByAdmin
import com.android.settingslib.spaprivileged.tests.testutils.FakeBlockedByEcm
import com.android.settingslib.spaprivileged.tests.testutils.FakeRestrictionsProvider
import com.google.common.truth.Truth.assertThat
import org.junit.Rule
@@ -44,6 +45,7 @@ class RestrictedSwitchPreferenceTest {
    val composeTestRule = createComposeRule()

    private val fakeBlockedByAdmin = FakeBlockedByAdmin()
    private val fakeBlockedByEcm = FakeBlockedByEcm()

    private val fakeRestrictionsProvider = FakeRestrictionsProvider()

@@ -141,6 +143,29 @@ class RestrictedSwitchPreferenceTest {
        assertThat(fakeBlockedByAdmin.sendShowAdminSupportDetailsIntentIsCalled).isTrue()
    }

    @Test
    fun whenBlockedByEcm_disabled() {
        val restrictions = Restrictions(userId = USER_ID, keys = listOf(RESTRICTION_KEY))
        fakeRestrictionsProvider.restrictedMode = fakeBlockedByEcm

        setContent(restrictions)

        composeTestRule.onNodeWithText(TITLE).assertIsDisplayed().assertIsEnabled()
        composeTestRule.onNodeWithText(FakeBlockedByEcm.SUMMARY).assertIsDisplayed()
        composeTestRule.onNode(isOn()).assertIsDisplayed()
    }

    @Test
    fun whenBlockedByEcm_click() {
        val restrictions = Restrictions(userId = USER_ID, keys = listOf(RESTRICTION_KEY))
        fakeRestrictionsProvider.restrictedMode = fakeBlockedByEcm

        setContent(restrictions)
        composeTestRule.onRoot().performClick()

        assertThat(fakeBlockedByEcm.showRestrictedSettingsDetailsIsCalled).isTrue()
    }

    private fun setContent(restrictions: Restrictions) {
        composeTestRule.setContent {
            RestrictedSwitchPreference(switchPreferenceModel, restrictions) { _, _ ->
+24 −0
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@ import com.android.settingslib.spaprivileged.model.enterprise.BaseUserRestricted
import com.android.settingslib.spaprivileged.model.enterprise.NoRestricted
import com.android.settingslib.spaprivileged.model.enterprise.Restrictions
import com.android.settingslib.spaprivileged.tests.testutils.FakeBlockedByAdmin
import com.android.settingslib.spaprivileged.tests.testutils.FakeBlockedByEcm
import com.android.settingslib.spaprivileged.tests.testutils.FakeRestrictionsProvider
import com.google.common.truth.Truth.assertThat
import org.junit.Rule
@@ -41,6 +42,7 @@ class RestrictedMenuItemTest {
    val composeTestRule = createComposeRule()

    private val fakeBlockedByAdmin = FakeBlockedByAdmin()
    private val fakeBlockedByEcm = FakeBlockedByEcm()

    private val fakeRestrictionsProvider = FakeRestrictionsProvider()

@@ -129,6 +131,28 @@ class RestrictedMenuItemTest {
        assertThat(menuItemOnClickIsCalled).isFalse()
    }

    @Test
    fun whenBlockedByEcm_disabled() {
        val restrictions = Restrictions(userId = USER_ID, keys = listOf(RESTRICTION_KEY))
        fakeRestrictionsProvider.restrictedMode = fakeBlockedByEcm

        setContent(restrictions)

        composeTestRule.onNodeWithText(TEXT).assertIsDisplayed().assertIsEnabled()
    }

    @Test
    fun whenBlockedByEcm_onClick_showEcmDetails() {
        val restrictions = Restrictions(userId = USER_ID, keys = listOf(RESTRICTION_KEY))
        fakeRestrictionsProvider.restrictedMode = fakeBlockedByEcm

        setContent(restrictions)
        composeTestRule.onRoot().performClick()

        assertThat(fakeBlockedByEcm.showRestrictedSettingsDetailsIsCalled).isTrue()
        assertThat(menuItemOnClickIsCalled).isFalse()
    }

    private fun setContent(restrictions: Restrictions) {
        val fakeMoreOptionsScope = object : MoreOptionsScope() {
            override fun dismiss() {}
+13 −0
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ package com.android.settingslib.spaprivileged.tests.testutils
import androidx.compose.runtime.Composable
import com.android.settingslib.spa.framework.compose.stateOf
import com.android.settingslib.spaprivileged.model.enterprise.BlockedByAdmin
import com.android.settingslib.spaprivileged.model.enterprise.BlockedByEcm
import com.android.settingslib.spaprivileged.model.enterprise.RestrictedMode
import com.android.settingslib.spaprivileged.model.enterprise.RestrictionsProvider

@@ -36,6 +37,18 @@ class FakeBlockedByAdmin : BlockedByAdmin {
    }
}

class FakeBlockedByEcm : BlockedByEcm {
    var showRestrictedSettingsDetailsIsCalled = false

    override fun showRestrictedSettingsDetails() {
        showRestrictedSettingsDetailsIsCalled = true
    }

    companion object {
        const val SUMMARY = "Disabled"
    }
}

class FakeRestrictionsProvider : RestrictionsProvider {
    var restrictedMode: RestrictedMode? = null

+72 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2023 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.settingslib;

import android.content.Context;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.preference.DropDownPreference;
import androidx.preference.PreferenceViewHolder;

public class RestrictedDropDownPreference extends DropDownPreference {
    RestrictedPreferenceHelper mHelper;

    public RestrictedDropDownPreference(@NonNull Context context) {
        super(context);
        mHelper = new RestrictedPreferenceHelper(context, this, null);
    }

    /**
     * Checks if the given setting is subject to Enhanced Confirmation Mode restrictions for this
     * package. Marks the preference as disabled if so.
     * @param restriction The key identifying the setting
     * @param packageName the package to check the restriction for
     * @param uid the uid of the package
     */
    public void checkEcmRestrictionAndSetDisabled(@NonNull String restriction,
            @Nullable String packageName, int uid) {
        mHelper.checkEcmRestrictionAndSetDisabled(restriction, packageName, uid);
    }

    @Override
    public void onBindViewHolder(@NonNull PreferenceViewHolder holder) {
        super.onBindViewHolder(holder);
        mHelper.onBindViewHolder(holder);
    }

    @Override
    public void setEnabled(boolean enabled) {
        if (enabled && isDisabledByEcm()) {
            mHelper.setDisabledByEcm(null);
            return;
        }

        super.setEnabled(enabled);
    }

    @Override
    public void performClick() {
        if (!mHelper.performClick()) {
            super.performClick();
        }
    }

    public boolean isDisabledByEcm() {
        return mHelper.isDisabledByEcm();
    }
}
+4 −0
Original line number Diff line number Diff line
@@ -275,6 +275,10 @@ public class RestrictedPreferenceHelper {
        if (mPreference instanceof PrimarySwitchPreference) {
            ((PrimarySwitchPreference) mPreference).setSwitchEnabled(isEnabled);
        }

        if (!isEnabled && mDisabledByEcm) {
            mPreference.setSummary(R.string.disabled_by_app_ops_text);
        }
    }


Loading