From 8295743fe16029436b4b4f76e65dbf88c0a6d052 Mon Sep 17 00:00:00 2001 From: Chaohui Wang Date: Fri, 1 Dec 2023 15:30:27 +0800 Subject: [PATCH] Only show DeveloperOptionsController for admin Bug: 311604902 Test: manual - on System page Test: unit test Change-Id: Idbf40be4e0074f5d381724538c226a336c2c3b27 --- .../system/DeveloperOptionsController.kt | 5 ++- .../system/DeveloperOptionsControllerTest.kt | 31 +++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/src/com/android/settings/system/DeveloperOptionsController.kt b/src/com/android/settings/system/DeveloperOptionsController.kt index fe7fb4d43ae..6874ec7552a 100644 --- a/src/com/android/settings/system/DeveloperOptionsController.kt +++ b/src/com/android/settings/system/DeveloperOptionsController.kt @@ -34,6 +34,7 @@ import com.android.settings.development.DevelopmentSettingsDashboardFragment import com.android.settings.spa.preference.ComposePreferenceController import com.android.settingslib.spa.widget.preference.PreferenceModel import com.android.settingslib.spa.widget.ui.SettingsIcon +import com.android.settingslib.spaprivileged.framework.common.userManager import com.android.settingslib.spaprivileged.model.enterprise.Restrictions import com.android.settingslib.spaprivileged.settingsprovider.settingsGlobalBooleanFlow import com.android.settingslib.spaprivileged.template.preference.RestrictedPreference @@ -41,7 +42,9 @@ import com.android.settingslib.spaprivileged.template.preference.RestrictedPrefe class DeveloperOptionsController(context: Context, preferenceKey: String) : ComposePreferenceController(context, preferenceKey) { - override fun getAvailabilityStatus() = AVAILABLE + override fun getAvailabilityStatus() = + if (mContext.userManager.isAdminUser) AVAILABLE + else DISABLED_FOR_USER private val isDevelopmentSettingsEnabledFlow = context.settingsGlobalBooleanFlow( name = Settings.Global.DEVELOPMENT_SETTINGS_ENABLED, diff --git a/tests/spa_unit/src/com/android/settings/system/DeveloperOptionsControllerTest.kt b/tests/spa_unit/src/com/android/settings/system/DeveloperOptionsControllerTest.kt index 8707065a9f6..ad2fbaea951 100644 --- a/tests/spa_unit/src/com/android/settings/system/DeveloperOptionsControllerTest.kt +++ b/tests/spa_unit/src/com/android/settings/system/DeveloperOptionsControllerTest.kt @@ -18,6 +18,7 @@ package com.android.settings.system import android.content.Context import android.content.Intent +import android.os.UserManager import androidx.compose.ui.test.assertIsDisplayed import androidx.compose.ui.test.junit4.createComposeRule import androidx.compose.ui.test.onNodeWithText @@ -25,7 +26,9 @@ import androidx.compose.ui.test.performClick import androidx.test.core.app.ApplicationProvider import androidx.test.ext.junit.runners.AndroidJUnit4 import com.android.settings.SettingsActivity +import com.android.settings.core.BasePreferenceController import com.android.settings.development.DevelopmentSettingsDashboardFragment +import com.android.settingslib.spaprivileged.framework.common.userManager import com.google.common.truth.Truth.assertThat import org.junit.Rule import org.junit.Test @@ -33,7 +36,10 @@ import org.junit.runner.RunWith import org.mockito.kotlin.any import org.mockito.kotlin.argumentCaptor import org.mockito.kotlin.doNothing +import org.mockito.kotlin.doReturn +import org.mockito.kotlin.mock import org.mockito.kotlin.spy +import org.mockito.kotlin.stub import org.mockito.kotlin.verify import org.mockito.kotlin.whenever @@ -42,12 +48,37 @@ class DeveloperOptionsControllerTest { @get:Rule val composeTestRule = createComposeRule() + private val mockUserManager = mock() + private val context: Context = spy(ApplicationProvider.getApplicationContext()) { + on { userManager } doReturn mockUserManager doNothing().whenever(mock).startActivity(any()) } private val controller = DeveloperOptionsController(context, TEST_KEY) + @Test + fun getAvailabilityStatus_isAdminUser_returnAvailable() { + mockUserManager.stub { + on { isAdminUser } doReturn true + } + + val availabilityStatus = controller.getAvailabilityStatus() + + assertThat(availabilityStatus).isEqualTo(BasePreferenceController.AVAILABLE) + } + + @Test + fun getAvailabilityStatus_notAdminUser_returnDisabledForUser() { + mockUserManager.stub { + on { isAdminUser } doReturn false + } + + val availabilityStatus = controller.getAvailabilityStatus() + + assertThat(availabilityStatus).isEqualTo(BasePreferenceController.DISABLED_FOR_USER) + } + @Test fun title_isDisplayed() { composeTestRule.setContent {