package jp.co.cyberagent.stf.query; import android.content.Context; import android.os.PowerManager; import android.util.Log; import com.google.protobuf.GeneratedMessageLite; import com.google.protobuf.InvalidProtocolBufferException; import jp.co.cyberagent.stf.proto.Wire; public class SetWakeLockResponder extends AbstractResponder { private static final String TAG = "STFSetWakeLockResponder"; private PowerManager.WakeLock wakeLock; public SetWakeLockResponder(Context context) { super(context); } @Override public GeneratedMessageLite respond(Wire.Envelope envelope) throws InvalidProtocolBufferException { Wire.SetWakeLockRequest request = Wire.SetWakeLockRequest.parseFrom(envelope.getMessage()); if (request.getEnabled()) { acquireWakeLock(); } else { releaseWakeLock(); } return Wire.Envelope.newBuilder() .setId(envelope.getId()) .setType(Wire.MessageType.SET_WAKE_LOCK) .setMessage(Wire.SetWakeLockResponse.newBuilder() .setSuccess(true) .build() .toByteString()) .build(); } @Override public void cleanup() { releaseWakeLock(); } @SuppressWarnings("deprecation") private void acquireWakeLock() { releaseWakeLock(); Log.i(TAG, "Acquiring wake lock"); PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE); wakeLock = pm.newWakeLock( PowerManager.SCREEN_DIM_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, "STFService" ); wakeLock.acquire(); } private void releaseWakeLock() { if (wakeLock != null) { Log.i(TAG, "Releasing wake lock"); wakeLock.release(); wakeLock = null; } } }