From dcb1677bf12d1e4a8fbbd6b688977a699ee61ca1 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 21 Sep 2023 11:37:59 +0200 Subject: [PATCH] Open app settings from the permission dialog. --- .../impl/configureroom/ConfigureRoomNode.kt | 4 ++++ .../impl/configureroom/ConfigureRoomView.kt | 15 +++++++++++---- .../impl/user/editprofile/EditUserProfileNode.kt | 4 ++++ .../impl/user/editprofile/EditUserProfileView.kt | 7 ++++++- .../roomdetails/impl/edit/RoomDetailsEditNode.kt | 4 ++++ .../roomdetails/impl/edit/RoomDetailsEditView.kt | 7 ++++++- .../libraries/permissions/api/PermissionsView.kt | 5 +++-- 7 files changed, 38 insertions(+), 8 deletions(-) diff --git a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/ConfigureRoomNode.kt b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/ConfigureRoomNode.kt index b09863b205..974877466c 100644 --- a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/ConfigureRoomNode.kt +++ b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/ConfigureRoomNode.kt @@ -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() } ) } } diff --git a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/ConfigureRoomView.kt b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/ConfigureRoomView.kt index 14c9d90843..830401d237 100644 --- a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/ConfigureRoomView.kt +++ b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/ConfigureRoomView.kt @@ -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 = {}, ) } diff --git a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/user/editprofile/EditUserProfileNode.kt b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/user/editprofile/EditUserProfileNode.kt index 738ae4ec6d..80eab4bf39 100644 --- a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/user/editprofile/EditUserProfileNode.kt +++ b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/user/editprofile/EditUserProfileNode.kt @@ -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 ) } diff --git a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/user/editprofile/EditUserProfileView.kt b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/user/editprofile/EditUserProfileView.kt index ddcdecc6a5..44930b2768 100644 --- a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/user/editprofile/EditUserProfileView.kt +++ b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/user/editprofile/EditUserProfileView.kt @@ -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, ) } diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/edit/RoomDetailsEditNode.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/edit/RoomDetailsEditNode.kt index e81cd84c24..28b32f7c58 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/edit/RoomDetailsEditNode.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/edit/RoomDetailsEditNode.kt @@ -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, ) } diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/edit/RoomDetailsEditView.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/edit/RoomDetailsEditView.kt index 89907fb024..27836bd62b 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/edit/RoomDetailsEditView.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/edit/RoomDetailsEditView.kt @@ -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 = {}, ) } diff --git a/libraries/permissions/api/src/main/kotlin/io/element/android/libraries/permissions/api/PermissionsView.kt b/libraries/permissions/api/src/main/kotlin/io/element/android/libraries/permissions/api/PermissionsView.kt index a487186369..a85f0b62a7 100644 --- a/libraries/permissions/api/src/main/kotlin/io/element/android/libraries/permissions/api/PermissionsView.kt +++ b/libraries/permissions/api/src/main/kotlin/io/element/android/libraries/permissions/api/PermissionsView.kt @@ -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 = {}, ) }