FreeRDP
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Modules Pages
ClipboardManagerProxy.java
1package com.freerdp.freerdpcore.utils;
2
3import android.annotation.TargetApi;
4import android.content.ClipData;
5import android.content.ClipboardManager;
6import android.content.Context;
7import android.os.Build.VERSION;
8import android.os.Build.VERSION_CODES;
9
10public abstract class ClipboardManagerProxy
11{
12
13 public static ClipboardManagerProxy getClipboardManager(Context ctx)
14 {
15 if (VERSION.SDK_INT < VERSION_CODES.HONEYCOMB)
16 return new PreHCClipboardManager(ctx);
17 else
18 return new HCClipboardManager(ctx);
19 }
20
21 public abstract void setClipboardData(String data);
22
23 public abstract void addClipboardChangedListener(OnClipboardChangedListener listener);
24
25 public abstract void removeClipboardboardChangedListener(OnClipboardChangedListener listener);
26
27 public abstract void getPrimaryClipManually();
28
30 {
31 void onClipboardChanged(String data);
32 }
33
34 private static class PreHCClipboardManager extends ClipboardManagerProxy
35 {
36
37 public PreHCClipboardManager(Context ctx)
38 {
39 }
40
41 @Override public void setClipboardData(String data)
42 {
43 }
44
45 @Override public void addClipboardChangedListener(OnClipboardChangedListener listener)
46 {
47 }
48
49 @Override
50 public void removeClipboardboardChangedListener(OnClipboardChangedListener listener)
51 {
52 }
53
54 @Override public void getPrimaryClipManually()
55 {
56 }
57 }
58
59 @TargetApi(11)
60 private static class HCClipboardManager
61 extends ClipboardManagerProxy implements ClipboardManager.OnPrimaryClipChangedListener
62 {
63 private final ClipboardManager mClipboardManager;
64 private OnClipboardChangedListener mListener;
65
66 public HCClipboardManager(Context ctx)
67 {
68 mClipboardManager = (ClipboardManager)ctx.getSystemService(Context.CLIPBOARD_SERVICE);
69 }
70
71 @Override public void setClipboardData(String data)
72 {
73 mClipboardManager.setPrimaryClip(
74 ClipData.newPlainText("rdp-clipboard", data == null ? "" : data));
75 }
76
77 @Override public void onPrimaryClipChanged()
78 {
79 ClipData clip = mClipboardManager.getPrimaryClip();
80 String data = null;
81
82 if (clip != null && clip.getItemCount() > 0)
83 {
84 CharSequence cs = clip.getItemAt(0).getText();
85 if (cs != null)
86 data = cs.toString();
87 }
88 if (mListener != null)
89 {
90 mListener.onClipboardChanged(data);
91 }
92 }
93
94 @Override public void addClipboardChangedListener(OnClipboardChangedListener listener)
95 {
96 mListener = listener;
97 mClipboardManager.addPrimaryClipChangedListener(this);
98 }
99
100 @Override
101 public void removeClipboardboardChangedListener(OnClipboardChangedListener listener)
102 {
103 mListener = null;
104 mClipboardManager.removePrimaryClipChangedListener(this);
105 }
106
107 @Override public void getPrimaryClipManually()
108 {
109 onPrimaryClipChanged();
110 }
111 }
112}