Work Challenge Unification Settings

Change-Id: I255c5f8064e68712e78211e2e3daaae682b1966f
This commit is contained in:
Clara Bayarri
2016-01-08 16:59:27 +00:00
parent b8a22e42d4
commit 8b5d7ff3d6
2 changed files with 110 additions and 0 deletions

View File

@@ -15,8 +15,14 @@
*/
package com.android.settings;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.DialogFragment;
import android.app.FragmentManager;
import android.app.admin.DevicePolicyManager;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.UserInfo;
import android.os.Bundle;
@@ -49,8 +55,12 @@ public class ProfileChallengePreferenceFragment extends SettingsPreferenceFragme
private static final String KEY_UNLOCK_SET_OR_CHANGE = "unlock_set_or_change";
private static final String KEY_VISIBLE_PATTERN = "visiblepattern";
private static final String KEY_SECURITY_CATEGORY = "security_category";
private static final String KEY_UNIFICATION = "unification";
public static final String TAG_UNIFICATION_DIALOG = "unification_dialog";
private static final int SET_OR_CHANGE_LOCK_METHOD_REQUEST = 123;
private static final int UNIFY_LOCK_METHOD_REQUEST = 124;
// Not all preferences make sense for the Work Challenge, this is a whitelist.
private static final Set<String> ALLOWED_PREFERENCE_KEYS = new HashSet<>();
@@ -95,6 +105,11 @@ public class ProfileChallengePreferenceFragment extends SettingsPreferenceFragme
startFragment(this, "com.android.settings.ChooseLockGeneric$ChooseLockGenericFragment",
R.string.lock_settings_picker_title, SET_OR_CHANGE_LOCK_METHOD_REQUEST, extras);
return true;
} else if (KEY_UNIFICATION.equals(key)) {
UnificationConfirmationDialog dialog =
UnificationConfirmationDialog.newIntance(mProfileUserId);
dialog.show(getChildFragmentManager(), TAG_UNIFICATION_DIALOG);
return true;
}
return super.onPreferenceTreeClick(preference);
}
@@ -109,6 +124,16 @@ public class ProfileChallengePreferenceFragment extends SettingsPreferenceFragme
return false;
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == UNIFY_LOCK_METHOD_REQUEST && resultCode == Activity.RESULT_OK) {
mLockPatternUtils.clearLock(mProfileUserId);
mLockPatternUtils.setSeparateProfileChallengeEnabled(mProfileUserId, false);
return;
}
}
@Override
public void onResume() {
super.onResume();
@@ -138,6 +163,28 @@ public class ProfileChallengePreferenceFragment extends SettingsPreferenceFragme
mVisiblePattern = (SwitchPreference) root.findPreference(KEY_VISIBLE_PATTERN);
removeNonWhitelistedItems(root);
PreferenceGroup securityCategory = (PreferenceGroup)
root.findPreference(KEY_SECURITY_CATEGORY);
if (securityCategory != null) {
if (mLockPatternUtils.isSeparateProfileChallengeEnabled(mProfileUserId)) {
addUnificationPreference(securityCategory);
} else {
Preference lockPreference =
securityCategory.findPreference(KEY_UNLOCK_SET_OR_CHANGE);
String summary =
getContext().getString(R.string.lock_settings_profile_unified_summary);
lockPreference.setSummary(summary);
}
}
}
private void addUnificationPreference(PreferenceGroup securityCategory) {
Preference unificationPreference = new Preference(securityCategory.getContext());
unificationPreference.setKey(KEY_UNIFICATION);
unificationPreference.setTitle(R.string.lock_settings_profile_unification_title);
unificationPreference.setSummary(R.string.lock_settings_profile_unification_summary);
securityCategory.addPreference(unificationPreference);
}
private void removeNonWhitelistedItems(PreferenceGroup prefScreen) {
@@ -190,4 +237,55 @@ public class ProfileChallengePreferenceFragment extends SettingsPreferenceFragme
}
return resid;
}
public static class UnificationConfirmationDialog extends DialogFragment {
private static final String ARG_USER_ID = "userId";
public static UnificationConfirmationDialog newIntance(int userId) {
UnificationConfirmationDialog dialog = new UnificationConfirmationDialog();
Bundle args = new Bundle();
args.putInt(ARG_USER_ID, userId);
dialog.setArguments(args);
return dialog;
}
@Override
public void show(FragmentManager manager, String tag) {
if (manager.findFragmentByTag(tag) == null) {
// Prevent opening multiple dialogs if tapped on button quickly
super.show(manager, tag);
}
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
final Bundle args = getArguments();
return new AlertDialog.Builder(getActivity())
.setTitle(R.string.lock_settings_profile_unification_dialog_title)
.setMessage(R.string.lock_settings_profile_unification_dialog_body)
.setPositiveButton(R.string.okay,
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int whichButton) {
String title = getContext().getString(
R.string.lock_settings_profile_screen_lock_title);
ChooseLockSettingsHelper helper =
new ChooseLockSettingsHelper(
getActivity(), getParentFragment());
helper.launchConfirmationActivity(UNIFY_LOCK_METHOD_REQUEST,
title, true, args.getInt(ARG_USER_ID));
}
}
)
.setNegativeButton(R.string.cancel,
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int whichButton) {
dismiss();
}
}
)
.create();
}
}
}