package jp.co.cyberagent.stf.query;
import android.app.KeyguardManager;
import android.content.Context;
import android.util.Log;
import com.google.protobuf.GeneratedMessageLite;
import com.google.protobuf.InvalidProtocolBufferException;
import jp.co.cyberagent.stf.proto.Wire;
public class SetKeyguardStateResponder extends AbstractResponder {
private static final String TAG = "STFKeyguardStateResponder";
private KeyguardManager.KeyguardLock lock;
public SetKeyguardStateResponder(Context context) {
super(context);
}
@Override
public GeneratedMessageLite respond(Wire.Envelope envelope) throws InvalidProtocolBufferException {
Wire.SetKeyguardStateRequest request =
Wire.SetKeyguardStateRequest.parseFrom(envelope.getMessage());
if (request.getEnabled()) {
enable();
}
else {
dismiss();
}
return Wire.Envelope.newBuilder()
.setId(envelope.getId())
.setType(Wire.MessageType.SET_KEYGUARD_STATE)
.setMessage(Wire.SetKeyguardStateResponse.newBuilder()
.setSuccess(true)
.build()
.toByteString())
.build();
}
@Override
public void cleanup() {
enable();
}
@SuppressWarnings("deprecation")
private void dismiss() {
Log.i(TAG, "Unlocking device");
if (lock == null) {
KeyguardManager km = (KeyguardManager) context.getSystemService(Context.KEYGUARD_SERVICE);
lock = km.newKeyguardLock("STFService");
}
lock.reenableKeyguard();
lock.disableKeyguard();
}
private void enable() {
Log.i(TAG, "Locking device");
if (lock != null) {
lock.reenableKeyguard();
}
}
}