ManageKeyguard.java :  » UnTagged » mylockforandroid » i4nc4mp » myLockAdvanced » Android Open Source

Android Open Source » UnTagged » mylockforandroid 
mylockforandroid » i4nc4mp » myLockAdvanced » ManageKeyguard.java
package i4nc4mp.myLockAdvanced;
//Thanks for this code from the open source SMSPopup project
//Nice wrapped up tool that gets us cleanly in and out of keyguard management
//I added some documentation to certain parts to help explain the keyguardmanager facet of android.


import android.app.KeyguardManager;
import android.app.KeyguardManager.KeyguardLock;
import android.app.KeyguardManager.OnKeyguardExitResult;
import android.content.Context;
import android.util.Log;

public class ManageKeyguard {
private static KeyguardManager myKM = null;
private static KeyguardLock myKL = null;

public static final String TAG = "kg";

public static synchronized void initialize(Context context) {
  if (myKM == null) {
    myKM = (KeyguardManager) context.getSystemService(Context.KEYGUARD_SERVICE);
    Log.v("MKinit","we had to get the KM.");
  }
}

public static synchronized void disableKeyguard(Context context) {
  // myKM = (KeyguardManager)
  // context.getSystemService(Context.KEYGUARD_SERVICE);
  initialize(context);

  if (myKM.inKeyguardRestrictedInputMode()) {
    myKL = myKM.newKeyguardLock(TAG);
    myKL.disableKeyguard();
    //Log.v(TAG,"--Keyguard disabled");
  } else {
    myKL = null;
  }
}

//the following checks if the keyguard is even on...
//it actually can't distinguish between password mode or not
//I've learned that this returns true even if you've done the above disable
//that's because disable is just hiding or pausing the lockscreen.

//the only time this returns false is if we haven't ever done an init
//or we have already securely exited
//the OS also seems to automatically do a secure exit when you press home after a disable
public static synchronized boolean inKeyguardRestrictedInputMode() {
  if (myKM != null) {
    return myKM.inKeyguardRestrictedInputMode();
  }
  
  return false;
}

public static synchronized void reenableKeyguard() {
  if (myKM != null) {
    if (myKL != null) {
      myKL.reenableKeyguard();
      myKL = null;
    }
  }
}

//this only can be used after we have paused/hidden the lockscreen with a disablekeyguard call
//otherwise the OS logs "verifyunlock called when not externally disabled."
public static synchronized void exitKeyguardSecurely(final LaunchOnKeyguardExit callback) {
  if (inKeyguardRestrictedInputMode()) {
    Log.v(TAG,"--Trying to exit keyguard securely");
    myKM.exitKeyguardSecurely(new OnKeyguardExitResult() {
      public void onKeyguardExitResult(boolean success) {
        reenableKeyguard();
        //this call ensures the keyguard comes back at screen off
        //without this call, all future disable calls will be blocked
        //for not following the lockscreen rules
        //in other words reenable immediately restores a paused lockscreen
        //but only queues restore for next screen off if a secure exit has been done already
        if (success) {
          Log.v(TAG,"--Keyguard exited securely");
          callback.LaunchOnKeyguardExitSuccess();
        } else {
          Log.v(TAG,"--Keyguard exit failed");
        }
      }
    });
  } else {
    callback.LaunchOnKeyguardExitSuccess();
  }
}

public interface LaunchOnKeyguardExit {
  public void LaunchOnKeyguardExitSuccess();
}
}

java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.