diff --git a/app/src/main/java/eu/faircode/email/FragmentDialogEditImage.java b/app/src/main/java/eu/faircode/email/FragmentDialogEditImage.java index 8ede549526..37b183d501 100644 --- a/app/src/main/java/eu/faircode/email/FragmentDialogEditImage.java +++ b/app/src/main/java/eu/faircode/email/FragmentDialogEditImage.java @@ -23,10 +23,17 @@ import static android.app.Activity.RESULT_OK; import android.app.Dialog; import android.content.Context; +import android.content.Intent; import android.graphics.Bitmap; +import android.graphics.Typeface; import android.os.Bundle; +import android.text.SpannableStringBuilder; import android.text.TextUtils; +import android.text.style.StyleSpan; +import android.util.Size; import android.view.LayoutInflater; +import android.view.Menu; +import android.view.MenuItem; import android.view.View; import android.widget.ImageButton; import android.widget.ProgressBar; @@ -34,6 +41,7 @@ import android.widget.ProgressBar; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.app.AlertDialog; +import androidx.appcompat.widget.PopupMenu; import com.canhub.cropper.CropImageOptions; import com.canhub.cropper.CropImageView; @@ -45,16 +53,24 @@ import java.io.IOException; import java.io.OutputStream; public class FragmentDialogEditImage extends FragmentDialogBase { + private int resize = 0; + @NonNull @Override public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) { Bundle args = getArguments(); + if (savedInstanceState != null) + resize = savedInstanceState.getInt("fair:resize", 0); + + final int[] resizeValues = getResources().getIntArray(R.array.resizeValues); + Context context = getContext(); View dview = LayoutInflater.from(context).inflate(R.layout.dialog_edit_image, null); ImageButton ibRotate = dview.findViewById(R.id.ibRotate); ImageButton ibFlipHorizontally = dview.findViewById(R.id.ibFlipHorizontally); ImageButton ibFlipVertically = dview.findViewById(R.id.ibFlipVertically); + ImageButton ibResize = dview.findViewById(R.id.ibResize); ImageButton ibCancel = dview.findViewById(R.id.ibCancel); ImageButton ibSave = dview.findViewById(R.id.ibSave); CropImageView civ = dview.findViewById(R.id.civ); @@ -85,6 +101,51 @@ public class FragmentDialogEditImage extends FragmentDialogBase { } }); + ibResize.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + PopupMenuLifecycle popupMenu = new PopupMenuLifecycle(context, FragmentDialogEditImage.this, v); + + Size expected = civ.expectedImageSize(); + int s = (expected == null + ? Integer.MAX_VALUE + : Math.max(expected.getWidth(), expected.getHeight())); + + SpannableStringBuilder ssb = new SpannableStringBuilderEx("---"); + if (resize == 0) + ssb.setSpan(new StyleSpan(Typeface.BOLD), 0, ssb.length(), 0); + popupMenu.getMenu().add(Menu.NONE, 1, 1, ssb) + .setIntent(new Intent().putExtra("size", 0)); + + int order = 1; + for (int size : resizeValues) { + if (size > s) + break; + order++; + ssb = new SpannableStringBuilderEx(getString(R.string.title_add_resize_pixels, size)); + if (size == resize) + ssb.setSpan(new StyleSpan(Typeface.BOLD), 0, ssb.length(), 0); + popupMenu.getMenu().add(Menu.NONE, order, order, ssb) + .setIntent(new Intent().putExtra("size", size)); + } + + popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { + @Override + public boolean onMenuItemClick(MenuItem item) { + Intent intent = item.getIntent(); + if (intent == null) + return false; + + resize = intent.getIntExtra("size", 0); + return true; + } + }); + + popupMenu.show(); + + } + }); + ibCancel.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { @@ -117,7 +178,7 @@ public class FragmentDialogEditImage extends FragmentDialogBase { if (attachment == null) return null; - Bitmap bm = civ.getCroppedImage(); + Bitmap bm = civ.getCroppedImage(resize, resize, CropImageView.RequestSizeOptions.RESIZE_INSIDE); if (bm == null) return null; @@ -202,4 +263,10 @@ public class FragmentDialogEditImage extends FragmentDialogBase { return dialog; } + + @Override + public void onSaveInstanceState(@NonNull Bundle outState) { + outState.putInt("fair:resize", resize); + super.onSaveInstanceState(outState); + } } diff --git a/app/src/main/res/drawable/twotone_aspect_ratio_24.xml b/app/src/main/res/drawable/twotone_aspect_ratio_24.xml new file mode 100644 index 0000000000..376ccaac58 --- /dev/null +++ b/app/src/main/res/drawable/twotone_aspect_ratio_24.xml @@ -0,0 +1,15 @@ + + + + diff --git a/app/src/main/res/layout/dialog_edit_image.xml b/app/src/main/res/layout/dialog_edit_image.xml index a01dbe2309..fc3d22c077 100644 --- a/app/src/main/res/layout/dialog_edit_image.xml +++ b/app/src/main/res/layout/dialog_edit_image.xml @@ -62,6 +62,22 @@ app:srcCompat="@drawable/twotone_swap_vert_24" app:tint="?attr/colorAccent" /> + +