11package com .aniketjain .textscanner ;
22
33import android .Manifest ;
4+ import android .content .ClipData ;
5+ import android .content .ClipboardManager ;
6+ import android .content .Context ;
47import android .content .Intent ;
58import android .content .pm .PackageManager ;
69import android .graphics .Bitmap ;
710import android .net .Uri ;
811import android .os .Bundle ;
912import android .provider .MediaStore ;
13+ import android .util .SparseArray ;
1014import android .view .View ;
15+ import android .widget .Toast ;
1116
1217import androidx .annotation .Nullable ;
1318import androidx .appcompat .app .AppCompatActivity ;
1419import androidx .core .app .ActivityCompat ;
1520import androidx .core .content .ContextCompat ;
1621
1722import com .aniketjain .textscanner .databinding .ActivityMainBinding ;
23+ import com .google .android .gms .vision .Frame ;
24+ import com .google .android .gms .vision .text .TextBlock ;
25+ import com .google .android .gms .vision .text .TextRecognizer ;
1826import com .theartofdev .edmodo .cropper .CropImage ;
1927import com .theartofdev .edmodo .cropper .CropImageView ;
2028
@@ -51,7 +59,10 @@ private void checkPermissions() {
5159 private void onClickListeners () {
5260 binding .captureBtn .setOnClickListener (view -> {
5361 CropImage .activity ().setGuidelines (CropImageView .Guidelines .ON ).start (this );
54- 62+ });
63+ binding .copyBtn .setOnClickListener (view -> {
64+ String scanned_text = binding .dataTv .getText ().toString ();
65+ copyToClipBoard (scanned_text );
5566 });
5667 }
5768
@@ -69,6 +80,7 @@ protected void onActivityResult(int requestCode, int resultCode, @Nullable Inten
6980 Uri uri = (result != null ) ? result .getUri () : null ;
7081 try {
7182 bitmap = MediaStore .Images .Media .getBitmap (this .getContentResolver (), uri );
83+ getTextFromImage (bitmap );
7284 } catch (IOException e ) {
7385 e .printStackTrace ();
7486 }
@@ -77,6 +89,31 @@ protected void onActivityResult(int requestCode, int resultCode, @Nullable Inten
7789 }
7890
7991 private void getTextFromImage (Bitmap bitmap ) {
92+ TextRecognizer recognizer = new TextRecognizer .Builder (this ).build ();
93+ if (!recognizer .isOperational ()) {
94+ Toast .makeText (this , "Error!" , Toast .LENGTH_SHORT ).show ();
95+ } else {
96+ Frame frame = new Frame .Builder ().setBitmap (bitmap ).build ();
97+ SparseArray <TextBlock > sparseArray = recognizer .detect (frame );
98+ StringBuilder stringBuilder = new StringBuilder ();
99+ for (int i = 0 ; i < sparseArray .size (); i ++) {
100+ TextBlock textBlock = sparseArray .valueAt (i );
101+ stringBuilder .append (textBlock .getValue ());
102+ stringBuilder .append ("\n " );
103+ }
104+ 105+ binding .dataTv .setText (stringBuilder .toString ());
106+ binding .captureBtn .setText ("Retake" );
107+ binding .copyBtn .setVisibility (View .VISIBLE );
108+ }
109+ }
110+ 111+ private void copyToClipBoard (String text ) {
112+ ClipboardManager clipboardManager = (ClipboardManager ) getSystemService (Context .CLIPBOARD_SERVICE );
113+ ClipData clipData = ClipData .newPlainText ("Copied text" , text );
114+ clipboardManager .setPrimaryClip (clipData );
80115
116+ // let user know data save on clipBoard Successfully.
117+ Toast .makeText (this , "Copied to clipBoard" , Toast .LENGTH_SHORT ).show ();
81118 }
82119}
0 commit comments