Open app settings from the permission dialog.

This commit is contained in:
Benoit Marty
2023-09-21 11:37:59 +02:00
parent 676b2cc66b
commit 378d3ff9ab
7 changed files with 38 additions and 8 deletions

View File

@@ -18,6 +18,7 @@ package io.element.android.features.createroom.impl.configureroom
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import com.bumble.appyx.core.lifecycle.subscribe
import com.bumble.appyx.core.modality.BuildContext
import com.bumble.appyx.core.node.Node
@@ -28,6 +29,7 @@ import dagger.assisted.AssistedInject
import im.vector.app.features.analytics.plan.MobileScreen
import io.element.android.anvilannotations.ContributesNode
import io.element.android.features.createroom.impl.di.CreateRoomScope
import io.element.android.libraries.androidutils.system.openAppSettingsPage
import io.element.android.libraries.matrix.api.core.RoomId
import io.element.android.services.analytics.api.AnalyticsService
@@ -58,11 +60,13 @@ class ConfigureRoomNode @AssistedInject constructor(
@Composable
override fun View(modifier: Modifier) {
val state = presenter.present()
val context = LocalContext.current
ConfigureRoomView(
state = state,
modifier = modifier,
onBackPressed = this::navigateUp,
onRoomCreated = this::onRoomCreated,
onOpenSystemSettings = { context.openAppSettingsPage() }
)
}
}

View File

@@ -74,9 +74,10 @@ import kotlinx.coroutines.launch
@Composable
fun ConfigureRoomView(
state: ConfigureRoomState,
onBackPressed: () -> Unit,
onRoomCreated: (RoomId) -> Unit,
onOpenSystemSettings: () -> Unit,
modifier: Modifier = Modifier,
onBackPressed: () -> Unit = {},
onRoomCreated: (RoomId) -> Unit = {},
) {
val coroutineScope = rememberCoroutineScope()
val focusManager = LocalFocusManager.current
@@ -173,8 +174,11 @@ fun ConfigureRoomView(
else -> Unit
}
PermissionsView(state = state.cameraPermissionState)
PermissionsView(
state = state.cameraPermissionState,
onOpenSystemSettings = onOpenSystemSettings,
)
}
@OptIn(ExperimentalMaterial3Api::class)
@@ -281,5 +285,8 @@ private fun Modifier.clearFocusOnTap(focusManager: FocusManager): Modifier =
internal fun ConfigureRoomViewPreview(@PreviewParameter(ConfigureRoomStateProvider::class) state: ConfigureRoomState) = ElementPreview {
ConfigureRoomView(
state = state,
onBackPressed = {},
onRoomCreated = {},
onOpenSystemSettings = {},
)
}

View File

@@ -18,12 +18,14 @@ package io.element.android.features.preferences.impl.user.editprofile
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import com.bumble.appyx.core.modality.BuildContext
import com.bumble.appyx.core.node.Node
import com.bumble.appyx.core.plugin.Plugin
import dagger.assisted.Assisted
import dagger.assisted.AssistedInject
import io.element.android.anvilannotations.ContributesNode
import io.element.android.libraries.androidutils.system.openAppSettingsPage
import io.element.android.libraries.architecture.NodeInputs
import io.element.android.libraries.architecture.inputs
import io.element.android.libraries.di.SessionScope
@@ -46,10 +48,12 @@ class EditUserProfileNode @AssistedInject constructor(
@Composable
override fun View(modifier: Modifier) {
val state = presenter.present()
val context = LocalContext.current
EditUserProfileView(
state = state,
onBackPressed = ::navigateUp,
onProfileEdited = ::navigateUp,
onOpenSystemSettings = { context.openAppSettingsPage() },
modifier = modifier
)
}

View File

@@ -69,6 +69,7 @@ fun EditUserProfileView(
state: EditUserProfileState,
onBackPressed: () -> Unit,
onProfileEdited: () -> Unit,
onOpenSystemSettings: () -> Unit,
modifier: Modifier = Modifier,
) {
val coroutineScope = rememberCoroutineScope()
@@ -169,7 +170,10 @@ fun EditUserProfileView(
else -> Unit
}
}
PermissionsView(state = state.cameraPermissionState)
PermissionsView(
state = state.cameraPermissionState,
onOpenSystemSettings = onOpenSystemSettings,
)
}
private fun Modifier.clearFocusOnTap(focusManager: FocusManager): Modifier =
@@ -186,6 +190,7 @@ internal fun EditUserProfileViewPreview(@PreviewParameter(EditUserProfileStatePr
EditUserProfileView(
onBackPressed = {},
onProfileEdited = {},
onOpenSystemSettings = {},
state = state,
)
}

View File

@@ -18,6 +18,7 @@ package io.element.android.features.roomdetails.impl.edit
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import com.bumble.appyx.core.lifecycle.subscribe
import com.bumble.appyx.core.modality.BuildContext
import com.bumble.appyx.core.node.Node
@@ -26,6 +27,7 @@ import dagger.assisted.Assisted
import dagger.assisted.AssistedInject
import im.vector.app.features.analytics.plan.MobileScreen
import io.element.android.anvilannotations.ContributesNode
import io.element.android.libraries.androidutils.system.openAppSettingsPage
import io.element.android.libraries.di.RoomScope
import io.element.android.services.analytics.api.AnalyticsService
@@ -48,10 +50,12 @@ class RoomDetailsEditNode @AssistedInject constructor(
@Composable
override fun View(modifier: Modifier) {
val state = presenter.present()
val context = LocalContext.current
RoomDetailsEditView(
state = state,
onBackPressed = ::navigateUp,
onRoomEdited = ::navigateUp,
onOpenSystemSettings = { context.openAppSettingsPage() },
modifier = modifier,
)
}

View File

@@ -73,6 +73,7 @@ fun RoomDetailsEditView(
state: RoomDetailsEditState,
onBackPressed: () -> Unit,
onRoomEdited: () -> Unit,
onOpenSystemSettings: () -> Unit,
modifier: Modifier = Modifier,
) {
val coroutineScope = rememberCoroutineScope()
@@ -195,7 +196,10 @@ fun RoomDetailsEditView(
else -> Unit
}
PermissionsView(state = state.cameraPermissionState)
PermissionsView(
state = state.cameraPermissionState,
onOpenSystemSettings = onOpenSystemSettings,
)
}
@Composable
@@ -238,5 +242,6 @@ internal fun RoomDetailsEditViewPreview(@PreviewParameter(RoomDetailsEditStatePr
state = state,
onBackPressed = {},
onRoomEdited = {},
onOpenSystemSettings = {},
)
}

View File

@@ -26,8 +26,8 @@ import io.element.android.libraries.designsystem.preview.ElementPreview
@Composable
fun PermissionsView(
state: PermissionsState,
onOpenSystemSettings: () -> Unit,
modifier: Modifier = Modifier,
openSystemSettings: () -> Unit = {},
) {
if (state.showDialog.not()) return
@@ -44,7 +44,7 @@ fun PermissionsView(
submitText = "Open settings",
onSubmitClicked = {
state.eventSink.invoke(PermissionsEvents.CloseDialog)
openSystemSettings()
onOpenSystemSettings()
},
onDismiss = { state.eventSink.invoke(PermissionsEvents.CloseDialog) },
)
@@ -85,5 +85,6 @@ fun PermissionsView(
internal fun PermissionsViewPreview(@PreviewParameter(PermissionsViewStateProvider::class) state: PermissionsState) = ElementPreview {
PermissionsView(
state = state,
onOpenSystemSettings = {},
)
}