diff --git a/src/main/java/com/afwsamples/testdpc/policy/PolicyManagementFragment.java b/src/main/java/com/afwsamples/testdpc/policy/PolicyManagementFragment.java
index 224c793d..0a923e6b 100644
--- a/src/main/java/com/afwsamples/testdpc/policy/PolicyManagementFragment.java
+++ b/src/main/java/com/afwsamples/testdpc/policy/PolicyManagementFragment.java
@@ -338,6 +338,7 @@ public class PolicyManagementFragment extends BaseSearchablePolicyPreferenceFrag
private static final String RELAUNCH_IN_LOCK_TASK = "relaunch_in_lock_task";
private static final String REMOVE_ALL_CERTIFICATES_KEY = "remove_all_ca_certificates";
private static final String REMOVE_DEVICE_OWNER_KEY = "remove_device_owner";
+ private static final String REMOVE_PROFILE_OWNER_KEY = "remove_profile_owner";
private static final String REMOVE_KEY_CERTIFICATE_KEY = "remove_key_certificate";
private static final String REMOVE_USER_KEY = "remove_user";
private static final String SWITCH_USER_KEY = "switch_user";
@@ -685,6 +686,7 @@ public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
findPreference(REMOVE_MANAGED_PROFILE_KEY).setOnPreferenceClickListener(this);
findPreference(FACTORY_RESET_DEVICE_KEY).setOnPreferenceClickListener(this);
findPreference(REMOVE_DEVICE_OWNER_KEY).setOnPreferenceClickListener(this);
+ findPreference(REMOVE_PROFILE_OWNER_KEY).setOnPreferenceClickListener(this);
mEnableBackupServicePreference = (DpcSwitchPreference) findPreference(ENABLE_BACKUP_SERVICE);
mEnableBackupServicePreference.setOnPreferenceChangeListener(this);
mEnableBackupServicePreference.setCustomConstraint(this::validateDeviceOwnerBeforeQ);
@@ -1069,6 +1071,9 @@ public boolean onPreferenceClick(Preference preference) {
} else if (REMOVE_DEVICE_OWNER_KEY.equals(key)) {
showRemoveDeviceOwnerPrompt();
return true;
+ } else if (REMOVE_PROFILE_OWNER_KEY.equals(key)) {
+ showRemoveProfileOwnerPrompt();
+ return true;
} else if (REQUEST_BUGREPORT_KEY.equals(key)) {
requestBugReport();
return true;
@@ -2149,6 +2154,26 @@ private void showRemoveDeviceOwnerPrompt() {
.show();
}
+ /** Shows a prompt to ask for confirmation on removing profile owner. */
+ private void showRemoveProfileOwnerPrompt() {
+ new AlertDialog.Builder(getActivity())
+ .setTitle(R.string.remove_profile_owner_title)
+ .setMessage(R.string.remove_device_owner_confirmation)
+ .setPositiveButton(
+ android.R.string.ok,
+ (d, i) ->
+ mDevicePolicyManagerGateway.clearProfileOwner(
+ (v) -> {
+ if (getActivity() != null && !getActivity().isFinishing()) {
+ showToast(R.string.profile_owner_removed);
+ getActivity().finish();
+ }
+ },
+ (e) -> onErrorLog("clearProfileOwner", e)))
+ .setNegativeButton(android.R.string.cancel, null)
+ .show();
+ }
+
/** Shows a message box with the device wifi mac address. */
@TargetApi(VERSION_CODES.N)
private void showWifiMacAddress() {
diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml
index 7ef451fc..02ac223e 100644
--- a/src/main/res/values/strings.xml
+++ b/src/main/res/values/strings.xml
@@ -140,6 +140,9 @@
Policies and restrictions will continue to be
active and may require a factory reset to clear.
This app is no longer a device owner.
+ Remove this profile owner
+ Remove profile owner?
+ This app is no longer a profile owner.
Set factory reset protection policy
Factory reset protection policy
Account IDs
diff --git a/src/main/res/xml/device_policy_header.xml b/src/main/res/xml/device_policy_header.xml
index 96e294b8..c2b53634 100644
--- a/src/main/res/xml/device_policy_header.xml
+++ b/src/main/res/xml/device_policy_header.xml
@@ -835,6 +835,11 @@
android:title="@string/remove_device_owner"
testdpc:admin="deviceOwner"
testdpc:minSdkVersion="L" />
+