diff --git a/src/com/android/settings/Settings.java b/src/com/android/settings/Settings.java index 588a2db2865..b226133d1e4 100644 --- a/src/com/android/settings/Settings.java +++ b/src/com/android/settings/Settings.java @@ -23,6 +23,7 @@ import android.util.FeatureFlagUtils; import com.android.settings.core.FeatureFlags; import com.android.settings.enterprise.EnterprisePrivacySettings; +import com.android.settings.overlay.FeatureFactory; /** * Top-level Settings activity @@ -213,7 +214,11 @@ public class Settings extends SettingsActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - if (!EnterprisePrivacySettings.isPageEnabled(this)) { + if (FeatureFactory.getFactory(this) + .getEnterprisePrivacyFeatureProvider(this) + .showParentalControls()) { + finish(); + } else if (!EnterprisePrivacySettings.isPageEnabled(this)) { finish(); } } diff --git a/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProvider.java b/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProvider.java index 46f9b71f230..62f15b92653 100644 --- a/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProvider.java +++ b/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProvider.java @@ -137,4 +137,10 @@ public interface EnterprisePrivacyFeatureProvider { * info" page. Returns {@code true} if the activity has indeed been launched. */ boolean showWorkPolicyInfo(); + + /** + * Launches the parental controls settings page. Returns {@code true} if the activity has + * been launched. + */ + boolean showParentalControls(); } diff --git a/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProviderImpl.java b/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProviderImpl.java index 429c537d985..7a5b4897623 100644 --- a/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProviderImpl.java +++ b/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProviderImpl.java @@ -40,6 +40,9 @@ import java.util.List; public class EnterprisePrivacyFeatureProviderImpl implements EnterprisePrivacyFeatureProvider { + public static final String ACTION_PARENTAL_CONTROLS = + "android.settings.SHOW_PARENTAL_CONTROLS"; + private final Context mContext; private final DevicePolicyManager mDpm; private final PackageManager mPm; @@ -246,6 +249,34 @@ public class EnterprisePrivacyFeatureProviderImpl implements EnterprisePrivacyFe return false; } + @Override + public boolean showParentalControls() { + Intent intent = getParentalControlsIntent(); + if (intent != null) { + mContext.startActivity(intent); + return true; + } + + return false; + } + + private Intent getParentalControlsIntent() { + final ComponentName componentName = + mDpm.getProfileOwnerOrDeviceOwnerSupervisionComponent(new UserHandle(MY_USER_ID)); + if (componentName == null) { + return null; + } + + final Intent intent = new Intent(ACTION_PARENTAL_CONTROLS) + .setPackage(componentName.getPackageName()) + .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + final List activities = mPm.queryIntentActivitiesAsUser(intent, 0, MY_USER_ID); + if (activities.size() != 0) { + return intent; + } + return null; + } + private ComponentName getDeviceOwnerComponent() { if (!mPm.hasSystemFeature(PackageManager.FEATURE_DEVICE_ADMIN)) { return null; diff --git a/tests/robotests/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProviderImplTest.java b/tests/robotests/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProviderImplTest.java index b6b594cdc8f..c28267b9609 100644 --- a/tests/robotests/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProviderImplTest.java +++ b/tests/robotests/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProviderImplTest.java @@ -63,6 +63,7 @@ import java.util.Arrays; import java.util.Date; import java.util.List; + @RunWith(RobolectricTestRunner.class) public class EnterprisePrivacyFeatureProviderImplTest { @@ -426,6 +427,17 @@ public class EnterprisePrivacyFeatureProviderImplTest { verify(mContext).startActivity(intentEquals(intent)); } + @Test + public void testShowParentalControls() { + when(mDevicePolicyManager.getProfileOwnerOrDeviceOwnerSupervisionComponent(any())) + .thenReturn(mOwner); + + // If the intent is resolved, then we can use it to launch the activity + Intent intent = addParentalControlsIntent(mOwner.getPackageName()); + assertThat(mProvider.showParentalControls()).isTrue(); + verify(mContext).startActivity(intentEquals(intent)); + } + private Intent addWorkPolicyInfoIntent( String packageName, boolean deviceOwner, boolean profileOwner) { Intent intent = new Intent(Settings.ACTION_SHOW_WORK_POLICY_INFO); @@ -450,6 +462,23 @@ public class EnterprisePrivacyFeatureProviderImplTest { return intent; } + private Intent addParentalControlsIntent(String packageName) { + Intent intent = new Intent(EnterprisePrivacyFeatureProviderImpl.ACTION_PARENTAL_CONTROLS); + intent.setPackage(packageName); + ResolveInfo resolveInfo = new ResolveInfo(); + resolveInfo.resolvePackageName = packageName; + resolveInfo.activityInfo = new ActivityInfo(); + resolveInfo.activityInfo.name = "activityName"; + resolveInfo.activityInfo.packageName = packageName; + + List activities = ImmutableList.of(resolveInfo); + when(mPackageManager.queryIntentActivities(intentEquals(intent), anyInt())) + .thenReturn(activities); + when(mPackageManager.queryIntentActivitiesAsUser(intentEquals(intent), anyInt(), anyInt())) + .thenReturn(activities); + return intent; + } + private static class IntentMatcher implements ArgumentMatcher { private final Intent mExpectedIntent;