11package com .dsource .idc .jellowintl .make_my_board_module .custom_dialogs ;
22
3+ import static android .graphics .Color .WHITE ;
34import static com .dsource .idc .jellowintl .factories .IconFactory .EXTENSION ;
45import static com .dsource .idc .jellowintl .factories .PathFactory .getIconPath ;
56import static com .dsource .idc .jellowintl .make_my_board_module .utility .BoardConstants .BOARD_ID ;
1920import android .content .pm .PackageManager ;
2021import android .content .res .TypedArray ;
2122import android .graphics .Bitmap ;
23+ import android .graphics .Color ;
2224import android .graphics .drawable .BitmapDrawable ;
23- import android .net .Uri ;
2425import android .os .Build ;
2526import android .os .Bundle ;
2627import android .provider .MediaStore ;
4041import android .widget .TextView ;
4142import android .widget .Toast ;
4243
44+ import androidx .activity .result .ActivityResultCallback ;
45+ import androidx .activity .result .ActivityResultLauncher ;
4346import androidx .annotation .NonNull ;
4447import androidx .core .app .ActivityCompat ;
4548
4649import com .bumptech .glide .Glide ;
4750import com .bumptech .glide .load .engine .DiskCacheStrategy ;
4851import com .bumptech .glide .load .resource .bitmap .CircleCrop ;
52+ import com .canhub .cropper .CropImage ;
53+ import com .canhub .cropper .CropImageContract ;
54+ import com .canhub .cropper .CropImageContractOptions ;
55+ import com .canhub .cropper .CropImageOptions ;
56+ import com .canhub .cropper .CropImageView ;
4957import com .dsource .idc .jellowintl .R ;
5058import com .dsource .idc .jellowintl .activities .BaseActivity ;
5159import com .dsource .idc .jellowintl .activities .SpeechEngineBaseActivity ;
6270import com .dsource .idc .jellowintl .make_my_board_module .view_interfaces .IAddBoardDialogView ;
6371import com .dsource .idc .jellowintl .models .JellowIcon ;
6472import com .dsource .idc .jellowintl .utility .SessionManager ;
65- import com .theartofdev .edmodo .cropper .CropImage ;
66- import com .theartofdev .edmodo .cropper .CropImageView ;
6773
6874import java .io .ByteArrayOutputStream ;
6975import java .io .File ;
@@ -79,6 +85,7 @@ public class DialogAddBoard extends BaseActivity implements IAddBoardDialogView,
7985 private OnPhotoResultCallBack reverseInterface ;
8086 private boolean iconImageSelected = false ;
8187 private ListView listView ;
88+ private ActivityResultLauncher <CropImageContractOptions > customCropImage ;
8289
8390 @ Override
8491 protected void onCreate (Bundle savedInstanceState ) {
@@ -97,6 +104,27 @@ protected void onCreate(Bundle savedInstanceState) {
97104 else mPresenter .getBoardModel (id );
98105 } else
99106 setUpAddBoardDialog (null );
107+
108+ customCropImage = registerForActivityResult (new CropImageContract (),
109+ new ActivityResultCallback <CropImageView .CropResult >() {
110+ @ Override
111+ public void onActivityResult (CropImageView .CropResult result ) {
112+ if (result .isSuccessful ()) {
113+ Bitmap bitmap1 = null ;
114+ try {
115+ bitmap1 = MediaStore .Images .Media .getBitmap (getContentResolver (), result .getUriContent ());
116+ reverseInterface .onPhotoResult (bitmap1 , CAMERA_REQUEST , null );
117+ iconImageSelected = true ;
118+ } catch (IOException e ) {
119+ e .printStackTrace ();
120+ }
121+ } else if (result .equals (CropImage .CancelledResult .INSTANCE )) {
122+ Log .d (getLocalClassName (), "Cancelled by user" );
123+ } else {
124+ Log .d (getLocalClassName (), "CROP_IMAGE_ERROR" );
125+ }
126+ }
127+ });
100128 }
101129
102130 @ Override
@@ -328,11 +356,11 @@ private void firePhotoIntent(int position) {
328356 //Check if the device has a camera hardware
329357 if (hasCameraHardware ()) {
330358 if (checkPermissionForCamera () && checkPermissionForStorageRead ()) {
331- CropImage . activity ()
332- . setAspectRatio ( 1 , 1 )
333- . setGuidelines ( CropImageView . Guidelines . ON )
334- . setFixAspectRatio ( true )
335- . start ( this );
359+ CropImageOptions cio = new CropImageOptions ();
360+ cio . imageSourceIncludeCamera = true ;
361+ cio . imageSourceIncludeGallery = true ;
362+ cio . activityTitle = "Select source" ;
363+ startImageSelector ( cio );
336364 } else {
337365 final String [] permissions = new String []{Manifest .permission .CAMERA , Manifest .permission .READ_EXTERNAL_STORAGE };
338366 ActivityCompat .requestPermissions (this , permissions , CAMERA_REQUEST );
@@ -360,17 +388,15 @@ private boolean checkPermissionForCamera() {
360388 @ Override
361389 public void onRequestPermissionsResult (int requestCode , @ NonNull String [] permissions , @ NonNull int [] grantResults ) {
362390 super .onRequestPermissionsResult (requestCode , permissions , grantResults );
363-
364-
365391 if (requestCode == CAMERA_REQUEST )
366392 // If request is cancelled, the result arrays are empty.
367393 if (grantResults .length > 0
368394 && grantResults [0 ] == PackageManager .PERMISSION_GRANTED && grantResults [1 ] == PackageManager .PERMISSION_GRANTED ) {
369- CropImage . activity ()
370- . setAspectRatio ( 1 , 1 )
371- . setGuidelines ( CropImageView . Guidelines . ON )
372- . setFixAspectRatio ( true )
373- . start ( this );
395+ CropImageOptions cio = new CropImageOptions ();
396+ cio . imageSourceIncludeCamera = true ;
397+ cio . imageSourceIncludeGallery = true ;
398+ cio . activityTitle = "Select source" ;
399+ startImageSelector ( cio );
374400 } else {
375401 Toast .makeText (this , "Permission denied" , Toast .LENGTH_SHORT ).show ();
376402 }
@@ -380,7 +406,6 @@ public void onRequestPermissionsResult(int requestCode, @NonNull String[] permis
380406 protected void onActivityResult (int requestCode , int resultCode , Intent data ) {
381407 super .onActivityResult (requestCode , resultCode , data );
382408 if (resultCode == RESULT_OK ) {
383-
384409 /*
385410 * In this, we are collecting the name of the icon clicked on the search bar and using that to fetch the icon from the database.
386411 */
@@ -390,28 +415,54 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
390415 reverseInterface .onPhotoResult (null , requestCode , fileName );
391416 iconImageSelected = true ;
392417 }
393-
394- } else if (requestCode == CropImage .CROP_IMAGE_ACTIVITY_REQUEST_CODE ) {
395- CropImage .ActivityResult result = CropImage .getActivityResult (data );
396- Uri resultUri = result .getUri ();
397- Bitmap bitmap1 = result .getBitmap ();
398- if (bitmap1 != null ) {
399- reverseInterface .onPhotoResult (result .getBitmap (), requestCode , null );
400- iconImageSelected = true ;
401- } else {
402- try {
403- bitmap1 = MediaStore .Images .Media .getBitmap (getContentResolver (), resultUri );
404- {
405- reverseInterface .onPhotoResult (bitmap1 , requestCode , null );
406- iconImageSelected = true ;
407- }
408- } catch (IOException e ) {
409- e .printStackTrace ();
410- }
411- }
412418 }
413419 }
420+ }
414421
422+ private void startImageSelector (CropImageOptions cio ){
423+ CropImageContractOptions options = new CropImageContractOptions (null , cio )
424+ .setScaleType (CropImageView .ScaleType .FIT_CENTER )
425+ .setCropShape (CropImageView .CropShape .RECTANGLE )
426+ .setGuidelines (CropImageView .Guidelines .ON )
427+ .setAspectRatio (16 , 16 )
428+ .setMaxZoom (8 )
429+ .setAutoZoomEnabled (true )
430+ .setMultiTouchEnabled (true )
431+ .setCenterMoveEnabled (true )
432+ .setShowCropOverlay (true )
433+ .setAllowFlipping (true )
434+ .setSnapRadius (3f )
435+ .setTouchRadius (48f )
436+ .setInitialCropWindowPaddingRatio (0.1f )
437+ .setBorderLineThickness (6f )
438+ .setBorderLineColor (R .color .black_eighty )
439+ .setBorderCornerThickness (4f )
440+ .setBorderCornerOffset (5f )
441+ .setBorderCornerLength (14f )
442+ .setBorderCornerColor (WHITE )
443+ .setGuidelinesThickness (2f )
444+ .setGuidelinesColor (WHITE )
445+ .setBackgroundColor (Color .argb (119 , 30 , 60 , 90 ))
446+ .setMinCropWindowSize (24 , 24 )
447+ .setMinCropResultSize (20 , 20 )
448+ .setMaxCropResultSize (99999 , 99999 )
449+ .setActivityTitle ("Crop image" )
450+ .setActivityMenuIconColor (WHITE )
451+ .setOutputUri (null )
452+ .setOutputCompressFormat (Bitmap .CompressFormat .PNG )
453+ .setOutputCompressQuality (90 )
454+ .setRequestedSize (0 , 0 )
455+ .setRequestedSize (0 , 0 , CropImageView .RequestSizeOptions .RESIZE_FIT )
456+ .setInitialCropWindowRectangle (null )
457+ .setInitialRotation (0 )
458+ .setAllowCounterRotation (false )
459+ .setFlipHorizontally (false )
460+ .setFlipVertically (false )
461+ .setCropMenuCropButtonTitle ("Crop" )
462+ .setAllowRotation (true )
463+ .setNoOutputImage (false )
464+ .setFixAspectRatio (false );
465+ customCropImage .launch (options );
415466 }
416467
417468 private void updateBoardDetails (BoardModel board , String name , Bitmap boardIcon ) {
0 commit comments