Update ApiDemos to show active password status
* Add Check Password button * Use it to report overall password status - isActivePasswordSufficient() and various password settings. * Fixed a minor bug that cause the password quality to be reset to "unspecified" every time you start the activity. * Leave the two password buttons enabled all the time (set password can be used when not active, and check password just puts up a toast explaining why it can't be used when inactive.) This code can be used to confirm bug b/4445007 and hopefully its fix, too. Change-Id: I136706072257d2e49184a29b0aa5d7a524960c40
This commit is contained in:
@@ -162,6 +162,7 @@ public class DeviceAdminSample extends DeviceAdminReceiver {
|
||||
};
|
||||
|
||||
Spinner mPasswordQuality;
|
||||
int mPasswordQualityRecent = 0;
|
||||
EditText mPasswordLength;
|
||||
EditText mPasswordMinimumLetters;
|
||||
EditText mPasswordMinimumUppercase;
|
||||
@@ -170,7 +171,6 @@ public class DeviceAdminSample extends DeviceAdminReceiver {
|
||||
EditText mPasswordMinimumSymbols;
|
||||
EditText mPasswordMinimumNonLetter;
|
||||
EditText mPasswordHistoryLength;
|
||||
Button mSetPasswordButton;
|
||||
|
||||
EditText mPassword;
|
||||
Button mResetPasswordButton;
|
||||
@@ -221,7 +221,12 @@ public class DeviceAdminSample extends DeviceAdminReceiver {
|
||||
new OnItemSelectedListener() {
|
||||
public void onItemSelected(
|
||||
AdapterView<?> parent, View view, int position, long id) {
|
||||
setPasswordQuality(mPasswordQualityValues[position]);
|
||||
// Simple debounce, mainly to catch initialization case (we don't
|
||||
// want to change the DPM values if the user didn't click it).
|
||||
if (position != mPasswordQualityRecent) {
|
||||
setPasswordQuality(mPasswordQualityValues[position]);
|
||||
mPasswordQualityRecent = position;
|
||||
}
|
||||
}
|
||||
|
||||
public void onNothingSelected(AdapterView<?> parent) {
|
||||
@@ -355,8 +360,8 @@ public class DeviceAdminSample extends DeviceAdminReceiver {
|
||||
}
|
||||
});
|
||||
|
||||
mSetPasswordButton = (Button)findViewById(R.id.set_password);
|
||||
mSetPasswordButton.setOnClickListener(mSetPasswordListener);
|
||||
findViewById(R.id.set_password).setOnClickListener(mSetPasswordListener);
|
||||
findViewById(R.id.check_password_button).setOnClickListener(mCheckPasswordListener);
|
||||
|
||||
mPassword = (EditText)findViewById(R.id.password);
|
||||
mResetPasswordButton = (Button)findViewById(R.id.reset_password);
|
||||
@@ -417,7 +422,6 @@ public class DeviceAdminSample extends DeviceAdminReceiver {
|
||||
mPasswordMinimumNumeric.setEnabled(true);
|
||||
mPasswordMinimumNonLetter.setEnabled(true);
|
||||
mPasswordHistoryLength.setEnabled(true);
|
||||
mSetPasswordButton.setEnabled(true);
|
||||
mPassword.setEnabled(true);
|
||||
mResetPasswordButton.setEnabled(true);
|
||||
mForceLockButton.setEnabled(true);
|
||||
@@ -439,7 +443,6 @@ public class DeviceAdminSample extends DeviceAdminReceiver {
|
||||
mPasswordMinimumNumeric.setEnabled(false);
|
||||
mPasswordMinimumNonLetter.setEnabled(false);
|
||||
mPasswordHistoryLength.setEnabled(false);
|
||||
mSetPasswordButton.setEnabled(false);
|
||||
mPassword.setEnabled(false);
|
||||
mResetPasswordButton.setEnabled(false);
|
||||
mForceLockButton.setEnabled(false);
|
||||
@@ -678,6 +681,73 @@ public class DeviceAdminSample extends DeviceAdminReceiver {
|
||||
}
|
||||
};
|
||||
|
||||
// Retrieve information about the current password requirements and status, and display
|
||||
// to the user in a simple alert dialog.
|
||||
private OnClickListener mCheckPasswordListener = new OnClickListener() {
|
||||
public void onClick(View v) {
|
||||
boolean active = mDPM.isAdminActive(mDeviceAdminSample);
|
||||
if (!active) {
|
||||
Toast.makeText(Controller.this, "Cannot check password status unless active",
|
||||
Toast.LENGTH_SHORT).show();
|
||||
return;
|
||||
}
|
||||
boolean sufficient = mDPM.isActivePasswordSufficient();
|
||||
int quality = mDPM.getPasswordQuality(null);
|
||||
int minimumLength = mDPM.getPasswordMinimumLength(null);
|
||||
int minimumUpperCase = mDPM.getPasswordMinimumUpperCase(null);
|
||||
int minimumLowerCase = mDPM.getPasswordMinimumLowerCase(null);
|
||||
int minimumLetters = mDPM.getPasswordMinimumLetters(null);
|
||||
int minimumNumeric = mDPM.getPasswordMinimumNumeric(null);
|
||||
int minimumSymbols = mDPM.getPasswordMinimumSymbols(null);
|
||||
int minimumNonLetter = mDPM.getPasswordMinimumNonLetter(null);
|
||||
long timeToExpiration = mDPM.getPasswordExpiration(null);
|
||||
|
||||
// Quick string: Do better than this.
|
||||
String qualityText;
|
||||
switch (quality) {
|
||||
case DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED:
|
||||
qualityText = "unspecified";
|
||||
break;
|
||||
case DevicePolicyManager.PASSWORD_QUALITY_SOMETHING:
|
||||
qualityText = "something";
|
||||
break;
|
||||
case DevicePolicyManager.PASSWORD_QUALITY_NUMERIC:
|
||||
qualityText = "numeric";
|
||||
break;
|
||||
case DevicePolicyManager.PASSWORD_QUALITY_ALPHABETIC:
|
||||
qualityText = "alphabetic";
|
||||
break;
|
||||
case DevicePolicyManager.PASSWORD_QUALITY_ALPHANUMERIC:
|
||||
qualityText = "alphanumeric";
|
||||
break;
|
||||
case DevicePolicyManager.PASSWORD_QUALITY_COMPLEX:
|
||||
qualityText = "complex";
|
||||
break;
|
||||
default:
|
||||
qualityText = "0x" + Integer.toString(quality, 16);
|
||||
break;
|
||||
}
|
||||
StringBuilder sb = new StringBuilder("Password Status:\n");
|
||||
sb.append(" isActivePasswordSufficient=").append(sufficient).append("\n");
|
||||
sb.append(" getPasswordQuality=").append(qualityText).append("\n");
|
||||
sb.append(" getPasswordMinimumLength=").append(minimumLength).append("\n");
|
||||
sb.append(" getPasswordMinimumUpperCase=").append(minimumUpperCase).append("\n");
|
||||
sb.append(" getPasswordMinimumLowerCase=").append(minimumLowerCase).append("\n");
|
||||
sb.append(" getPasswordMinimumLetters=").append(minimumLetters).append("\n");
|
||||
sb.append(" getPasswordMinimumNumeric=").append(minimumNumeric).append("\n");
|
||||
sb.append(" getPasswordMinimumSymbols=").append(minimumSymbols).append("\n");
|
||||
sb.append(" getPasswordMinimumNonLetter=").append(minimumNonLetter).append("\n");
|
||||
sb.append(" getPasswordExpiration=").append(timeToExpiration/1000).append(" sec");
|
||||
if (timeToExpiration < 0) {
|
||||
sb.append(" (expired)");
|
||||
}
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(Controller.this);
|
||||
builder.setMessage(sb.toString());
|
||||
builder.setPositiveButton("OK", null);
|
||||
builder.show();
|
||||
}
|
||||
};
|
||||
|
||||
private OnClickListener mResetPasswordListener = new OnClickListener() {
|
||||
public void onClick(View v) {
|
||||
if (ActivityManager.isUserAMonkey()) {
|
||||
|
||||
Reference in New Issue
Block a user