22
33import android .app .Activity ;
44import android .content .BroadcastReceiver ;
5+ import android .content .ClipData ;
6+ import android .content .ClipboardManager ;
57import android .content .Context ;
68import android .content .Intent ;
79import android .content .IntentFilter ;
810
9- public class Scanner implements Runnable {
11+ public class Scanner implements Runnable , ClipboardManager . OnPrimaryClipChangedListener {
1012 // in C/C++ code the function will have name
1113 // Java_com_ptolkachev_androidscanner_Scanner_OnBarcodeReceived
1214 static native void OnBarcodeReceived (long pObject , String barcode );
1315
1416 Activity mActivity ;
1517 long mCallObject ;
1618
17- BroadcastReceiver mReceiver ;
19+ String mScanMode ;
1820 String mExtraData ;
21+ BroadcastReceiver mReceiver ;
1922
2023 public Scanner (Activity activity , long pObject ) {
2124 mActivity = activity ;
2225 mCallObject = pObject ;
2326 mReceiver = null ;
27+ mScanMode = "broadcast" ;
2428 }
2529
2630 public void show ()
@@ -33,33 +37,67 @@ public void run() {
3337 System .loadLibrary ("com_ptolkachev_AndroidScanner" );
3438 }
3539
36- public void start (String actionName , String extraData ) {
40+ public void start (String scanMode , String actionName , String extraData ) {
3741 if (mReceiver != null ) {
3842 return ;
3943 }
4044
41- mExtraData = extraData ;
45+ mScanMode = scanMode ;
46+
47+ if (mScanMode .equals ("clipboard" )) {
48+ ClipboardManager clipboardManager = getClipboardManager ();
49+ if (clipboardManager != null ) {
50+ clipboardManager .addPrimaryClipChangedListener (this );
51+ }
52+ } else {
53+ mExtraData = extraData ;
4254
43- mReceiver = new BroadcastReceiver () {
44- @ Override
45- public void onReceive (Context context , Intent intent ) {
46- if (intent != null && intent .hasExtra (mExtraData )) {
47- String barCode = intent .getStringExtra (mExtraData );
48- if (barCode != null && !barCode .isEmpty ()) {
49- OnBarcodeReceived (mCallObject , barCode );
55+ mReceiver = new BroadcastReceiver () {
56+ @ Override
57+ public void onReceive (Context context , Intent intent ) {
58+ if (intent != null && intent .hasExtra (mExtraData )) {
59+ String barCode = intent .getStringExtra (mExtraData );
60+ if (barCode != null && !barCode .isEmpty ()) {
61+ OnBarcodeReceived (mCallObject , barCode );
62+ }
5063 }
5164 }
52- }
53- };
65+ };
5466
55- IntentFilter filter = new IntentFilter (actionName );
56- mActivity .registerReceiver (mReceiver , filter );
67+ IntentFilter filter = new IntentFilter (actionName );
68+ mActivity .registerReceiver (mReceiver , filter );
69+ }
5770 }
5871
5972 public void stop () {
6073 if (mReceiver != null ) {
6174 mActivity .unregisterReceiver (mReceiver );
6275 mReceiver = null ;
6376 }
77+ if (mScanMode .equals ("clipboard" )) {
78+ ClipboardManager clipboardManager = getClipboardManager ();
79+ if (clipboardManager != null ) {
80+ clipboardManager .removePrimaryClipChangedListener (this );
81+ }
82+ }
83+ }
84+
85+ @ Override
86+ public void onPrimaryClipChanged () {
87+ ClipboardManager clipboardManager = getClipboardManager ();
88+ if (clipboardManager != null ) {
89+ ClipData clipData = clipboardManager .getPrimaryClip ();
90+ if (clipData != null ) {
91+ ClipData .Item item = clipData .getItemAt (0 );
92+ String barCode = item .getText ().toString ();
93+ if (!barCode .isEmpty ()) {
94+ OnBarcodeReceived (mCallObject , barCode );
95+ }
96+ }
97+ }
98+ }
99+
100+ private ClipboardManager getClipboardManager () {
101+ return (ClipboardManager ) mActivity .getSystemService (Context .CLIPBOARD_SERVICE );
64102 }
65103}
0 commit comments