Merge "Only show DeveloperOptionsController for admin" into main
diff --git a/src/com/android/settings/system/DeveloperOptionsController.kt b/src/com/android/settings/system/DeveloperOptionsController.kt
index fe7fb4d..6874ec7 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.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 @@
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 8707065..ad2fbae 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 @@
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.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.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,13 +48,38 @@
@get:Rule
val composeTestRule = createComposeRule()
+ private val mockUserManager = mock<UserManager>()
+
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 {
controller.DeveloperOptionsPreference()