feat(a11y): show a sidebar settings button if touch exploration is on
Signed-off-by: Infi <infi@infi.sh>
This commit is contained in:
parent
ec03323ad9
commit
7f2546d890
|
|
@ -4,6 +4,7 @@ import android.annotation.SuppressLint
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
|
import android.view.accessibility.AccessibilityManager
|
||||||
import android.view.inputmethod.InputMethodManager
|
import android.view.inputmethod.InputMethodManager
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
import androidx.activity.compose.BackHandler
|
import androidx.activity.compose.BackHandler
|
||||||
|
|
@ -22,6 +23,7 @@ import androidx.compose.foundation.rememberScrollState
|
||||||
import androidx.compose.foundation.verticalScroll
|
import androidx.compose.foundation.verticalScroll
|
||||||
import androidx.compose.material.icons.Icons
|
import androidx.compose.material.icons.Icons
|
||||||
import androidx.compose.material.icons.filled.Add
|
import androidx.compose.material.icons.filled.Add
|
||||||
|
import androidx.compose.material.icons.filled.Settings
|
||||||
import androidx.compose.material3.AlertDialog
|
import androidx.compose.material3.AlertDialog
|
||||||
import androidx.compose.material3.DismissibleDrawerSheet
|
import androidx.compose.material3.DismissibleDrawerSheet
|
||||||
import androidx.compose.material3.DismissibleNavigationDrawer
|
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) {
|
if (!viewModel.latestChangelogRead) {
|
||||||
val changelogSheetState = rememberModalBottomSheetState()
|
val changelogSheetState = rememberModalBottomSheetState()
|
||||||
|
|
||||||
|
|
@ -745,7 +758,11 @@ fun ChatRouterScreen(
|
||||||
},
|
},
|
||||||
onShowAddServerSheet = {
|
onShowAddServerSheet = {
|
||||||
showAddServerSheet = true
|
showAddServerSheet = true
|
||||||
}
|
},
|
||||||
|
showSettingsButton = isTouchExplorationEnabled,
|
||||||
|
onOpenSettings = {
|
||||||
|
topNav.navigate("settings")
|
||||||
|
},
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
ChannelNavigator(
|
ChannelNavigator(
|
||||||
|
|
@ -783,6 +800,10 @@ fun ChatRouterScreen(
|
||||||
onShowAddServerSheet = {
|
onShowAddServerSheet = {
|
||||||
showAddServerSheet = true
|
showAddServerSheet = true
|
||||||
},
|
},
|
||||||
|
showSettingsButton = isTouchExplorationEnabled,
|
||||||
|
onOpenSettings = {
|
||||||
|
topNav.navigate("settings")
|
||||||
|
},
|
||||||
drawerState = drawerState
|
drawerState = drawerState
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
@ -818,7 +839,9 @@ fun Sidebar(
|
||||||
drawerState: DrawerState? = null,
|
drawerState: DrawerState? = null,
|
||||||
onShowStatusSheet: () -> Unit,
|
onShowStatusSheet: () -> Unit,
|
||||||
onShowServerContextSheet: (String) -> Unit,
|
onShowServerContextSheet: (String) -> Unit,
|
||||||
onShowAddServerSheet: () -> Unit
|
onShowAddServerSheet: () -> Unit,
|
||||||
|
showSettingsButton: Boolean,
|
||||||
|
onOpenSettings: () -> Unit,
|
||||||
) {
|
) {
|
||||||
val scope = rememberCoroutineScope()
|
val scope = rememberCoroutineScope()
|
||||||
|
|
||||||
|
|
@ -985,6 +1008,18 @@ fun Sidebar(
|
||||||
modifier = Modifier.padding(4.dp)
|
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(
|
Crossfade(
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue