package jp.co.cyberagent.stf.query; import android.content.ClipData; import android.content.Context; import android.os.Build; import com.google.protobuf.GeneratedMessageLite; import com.google.protobuf.InvalidProtocolBufferException; import jp.co.cyberagent.stf.Service; import jp.co.cyberagent.stf.proto.Wire; public class GetClipboardResponder extends AbstractResponder { public GetClipboardResponder(Context context) { super(context); } @Override public GeneratedMessageLite respond(Wire.Envelope envelope) throws InvalidProtocolBufferException { Wire.GetClipboardRequest request = Wire.GetClipboardRequest.parseFrom(envelope.getMessage()); switch (request.getType()) { case TEXT: CharSequence text = getClipboardText(); if (text == null) { return Wire.Envelope.newBuilder() .setId(envelope.getId()) .setType(Wire.MessageType.GET_CLIPBOARD) .setMessage(Wire.GetClipboardResponse.newBuilder() .setSuccess(true) .setType(Wire.ClipboardType.TEXT) .build() .toByteString()) .build(); } return Wire.Envelope.newBuilder() .setId(envelope.getId()) .setType(Wire.MessageType.GET_CLIPBOARD) .setMessage(Wire.GetClipboardResponse.newBuilder() .setSuccess(true) .setType(Wire.ClipboardType.TEXT) .setText(text.toString()) .build() .toByteString()) .build(); default: return Wire.Envelope.newBuilder() .setId(envelope.getId()) .setType(Wire.MessageType.GET_CLIPBOARD) .setMessage(Wire.GetClipboardResponse.newBuilder() .setSuccess(false) .build() .toByteString()) .build(); } } @Override public void cleanup() { // No-op } private CharSequence getClipboardText() { if (Build.VERSION.SDK_INT >= 11) { android.content.ClipboardManager clipboardManager = (android.content.ClipboardManager) Service.getClipboardManager(); if (clipboardManager.hasPrimaryClip()) { ClipData clipData = clipboardManager.getPrimaryClip(); if (clipData.getItemCount() > 0) { ClipData.Item clip = clipData.getItemAt(0); return clip.coerceToText(context.getApplicationContext()); } else { return null; } } else { return null; } } else { return ((android.text.ClipboardManager) Service.getClipboardManager()) .getText(); } } }