제가 이번에 학교에서 프로젝트로 앱을 하나 만드는데 제가 보안암호 부분을 맡았습니다! 보안암호가 카카오톡 들어갈때 걸려지는 보안암호 기능을 맡았는데요! 제가 샘플 예제를 하나 받아서 구동해 봤는데 잘 돌아갔는데.... 저희가 개발중인 앱에 통합을 하니까 구동이 안되더군요 ㅠㅠ 로그캣을 읽어봐도 도대체 어디가 뭐때문에 문제인지 모르겠습니다 ㅠㅠ
private void updateUI() {
Log.d("updatUI : "," 구문에 들어오긴 함 ㅇㅇ ");
if (LockManager.getInstance().getAppLock().isPasscodeSet()) {
Log.d("updatUI : "," 실행되고 반환값 참 ");
btOnOff.setText(R.string.disable_passcode);
btChange.setEnabled(true);
} else {
Log.d("updatUI : "," 실행되고 반환값 거짓 ");
btOnOff.setText(R.string.enable_passcode);
btChange.setEnabled(false);
}
}
}
public abstract class AppLock {
public static final int ENABLE_PASSLOCK = 0;
public static final int DISABLE_PASSLOCK = 1;
public static final int CHANGE_PASSWORD = 2;
public static final int UNLOCK_PASSWORD = 3;
public static final String MESSAGE = "message";
public static final String TYPE = "type";
public static final int DEFAULT_TIMEOUT = 0; // 2000ms
protected int lockTimeOut;
protected HashSet<String> ignoredActivities;
public void setTimeout(int timeout) {
this.lockTimeOut = timeout;
}
public AppLock() {
ignoredActivities = new HashSet<String>();
lockTimeOut = DEFAULT_TIMEOUT;
}
public void addIgnoredActivity(Class<?> clazz) {
String clazzName = clazz.getName();
this.ignoredActivities.add(clazzName);
}
public void removeIgnoredActivity(Class<?> clazz) {
String clazzName = clazz.getName();
this.ignoredActivities.remove(clazzName);
}
public abstract void enable();
public abstract void disable();
public abstract boolean setPasscode(String passcode);
public abstract boolean checkPasscode(String passcode);
public abstract boolean isPasscodeSet();
}
public class AppLockImpl extends AppLock implements PageListener {
public static final String TAG = "DefaultAppLock";
private static final String PASSWORD_PREFERENCE_KEY = "passcode";
private static final String PASSWORD_SALT = "7xn7@c$";
private SharedPreferences settings;
private int liveCount;
private int visibleCount;
private long lastActive;
public AppLockImpl(Application app) {
super();
SharedPreferences settings = PreferenceManager
.getDefaultSharedPreferences(app);
this.settings = settings;
this.liveCount = 0;
this.visibleCount = 0;
}
public void enable() {
LockBaseActivity.setListener(this);
}
public void disable() {
LockBaseActivity.setListener(null);
}
public boolean checkPasscode(String passcode) {
passcode = PASSWORD_SALT + passcode + PASSWORD_SALT;
passcode = Encryptor.getSHA1(passcode);
String storedPasscode = "";
if (settings.contains(PASSWORD_PREFERENCE_KEY)) {
storedPasscode = settings.getString(PASSWORD_PREFERENCE_KEY, "");
}
if (passcode.equalsIgnoreCase(storedPasscode)) {
return true;
} else {
return false;
}
}
public boolean setPasscode(String passcode) {
SharedPreferences.Editor editor = settings.edit();
if (passcode == null) {
editor.remove(PASSWORD_PREFERENCE_KEY);
editor.commit();
this.disable();
} else {
passcode = PASSWORD_SALT + passcode + PASSWORD_SALT;
passcode = Encryptor.getSHA1(passcode);
editor.putString(PASSWORD_PREFERENCE_KEY, passcode);
editor.commit();
this.enable();
}
return true;
}
public boolean isPasscodeSet() {
Log.d("isPasscodeSet : "," 이것도 구문에는 들온다; ;... ");
if (settings.contains(PASSWORD_PREFERENCE_KEY)) {
Log.d("ApploclImpl : "," 패스코드가 생성 됨 ");
return true;
}
Log.d("ApploclImpl : "," 패스코드가 생성 안됨 ");
return false;
}
private boolean isIgnoredActivity(Activity activity) {
String clazzName = activity.getClass().getName();
// ignored activities
if (ignoredActivities.contains(clazzName)) {
Log.d(TAG, "ignore activity " + clazzName);
return true;
}
return false;
}
private boolean shouldLockSceen(Activity activity) {
// already unlock
if (activity instanceof AppLockActivity) {
AppLockActivity ala = (AppLockActivity) activity;
if (ala.getType() == AppLock.UNLOCK_PASSWORD) {
Log.d(TAG, "already unlock activity");
return false;
}
}
// no pass code set
if (!isPasscodeSet()) {
Log.d(TAG, "lock passcode not set.");
return false;
}
// no enough timeout
long passedTime = System.currentTimeMillis() - lastActive;
if (lastActive > 0 && passedTime <= lockTimeOut) {
Log.d(TAG, "no enough timeout " + passedTime + " for "
+ lockTimeOut);
return false;
}
// start more than one page
if (visibleCount > 1) {
return false;
}
return true;
}
@Override
public void onActivityPaused(Activity activity) {
String clazzName = activity.getClass().getName();
Log.d(TAG, "onActivityPaused " + clazzName);
if (isIgnoredActivity(activity)) {
return;
}
}
@Override
public void onActivityResumed(Activity activity) {
String clazzName = activity.getClass().getName();
Log.d(TAG, "onActivityResumed " + clazzName);
if (isIgnoredActivity(activity)) {
return;
}
if (shouldLockSceen(activity)) {
Intent intent = new Intent(activity.getApplicationContext(),
AppLockActivity.class);
intent.putExtra(AppLock.TYPE, AppLock.UNLOCK_PASSWORD);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
activity.getApplication().startActivity(intent);
}
lastActive = 0;
}
@Override
public void onActivityCreated(Activity activity) {
if (isIgnoredActivity(activity)) {
return;
}
liveCount++;
}
@Override
public void onActivityDestroyed(Activity activity) {
if (isIgnoredActivity(activity)) {
return;
}
liveCount--;
if (liveCount == 0) {
lastActive = System.currentTimeMillis();
Log.d(TAG, "set last active " + lastActive);
}
}
@Override
public void onActivitySaveInstanceState(Activity activity) {
if (isIgnoredActivity(activity)) {
return;
}
}
@Override
public void onActivityStarted(Activity activity) {
String clazzName = activity.getClass().getName();
Log.d(TAG, "onActivityStarted " + clazzName);
if (isIgnoredActivity(activity)) {
return;
}
visibleCount++;
}
@Override
public void onActivityStopped(Activity activity) {
String clazzName = activity.getClass().getName();
Log.d(TAG, "onActivityStopped " + clazzName);
if (isIgnoredActivity(activity)) {
return;
}
visibleCount--;
if (visibleCount == 0) {
lastActive = System.currentTimeMillis();
Log.d(TAG, "set last active " + lastActive);
}
}
}


제가 알아보니까 LockManager.getinstance().getAppLock()까지는 실행이 된느데 AppLock부분의 isPassCodeSet 부분이 함수 자체가 실행이 안되더군요.... isPassCode뿐 아니라 AppLock의 모든 함수가 실행이 안됩니다. 혹시나 해서 AppLockImpl을 불러와서 실해해보아도 마찬가지입니다 ㅠㅠ 어떻게 방법이 없을까요??