From 3025727e16c8d283373b2362bb67d5679f238288 Mon Sep 17 00:00:00 2001 From: Justin Klaassen Date: Tue, 8 Aug 2017 21:58:05 -0700 Subject: [PATCH] Ask device owner for master clear in demo mode Bug: 62712426 Test: make RunSettingsRoboTests -j19 Change-Id: I29f92ff1062590f2c5eb7713e5969da7870fc582 --- src/com/android/settings/MasterClear.java | 6 +++--- src/com/android/settings/Utils.java | 6 ++++-- .../com/android/settings/MasterClearTest.java | 14 +++++++------- .../settings/testutils/shadow/ShadowUtils.java | 18 +++++++++++++----- 4 files changed, 27 insertions(+), 17 deletions(-) diff --git a/src/com/android/settings/MasterClear.java b/src/com/android/settings/MasterClear.java index 96ce17e3ffa..2c9701832ee 100644 --- a/src/com/android/settings/MasterClear.java +++ b/src/com/android/settings/MasterClear.java @@ -144,10 +144,10 @@ public class MasterClear extends OptionsMenuFragment { public void onClick(View view) { final Context context = view.getContext(); if (Utils.isDemoUser(context)) { - final String packageName = Utils.getDemoModePackageName(context); - if (!TextUtils.isEmpty(packageName)) { + final ComponentName componentName = Utils.getDeviceOwnerComponent(context); + if (componentName != null) { final Intent requestFactoryReset = new Intent() - .setPackage(packageName) + .setPackage(componentName.getPackageName()) .setAction(Intent.ACTION_FACTORY_RESET); context.startActivity(requestFactoryReset); } diff --git a/src/com/android/settings/Utils.java b/src/com/android/settings/Utils.java index cfddf56d4d3..2a57577bb69 100644 --- a/src/com/android/settings/Utils.java +++ b/src/com/android/settings/Utils.java @@ -1249,8 +1249,10 @@ public final class Utils extends com.android.settingslib.Utils { return UserManager.isDeviceInDemoMode(context) && getUserManager(context).isDemoUser(); } - public static String getDemoModePackageName(Context context) { - return context.getString(com.android.internal.R.string.config_demoModePackage); + public static ComponentName getDeviceOwnerComponent(Context context) { + final DevicePolicyManager dpm = (DevicePolicyManager) context.getSystemService( + Context.DEVICE_POLICY_SERVICE); + return dpm.getDeviceOwnerComponentOnAnyUser(); } /** diff --git a/tests/robotests/src/com/android/settings/MasterClearTest.java b/tests/robotests/src/com/android/settings/MasterClearTest.java index b50165467bd..21b8e475dea 100644 --- a/tests/robotests/src/com/android/settings/MasterClearTest.java +++ b/tests/robotests/src/com/android/settings/MasterClearTest.java @@ -26,6 +26,7 @@ import static org.robolectric.Shadows.shadowOf; import android.app.Activity; import android.app.Fragment; +import android.content.ComponentName; import android.content.ContentResolver; import android.content.Intent; import android.os.Bundle; @@ -37,7 +38,6 @@ import android.widget.LinearLayout; import android.widget.ScrollView; import com.android.settings.testutils.SettingsRobolectricTestRunner; -import com.android.settings.testutils.shadow.SettingsShadowResources; import com.android.settings.testutils.shadow.ShadowUtils; import org.junit.Before; @@ -144,19 +144,19 @@ public class MasterClearTest { } @Test - @Config(shadows = { ShadowUtils.class, SettingsShadowResources.class }) + @Config(shadows = { ShadowUtils.class }) public void testInitiateMasterClear_inDemoMode_sendsIntent() { - SettingsShadowResources.overrideResource( - com.android.internal.R.string.config_demoModePackage, "package"); - ShadowUtils.setIsDemoUser(true); + final ComponentName componentName = ComponentName.unflattenFromString( + "com.android.retaildemo/.DeviceAdminReceiver"); + ShadowUtils.setDeviceOwnerComponent(componentName); + mMasterClear.mInitiateListener.onClick( mContentView.findViewById(R.id.initiate_master_clear)); final Intent intent = mShadowActivity.getNextStartedActivity(); assertThat(Intent.ACTION_FACTORY_RESET).isEqualTo(intent.getAction()); - final String packageName = Utils.getDemoModePackageName(RuntimeEnvironment.application); - assertThat(packageName).isEqualTo(intent.getPackage()); + assertThat(componentName.getPackageName()).isEqualTo(intent.getPackage()); } private void initScrollView(int height, int scrollY, int childBottom) { diff --git a/tests/robotests/src/com/android/settings/testutils/shadow/ShadowUtils.java b/tests/robotests/src/com/android/settings/testutils/shadow/ShadowUtils.java index 82f53a28978..f85a874579d 100644 --- a/tests/robotests/src/com/android/settings/testutils/shadow/ShadowUtils.java +++ b/tests/robotests/src/com/android/settings/testutils/shadow/ShadowUtils.java @@ -31,6 +31,7 @@ public class ShadowUtils { private static IFingerprintManager sFingerprintManager = null; private static boolean sIsUserAMonkey; private static boolean sIsDemoUser; + private static ComponentName sDeviceOwnerComponentName; @Implementation public static int enforceSameOwner(Context context, int userId) { @@ -61,22 +62,29 @@ public class ShadowUtils { sIsDemoUser = isDemoUser; } - public static void setIsUserAMonkey(boolean isUserAMonkey) { - sIsUserAMonkey = isUserAMonkey; - } - - @Implementation public static boolean isDemoUser(Context context) { return sIsDemoUser; } + public static void setIsUserAMonkey(boolean isUserAMonkey) { + sIsUserAMonkey = isUserAMonkey; + } + /** * Returns true if Monkey is running. */ @Implementation public static boolean isMonkeyRunning() { return sIsUserAMonkey; + } + public static void setDeviceOwnerComponent(ComponentName componentName) { + sDeviceOwnerComponentName = componentName; + } + + @Implementation + public static ComponentName getDeviceOwnerComponent(Context context) { + return sDeviceOwnerComponentName; } }