1 package com.freerdp.freerdpcore.utils; 2 3 import android.annotation.TargetApi; 4 import android.content.ClipData; 5 import android.content.ClipboardManager; 6 import android.content.Context; 7 import android.os.Build.VERSION; 8 import android.os.Build.VERSION_CODES; 9 10 public abstract class ClipboardManagerProxy 11 { 12 getClipboardManager(Context ctx)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 setClipboardData(String data)21 public abstract void setClipboardData(String data); 22 addClipboardChangedListener(OnClipboardChangedListener listener)23 public abstract void addClipboardChangedListener(OnClipboardChangedListener listener); 24 removeClipboardboardChangedListener(OnClipboardChangedListener listener)25 public abstract void removeClipboardboardChangedListener(OnClipboardChangedListener listener); 26 27 public static interface OnClipboardChangedListener { onClipboardChanged(String data)28 void onClipboardChanged(String data); 29 } 30 31 private static class PreHCClipboardManager extends ClipboardManagerProxy 32 { 33 PreHCClipboardManager(Context ctx)34 public PreHCClipboardManager(Context ctx) 35 { 36 } 37 setClipboardData(String data)38 @Override public void setClipboardData(String data) 39 { 40 } 41 addClipboardChangedListener(OnClipboardChangedListener listener)42 @Override public void addClipboardChangedListener(OnClipboardChangedListener listener) 43 { 44 } 45 46 @Override removeClipboardboardChangedListener(OnClipboardChangedListener listener)47 public void removeClipboardboardChangedListener(OnClipboardChangedListener listener) 48 { 49 } 50 } 51 52 @TargetApi(11) 53 private static class HCClipboardManager 54 extends ClipboardManagerProxy implements ClipboardManager.OnPrimaryClipChangedListener 55 { 56 private ClipboardManager mClipboardManager; 57 private OnClipboardChangedListener mListener; 58 HCClipboardManager(Context ctx)59 public HCClipboardManager(Context ctx) 60 { 61 mClipboardManager = (ClipboardManager)ctx.getSystemService(Context.CLIPBOARD_SERVICE); 62 } 63 setClipboardData(String data)64 @Override public void setClipboardData(String data) 65 { 66 mClipboardManager.setPrimaryClip( 67 ClipData.newPlainText("rdp-clipboard", data == null ? "" : data)); 68 } 69 onPrimaryClipChanged()70 @Override public void onPrimaryClipChanged() 71 { 72 ClipData clip = mClipboardManager.getPrimaryClip(); 73 String data = null; 74 75 if (clip != null && clip.getItemCount() > 0) 76 { 77 CharSequence cs = clip.getItemAt(0).getText(); 78 if (cs != null) 79 data = cs.toString(); 80 } 81 if (mListener != null) 82 { 83 mListener.onClipboardChanged(data); 84 } 85 } 86 addClipboardChangedListener(OnClipboardChangedListener listener)87 @Override public void addClipboardChangedListener(OnClipboardChangedListener listener) 88 { 89 mListener = listener; 90 mClipboardManager.addPrimaryClipChangedListener(this); 91 } 92 93 @Override removeClipboardboardChangedListener(OnClipboardChangedListener listener)94 public void removeClipboardboardChangedListener(OnClipboardChangedListener listener) 95 { 96 mListener = null; 97 mClipboardManager.removePrimaryClipChangedListener(this); 98 } 99 } 100 } 101