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);
}
}
}