diff --git a/mastodon/src/main/java/de/icod/techidon/fragments/BaseStatusListFragment.java b/mastodon/src/main/java/de/icod/techidon/fragments/BaseStatusListFragment.java index e202663df..327a6503a 100644 --- a/mastodon/src/main/java/de/icod/techidon/fragments/BaseStatusListFragment.java +++ b/mastodon/src/main/java/de/icod/techidon/fragments/BaseStatusListFragment.java @@ -20,6 +20,8 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import androidx.core.view.ViewCompat; +import androidx.core.view.accessibility.AccessibilityNodeInfoCompat; import androidx.recyclerview.widget.RecyclerView; import de.icod.techidon.E; @@ -238,6 +240,9 @@ protected void onHidden(){ protected void onShown(){ super.onShown(); imgLoader.activate(); + if (fab != null) { + updateFabLongClickAccessibilityAction(); + } } @Override @@ -556,11 +561,39 @@ public void getSelectorBounds(View view, Rect outRect){ fab.setVisibility(View.VISIBLE); fab.setOnClickListener(this::onFabClick); fab.setOnLongClickListener(this::onFabLongClick); + updateFabLongClickAccessibilityAction(); } else if (fab != null) { fab.setVisibility(View.GONE); } } + private void updateFabLongClickAccessibilityAction() { + if (fab == null) + return; + + boolean multipleAccounts = AccountSessionManager.getInstance().getLoggedInAccounts().size() > 1; + + // Only expose a long-click action (including to accessibility services) + // when there are multiple accounts to manage. + fab.setLongClickable(multipleAccounts); + + if (multipleAccounts) { + ViewCompat.replaceAccessibilityAction( + fab, + AccessibilityNodeInfoCompat.AccessibilityActionCompat.ACTION_LONG_CLICK, + getString(R.string.choose_account), + null + ); + } else { + ViewCompat.replaceAccessibilityAction( + fab, + AccessibilityNodeInfoCompat.AccessibilityActionCompat.ACTION_LONG_CLICK, + null, + null + ); + } + } + @Override public void onConfigurationChanged(Configuration newConfig){ super.onConfigurationChanged(newConfig); diff --git a/mastodon/src/main/java/de/icod/techidon/fragments/HomeTabFragment.java b/mastodon/src/main/java/de/icod/techidon/fragments/HomeTabFragment.java index 01d2d3b24..fb6ff2319 100644 --- a/mastodon/src/main/java/de/icod/techidon/fragments/HomeTabFragment.java +++ b/mastodon/src/main/java/de/icod/techidon/fragments/HomeTabFragment.java @@ -33,6 +33,8 @@ import android.widget.Toolbar; import androidx.annotation.NonNull; +import androidx.core.view.ViewCompat; +import androidx.core.view.accessibility.AccessibilityNodeInfoCompat; import androidx.recyclerview.widget.RecyclerView; import androidx.viewpager2.widget.ViewPager2; @@ -148,6 +150,7 @@ public View onCreateContentView(LayoutInflater inflater, ViewGroup container, Bu fab = view.findViewById(R.id.fab); fab.setOnClickListener(this::onFabClick); fab.setOnLongClickListener(this::onFabLongClick); + updateFabLongClickAccessibilityAction(); pager = new ViewPager2(getContext()); toolbarFrame = (FrameLayout) LayoutInflater.from(getContext()).inflate(R.layout.home_toolbar, getToolbar(), false); @@ -686,10 +689,37 @@ public void onDestroyView(){ @Override protected void onShown() { super.onShown(); + if (fab != null) { + updateFabLongClickAccessibilityAction(); + } Object timelines = AccountSessionManager.get(accountID).getLocalPreferences().timelines; if (timelines != null && timelinesList!= timelines) UiUtils.restartApp(); } + private void updateFabLongClickAccessibilityAction() { + if (fab == null) + return; + + boolean multipleAccounts = AccountSessionManager.getInstance().getLoggedInAccounts().size() > 1; + fab.setLongClickable(multipleAccounts); + + if (multipleAccounts) { + ViewCompat.replaceAccessibilityAction( + fab, + AccessibilityNodeInfoCompat.AccessibilityActionCompat.ACTION_LONG_CLICK, + getString(R.string.choose_account), + null + ); + } else { + ViewCompat.replaceAccessibilityAction( + fab, + AccessibilityNodeInfoCompat.AccessibilityActionCompat.ACTION_LONG_CLICK, + null, + null + ); + } + } + @Override public void onViewStateRestored(Bundle savedInstanceState) { super.onViewStateRestored(savedInstanceState);