Update to follow device policy "mode" to "quality" change.

This commit is contained in:
Dianne Hackborn
2010-01-29 10:53:44 -08:00
parent e36eb042e8
commit 906d338680
4 changed files with 72 additions and 34 deletions

View File

@@ -46,11 +46,11 @@
<LinearLayout android:orientation="horizontal" android:gravity="center" <LinearLayout android:orientation="horizontal" android:gravity="center"
android:layout_width="match_parent" android:layout_height="wrap_content"> android:layout_width="match_parent" android:layout_height="wrap_content">
<Spinner android:id="@+id/password_mode" <Spinner android:id="@+id/password_quality"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:drawSelectorOnTop="true" android:drawSelectorOnTop="true"
android:prompt="@string/password_mode"> android:prompt="@string/password_quality">
</Spinner> </Spinner>
<EditText android:id="@+id/password_length" <EditText android:id="@+id/password_length"

View File

@@ -86,7 +86,7 @@
</string-array> </string-array>
<!-- Used in app/Sample Device Admin --> <!-- Used in app/Sample Device Admin -->
<string-array name="password_modes"> <string-array name="password_qualities">
<item>Unspecified</item> <item>Unspecified</item>
<item>Something</item> <item>Something</item>
<item>Numeric</item> <item>Numeric</item>

View File

@@ -448,7 +448,7 @@
class for administering the user\'s device.</string> class for administering the user\'s device.</string>
<string name="enable_admin">Enable Admin</string> <string name="enable_admin">Enable Admin</string>
<string name="disable_admin">Disable Admin</string> <string name="disable_admin">Disable Admin</string>
<string name="password_mode">Password Mode</string> <string name="password_quality">Password Quality</string>
<string name="password_length_hint">Minimum Length</string> <string name="password_length_hint">Minimum Length</string>
<string name="set_password">Set Password</string> <string name="set_password">Set Password</string>
<string name="password_hint">Password</string> <string name="password_hint">Password</string>

View File

@@ -19,6 +19,7 @@ package com.example.android.apis.app;
import com.example.android.apis.R; import com.example.android.apis.R;
import android.app.Activity; import android.app.Activity;
import android.app.ActivityManager;
import android.app.AlertDialog; import android.app.AlertDialog;
import android.app.DeviceAdmin; import android.app.DeviceAdmin;
import android.app.DevicePolicyManager; import android.app.DevicePolicyManager;
@@ -28,6 +29,7 @@ import android.content.DialogInterface;
import android.content.Intent; import android.content.Intent;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.os.Bundle; import android.os.Bundle;
import android.os.Debug;
import android.text.Editable; import android.text.Editable;
import android.text.TextWatcher; import android.text.TextWatcher;
import android.util.Log; import android.util.Log;
@@ -51,7 +53,7 @@ public class SampleDeviceAdmin extends DeviceAdmin {
return context.getSharedPreferences(DeviceAdmin.class.getName(), 0); return context.getSharedPreferences(DeviceAdmin.class.getName(), 0);
} }
static String PREF_PASSWORD_MODE = "password_mode"; static String PREF_PASSWORD_QUALITY = "password_quality";
static String PREF_PASSWORD_LENGTH = "password_length"; static String PREF_PASSWORD_LENGTH = "password_length";
static String PREF_MAX_FAILED_PW = "max_failed_pw"; static String PREF_MAX_FAILED_PW = "max_failed_pw";
@@ -101,20 +103,21 @@ public class SampleDeviceAdmin extends DeviceAdmin {
static final int RESULT_ENABLE = 1; static final int RESULT_ENABLE = 1;
DevicePolicyManager mDPM; DevicePolicyManager mDPM;
ActivityManager mAM;
ComponentName mSampleDeviceAdmin; ComponentName mSampleDeviceAdmin;
Button mEnableButton; Button mEnableButton;
Button mDisableButton; Button mDisableButton;
// Password mode spinner choices // Password quality spinner choices
// This list must match the list found in samples/ApiDemos/res/values/arrays.xml // This list must match the list found in samples/ApiDemos/res/values/arrays.xml
final static int mPasswordModeValues[] = new int[] { final static int mPasswordQualityValues[] = new int[] {
DevicePolicyManager.PASSWORD_MODE_UNSPECIFIED, DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED,
DevicePolicyManager.PASSWORD_MODE_SOMETHING, DevicePolicyManager.PASSWORD_QUALITY_SOMETHING,
DevicePolicyManager.PASSWORD_MODE_NUMERIC, DevicePolicyManager.PASSWORD_QUALITY_NUMERIC,
DevicePolicyManager.PASSWORD_MODE_ALPHANUMERIC DevicePolicyManager.PASSWORD_QUALITY_ALPHANUMERIC
}; };
Spinner mPasswordMode; Spinner mPasswordQuality;
EditText mPasswordLength; EditText mPasswordLength;
Button mSetPasswordButton; Button mSetPasswordButton;
@@ -131,6 +134,7 @@ public class SampleDeviceAdmin extends DeviceAdmin {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
mDPM = (DevicePolicyManager)getSystemService(Context.DEVICE_POLICY_SERVICE); mDPM = (DevicePolicyManager)getSystemService(Context.DEVICE_POLICY_SERVICE);
mAM = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
mSampleDeviceAdmin = new ComponentName(Controller.this, SampleDeviceAdmin.class); mSampleDeviceAdmin = new ComponentName(Controller.this, SampleDeviceAdmin.class);
setContentView(R.layout.sample_device_admin); setContentView(R.layout.sample_device_admin);
@@ -141,20 +145,20 @@ public class SampleDeviceAdmin extends DeviceAdmin {
mDisableButton = (Button)findViewById(R.id.disable); mDisableButton = (Button)findViewById(R.id.disable);
mDisableButton.setOnClickListener(mDisableListener); mDisableButton.setOnClickListener(mDisableListener);
mPasswordMode = (Spinner)findViewById(R.id.password_mode); mPasswordQuality = (Spinner)findViewById(R.id.password_quality);
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource( ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
this, R.array.password_modes, android.R.layout.simple_spinner_item); this, R.array.password_qualities, android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
mPasswordMode.setAdapter(adapter); mPasswordQuality.setAdapter(adapter);
mPasswordMode.setOnItemSelectedListener( mPasswordQuality.setOnItemSelectedListener(
new OnItemSelectedListener() { new OnItemSelectedListener() {
public void onItemSelected( public void onItemSelected(
AdapterView<?> parent, View view, int position, long id) { AdapterView<?> parent, View view, int position, long id) {
setPasswordMode(mPasswordModeValues[position]); setPasswordQuality(mPasswordQualityValues[position]);
} }
public void onNothingSelected(AdapterView<?> parent) { public void onNothingSelected(AdapterView<?> parent) {
setPasswordMode(DevicePolicyManager.PASSWORD_MODE_UNSPECIFIED); setPasswordQuality(DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED);
} }
}); });
mPasswordLength = (EditText)findViewById(R.id.password_length); mPasswordLength = (EditText)findViewById(R.id.password_length);
@@ -202,7 +206,7 @@ public class SampleDeviceAdmin extends DeviceAdmin {
if (active) { if (active) {
mEnableButton.setEnabled(false); mEnableButton.setEnabled(false);
mDisableButton.setEnabled(true); mDisableButton.setEnabled(true);
mPasswordMode.setEnabled(true); mPasswordQuality.setEnabled(true);
mPasswordLength.setEnabled(true); mPasswordLength.setEnabled(true);
mSetPasswordButton.setEnabled(true); mSetPasswordButton.setEnabled(true);
mPassword.setEnabled(true); mPassword.setEnabled(true);
@@ -212,7 +216,7 @@ public class SampleDeviceAdmin extends DeviceAdmin {
} else { } else {
mEnableButton.setEnabled(true); mEnableButton.setEnabled(true);
mDisableButton.setEnabled(false); mDisableButton.setEnabled(false);
mPasswordMode.setEnabled(false); mPasswordQuality.setEnabled(false);
mPasswordLength.setEnabled(false); mPasswordLength.setEnabled(false);
mSetPasswordButton.setEnabled(false); mSetPasswordButton.setEnabled(false);
mPassword.setEnabled(false); mPassword.setEnabled(false);
@@ -224,14 +228,14 @@ public class SampleDeviceAdmin extends DeviceAdmin {
void updateControls() { void updateControls() {
SharedPreferences prefs = getSamplePreferences(this); SharedPreferences prefs = getSamplePreferences(this);
final int pwMode = prefs.getInt(PREF_PASSWORD_MODE, final int pwQuality = prefs.getInt(PREF_PASSWORD_QUALITY,
DevicePolicyManager.PASSWORD_MODE_UNSPECIFIED); DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED);
final int pwLength = prefs.getInt(PREF_PASSWORD_LENGTH, 0); final int pwLength = prefs.getInt(PREF_PASSWORD_LENGTH, 0);
final int maxFailedPw = prefs.getInt(PREF_MAX_FAILED_PW, 0); final int maxFailedPw = prefs.getInt(PREF_MAX_FAILED_PW, 0);
for (int i=0; i<mPasswordModeValues.length; i++) { for (int i=0; i<mPasswordQualityValues.length; i++) {
if (mPasswordModeValues[i] == pwMode) { if (mPasswordQualityValues[i] == pwQuality) {
mPasswordMode.setSelection(i); mPasswordQuality.setSelection(i);
} }
} }
mPasswordLength.setText(Integer.toString(pwLength)); mPasswordLength.setText(Integer.toString(pwLength));
@@ -240,22 +244,22 @@ public class SampleDeviceAdmin extends DeviceAdmin {
void updatePolicies() { void updatePolicies() {
SharedPreferences prefs = getSamplePreferences(this); SharedPreferences prefs = getSamplePreferences(this);
final int pwMode = prefs.getInt(PREF_PASSWORD_MODE, final int pwQuality = prefs.getInt(PREF_PASSWORD_QUALITY,
DevicePolicyManager.PASSWORD_MODE_UNSPECIFIED); DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED);
final int pwLength = prefs.getInt(PREF_PASSWORD_LENGTH, 0); final int pwLength = prefs.getInt(PREF_PASSWORD_LENGTH, 0);
final int maxFailedPw = prefs.getInt(PREF_PASSWORD_LENGTH, 0); final int maxFailedPw = prefs.getInt(PREF_PASSWORD_LENGTH, 0);
boolean active = mDPM.isAdminActive(mSampleDeviceAdmin); boolean active = mDPM.isAdminActive(mSampleDeviceAdmin);
if (active) { if (active) {
mDPM.setPasswordMode(mSampleDeviceAdmin, pwMode); mDPM.setPasswordQuality(mSampleDeviceAdmin, pwQuality);
mDPM.setPasswordMinimumLength(mSampleDeviceAdmin, pwLength); mDPM.setPasswordMinimumLength(mSampleDeviceAdmin, pwLength);
mDPM.setMaximumFailedPasswordsForWipe(mSampleDeviceAdmin, maxFailedPw); mDPM.setMaximumFailedPasswordsForWipe(mSampleDeviceAdmin, maxFailedPw);
} }
} }
void setPasswordMode(int mode) { void setPasswordQuality(int quality) {
SharedPreferences prefs = getSamplePreferences(this); SharedPreferences prefs = getSamplePreferences(this);
prefs.edit().putInt(PREF_PASSWORD_MODE, mode).commit(); prefs.edit().putInt(PREF_PASSWORD_QUALITY, quality).commit();
updatePolicies(); updatePolicies();
} }
@@ -321,6 +325,14 @@ public class SampleDeviceAdmin extends DeviceAdmin {
private OnClickListener mResetPasswordListener = new OnClickListener() { private OnClickListener mResetPasswordListener = new OnClickListener() {
public void onClick(View v) { public void onClick(View v) {
if (mAM.isUserAMonkey()) {
// Don't trust monkeys to do the right thing!
AlertDialog.Builder builder = new AlertDialog.Builder(Controller.this);
builder.setMessage("You can't reset my password because you are a monkey!");
builder.setPositiveButton("I admit defeat", null);
builder.show();
return;
}
boolean active = mDPM.isAdminActive(mSampleDeviceAdmin); boolean active = mDPM.isAdminActive(mSampleDeviceAdmin);
if (active) { if (active) {
mDPM.resetPassword(mPassword.getText().toString()); mDPM.resetPassword(mPassword.getText().toString());
@@ -330,6 +342,14 @@ public class SampleDeviceAdmin extends DeviceAdmin {
private OnClickListener mForceLockListener = new OnClickListener() { private OnClickListener mForceLockListener = new OnClickListener() {
public void onClick(View v) { public void onClick(View v) {
if (mAM.isUserAMonkey()) {
// Don't trust monkeys to do the right thing!
AlertDialog.Builder builder = new AlertDialog.Builder(Controller.this);
builder.setMessage("You can't lock my screen because you are a monkey!");
builder.setPositiveButton("I admit defeat", null);
builder.show();
return;
}
boolean active = mDPM.isAdminActive(mSampleDeviceAdmin); boolean active = mDPM.isAdminActive(mSampleDeviceAdmin);
if (active) { if (active) {
mDPM.lockNow(); mDPM.lockNow();
@@ -339,14 +359,32 @@ public class SampleDeviceAdmin extends DeviceAdmin {
private OnClickListener mWipeDataListener = new OnClickListener() { private OnClickListener mWipeDataListener = new OnClickListener() {
public void onClick(View v) { public void onClick(View v) {
if (mAM.isUserAMonkey()) {
// Don't trust monkeys to do the right thing!
AlertDialog.Builder builder = new AlertDialog.Builder(Controller.this);
builder.setMessage("You can't wipe my data because you are a monkey!");
builder.setPositiveButton("I admit defeat", null);
builder.show();
return;
}
AlertDialog.Builder builder = new AlertDialog.Builder(Controller.this); AlertDialog.Builder builder = new AlertDialog.Builder(Controller.this);
builder.setMessage("This will erase all of your data. Are you sure?"); builder.setMessage("This will erase all of your data. Are you sure?");
builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() { builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) { public void onClick(DialogInterface dialog, int which) {
boolean active = mDPM.isAdminActive(mSampleDeviceAdmin); AlertDialog.Builder builder = new AlertDialog.Builder(Controller.this);
if (active) { builder.setMessage("This is not a test. "
mDPM.wipeData(0); + "This WILL erase all of your data! "
} + "Are you really absolutely sure?");
builder.setPositiveButton("BOOM!", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
boolean active = mDPM.isAdminActive(mSampleDeviceAdmin);
if (active) {
mDPM.wipeData(0);
}
}
});
builder.setNegativeButton("Oops, run away!", null);
builder.show();
} }
}); });
builder.setNegativeButton("No way!", null); builder.setNegativeButton("No way!", null);