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:
parent
0a905d6800
commit
4587fedabe
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user