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

Commit 8295743f authored by Chaohui Wang's avatar Chaohui Wang
Browse files

Only show DeveloperOptionsController for admin

Bug: 311604902
Test: manual - on System page
Test: unit test
Change-Id: Idbf40be4e0074f5d381724538c226a336c2c3b27
parent dbaf1244
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -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,
+31 −0
Original line number Diff line number Diff line
@@ -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<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 {