Ask device owner for master clear in demo mode
Bug: 62712426
Test: make RunSettingsRoboTests -j19
Change-Id: I29f92ff1062590f2c5eb7713e5969da7870fc582
diff --git a/src/com/android/settings/MasterClear.java b/src/com/android/settings/MasterClear.java
index 96ce17e..2c97018 100644
--- a/src/com/android/settings/MasterClear.java
+++ b/src/com/android/settings/MasterClear.java
@@ -144,10 +144,10 @@
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 cfddf56..2a57577 100644
--- a/src/com/android/settings/Utils.java
+++ b/src/com/android/settings/Utils.java
@@ -1249,8 +1249,10 @@
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 b501654..21b8e47 100644
--- a/tests/robotests/src/com/android/settings/MasterClearTest.java
+++ b/tests/robotests/src/com/android/settings/MasterClearTest.java
@@ -26,6 +26,7 @@
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.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 @@
}
@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 82f53a2..f85a874 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 @@
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 @@
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;
}
}