/*
* Copyright (C) 2012 Louis Fazen
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
* in compliance with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the License
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
* or implied. See the License for the specific language governing permissions and limitations under
* the License.
*/
package com.alphabetbloc.accessadmin.activities;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import com.actionbarsherlock.app.ActionBar;
import com.actionbarsherlock.app.SherlockActivity;
import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuItem;
import com.actionbarsherlock.view.SubMenu;
import com.alphabetbloc.accessadmin.R;
import com.alphabetbloc.accessadmin.data.Constants;
import com.alphabetbloc.accessadmin.data.EncryptedPreferences;
/**
* Resets the Admin Password...
*
* @author Louis Fazen (louis.fazen@gmail.com)
*
*/
public class SetAdminPassword extends SherlockActivity {
public static final String TAG = "SetAdminPassword";
private Button mSubmitButton;
private TextView mInstructionText;
private EditText mPasswordField;
private String mFirstPassword;
private boolean mAdminVerified;
private String mCurrentPassword;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mAdminVerified = false;
mFirstPassword = "";
createView();
}
private void createView() {
setContentView(R.layout.admin_login);
ActionBar actionBar = this.getSupportActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
// Setup current admin password
final SharedPreferences prefs = new EncryptedPreferences(this, this.getSharedPreferences(Constants.ENCRYPTED_PREFS, Context.MODE_PRIVATE));
mCurrentPassword = prefs.getString(Constants.ADMIN_PASSWORD, null);
if (mCurrentPassword == null)
prefs.edit().putString(Constants.ADMIN_PASSWORD, Constants.DEFAULT_ADMIN_PASSWORD).commit();
// Setup Admin ID
mPasswordField = (EditText) findViewById(R.id.text_password);
mInstructionText = (TextView) findViewById(R.id.instruction);
mInstructionText.setText(R.string.verify_admin_password);
// Buttons
mSubmitButton = (Button) findViewById(R.id.submit_button);
mSubmitButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (!mPasswordField.getText().toString().equals("")) {
String userEntry = mPasswordField.getText().toString();
mPasswordField.setText("");
if (!mAdminVerified) {
if (verifyAdminPassword(userEntry))
mInstructionText.setText(R.string.update_admin_password);
} else if (!isSecure(userEntry)) {
mInstructionText.setText(R.string.secure_admin_password);
Toast.makeText(SetAdminPassword.this, "Sorry, that password is insecure.", Toast.LENGTH_SHORT).show();
} else if (mFirstPassword == "") {
mFirstPassword = userEntry;
userEntry = "";
mInstructionText.setText(R.string.confirm_admin_password);
} else if (!mFirstPassword.equals(userEntry)) {
mInstructionText.setText(R.string.update_admin_password);
Toast.makeText(SetAdminPassword.this, "Passwords do not match. Please enter a new Administrator Password", Toast.LENGTH_SHORT).show();
} else if (mFirstPassword.equals(userEntry)) {
prefs.edit().putString(Constants.ADMIN_PASSWORD, userEntry).commit();
Toast.makeText(SetAdminPassword.this, "Password has been updated.", Toast.LENGTH_SHORT).show();
Intent intenta = new Intent(v.getContext(), AdminSettingsActivity.class);
intenta.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intenta);
finish();
} else {
Toast.makeText(SetAdminPassword.this, "Please Try Again.", Toast.LENGTH_SHORT).show();
}
} else {
Toast.makeText(SetAdminPassword.this, "Please Click on White Box to Enter An Admin Password.", Toast.LENGTH_SHORT).show();
}
}
});
}
private static boolean isSecure(String str) {
boolean alpha = false;
boolean num = false;
boolean lower = false;
boolean upper = false;
int count = 0;
for (char c : str.toCharArray()) {
if (Character.isLetter(c))
alpha = true;
if (Character.isDigit(c))
num = true;
if (Character.isLowerCase(c))
lower = true;
if (Character.isUpperCase(c))
upper = true;
count++;
}
if (alpha && num && upper && lower && count > 7)
return true;
else
return false;
}
private boolean verifyAdminPassword(String userEntry) {
int i = userEntry.compareTo(mCurrentPassword);
if (i == 0) {
mAdminVerified = true;
} else {
Toast.makeText(SetAdminPassword.this, "Incorrect Password: " + userEntry, Toast.LENGTH_SHORT).show();
mAdminVerified = false;
}
return mAdminVerified;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
SubMenu sub = menu.addSubMenu("Menu");
sub.setIcon(R.drawable.submenu);
sub.add(0, R.string.list_short_password, 0, getString(R.string.list_short_password));
sub.add(0, R.string.list_short_policy, 0, getString(R.string.list_short_policy));
sub.add(0, R.string.list_short_apps, 0, getString(R.string.list_short_apps));
sub.add(0, R.string.list_short_sms, 0, getString(R.string.list_short_sms));
sub.getItem().setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
Intent i = new Intent(this, AdminSettingsActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);
return false;
case R.string.list_short_policy:
startActivity(new Intent(this, SetDevicePolicy.class));
finish();
return true;
case R.string.list_short_apps:
startActivity(new Intent(this, SetAppPreferences.class));
finish();
return true;
case R.string.list_short_password:
startActivity(new Intent(this, SetAdminPassword.class));
finish();
return true;
case R.string.list_short_sms:
startActivity(new Intent(this, ViewSmsSettings.class));
finish();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
}