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" /> +