Fix 2677197: Adding support for minimum number of complex characters to the Device Admin Sample App.
Change-Id: I7570f005ee665adc150e8c4fb92068b4d8dcdbb1
This commit is contained in:
@@ -15,8 +15,11 @@
|
||||
-->
|
||||
|
||||
<!-- Demonstrates implementation of a DeviceAdmin. -->
|
||||
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
<LinearLayout
|
||||
android:orientation="vertical" android:padding="4dip"
|
||||
android:gravity="center_horizontal"
|
||||
android:layout_width="match_parent" android:layout_height="match_parent">
|
||||
@@ -62,6 +65,63 @@
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout android:orientation="horizontal" android:gravity="center"
|
||||
android:layout_width="match_parent" android:layout_height="wrap_content">
|
||||
|
||||
<EditText android:id="@+id/password_minimum_letters"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:hint="@string/password_minimum_letters_hint"
|
||||
android:inputType="number">
|
||||
</EditText>
|
||||
|
||||
<EditText android:id="@+id/password_minimum_numeric"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:hint="@string/password_minimum_numeric_hint"
|
||||
android:inputType="number">
|
||||
</EditText>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout android:orientation="horizontal" android:gravity="center"
|
||||
android:layout_width="match_parent" android:layout_height="wrap_content">
|
||||
|
||||
<EditText android:id="@+id/password_minimum_lowercase"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:hint="@string/password_minimum_lowercase_hint"
|
||||
android:inputType="number">
|
||||
</EditText>
|
||||
|
||||
<EditText android:id="@+id/password_minimum_uppercase"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:hint="@string/password_minimum_uppercase_hint"
|
||||
android:inputType="number">
|
||||
</EditText>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout android:orientation="horizontal" android:gravity="center"
|
||||
android:layout_width="match_parent" android:layout_height="wrap_content">
|
||||
|
||||
<EditText android:id="@+id/password_minimum_symbols"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:hint="@string/password_minimum_symbols_hint"
|
||||
android:inputType="number">
|
||||
</EditText>
|
||||
|
||||
<EditText android:id="@+id/password_minimum_nonletter"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:hint="@string/password_minimum_nonletter_hint"
|
||||
android:inputType="number">
|
||||
</EditText>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout android:orientation="horizontal" android:gravity="center"
|
||||
android:layout_width="match_parent" android:layout_height="wrap_content">
|
||||
|
||||
@@ -150,3 +210,4 @@
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</ScrollView>
|
||||
|
||||
@@ -92,6 +92,7 @@
|
||||
<item>Numeric</item>
|
||||
<item>Alphabetic</item>
|
||||
<item>Alphanumeric</item>
|
||||
<item>Complex</item>
|
||||
</string-array>
|
||||
|
||||
</resources>
|
||||
|
||||
@@ -485,6 +485,12 @@
|
||||
<string name="disable_admin">Disable Admin</string>
|
||||
<string name="password_quality">Password Quality</string>
|
||||
<string name="password_length_hint">Minimum Length</string>
|
||||
<string name="password_minimum_letters_hint">Minimum Letters</string>
|
||||
<string name="password_minimum_uppercase_hint">Minimum Uppercase</string>
|
||||
<string name="password_minimum_lowercase_hint">Minimum Lowercase</string>
|
||||
<string name="password_minimum_symbols_hint">Minimum Symbols</string>
|
||||
<string name="password_minimum_numeric_hint">Minimum Numeric</string>
|
||||
<string name="password_minimum_nonletter_hint">Minimum Non-Letter</string>
|
||||
<string name="password_history_length_hint">Password History Length</string>
|
||||
<string name="set_password">Set Password</string>
|
||||
<string name="password_hint">Password</string>
|
||||
|
||||
@@ -54,6 +54,12 @@ public class DeviceAdminSample extends DeviceAdminReceiver {
|
||||
|
||||
static String PREF_PASSWORD_QUALITY = "password_quality";
|
||||
static String PREF_PASSWORD_LENGTH = "password_length";
|
||||
static String PREF_PASSWORD_MINIMUM_LETTERS = "password_minimum_letters";
|
||||
static String PREF_PASSWORD_MINIMUM_UPPERCASE = "password_minimum_uppercase";
|
||||
static String PREF_PASSWORD_MINIMUM_LOWERCASE = "password_minimum_lowercase";
|
||||
static String PREF_PASSWORD_MINIMUM_NUMERIC = "password_minimum_numeric";
|
||||
static String PREF_PASSWORD_MINIMUM_SYMBOLS = "password_minimum_symbols";
|
||||
static String PREF_PASSWORD_MINIMUM_NONLETTER = "password_minimum_nonletter";
|
||||
static String PREF_PASSWORD_HISTORY_LENGTH = "password_history_length";
|
||||
static String PREF_MAX_FAILED_PW = "max_failed_pw";
|
||||
|
||||
@@ -116,10 +122,17 @@ public class DeviceAdminSample extends DeviceAdminReceiver {
|
||||
DevicePolicyManager.PASSWORD_QUALITY_SOMETHING,
|
||||
DevicePolicyManager.PASSWORD_QUALITY_NUMERIC,
|
||||
DevicePolicyManager.PASSWORD_QUALITY_ALPHABETIC,
|
||||
DevicePolicyManager.PASSWORD_QUALITY_ALPHANUMERIC
|
||||
DevicePolicyManager.PASSWORD_QUALITY_ALPHANUMERIC,
|
||||
DevicePolicyManager.PASSWORD_QUALITY_COMPLEX
|
||||
};
|
||||
Spinner mPasswordQuality;
|
||||
EditText mPasswordLength;
|
||||
EditText mPasswordMinimumLetters;
|
||||
EditText mPasswordMinimumUppercase;
|
||||
EditText mPasswordMinimumLowercase;
|
||||
EditText mPasswordMinimumNumeric;
|
||||
EditText mPasswordMinimumSymbols;
|
||||
EditText mPasswordMinimumNonLetter;
|
||||
EditText mPasswordHistoryLength;
|
||||
Button mSetPasswordButton;
|
||||
|
||||
@@ -180,6 +193,84 @@ public class DeviceAdminSample extends DeviceAdminReceiver {
|
||||
}
|
||||
}
|
||||
});
|
||||
mPasswordMinimumLetters = (EditText)findViewById(R.id.password_minimum_letters);
|
||||
mPasswordMinimumLetters.addTextChangedListener(new TextWatcher() {
|
||||
public void afterTextChanged(Editable s) {
|
||||
}
|
||||
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
|
||||
}
|
||||
public void onTextChanged(CharSequence s, int start, int before, int count) {
|
||||
try {
|
||||
setPasswordMinimumLetters(Integer.parseInt(s.toString()));
|
||||
} catch (NumberFormatException e) {
|
||||
}
|
||||
}
|
||||
});
|
||||
mPasswordMinimumUppercase = (EditText)findViewById(R.id.password_minimum_uppercase);
|
||||
mPasswordMinimumUppercase.addTextChangedListener(new TextWatcher() {
|
||||
public void afterTextChanged(Editable s) {
|
||||
}
|
||||
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
|
||||
}
|
||||
public void onTextChanged(CharSequence s, int start, int before, int count) {
|
||||
try {
|
||||
setPasswordMinimumUppercase(Integer.parseInt(s.toString()));
|
||||
} catch (NumberFormatException e) {
|
||||
}
|
||||
}
|
||||
});
|
||||
mPasswordMinimumLowercase = (EditText)findViewById(R.id.password_minimum_lowercase);
|
||||
mPasswordMinimumLowercase.addTextChangedListener(new TextWatcher() {
|
||||
public void afterTextChanged(Editable s) {
|
||||
}
|
||||
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
|
||||
}
|
||||
public void onTextChanged(CharSequence s, int start, int before, int count) {
|
||||
try {
|
||||
setPasswordMinimumLowercase(Integer.parseInt(s.toString()));
|
||||
} catch (NumberFormatException e) {
|
||||
}
|
||||
}
|
||||
});
|
||||
mPasswordMinimumNumeric = (EditText)findViewById(R.id.password_minimum_numeric);
|
||||
mPasswordMinimumNumeric.addTextChangedListener(new TextWatcher() {
|
||||
public void afterTextChanged(Editable s) {
|
||||
}
|
||||
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
|
||||
}
|
||||
public void onTextChanged(CharSequence s, int start, int before, int count) {
|
||||
try {
|
||||
setPasswordMinimumNumeric(Integer.parseInt(s.toString()));
|
||||
} catch (NumberFormatException e) {
|
||||
}
|
||||
}
|
||||
});
|
||||
mPasswordMinimumSymbols = (EditText)findViewById(R.id.password_minimum_symbols);
|
||||
mPasswordMinimumSymbols.addTextChangedListener(new TextWatcher() {
|
||||
public void afterTextChanged(Editable s) {
|
||||
}
|
||||
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
|
||||
}
|
||||
public void onTextChanged(CharSequence s, int start, int before, int count) {
|
||||
try {
|
||||
setPasswordMinimumSymbols(Integer.parseInt(s.toString()));
|
||||
} catch (NumberFormatException e) {
|
||||
}
|
||||
}
|
||||
});
|
||||
mPasswordMinimumNonLetter = (EditText)findViewById(R.id.password_minimum_nonletter);
|
||||
mPasswordMinimumNonLetter.addTextChangedListener(new TextWatcher() {
|
||||
public void afterTextChanged(Editable s) {
|
||||
}
|
||||
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
|
||||
}
|
||||
public void onTextChanged(CharSequence s, int start, int before, int count) {
|
||||
try {
|
||||
setPasswordMinimumNonLetter(Integer.parseInt(s.toString()));
|
||||
} catch (NumberFormatException e) {
|
||||
}
|
||||
}
|
||||
});
|
||||
mPasswordHistoryLength = (EditText)findViewById(R.id.password_history_length);
|
||||
mPasswordHistoryLength.addTextChangedListener(new TextWatcher() {
|
||||
public void afterTextChanged(Editable s) {
|
||||
@@ -236,6 +327,12 @@ public class DeviceAdminSample extends DeviceAdminReceiver {
|
||||
mDisableButton.setEnabled(true);
|
||||
mPasswordQuality.setEnabled(true);
|
||||
mPasswordLength.setEnabled(true);
|
||||
mPasswordMinimumLetters.setEnabled(true);
|
||||
mPasswordMinimumUppercase.setEnabled(true);
|
||||
mPasswordMinimumLowercase.setEnabled(true);
|
||||
mPasswordMinimumSymbols.setEnabled(true);
|
||||
mPasswordMinimumNumeric.setEnabled(true);
|
||||
mPasswordMinimumNonLetter.setEnabled(true);
|
||||
mPasswordHistoryLength.setEnabled(true);
|
||||
mSetPasswordButton.setEnabled(true);
|
||||
mPassword.setEnabled(true);
|
||||
@@ -247,6 +344,12 @@ public class DeviceAdminSample extends DeviceAdminReceiver {
|
||||
mDisableButton.setEnabled(false);
|
||||
mPasswordQuality.setEnabled(false);
|
||||
mPasswordLength.setEnabled(false);
|
||||
mPasswordMinimumLetters.setEnabled(false);
|
||||
mPasswordMinimumUppercase.setEnabled(false);
|
||||
mPasswordMinimumLowercase.setEnabled(false);
|
||||
mPasswordMinimumSymbols.setEnabled(false);
|
||||
mPasswordMinimumNumeric.setEnabled(false);
|
||||
mPasswordMinimumNonLetter.setEnabled(false);
|
||||
mPasswordHistoryLength.setEnabled(false);
|
||||
mSetPasswordButton.setEnabled(false);
|
||||
mPassword.setEnabled(false);
|
||||
@@ -261,6 +364,12 @@ public class DeviceAdminSample extends DeviceAdminReceiver {
|
||||
final int pwQuality = prefs.getInt(PREF_PASSWORD_QUALITY,
|
||||
DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED);
|
||||
final int pwLength = prefs.getInt(PREF_PASSWORD_LENGTH, 0);
|
||||
final int pwMinLetters = prefs.getInt(PREF_PASSWORD_MINIMUM_LETTERS, 0);
|
||||
final int pwMinUppercase = prefs.getInt(PREF_PASSWORD_MINIMUM_UPPERCASE, 0);
|
||||
final int pwMinLowercase = prefs.getInt(PREF_PASSWORD_MINIMUM_LOWERCASE, 0);
|
||||
final int pwMinNumeric = prefs.getInt(PREF_PASSWORD_MINIMUM_NUMERIC, 0);
|
||||
final int pwMinSymbols = prefs.getInt(PREF_PASSWORD_MINIMUM_SYMBOLS, 0);
|
||||
final int pwMinNonLetter = prefs.getInt(PREF_PASSWORD_MINIMUM_NONLETTER, 0);
|
||||
final int pwHistoryLength = prefs.getInt(PREF_PASSWORD_HISTORY_LENGTH, 0);
|
||||
final int maxFailedPw = prefs.getInt(PREF_MAX_FAILED_PW, 0);
|
||||
|
||||
@@ -270,6 +379,12 @@ public class DeviceAdminSample extends DeviceAdminReceiver {
|
||||
}
|
||||
}
|
||||
mPasswordLength.setText(Integer.toString(pwLength));
|
||||
mPasswordMinimumLetters.setText(Integer.toString(pwMinLetters));
|
||||
mPasswordMinimumUppercase.setText(Integer.toString(pwMinUppercase));
|
||||
mPasswordMinimumLowercase.setText(Integer.toString(pwMinLowercase));
|
||||
mPasswordMinimumSymbols.setText(Integer.toString(pwMinSymbols));
|
||||
mPasswordMinimumNumeric.setText(Integer.toString(pwMinNumeric));
|
||||
mPasswordMinimumNonLetter.setText(Integer.toString(pwMinNonLetter));
|
||||
mPasswordHistoryLength.setText(Integer.toString(pwHistoryLength));
|
||||
mMaxFailedPw.setText(Integer.toString(maxFailedPw));
|
||||
}
|
||||
@@ -279,6 +394,12 @@ public class DeviceAdminSample extends DeviceAdminReceiver {
|
||||
final int pwQuality = prefs.getInt(PREF_PASSWORD_QUALITY,
|
||||
DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED);
|
||||
final int pwLength = prefs.getInt(PREF_PASSWORD_LENGTH, 0);
|
||||
final int pwMinLetters = prefs.getInt(PREF_PASSWORD_MINIMUM_LETTERS, 0);
|
||||
final int pwMinUppercase = prefs.getInt(PREF_PASSWORD_MINIMUM_UPPERCASE, 0);
|
||||
final int pwMinLowercase = prefs.getInt(PREF_PASSWORD_MINIMUM_LOWERCASE, 0);
|
||||
final int pwMinNumeric = prefs.getInt(PREF_PASSWORD_MINIMUM_NUMERIC, 0);
|
||||
final int pwMinSymbols = prefs.getInt(PREF_PASSWORD_MINIMUM_SYMBOLS, 0);
|
||||
final int pwMinNonLetter = prefs.getInt(PREF_PASSWORD_MINIMUM_NONLETTER, 0);
|
||||
final int pwHistoryLength = prefs.getInt(PREF_PASSWORD_HISTORY_LENGTH, 0);
|
||||
final int maxFailedPw = prefs.getInt(PREF_MAX_FAILED_PW, 0);
|
||||
|
||||
@@ -286,6 +407,12 @@ public class DeviceAdminSample extends DeviceAdminReceiver {
|
||||
if (active) {
|
||||
mDPM.setPasswordQuality(mDeviceAdminSample, pwQuality);
|
||||
mDPM.setPasswordMinimumLength(mDeviceAdminSample, pwLength);
|
||||
mDPM.setPasswordMinimumLetters(mDeviceAdminSample, pwMinLetters);
|
||||
mDPM.setPasswordMinimumUpperCase(mDeviceAdminSample, pwMinUppercase);
|
||||
mDPM.setPasswordMinimumLowerCase(mDeviceAdminSample, pwMinLowercase);
|
||||
mDPM.setPasswordMinimumNumeric(mDeviceAdminSample, pwMinNumeric);
|
||||
mDPM.setPasswordMinimumSymbols(mDeviceAdminSample, pwMinSymbols);
|
||||
mDPM.setPasswordMinimumNonLetter(mDeviceAdminSample, pwMinNonLetter);
|
||||
mDPM.setPasswordHistoryLength(mDeviceAdminSample, pwHistoryLength);
|
||||
mDPM.setMaximumFailedPasswordsForWipe(mDeviceAdminSample, maxFailedPw);
|
||||
}
|
||||
@@ -303,6 +430,42 @@ public class DeviceAdminSample extends DeviceAdminReceiver {
|
||||
updatePolicies();
|
||||
}
|
||||
|
||||
void setPasswordMinimumLetters(int length) {
|
||||
SharedPreferences prefs = getSamplePreferences(this);
|
||||
prefs.edit().putInt(PREF_PASSWORD_MINIMUM_LETTERS, length).commit();
|
||||
updatePolicies();
|
||||
}
|
||||
|
||||
void setPasswordMinimumUppercase(int length) {
|
||||
SharedPreferences prefs = getSamplePreferences(this);
|
||||
prefs.edit().putInt(PREF_PASSWORD_MINIMUM_UPPERCASE, length).commit();
|
||||
updatePolicies();
|
||||
}
|
||||
|
||||
void setPasswordMinimumLowercase(int length) {
|
||||
SharedPreferences prefs = getSamplePreferences(this);
|
||||
prefs.edit().putInt(PREF_PASSWORD_MINIMUM_LOWERCASE, length).commit();
|
||||
updatePolicies();
|
||||
}
|
||||
|
||||
void setPasswordMinimumNumeric(int length) {
|
||||
SharedPreferences prefs = getSamplePreferences(this);
|
||||
prefs.edit().putInt(PREF_PASSWORD_MINIMUM_NUMERIC, length).commit();
|
||||
updatePolicies();
|
||||
}
|
||||
|
||||
void setPasswordMinimumSymbols(int length) {
|
||||
SharedPreferences prefs = getSamplePreferences(this);
|
||||
prefs.edit().putInt(PREF_PASSWORD_MINIMUM_SYMBOLS, length).commit();
|
||||
updatePolicies();
|
||||
}
|
||||
|
||||
void setPasswordMinimumNonLetter(int length) {
|
||||
SharedPreferences prefs = getSamplePreferences(this);
|
||||
prefs.edit().putInt(PREF_PASSWORD_MINIMUM_NONLETTER, length).commit();
|
||||
updatePolicies();
|
||||
}
|
||||
|
||||
void setPasswordHistoryLength(int length) {
|
||||
SharedPreferences prefs = getSamplePreferences(this);
|
||||
prefs.edit().putInt(PREF_PASSWORD_HISTORY_LENGTH, length).commit();
|
||||
|
||||
Reference in New Issue
Block a user