Loading src/com/android/settings/SettingsActivity.java +6 −4 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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. Loading Loading @@ -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) Loading src/com/android/settings/deviceinfo/BuildNumberPreferenceController.java +19 −2 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading @@ -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, Loading tests/robotests/src/com/android/settings/development/DevelopmentSettingsDashboardFragmentTest.java +1 −0 Original line number Diff line number Diff line Loading @@ -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 Loading tests/robotests/src/com/android/settings/deviceinfo/BuildNumberPreferenceControllerTest.java +31 −23 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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) Loading Loading @@ -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 Loading @@ -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( Loading @@ -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), Loading Loading
src/com/android/settings/SettingsActivity.java +6 −4 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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. Loading Loading @@ -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) Loading
src/com/android/settings/deviceinfo/BuildNumberPreferenceController.java +19 −2 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading @@ -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, Loading
tests/robotests/src/com/android/settings/development/DevelopmentSettingsDashboardFragmentTest.java +1 −0 Original line number Diff line number Diff line Loading @@ -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 Loading
tests/robotests/src/com/android/settings/deviceinfo/BuildNumberPreferenceControllerTest.java +31 −23 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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) Loading Loading @@ -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 Loading @@ -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( Loading @@ -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), Loading