diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 12ee7f2c..4ae74472 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -230,7 +230,7 @@ android:configChanges="keyboardHidden|orientation|screenSize" /> diff --git a/app/src/main/java/app/fedilab/android/mastodon/activities/MediaActivity.java b/app/src/main/java/app/fedilab/android/mastodon/activities/MediaActivity.java index aca57088..a705dbf5 100644 --- a/app/src/main/java/app/fedilab/android/mastodon/activities/MediaActivity.java +++ b/app/src/main/java/app/fedilab/android/mastodon/activities/MediaActivity.java @@ -141,6 +141,9 @@ public class MediaActivity extends BaseBarActivity implements OnDownloadInterfac if (bundle != null) { mediaPosition = bundle.getInt(Helper.ARG_MEDIA_POSITION, 1); + if(mediaPosition < 1 ) { + mediaPosition = 1; + } attachments = (ArrayList) bundle.getSerializable(Helper.ARG_MEDIA_ARRAY); mediaFromProfile = bundle.getBoolean(Helper.ARG_MEDIA_ARRAY_PROFILE, false); status = (Status) bundle.getSerializable(Helper.ARG_STATUS); @@ -230,6 +233,9 @@ public class MediaActivity extends BaseBarActivity implements OnDownloadInterfac public void onPageSelected(int position) { mediaPosition = position; + if(mediaPosition < 1 ) { + mediaPosition = 1; + } String description = attachments.get(position).description; if (handler != null) { handler.removeCallbacksAndMessages(null); diff --git a/app/src/main/java/app/fedilab/android/mastodon/helper/MediaHelper.java b/app/src/main/java/app/fedilab/android/mastodon/helper/MediaHelper.java index 6e90fac3..ca01bb28 100644 --- a/app/src/main/java/app/fedilab/android/mastodon/helper/MediaHelper.java +++ b/app/src/main/java/app/fedilab/android/mastodon/helper/MediaHelper.java @@ -25,6 +25,7 @@ import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Matrix; +import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.media.MediaRecorder; import android.media.MediaScannerConnection; @@ -266,6 +267,32 @@ public class MediaHelper { ); } + + public static Drawable rescaleImageIfNeeded(Activity activity, Drawable image) { + if (!(image instanceof BitmapDrawable)) { + return image; + } + int maxSize = 2000; + int width = image.getIntrinsicWidth(); + int height = image.getIntrinsicHeight(); + float scaleFactor; + if(width > maxSize || height > maxSize) { + if(width >= height) { + scaleFactor = (float) maxSize / width; + } else { + scaleFactor = (float) maxSize / height; + } + } else { + return image; + } + Bitmap b = ((BitmapDrawable)image).getBitmap(); + int sizeX = Math.round(image.getIntrinsicWidth() * scaleFactor); + int sizeY = Math.round(image.getIntrinsicHeight() * scaleFactor); + Bitmap bitmapResized = Bitmap.createScaledBitmap(b, sizeX, sizeY, false); + image = new BitmapDrawable(activity.getResources(), bitmapResized); + return image; + } + /** * Record media * diff --git a/app/src/main/java/app/fedilab/android/mastodon/ui/fragment/media/FragmentMedia.java b/app/src/main/java/app/fedilab/android/mastodon/ui/fragment/media/FragmentMedia.java index 73b4f1e2..ef0b5a3f 100644 --- a/app/src/main/java/app/fedilab/android/mastodon/ui/fragment/media/FragmentMedia.java +++ b/app/src/main/java/app/fedilab/android/mastodon/ui/fragment/media/FragmentMedia.java @@ -15,6 +15,7 @@ package app.fedilab.android.mastodon.ui.fragment.media; * see . */ + import android.content.SharedPreferences; import android.graphics.Color; import android.graphics.drawable.Drawable; @@ -58,6 +59,7 @@ import app.fedilab.android.mastodon.activities.MediaActivity; import app.fedilab.android.mastodon.client.entities.api.Attachment; import app.fedilab.android.mastodon.helper.CacheDataSourceFactory; import app.fedilab.android.mastodon.helper.Helper; +import app.fedilab.android.mastodon.helper.MediaHelper; import app.fedilab.android.mastodon.viewmodel.mastodon.TimelinesVM; import es.dmoral.toasty.Toasty; @@ -167,7 +169,9 @@ public class FragmentMedia extends Fragment { return; } binding.mediaPicture.setZoomable(true); - binding.mediaPicture.setImageDrawable(resource); + + Drawable scaledRessource = MediaHelper.rescaleImageIfNeeded(requireActivity(), resource); + binding.mediaPicture.setImageDrawable(scaledRessource); if (attachment.type.equalsIgnoreCase("image") && !attachment.url.toLowerCase().endsWith(".gif")) { binding.mediaPicture.setVisibility(View.VISIBLE); @@ -185,7 +189,8 @@ public class FragmentMedia extends Fragment { return; } binding.loader.setVisibility(View.GONE); - binding.mediaPicture.setImageDrawable(resource); + Drawable scaledRessource = MediaHelper.rescaleImageIfNeeded(requireActivity(), resource); + binding.mediaPicture.setImageDrawable(scaledRessource); binding.mediaPicture.setZoomable(true); } diff --git a/app/src/main/res/layouts/mastodon/layout/activity_media_pager.xml b/app/src/main/res/layouts/mastodon/layout/activity_media_pager.xml index 2b541a9d..2cf7620e 100644 --- a/app/src/main/res/layouts/mastodon/layout/activity_media_pager.xml +++ b/app/src/main/res/layouts/mastodon/layout/activity_media_pager.xml @@ -20,7 +20,7 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:animateLayoutChanges="true" - android:fitsSystemWindows="true" + android:fitsSystemWindows="false" android:background="@android:color/transparent"> @@ -35,6 +35,7 @@