0
0
mirror of https://github.com/ankidroid/Anki-Android.git synced 2024-09-20 20:03:05 +02:00

Added drawing button in BasicImageFieldController

This commit is contained in:
Akshay 2021-08-11 17:38:34 +05:30 committed by Mike Hardy
parent 0a905d6800
commit 4587fedabe

View File

@ -58,11 +58,13 @@ import android.widget.TextView;
import com.canhub.cropper.CropImage;
import com.ichi2.anki.AnkiDroidApp;
import com.ichi2.anki.DrawingActivity;
import com.ichi2.anki.R;
import com.ichi2.anki.UIUtils;
import com.ichi2.compat.CompatHelper;
import com.ichi2.ui.FixedEditText;
import com.ichi2.utils.BitmapUtil;
import com.ichi2.utils.ContentResolverUtil;
import com.ichi2.utils.ExifUtil;
import com.ichi2.utils.FileUtil;
import com.ichi2.utils.Permissions;
@ -73,6 +75,8 @@ import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Map;
import timber.log.Timber;
@ -82,6 +86,7 @@ public class BasicImageFieldController extends FieldControllerBase implements IF
static final int ACTIVITY_SELECT_IMAGE = 1;
private static final int ACTIVITY_TAKE_PICTURE = 2;
private static final int ACTIVITY_CROP_PICTURE = 3;
private static final int ACTIVITY_DRAWING = 4;
private static final int IMAGE_SAVE_MAX_WIDTH = 1920;
private ImageView mImagePreview;
@ -166,6 +171,13 @@ public class BasicImageFieldController extends FieldControllerBase implements IF
mActivity.startActivityForResultWithoutAnimation(i, ACTIVITY_SELECT_IMAGE);
});
Button mBtnDraw = new Button(mActivity);
mBtnDraw.setText(gtxt(R.string.drawing));
mBtnDraw.setOnClickListener(v -> {
mActivity.startActivityForResultWithoutAnimation(new Intent(mActivity, DrawingActivity.class), ACTIVITY_DRAWING);
});
Button mBtnCamera = new Button(mActivity);
mBtnCamera.setText(gtxt(R.string.multimedia_editor_image_field_editing_photo));
mBtnCamera.setOnClickListener(v -> mViewModel = captureImage(context));
@ -180,11 +192,14 @@ public class BasicImageFieldController extends FieldControllerBase implements IF
layout.addView(mImageFileSize, ViewGroup.LayoutParams.MATCH_PARENT);
layout.addView(mImageFileSizeWarning, ViewGroup.LayoutParams.MATCH_PARENT);
layout.addView(mBtnGallery, ViewGroup.LayoutParams.MATCH_PARENT);
layout.addView(mCropButton, ViewGroup.LayoutParams.MATCH_PARENT);
// drew image appear far larger in preview in devices API < 24 #9439
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
layout.addView(mBtnDraw, ViewGroup.LayoutParams.MATCH_PARENT);
}
if (com.ichi2.utils.CheckCameraPermission.manifestContainsPermission(context)) {
layout.addView(mBtnCamera, ViewGroup.LayoutParams.MATCH_PARENT);
}
layout.addView(mCropButton, ViewGroup.LayoutParams.MATCH_PARENT);
}
@ -381,7 +396,13 @@ public class BasicImageFieldController extends FieldControllerBase implements IF
}
} else if (requestCode == ACTIVITY_TAKE_PICTURE) {
handleTakePictureResult();
} else if ((requestCode == ACTIVITY_CROP_PICTURE) || (requestCode == CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE)) {
} else if (requestCode == ACTIVITY_DRAWING) {
// receive image from drawing activity
Uri savedImagePath = (Uri) data.getExtras().get(DrawingActivity.EXTRA_RESULT_WHITEBOARD);;
handleDrawingResult(savedImagePath);
}
else if ((requestCode == ACTIVITY_CROP_PICTURE) || (requestCode == CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE)) {
CropImage.ActivityResult result = CropImage.getActivityResult(data);
if (result != null) {
handleCropResult(result);
@ -437,6 +458,28 @@ public class BasicImageFieldController extends FieldControllerBase implements IF
Timber.i("handleSelectImageIntent() Decoded image: '%s'", imagePath);
}
private void handleDrawingResult(Uri imageUri) {
if (imageUri == null) {
Timber.w("handleDrawingResult() no image Uri provided");
showSomethingWentWrong();
return;
}
File internalizedPick = internalizeUri(imageUri);
if (internalizedPick == null) {
Timber.w("handleDrawingResult() unable to internalize image from Uri %s", imageUri);
showSomethingWentWrong();
return;
}
String drewImagePath = internalizedPick.getAbsolutePath();
mViewModel = new ImageViewModel(drewImagePath, imageUri);
setTemporaryMedia(drewImagePath);
Timber.i("handleDrawingResult() Decoded image: '%s'", drewImagePath);
}
private @Nullable File internalizeUri(Uri uri) {
File internalFile;
String uriFileName = getImageNameFromUri(mActivity, uri);