package org.wordpress.android.lockmanager;
import java.util.Date;
import android.app.Activity;
import android.app.Application;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.PreferenceManager;
import org.wordpress.android.util.StringUtils;
public class DefaultAppLock extends AbstractAppLock {
private Application currentApp; //Keep a reference to the app that invoked the locker
private SharedPreferences settings;
private Date lostFocusDate;
private static final String PASSWORD_SALT = "sadasauidhsuyeuihdahdiauhs";
public DefaultAppLock(Application currentApp) {
super();
SharedPreferences settings = PreferenceManager
.getDefaultSharedPreferences(currentApp);
this.settings = settings;
this.currentApp = currentApp;
}
public void enable() {
if (isPasswordLocked()) {
currentApp.unregisterActivityLifecycleCallbacks(this);
currentApp.registerActivityLifecycleCallbacks(this);
}
}
public void disable() {
currentApp.unregisterActivityLifecycleCallbacks(this);
}
public void forcePasswordLock() {
lostFocusDate = null;
}
public boolean verifyPassword(String password) {
String storedPassword = settings.getString(APP_LOCK_PASSWORD_PREF_KEY,
"");
password = PASSWORD_SALT + password + PASSWORD_SALT;
password = StringUtils.getMd5Hash(password);
if (password.equalsIgnoreCase(storedPassword)) {
lostFocusDate = new Date();
return true;
} else {
return false;
}
}
public boolean setPassword(String password) {
SharedPreferences.Editor editor = settings.edit();
if (password == null) {
editor.remove(APP_LOCK_PASSWORD_PREF_KEY);
editor.commit();
this.disable();
} else {
password = PASSWORD_SALT + password + PASSWORD_SALT;
editor.putString(APP_LOCK_PASSWORD_PREF_KEY,
StringUtils.getMd5Hash(password));
editor.commit();
this.enable();
}
return true;
}
public boolean isPasswordLocked() {
//Check if we need to show the lock screen at startup
if (settings.getString(APP_LOCK_PASSWORD_PREF_KEY, "").equals(""))
return false;
return true;
}
private boolean mustShowUnlockSceen() {
if (isPasswordLocked() == false)
return false;
if (lostFocusDate == null)
return true; //first startup or when we forced to show the password
int currentTimeOut = lockTimeOut; //get a reference to the current password timeout and reset it to default
lockTimeOut = DEFAULT_TIMEOUT;
Date now = new Date();
long now_ms = now.getTime();
long lost_focus_ms = lostFocusDate.getTime();
int secondsPassed = (int) (now_ms - lost_focus_ms) / (1000);
if (secondsPassed >= currentTimeOut) {
lostFocusDate = null;
return true;
}
return false;
}
@Override
public void onActivityPaused(Activity arg0) {
if (arg0.getClass() == AppUnlockActivity.class)
return;
lostFocusDate = new Date();
}
@Override
public void onActivityResumed(Activity arg0) {
if (arg0.getClass() == AppUnlockActivity.class)
return;
if (mustShowUnlockSceen()) {
//uhhh ohhh!
Intent i = new Intent(arg0.getApplicationContext(),
AppUnlockActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
arg0.getApplication().startActivity(i);
return;
}
}
@Override
public void onActivityCreated(Activity arg0, Bundle arg1) {
}
@Override
public void onActivityDestroyed(Activity arg0) {
}
@Override
public void onActivitySaveInstanceState(Activity arg0, Bundle arg1) {
}
@Override
public void onActivityStarted(Activity arg0) {
}
@Override
public void onActivityStopped(Activity arg0) {
}
}