Skip to content

Commit afd1f35

Browse files
Merge pull request #17 from jellow-aac/release-v4.0.2
release v4.0.2
2 parents 8c3926e + 99ed7f9 commit afd1f35

File tree

7 files changed

+335
-181
lines changed

7 files changed

+335
-181
lines changed

app/build.gradle

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
apply plugin: 'com.android.application'
22

33
android {
4-
compileSdkVersion 30
4+
compileSdkVersion 31
55

66
defaultConfig {
77
applicationId "com.dsource.idc.jellowintl"
88
minSdkVersion 21
9-
targetSdkVersion 30
10-
versionCode 84
11-
versionName "4.0.1"
9+
targetSdkVersion 31
10+
versionCode 85
11+
versionName "4.0.2"
1212
multiDexEnabled true
1313
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
1414
}
@@ -71,15 +71,15 @@ dependencies {
7171
implementation 'com.google.firebase:firebase-crashlytics'
7272
implementation 'com.akexorcist:RoundCornerProgressBar:2.0.3'
7373
implementation 'com.github.bumptech.glide:glide:4.9.0'
74-
annotationProcessor 'androidx.annotation:annotation:1.2.0'
74+
annotationProcessor 'androidx.annotation:annotation:1.3.0'
7575
annotationProcessor 'com.github.bumptech.glide:compiler:4.11.0'
7676
implementation 'com.github.ghost1372:Mzip-Android:0.4.0'
7777
implementation 'com.liulishuo.filedownloader:library:1.7.5'
7878
implementation 'com.github.rey5137:material:1.2.5'
7979
implementation 'com.github.paolorotolo:appintro:4.1.0'
8080
implementation 'com.hbb20:ccp:2.2.4'
8181
implementation 'com.google.android.gms:play-services-gcm:17.0.0'
82-
implementation 'com.theartofdev.edmodo:android-image-cropper:2.7.0'
82+
implementation 'com.github.CanHub:Android-Image-Cropper:4.0.0'
8383
implementation 'com.bignerdranch.android:expandablerecyclerview:3.0.0-RC1'
8484

8585
implementation('com.h6ah4i.android.widget.advrecyclerview:advrecyclerview:1.0.0@aar') {

app/proguard-rules.pro

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
#Androidx rules
3434
-dontwarn com.google.android.material.**
3535
-keep class com.google.android.material.** { *; }
36+
-keep class androix.appcompat.widget.** { *; }
3637

3738
-dontwarn androidx.**
3839
-keep class androidx.** { *; }

app/src/main/AndroidManifest.xml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@
6161
android:name=".activities.UserRegistrationActivity"
6262
android:configChanges="keyboardHidden|orientation|screenLayout"
6363
android:screenOrientation="landscape"
64+
android:exported= "true"
6465
tools:ignore="LockedOrientationActivity">
6566
<intent-filter>
6667
<action android:name="android.intent.action.MAIN" />
@@ -188,6 +189,7 @@
188189
android:name="com.theartofdev.edmodo.cropper.CropImageActivity"
189190
android:configChanges="keyboardHidden|orientation|screenSize"
190191
android:screenOrientation="landscape"
192+
android:exported="true"
191193
android:theme="@style/Base.Theme.AppCompat"
192194
tools:ignore="LockedOrientationActivity" />
193195
<activity
@@ -268,7 +270,8 @@
268270
android:resource="@xml/method" />
269271
</service>
270272
-->
271-
<service android:name=".utility.JellowFirebaseMessageService">
273+
<service android:name=".utility.JellowFirebaseMessageService"
274+
android:exported="true">
272275
<intent-filter>
273276
<action android:name="com.google.firebase.MESSAGING_EVENT" />
274277
</intent-filter>

app/src/main/java/com/dsource/idc/jellowintl/make_my_board_module/adapters/HomeActivityAdapter.java

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import static com.dsource.idc.jellowintl.factories.PathFactory.getIconPath;
55

66
import android.content.Context;
7+
import android.graphics.BitmapFactory;
78
import android.graphics.drawable.GradientDrawable;
89
import android.view.LayoutInflater;
910
import android.view.View;
@@ -152,10 +153,17 @@ private void setMenuImageBorder(MyViewHolder viewHolder, boolean setBorder, int
152153
private void setImageFromBoard(ImageView imageView, String imageURL) {
153154
File en_dir = mContext.getDir(SessionManager.BOARD_ICON_LOCATION, Context.MODE_PRIVATE);
154155
String path = en_dir.getAbsolutePath();
155-
Glide.with(mContext)
156+
imageView.setImageBitmap(BitmapFactory.decodeFile(path + "/" + imageURL + ".png"));
157+
/*Glide.with(mContext)
156158
.load(path + "/" + imageURL + ".png")
157-
.placeholder(R.drawable.ic_icon_placeholder)
158-
.into(imageView);
159+
.load(path + "/" + imageURL + ".png")
160+
.transform(new CircleCrop())
161+
//.error(placeHolderResId)
162+
.diskCacheStrategy(DiskCacheStrategy.NONE)
163+
.skipMemoryCache(true)
164+
.centerCrop()
165+
.dontAnimate()
166+
.into(imageView);*/
159167
}
160168

161169
private void setImageFromLibrary(ImageView imageView, String drawableId) {

app/src/main/java/com/dsource/idc/jellowintl/make_my_board_module/custom_dialogs/DialogAddBoard.java

Lines changed: 86 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.dsource.idc.jellowintl.make_my_board_module.custom_dialogs;
22

3+
import static android.graphics.Color.WHITE;
34
import static com.dsource.idc.jellowintl.factories.IconFactory.EXTENSION;
45
import static com.dsource.idc.jellowintl.factories.PathFactory.getIconPath;
56
import static com.dsource.idc.jellowintl.make_my_board_module.utility.BoardConstants.BOARD_ID;
@@ -19,8 +20,8 @@
1920
import android.content.pm.PackageManager;
2021
import android.content.res.TypedArray;
2122
import android.graphics.Bitmap;
23+
import android.graphics.Color;
2224
import android.graphics.drawable.BitmapDrawable;
23-
import android.net.Uri;
2425
import android.os.Build;
2526
import android.os.Bundle;
2627
import android.provider.MediaStore;
@@ -40,12 +41,19 @@
4041
import android.widget.TextView;
4142
import android.widget.Toast;
4243

44+
import androidx.activity.result.ActivityResultCallback;
45+
import androidx.activity.result.ActivityResultLauncher;
4346
import androidx.annotation.NonNull;
4447
import androidx.core.app.ActivityCompat;
4548

4649
import com.bumptech.glide.Glide;
4750
import com.bumptech.glide.load.engine.DiskCacheStrategy;
4851
import 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;
4957
import com.dsource.idc.jellowintl.R;
5058
import com.dsource.idc.jellowintl.activities.BaseActivity;
5159
import com.dsource.idc.jellowintl.activities.SpeechEngineBaseActivity;
@@ -62,8 +70,6 @@
6270
import com.dsource.idc.jellowintl.make_my_board_module.view_interfaces.IAddBoardDialogView;
6371
import com.dsource.idc.jellowintl.models.JellowIcon;
6472
import com.dsource.idc.jellowintl.utility.SessionManager;
65-
import com.theartofdev.edmodo.cropper.CropImage;
66-
import com.theartofdev.edmodo.cropper.CropImageView;
6773

6874
import java.io.ByteArrayOutputStream;
6975
import 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

Comments
 (0)