Commit 0d60e555 authored by 0xd9a's avatar 0xd9a
Browse files

Add accessibility actions for translate, download, share actions in media activity

parent 61b2c7b1
Loading
Loading
Loading
Loading
+42 −31
Original line number Diff line number Diff line
@@ -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);
@@ -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);
@@ -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) {
@@ -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) {
@@ -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) {
@@ -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) {
+52 −1
Original line number Diff line number Diff line
@@ -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;
@@ -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;

@@ -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;

@@ -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();
@@ -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")) {
@@ -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) {
+1 −1
Original line number Diff line number Diff line
@@ -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
@@ -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"