package com.freerdp.freerdpcore.utils; import android.annotation.TargetApi; import android.content.ClipData; import android.content.ClipboardManager; import android.content.Context; import android.os.Build.VERSION; import android.os.Build.VERSION_CODES; public abstract class ClipboardManagerProxy { public static ClipboardManagerProxy getClipboardManager(Context ctx) { if (VERSION.SDK_INT < VERSION_CODES.HONEYCOMB) return new PreHCClipboardManager(ctx); else return new HCClipboardManager(ctx); } public abstract void setClipboardData(String data); public abstract void addClipboardChangedListener(OnClipboardChangedListener listener); public abstract void removeClipboardboardChangedListener(OnClipboardChangedListener listener); public static interface OnClipboardChangedListener { void onClipboardChanged(String data); } private static class PreHCClipboardManager extends ClipboardManagerProxy { public PreHCClipboardManager(Context ctx) { } @Override public void setClipboardData(String data) { } @Override public void addClipboardChangedListener( OnClipboardChangedListener listener) { } @Override public void removeClipboardboardChangedListener( OnClipboardChangedListener listener) { } } @TargetApi(11) private static class HCClipboardManager extends ClipboardManagerProxy implements ClipboardManager.OnPrimaryClipChangedListener { private ClipboardManager mClipboardManager; private OnClipboardChangedListener mListener; public HCClipboardManager(Context ctx) { mClipboardManager = (ClipboardManager) ctx.getSystemService(Context.CLIPBOARD_SERVICE); } @Override public void setClipboardData(String data) { mClipboardManager.setPrimaryClip(ClipData.newPlainText("rdp-clipboard", data == null ? "" : data)); } @Override public void onPrimaryClipChanged() { ClipData clip = mClipboardManager.getPrimaryClip(); String data = null; if (clip != null && clip.getItemCount() > 0) { CharSequence cs = clip.getItemAt(0).getText(); if (cs != null) data = cs.toString(); } if (mListener != null) { mListener.onClipboardChanged(data); } } @Override public void addClipboardChangedListener( OnClipboardChangedListener listener) { mListener = listener; mClipboardManager.addPrimaryClipChangedListener(this); } @Override public void removeClipboardboardChangedListener( OnClipboardChangedListener listener) { mListener = null; mClipboardManager.removePrimaryClipChangedListener(this); } } }