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

Commit 595465bb authored by Irem Uguz's avatar Irem Uguz
Browse files

Accept EnforcingAdmin in restricted prefs

Add support for using EnforcingAdmin instead of EnforcedAdmin for
restricted preferences to set disabled by admin.

Test: atest com.android.settingslib.RestrictedSwitchPreferenceTest
Test:  atest com.android.settingslib.RestrictedTopLevelPreferenceTest
Flag: android.app.admin.flags.policy_transparency_refactor_enabled
Bug: 414733570

Change-Id: I50895cceed55fb711c385959e35550000c3b9e90
parent d914b146
Loading
Loading
Loading
Loading
+14 −1
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package com.android.settingslib;

import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;

import android.app.admin.EnforcingAdmin;
import android.content.Context;
import android.os.UserHandle;
import android.util.AttributeSet;
@@ -144,7 +145,7 @@ public class RestrictedSelectorWithWidgetPreference extends SelectorWithWidgetPr
    @Override
    public void setEnabled(boolean enabled) {
        if (enabled && isDisabledByAdmin()) {
            mHelper.setDisabledByAdmin(/* admin= */ null);
            mHelper.setDisabledByEnforcingAdmin(/* admin= */ null);
            return;
        }
        super.setEnabled(enabled);
@@ -170,4 +171,16 @@ public class RestrictedSelectorWithWidgetPreference extends SelectorWithWidgetPr
            notifyChanged();
        }
    }

    /**
     * Disable preference based on the enforcing admin.
     *
     * @param admin details of the admin who enforced the restriction. If it is {@code null}, then
     *     this preference will be enabled. Otherwise, it will be disabled.
     */
    public void setDisabledByAdmin(@Nullable EnforcingAdmin admin) {
        if (mHelper.setDisabledByEnforcingAdmin(admin)) {
            notifyChanged();
        }
    }
}
+1 −1
Original line number Diff line number Diff line
@@ -88,7 +88,7 @@ public class RestrictedSliderPreference extends SliderPreference implements
    @Override
    public void setEnabled(boolean enabled) {
        if (enabled && mHelper.isDisabledByAdmin()) {
            mHelper.setDisabledByAdmin(null);
            mHelper.setDisabledByEnforcingAdmin(null);
            return;
        }

+12 −1
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@ import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;

import android.app.AppOpsManager;
import android.app.admin.DevicePolicyManager;
import android.app.admin.EnforcingAdmin;
import android.content.Context;
import android.content.res.TypedArray;
import android.os.Build;
@@ -254,7 +255,7 @@ public class RestrictedSwitchPreference extends SwitchPreferenceCompat implement
    public void setEnabled(boolean enabled) {
        boolean changed = false;
        if (enabled && isDisabledByAdmin()) {
            mHelper.setDisabledByAdmin(null);
            mHelper.setDisabledByEnforcingAdmin(null);
            changed = true;
        }
        if (enabled && isDisabledByEcm()) {
@@ -272,6 +273,16 @@ public class RestrictedSwitchPreference extends SwitchPreferenceCompat implement
        }
    }

    /**
     * Sets the preference to be disabled by the given admin. If {@code admin} is null, it'll set
     * the preference enabled.
     */
    public void setDisabledByAdmin(@Nullable EnforcingAdmin admin) {
        if (mHelper.setDisabledByEnforcingAdmin(admin)) {
            notifyChanged();
        }
    }

    public boolean isDisabledByAdmin() {
        return mHelper.isDisabledByAdmin();
    }
+14 −1
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package com.android.settingslib;

import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;

import android.app.admin.EnforcingAdmin;
import android.content.Context;
import android.os.UserHandle;
import android.util.AttributeSet;
@@ -98,7 +99,7 @@ public class RestrictedTopLevelPreference extends Preference implements
    @Override
    public void setEnabled(boolean enabled) {
        if (enabled && isDisabledByAdmin()) {
            mHelper.setDisabledByAdmin(/* admin= */ null);
            mHelper.setDisabledByEnforcingAdmin(/* admin= */ null);
            return;
        }
        super.setEnabled(enabled);
@@ -124,4 +125,16 @@ public class RestrictedTopLevelPreference extends Preference implements
            notifyChanged();
        }
    }

    /**
     * Disable preference based on the enforcing admin.
     *
     * @param admin details of the admin who enforced the restriction. If it is {@code null}, then
     *              this preference will be enabled. Otherwise, it will be disabled.
     */
    public void setDisabledByAdmin(EnforcingAdmin admin) {
        if (mHelper.setDisabledByEnforcingAdmin(admin)) {
            notifyChanged();
        }
    }
}
+29 −0
Original line number Diff line number Diff line
@@ -33,14 +33,18 @@ import static org.mockito.Mockito.when;
import android.app.admin.Authority;
import android.app.admin.DevicePolicyManager;
import android.app.admin.DevicePolicyResourcesManager;
import android.app.admin.DpcAuthority;
import android.app.admin.EnforcingAdmin;
import android.app.admin.SystemAuthority;
import android.app.admin.flags.Flags;
import android.app.ecm.EnhancedConfirmationManager;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.UserHandle;
import android.platform.test.annotations.EnableFlags;
import android.platform.test.flag.junit.SetFlagsRule;
import android.view.View;
import android.view.ViewGroup;
import android.view.accessibility.AccessibilityManager;
@@ -51,6 +55,7 @@ import androidx.test.core.app.ApplicationProvider;

import org.junit.After;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
@@ -60,6 +65,9 @@ import org.robolectric.RobolectricTestRunner;
@RunWith(RobolectricTestRunner.class)
public class RestrictedSwitchPreferenceTest {

    @Rule
    public final SetFlagsRule mSetFlagsRule = new SetFlagsRule();

    private static final int SIZE = 50;
    private final Authority mAdvancedProtectionAuthority = new SystemAuthority(
            ADVANCED_PROTECTION_SYSTEM_ENTITY);
@@ -190,4 +198,25 @@ public class RestrictedSwitchPreferenceTest {

        assertThat(mPreference.getSummary().toString()).isEqualTo("test");
    }

    @EnableFlags(Flags.FLAG_POLICY_TRANSPARENCY_REFACTOR_ENABLED)
    @Test
    public void setDisabledByAdmin_withAccessibility_keepsDisabledSummary() {
        when(mDevicePolicyResourcesManager.getString(any(), any())).thenReturn("test");
        when(mContext.getString(
                com.android.settingslib.widget.restricted.R.string.disabled_by_admin))
                .thenReturn("test");
        doNothing().when(mContext).startActivityAsUser(any(), any());
        when(mAccessibilityManager.isEnabled()).thenReturn(true);
        EnforcingAdmin enforcingAdmin = new EnforcingAdmin("pkg.test", DpcAuthority.DPC_AUTHORITY,
                UserHandle.of(UserHandle.myUserId()), new ComponentName("admin", "adminclass"));

        mPreference.setDisabledByAdmin(enforcingAdmin);

        assertThat(mPreference.getSummary().toString()).isEqualTo("test");

        mPreference.performClick();

        assertThat(mPreference.getSummary().toString()).isEqualTo("test");
    }
}
Loading