Loading app/src/main/java/app/fedilab/android/mastodon/activities/MediaActivity.java +42 −31 Original line number Diff line number Diff line Loading @@ -193,7 +193,7 @@ public class MediaActivity extends BaseBarActivity implements OnDownloadInterfac binding.mediaDescription.setText(description); binding.translate.setOnClickListener(v -> { String descriptionToTranslate = attachments.get(mediaPosition - 1).description; TranslateHelper.translate(MediaActivity.this, descriptionToTranslate, status!=null?status.language:"en", translated -> { TranslateHelper.translate(MediaActivity.this, descriptionToTranslate, getStatusLanguageForTranslation(), translated -> { if (translated != null) { attachments.get(mediaPosition - 1).translation = translated; binding.mediaDescriptionTranslated.setText(translated); Loading Loading @@ -248,7 +248,7 @@ public class MediaActivity extends BaseBarActivity implements OnDownloadInterfac } binding.translate.setOnClickListener(v -> { String descriptionToTranslate = attachments.get(position).description; TranslateHelper.translate(MediaActivity.this, descriptionToTranslate, status!=null?status.language:"en", translated -> { TranslateHelper.translate(MediaActivity.this, descriptionToTranslate, getStatusLanguageForTranslation(), translated -> { if (translated != null) { attachments.get(position).translation = translated; binding.mediaDescriptionTranslated.setText(translated); Loading Loading @@ -292,6 +292,9 @@ public class MediaActivity extends BaseBarActivity implements OnDownloadInterfac setFullscreen(true); } public String getStatusLanguageForTranslation() { return status != null ? status.language : "en"; } private Spannable linkify(Context context, String content) { if (content == null) { Loading Loading @@ -358,6 +361,14 @@ public class MediaActivity extends BaseBarActivity implements OnDownloadInterfac } return true; } else if (item.getItemId() == R.id.action_save) { saveMedia(); } else if (item.getItemId() == R.id.action_share) { shareMedia(); } return true; } public void saveMedia() { int position = binding.mediaViewpager.getCurrentItem(); Attachment attachment = attachments.get(position); if (Build.VERSION.SDK_INT >= 23) { Loading Loading @@ -388,7 +399,9 @@ public class MediaActivity extends BaseBarActivity implements OnDownloadInterfac downloadID = -1; } } } else if (item.getItemId() == R.id.action_share) { } public void shareMedia() { int position = binding.mediaViewpager.getCurrentItem(); Attachment attachment = attachments.get(position); if (attachment.type.compareTo("image") == 0) { Loading @@ -407,8 +420,6 @@ public class MediaActivity extends BaseBarActivity implements OnDownloadInterfac } } } return true; } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { Loading app/src/main/java/app/fedilab/android/mastodon/ui/fragment/media/FragmentMedia.java +52 −1 Original line number Diff line number Diff line Loading @@ -32,6 +32,7 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.OptIn; import androidx.core.app.ActivityCompat; import androidx.core.view.ViewCompat; import androidx.fragment.app.Fragment; import androidx.lifecycle.ViewModelProvider; import androidx.media3.common.MediaItem; Loading Loading @@ -60,6 +61,7 @@ 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.helper.TranslateHelper; import app.fedilab.android.mastodon.viewmodel.mastodon.TimelinesVM; import es.dmoral.toasty.Toasty; Loading @@ -74,6 +76,8 @@ public class FragmentMedia extends Fragment { private boolean swipeEnabled; private FragmentSlideMediaBinding binding; private SlidrInterface slidrInterface; private int mediaPictureTranslateAccessibilityActionId = 0; private int mediaVideoTranslateAccessibilityActionId = 0; private boolean visible = false; Loading Loading @@ -124,7 +128,6 @@ public class FragmentMedia extends Fragment { enableSliding(true); } }); binding.mediaPicture.setContentDescription(attachment.description); binding.mediaPicture.setOnClickListener(v -> { if (isAdded()) { ((MediaActivity) requireActivity()).toogleFullScreen(); Loading @@ -137,6 +140,37 @@ public class FragmentMedia extends Fragment { } }); if (attachment.description != null) { binding.mediaPicture.setContentDescription(attachment.description); mediaPictureTranslateAccessibilityActionId = ViewCompat.addAccessibilityAction(binding.mediaPicture, getString(R.string.translate), (view2, arguments) -> { translate(); return true; }); binding.mediaVideo.setContentDescription(attachment.description); mediaVideoTranslateAccessibilityActionId = ViewCompat.addAccessibilityAction(binding.mediaVideo, getString(R.string.translate), (view2, arguments) -> { translate(); return true; }); } mediaPictureTranslateAccessibilityActionId = ViewCompat.addAccessibilityAction(binding.mediaPicture, getString(R.string.download), (view2, arguments) -> { ((MediaActivity) requireActivity()).saveMedia(); return true; }); mediaPictureTranslateAccessibilityActionId = ViewCompat.addAccessibilityAction(binding.mediaVideo, getString(R.string.download), (view2, arguments) -> { ((MediaActivity) requireActivity()).saveMedia(); return true; }); mediaPictureTranslateAccessibilityActionId = ViewCompat.addAccessibilityAction(binding.mediaPicture, getString(R.string.share), (view2, arguments) -> { ((MediaActivity) requireActivity()).shareMedia(); return true; }); mediaPictureTranslateAccessibilityActionId = ViewCompat.addAccessibilityAction(binding.mediaVideo, getString(R.string.share), (view2, arguments) -> { ((MediaActivity) requireActivity()).shareMedia(); return true; }); String type = attachment.type; String preview_url = attachment.preview_url; if (type.equalsIgnoreCase("unknown")) { Loading Loading @@ -267,6 +301,23 @@ public class FragmentMedia extends Fragment { } } public void translate() { if (attachment.translation == null) TranslateHelper.translate( requireContext(), attachment.description, ((MediaActivity) requireActivity()).getStatusLanguageForTranslation(), translated -> { attachment.translation = translated; String translatedMediaDescription = getString(R.string.cd_translated_media_description, attachment.translation); binding.mediaPicture.setContentDescription(translatedMediaDescription); ViewCompat.removeAccessibilityAction(binding.mediaPicture, mediaPictureTranslateAccessibilityActionId); binding.mediaVideo.setContentDescription(translatedMediaDescription); ViewCompat.removeAccessibilityAction(binding.mediaVideo, mediaVideoTranslateAccessibilityActionId); }); } @androidx.annotation.OptIn(markerClass = androidx.media3.common.util.UnstableApi.class) private void loadVideo(String url, String type) { if (binding == null || !isAdded() || getActivity() == null || url == null) { Loading app/src/main/res/layouts/mastodon/layout/activity_media_pager.xml +1 −1 Original line number Diff line number Diff line Loading @@ -43,6 +43,7 @@ android:visibility="gone" tools:visibility="visible" app:layout_constraintStart_toStartOf="parent" android:importantForAccessibility="noHideDescendants" android:layout_width="match_parent" android:layout_height="wrap_content"> <TextView Loading @@ -51,7 +52,6 @@ android:paddingTop="10dp" android:paddingBottom="10dp" android:paddingEnd="10dp" android:importantForAccessibility="no" android:layout_width="match_parent" android:layout_height="wrap_content" android:maxHeight="300dp" Loading Loading
app/src/main/java/app/fedilab/android/mastodon/activities/MediaActivity.java +42 −31 Original line number Diff line number Diff line Loading @@ -193,7 +193,7 @@ public class MediaActivity extends BaseBarActivity implements OnDownloadInterfac binding.mediaDescription.setText(description); binding.translate.setOnClickListener(v -> { String descriptionToTranslate = attachments.get(mediaPosition - 1).description; TranslateHelper.translate(MediaActivity.this, descriptionToTranslate, status!=null?status.language:"en", translated -> { TranslateHelper.translate(MediaActivity.this, descriptionToTranslate, getStatusLanguageForTranslation(), translated -> { if (translated != null) { attachments.get(mediaPosition - 1).translation = translated; binding.mediaDescriptionTranslated.setText(translated); Loading Loading @@ -248,7 +248,7 @@ public class MediaActivity extends BaseBarActivity implements OnDownloadInterfac } binding.translate.setOnClickListener(v -> { String descriptionToTranslate = attachments.get(position).description; TranslateHelper.translate(MediaActivity.this, descriptionToTranslate, status!=null?status.language:"en", translated -> { TranslateHelper.translate(MediaActivity.this, descriptionToTranslate, getStatusLanguageForTranslation(), translated -> { if (translated != null) { attachments.get(position).translation = translated; binding.mediaDescriptionTranslated.setText(translated); Loading Loading @@ -292,6 +292,9 @@ public class MediaActivity extends BaseBarActivity implements OnDownloadInterfac setFullscreen(true); } public String getStatusLanguageForTranslation() { return status != null ? status.language : "en"; } private Spannable linkify(Context context, String content) { if (content == null) { Loading Loading @@ -358,6 +361,14 @@ public class MediaActivity extends BaseBarActivity implements OnDownloadInterfac } return true; } else if (item.getItemId() == R.id.action_save) { saveMedia(); } else if (item.getItemId() == R.id.action_share) { shareMedia(); } return true; } public void saveMedia() { int position = binding.mediaViewpager.getCurrentItem(); Attachment attachment = attachments.get(position); if (Build.VERSION.SDK_INT >= 23) { Loading Loading @@ -388,7 +399,9 @@ public class MediaActivity extends BaseBarActivity implements OnDownloadInterfac downloadID = -1; } } } else if (item.getItemId() == R.id.action_share) { } public void shareMedia() { int position = binding.mediaViewpager.getCurrentItem(); Attachment attachment = attachments.get(position); if (attachment.type.compareTo("image") == 0) { Loading @@ -407,8 +420,6 @@ public class MediaActivity extends BaseBarActivity implements OnDownloadInterfac } } } return true; } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { Loading
app/src/main/java/app/fedilab/android/mastodon/ui/fragment/media/FragmentMedia.java +52 −1 Original line number Diff line number Diff line Loading @@ -32,6 +32,7 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.OptIn; import androidx.core.app.ActivityCompat; import androidx.core.view.ViewCompat; import androidx.fragment.app.Fragment; import androidx.lifecycle.ViewModelProvider; import androidx.media3.common.MediaItem; Loading Loading @@ -60,6 +61,7 @@ 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.helper.TranslateHelper; import app.fedilab.android.mastodon.viewmodel.mastodon.TimelinesVM; import es.dmoral.toasty.Toasty; Loading @@ -74,6 +76,8 @@ public class FragmentMedia extends Fragment { private boolean swipeEnabled; private FragmentSlideMediaBinding binding; private SlidrInterface slidrInterface; private int mediaPictureTranslateAccessibilityActionId = 0; private int mediaVideoTranslateAccessibilityActionId = 0; private boolean visible = false; Loading Loading @@ -124,7 +128,6 @@ public class FragmentMedia extends Fragment { enableSliding(true); } }); binding.mediaPicture.setContentDescription(attachment.description); binding.mediaPicture.setOnClickListener(v -> { if (isAdded()) { ((MediaActivity) requireActivity()).toogleFullScreen(); Loading @@ -137,6 +140,37 @@ public class FragmentMedia extends Fragment { } }); if (attachment.description != null) { binding.mediaPicture.setContentDescription(attachment.description); mediaPictureTranslateAccessibilityActionId = ViewCompat.addAccessibilityAction(binding.mediaPicture, getString(R.string.translate), (view2, arguments) -> { translate(); return true; }); binding.mediaVideo.setContentDescription(attachment.description); mediaVideoTranslateAccessibilityActionId = ViewCompat.addAccessibilityAction(binding.mediaVideo, getString(R.string.translate), (view2, arguments) -> { translate(); return true; }); } mediaPictureTranslateAccessibilityActionId = ViewCompat.addAccessibilityAction(binding.mediaPicture, getString(R.string.download), (view2, arguments) -> { ((MediaActivity) requireActivity()).saveMedia(); return true; }); mediaPictureTranslateAccessibilityActionId = ViewCompat.addAccessibilityAction(binding.mediaVideo, getString(R.string.download), (view2, arguments) -> { ((MediaActivity) requireActivity()).saveMedia(); return true; }); mediaPictureTranslateAccessibilityActionId = ViewCompat.addAccessibilityAction(binding.mediaPicture, getString(R.string.share), (view2, arguments) -> { ((MediaActivity) requireActivity()).shareMedia(); return true; }); mediaPictureTranslateAccessibilityActionId = ViewCompat.addAccessibilityAction(binding.mediaVideo, getString(R.string.share), (view2, arguments) -> { ((MediaActivity) requireActivity()).shareMedia(); return true; }); String type = attachment.type; String preview_url = attachment.preview_url; if (type.equalsIgnoreCase("unknown")) { Loading Loading @@ -267,6 +301,23 @@ public class FragmentMedia extends Fragment { } } public void translate() { if (attachment.translation == null) TranslateHelper.translate( requireContext(), attachment.description, ((MediaActivity) requireActivity()).getStatusLanguageForTranslation(), translated -> { attachment.translation = translated; String translatedMediaDescription = getString(R.string.cd_translated_media_description, attachment.translation); binding.mediaPicture.setContentDescription(translatedMediaDescription); ViewCompat.removeAccessibilityAction(binding.mediaPicture, mediaPictureTranslateAccessibilityActionId); binding.mediaVideo.setContentDescription(translatedMediaDescription); ViewCompat.removeAccessibilityAction(binding.mediaVideo, mediaVideoTranslateAccessibilityActionId); }); } @androidx.annotation.OptIn(markerClass = androidx.media3.common.util.UnstableApi.class) private void loadVideo(String url, String type) { if (binding == null || !isAdded() || getActivity() == null || url == null) { Loading
app/src/main/res/layouts/mastodon/layout/activity_media_pager.xml +1 −1 Original line number Diff line number Diff line Loading @@ -43,6 +43,7 @@ android:visibility="gone" tools:visibility="visible" app:layout_constraintStart_toStartOf="parent" android:importantForAccessibility="noHideDescendants" android:layout_width="match_parent" android:layout_height="wrap_content"> <TextView Loading @@ -51,7 +52,6 @@ android:paddingTop="10dp" android:paddingBottom="10dp" android:paddingEnd="10dp" android:importantForAccessibility="no" android:layout_width="match_parent" android:layout_height="wrap_content" android:maxHeight="300dp" Loading