From 7f2546d8906c6c8ce638460fc00030e5bef7d674 Mon Sep 17 00:00:00 2001 From: Infi Date: Sat, 13 Jan 2024 14:07:01 +0100 Subject: [PATCH] feat(a11y): show a sidebar settings button if touch exploration is on Signed-off-by: Infi --- .../revolt/screens/chat/ChatRouterScreen.kt | 39 ++++++++++++++++++- 1 file changed, 37 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/chat/revolt/screens/chat/ChatRouterScreen.kt b/app/src/main/java/chat/revolt/screens/chat/ChatRouterScreen.kt index 3885d95f..cc62853a 100644 --- a/app/src/main/java/chat/revolt/screens/chat/ChatRouterScreen.kt +++ b/app/src/main/java/chat/revolt/screens/chat/ChatRouterScreen.kt @@ -4,6 +4,7 @@ import android.annotation.SuppressLint import android.content.Context import android.content.Intent import android.net.Uri +import android.view.accessibility.AccessibilityManager import android.view.inputmethod.InputMethodManager import android.widget.Toast import androidx.activity.compose.BackHandler @@ -22,6 +23,7 @@ import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Add +import androidx.compose.material.icons.filled.Settings import androidx.compose.material3.AlertDialog import androidx.compose.material3.DismissibleDrawerSheet import androidx.compose.material3.DismissibleNavigationDrawer @@ -465,6 +467,17 @@ fun ChatRouterScreen( } } + var isTouchExplorationEnabled by remember { mutableStateOf(false) } + LaunchedEffect(Unit) { + val accessibilityManager = + context.getSystemService(Context.ACCESSIBILITY_SERVICE) as AccessibilityManager + + isTouchExplorationEnabled = accessibilityManager.isTouchExplorationEnabled + accessibilityManager.addTouchExplorationStateChangeListener { enabled -> + isTouchExplorationEnabled = enabled + } + } + if (!viewModel.latestChangelogRead) { val changelogSheetState = rememberModalBottomSheetState() @@ -745,7 +758,11 @@ fun ChatRouterScreen( }, onShowAddServerSheet = { showAddServerSheet = true - } + }, + showSettingsButton = isTouchExplorationEnabled, + onOpenSettings = { + topNav.navigate("settings") + }, ) } ChannelNavigator( @@ -783,6 +800,10 @@ fun ChatRouterScreen( onShowAddServerSheet = { showAddServerSheet = true }, + showSettingsButton = isTouchExplorationEnabled, + onOpenSettings = { + topNav.navigate("settings") + }, drawerState = drawerState ) } @@ -818,7 +839,9 @@ fun Sidebar( drawerState: DrawerState? = null, onShowStatusSheet: () -> Unit, onShowServerContextSheet: (String) -> Unit, - onShowAddServerSheet: () -> Unit + onShowAddServerSheet: () -> Unit, + showSettingsButton: Boolean, + onOpenSettings: () -> Unit, ) { val scope = rememberCoroutineScope() @@ -985,6 +1008,18 @@ fun Sidebar( modifier = Modifier.padding(4.dp) ) } + + if (showSettingsButton) { + DrawerServerlikeIcon( + onClick = { onOpenSettings() } + ) { + Icon( + imageVector = Icons.Default.Settings, + contentDescription = stringResource(id = R.string.settings), + modifier = Modifier.padding(4.dp) + ) + } + } } Crossfade(