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

Commit 265981f3 authored by Christine Franks's avatar Christine Franks Committed by Android (Google) Code Review
Browse files

Merge "Allow developer options in retail mode" into pi-dev

parents 644c7075 4c3c7fbf
Loading
Loading
Loading
Loading
+6 −4
Original line number Diff line number Diff line
@@ -63,6 +63,7 @@ import com.android.settings.core.SubSettingLauncher;
import com.android.settings.core.gateway.SettingsGateway;
import com.android.settings.dashboard.DashboardFeatureProvider;
import com.android.settings.dashboard.DashboardSummary;
import com.android.settings.development.DevelopmentSettingsDashboardFragment;
import com.android.settings.overlay.FeatureFactory;
import com.android.settings.wfd.WifiDisplaySettings;
import com.android.settings.widget.SwitchBar;
@@ -686,10 +687,10 @@ public class SettingsActivity extends SettingsDrawerActivity

        final boolean showDev = DevelopmentSettingsEnabler.isDevelopmentSettingsEnabled(this)
                && !Utils.isMonkeyRunning();

        final boolean isAdminOrDemo = um.isAdminUser() || um.isDemoUser();
        somethingChanged = setTileEnabled(new ComponentName(packageName,
                        Settings.DevelopmentSettingsDashboardActivity.class.getName()),
                showDev, isAdmin)
                showDev, isAdminOrDemo)
                || somethingChanged;

        // Enable/disable backup settings depending on whether the user is admin.
@@ -724,10 +725,11 @@ public class SettingsActivity extends SettingsDrawerActivity
                    final int tileCount = category.getTilesCount();
                    for (int i = 0; i < tileCount; i++) {
                        final ComponentName component = category.getTile(i).intent.getComponent();

                        final String name = component.getClassName();
                        final boolean isEnabledForRestricted = ArrayUtils.contains(
                                SettingsGateway.SETTINGS_FOR_RESTRICTED, name);
                                SettingsGateway.SETTINGS_FOR_RESTRICTED, name) || (isAdminOrDemo
                                && Settings.DevelopmentSettingsDashboardActivity.class.getName()
                                .equals(name));
                        if (packageName.equals(component.getPackageName())
                                && !isEnabledForRestricted) {
                            somethingChanged = setTileEnabled(component, false, isAdmin)
+19 −2
Original line number Diff line number Diff line
@@ -18,8 +18,10 @@ package com.android.settings.deviceinfo;

import android.app.Activity;
import android.app.Fragment;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ResolveInfo;
import android.os.Build;
import android.os.UserHandle;
import android.os.UserManager;
@@ -118,8 +120,8 @@ public class BuildNumberPreferenceController extends AbstractPreferenceControlle
        if (Utils.isMonkeyRunning()) {
            return false;
        }
        // Don't enable developer options for secondary users.
        if (!mUm.isAdminUser()) {
        // Don't enable developer options for secondary non-demo users.
        if (!(mUm.isAdminUser() || mUm.isDemoUser())) {
            mMetricsFeatureProvider.action(
                    mContext, MetricsEvent.ACTION_SETTINGS_BUILD_NUMBER_PREF);
            return false;
@@ -133,6 +135,21 @@ public class BuildNumberPreferenceController extends AbstractPreferenceControlle
        }

        if (mUm.hasUserRestriction(UserManager.DISALLOW_DEBUGGING_FEATURES)) {
            if (mUm.isDemoUser()) {
                // Route to demo device owner to lift the debugging restriction.
                final ComponentName componentName = Utils.getDeviceOwnerComponent(mContext);
                if (componentName != null) {
                    final Intent requestDebugFeatures = new Intent()
                            .setPackage(componentName.getPackageName())
                            .setAction("com.android.settings.action.REQUEST_DEBUG_FEATURES");
                    final ResolveInfo resolveInfo = mContext.getPackageManager().resolveActivity(
                        requestDebugFeatures, 0);
                    if (resolveInfo != null) {
                        mContext.startActivity(requestDebugFeatures);
                        return false;
                    }
                }
            }
            if (mDebuggingFeaturesDisallowedAdmin != null &&
                    !mDebuggingFeaturesDisallowedBySystem) {
                RestrictedLockUtils.sendShowAdminSupportDetailsIntent(mContext,
+1 −0
Original line number Diff line number Diff line
@@ -118,6 +118,7 @@ public class DevelopmentSettingsDashboardFragmentTest {
        final Context appContext = RuntimeEnvironment.application;
        DevelopmentSettingsEnabler.setDevelopmentSettingsEnabled(appContext, true);
        mShadowUserManager.setIsAdminUser(false);
        mShadowUserManager.setIsDemoUser(false);

        final List<String> nonIndexableKeys =
                DevelopmentSettingsDashboardFragment.SEARCH_INDEX_DATA_PROVIDER
+31 −23
Original line number Diff line number Diff line
@@ -22,7 +22,6 @@ import static org.mockito.Matchers.any;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

@@ -57,7 +56,6 @@ import org.robolectric.RuntimeEnvironment;
import org.robolectric.Shadows;
import org.robolectric.annotation.Config;
import org.robolectric.shadows.ShadowUserManager;
import org.robolectric.util.ReflectionHelpers;

@RunWith(SettingsRobolectricTestRunner.class)
@Config(shadows = ShadowUtils.class)
@@ -96,12 +94,15 @@ public class BuildNumberPreferenceControllerTest {
        mPreference = new Preference(mContext);
        mPreference.setKey(mController.getPreferenceKey());
        DevelopmentSettingsEnabler.setDevelopmentSettingsEnabled(mContext, false);
        Settings.Global.putInt(mContext.getContentResolver(),
                Settings.Global.DEVICE_PROVISIONED, 1);
    }

    @After
    public void tearDown() {
        ShadowUtils.reset();
        mShadowUserManager.setIsAdminUser(false);
        mShadowUserManager.setIsDemoUser(false);
    }

    @Test
@@ -119,20 +120,36 @@ public class BuildNumberPreferenceControllerTest {
    }

    @Test
    public void handlePrefTreeClick_notAdminUser_doNothing() {
    public void handlePrefTreeClick_notAdminUser_notDemoUser_doNothing() {
        mShadowUserManager.setIsAdminUser(false);
        mShadowUserManager.setIsDemoUser(false);

        assertThat(mController.handlePreferenceTreeClick(mPreference)).isFalse();
    }

    @Test
    public void handlePrefTreeClick_isAdminUser_notDemoUser_handleBuildNumberPref() {
        mShadowUserManager.setIsAdminUser(true);
        mShadowUserManager.setIsDemoUser(false);

        assertThat(mController.handlePreferenceTreeClick(mPreference)).isTrue();
    }

    @Test
    public void handlePrefTreeClick_notAdminUser_isDemoUser_handleBuildNumberPref() {
        mShadowUserManager.setIsAdminUser(false);
        mShadowUserManager.setIsDemoUser(true);

        assertThat(mController.handlePreferenceTreeClick(mPreference)).isTrue();
    }

    @Test
    public void handlePrefTreeClick_deviceNotProvisioned_doNothing() {
        final Context context = RuntimeEnvironment.application;
        Settings.Global.putInt(context.getContentResolver(), Settings.Global.DEVICE_PROVISIONED, 0);
        mShadowUserManager.setIsAdminUser(true);
        mShadowUserManager.setIsDemoUser(false);

        mController =
            new BuildNumberPreferenceController(context, mActivity, mFragment, mLifecycle);
        ReflectionHelpers.setField(mController, "mContext", context);
        Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.DEVICE_PROVISIONED,
                0);

        assertThat(mController.handlePreferenceTreeClick(mPreference)).isFalse();
        verify(mFactory.metricsFeatureProvider).action(
@@ -142,27 +159,18 @@ public class BuildNumberPreferenceControllerTest {

    @Test
    public void handlePrefTreeClick_isMonkeyRun_doNothing() {
        final Context context = spy(RuntimeEnvironment.application);
        Settings.Global.putInt(context.getContentResolver(), Settings.Global.DEVICE_PROVISIONED, 1);
        ShadowUtils.setIsUserAMonkey(true);
        mController =
            new BuildNumberPreferenceController(context, mActivity, mFragment, mLifecycle);

        assertThat(mController.handlePreferenceTreeClick(mPreference)).isFalse();
    }

    @Test
    public void handlePrefTreeClick_userHasRestriction_doNothing() {
        final Context context = spy(RuntimeEnvironment.application);
        Settings.Global.putInt(context.getContentResolver(), Settings.Global.DEVICE_PROVISIONED, 1);
        mShadowUserManager.setIsAdminUser(true);
        mShadowUserManager.setIsDemoUser(false);

        mShadowUserManager.setUserRestriction(Process.myUserHandle(),
                UserManager.DISALLOW_DEBUGGING_FEATURES, true);

        mController =
            new BuildNumberPreferenceController(mContext, mActivity, mFragment, mLifecycle);
        ReflectionHelpers.setField(mController, "mContext", context);

        assertThat(mController.handlePreferenceTreeClick(mPreference)).isFalse();
        verify(mFactory.metricsFeatureProvider).action(
                any(Context.class),