28 return new HCClipboardManager(ctx);
31 public abstract void setClipboardData(String data);
33 public abstract void setClipboardImage(
byte[] pngData);
39 public abstract void getPrimaryClipManually();
43 void onClipboardChanged(String data);
45 void onClipboardImageChanged(
byte[] data, String mimeType);
48 private static class HCClipboardManager
51 private final Context mContext;
52 private final ClipboardManager mClipboardManager;
55 public HCClipboardManager(Context ctx)
58 mClipboardManager = (ClipboardManager)ctx.getSystemService(Context.CLIPBOARD_SERVICE);
61 @Override
public void setClipboardData(String data)
63 mClipboardManager.setPrimaryClip(
64 ClipData.newPlainText(
"rdp-clipboard", data ==
null ?
"" : data));
67 @Override
public void setClipboardImage(
byte[] pngData)
69 ClipboardImageProvider.setImageData(pngData);
70 ClipData clip =
new ClipData(
"rdp-clipboard",
new String[] {
"image/png" },
71 new ClipData.Item(ClipboardImageProvider.CONTENT_URI));
72 mClipboardManager.setPrimaryClip(clip);
75 @Override
public void onPrimaryClipChanged()
77 ClipData clip = mClipboardManager.getPrimaryClip();
78 if (clip ==
null || clip.getItemCount() == 0)
81 ClipData.Item item = clip.getItemAt(0);
83 CharSequence cs = item.getText();
86 if (mListener !=
null)
87 mListener.onClipboardChanged(cs.toString());
91 Uri uri = item.getUri();
94 String mimeType = mContext.getContentResolver().getType(uri);
95 if (mimeType !=
null && mimeType.startsWith(
"image/"))
97 try (InputStream is = mContext.getContentResolver().openInputStream(uri))
101 ByteArrayOutputStream baos =
new ByteArrayOutputStream();
102 byte[] buf =
new byte[8192];
104 while ((n = is.read(buf)) != -1)
105 baos.write(buf, 0, n);
106 if (mListener !=
null)
107 mListener.onClipboardImageChanged(baos.toByteArray(), mimeType);
110 catch (IOException e)
118 @Override
public void addClipboardChangedListener(OnClipboardChangedListener listener)
120 mListener = listener;
121 mClipboardManager.addPrimaryClipChangedListener(
this);
125 public void removeClipboardboardChangedListener(OnClipboardChangedListener listener)
128 mClipboardManager.removePrimaryClipChangedListener(
this);
131 @Override
public void getPrimaryClipManually()
133 onPrimaryClipChanged();