Ensure PinUnlockActivity and IncomingCallActivity use the internal theme set by the user.
This commit is contained in:
parent
c0e1c33159
commit
7c37cdee5f
4 changed files with 113 additions and 82 deletions
|
|
@ -20,8 +20,15 @@ import android.os.Bundle
|
||||||
import android.view.WindowManager
|
import android.view.WindowManager
|
||||||
import androidx.activity.compose.setContent
|
import androidx.activity.compose.setContent
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
|
import androidx.compose.runtime.collectAsState
|
||||||
|
import androidx.compose.runtime.getValue
|
||||||
|
import androidx.compose.runtime.remember
|
||||||
import androidx.core.content.IntentCompat
|
import androidx.core.content.IntentCompat
|
||||||
import androidx.lifecycle.lifecycleScope
|
import androidx.lifecycle.lifecycleScope
|
||||||
|
import io.element.android.compound.theme.ElementTheme
|
||||||
|
import io.element.android.compound.theme.Theme
|
||||||
|
import io.element.android.compound.theme.isDark
|
||||||
|
import io.element.android.compound.theme.mapToTheme
|
||||||
import io.element.android.features.call.api.CallType
|
import io.element.android.features.call.api.CallType
|
||||||
import io.element.android.features.call.api.ElementCallEntryPoint
|
import io.element.android.features.call.api.ElementCallEntryPoint
|
||||||
import io.element.android.features.call.impl.di.CallBindings
|
import io.element.android.features.call.impl.di.CallBindings
|
||||||
|
|
@ -29,6 +36,7 @@ import io.element.android.features.call.impl.notifications.CallNotificationData
|
||||||
import io.element.android.features.call.impl.utils.ActiveCallManager
|
import io.element.android.features.call.impl.utils.ActiveCallManager
|
||||||
import io.element.android.features.call.impl.utils.CallState
|
import io.element.android.features.call.impl.utils.CallState
|
||||||
import io.element.android.libraries.architecture.bindings
|
import io.element.android.libraries.architecture.bindings
|
||||||
|
import io.element.android.libraries.preferences.api.store.AppPreferencesStore
|
||||||
import kotlinx.coroutines.flow.filter
|
import kotlinx.coroutines.flow.filter
|
||||||
import kotlinx.coroutines.flow.launchIn
|
import kotlinx.coroutines.flow.launchIn
|
||||||
import kotlinx.coroutines.flow.onEach
|
import kotlinx.coroutines.flow.onEach
|
||||||
|
|
@ -51,6 +59,9 @@ class IncomingCallActivity : AppCompatActivity() {
|
||||||
@Inject
|
@Inject
|
||||||
lateinit var activeCallManager: ActiveCallManager
|
lateinit var activeCallManager: ActiveCallManager
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
lateinit var appPreferencesStore: AppPreferencesStore
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
|
|
||||||
|
|
@ -68,12 +79,20 @@ class IncomingCallActivity : AppCompatActivity() {
|
||||||
val notificationData = intent?.let { IntentCompat.getParcelableExtra(it, EXTRA_NOTIFICATION_DATA, CallNotificationData::class.java) }
|
val notificationData = intent?.let { IntentCompat.getParcelableExtra(it, EXTRA_NOTIFICATION_DATA, CallNotificationData::class.java) }
|
||||||
if (notificationData != null) {
|
if (notificationData != null) {
|
||||||
setContent {
|
setContent {
|
||||||
|
val theme by remember {
|
||||||
|
appPreferencesStore.getThemeFlow().mapToTheme()
|
||||||
|
}
|
||||||
|
.collectAsState(initial = Theme.System)
|
||||||
|
ElementTheme(
|
||||||
|
darkTheme = theme.isDark()
|
||||||
|
) {
|
||||||
IncomingCallScreen(
|
IncomingCallScreen(
|
||||||
notificationData = notificationData,
|
notificationData = notificationData,
|
||||||
onAnswer = ::onAnswer,
|
onAnswer = ::onAnswer,
|
||||||
onCancel = ::onCancel,
|
onCancel = ::onCancel,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
// No data, finish the activity
|
// No data, finish the activity
|
||||||
finish()
|
finish()
|
||||||
|
|
|
||||||
|
|
@ -64,7 +64,6 @@ internal fun IncomingCallScreen(
|
||||||
onAnswer: (CallNotificationData) -> Unit,
|
onAnswer: (CallNotificationData) -> Unit,
|
||||||
onCancel: () -> Unit,
|
onCancel: () -> Unit,
|
||||||
) {
|
) {
|
||||||
ElementTheme {
|
|
||||||
OnboardingBackground()
|
OnboardingBackground()
|
||||||
Column(
|
Column(
|
||||||
modifier = Modifier.fillMaxSize(),
|
modifier = Modifier.fillMaxSize(),
|
||||||
|
|
@ -126,7 +125,6 @@ internal fun IncomingCallScreen(
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
|
|
@ -145,7 +143,8 @@ private fun ActionButton(
|
||||||
horizontalAlignment = Alignment.CenterHorizontally
|
horizontalAlignment = Alignment.CenterHorizontally
|
||||||
) {
|
) {
|
||||||
FilledIconButton(
|
FilledIconButton(
|
||||||
modifier = Modifier.size(size + borderSize)
|
modifier = Modifier
|
||||||
|
.size(size + borderSize)
|
||||||
.border(borderSize, borderColor, CircleShape),
|
.border(borderSize, borderColor, CircleShape),
|
||||||
onClick = onClick,
|
onClick = onClick,
|
||||||
colors = IconButtonDefaults.filledIconButtonColors(
|
colors = IconButtonDefaults.filledIconButtonColors(
|
||||||
|
|
@ -171,8 +170,7 @@ private fun ActionButton(
|
||||||
|
|
||||||
@PreviewsDayNight
|
@PreviewsDayNight
|
||||||
@Composable
|
@Composable
|
||||||
internal fun IncomingCallScreenPreview() {
|
internal fun IncomingCallScreenPreview() = ElementPreview {
|
||||||
ElementPreview {
|
|
||||||
IncomingCallScreen(
|
IncomingCallScreen(
|
||||||
notificationData = CallNotificationData(
|
notificationData = CallNotificationData(
|
||||||
sessionId = SessionId("@alice:matrix.org"),
|
sessionId = SessionId("@alice:matrix.org"),
|
||||||
|
|
@ -188,5 +186,4 @@ internal fun IncomingCallScreenPreview() {
|
||||||
onAnswer = {},
|
onAnswer = {},
|
||||||
onCancel = {},
|
onCancel = {},
|
||||||
)
|
)
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -40,6 +40,7 @@ dependencies {
|
||||||
implementation(projects.libraries.designsystem)
|
implementation(projects.libraries.designsystem)
|
||||||
implementation(projects.libraries.featureflag.api)
|
implementation(projects.libraries.featureflag.api)
|
||||||
implementation(projects.libraries.cryptography.api)
|
implementation(projects.libraries.cryptography.api)
|
||||||
|
implementation(projects.libraries.preferences.api)
|
||||||
implementation(projects.libraries.uiStrings)
|
implementation(projects.libraries.uiStrings)
|
||||||
implementation(projects.libraries.sessionStorage.api)
|
implementation(projects.libraries.sessionStorage.api)
|
||||||
implementation(projects.services.appnavstate.api)
|
implementation(projects.services.appnavstate.api)
|
||||||
|
|
|
||||||
|
|
@ -23,14 +23,21 @@ import androidx.activity.OnBackPressedCallback
|
||||||
import androidx.activity.compose.setContent
|
import androidx.activity.compose.setContent
|
||||||
import androidx.activity.enableEdgeToEdge
|
import androidx.activity.enableEdgeToEdge
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
|
import androidx.compose.runtime.collectAsState
|
||||||
|
import androidx.compose.runtime.getValue
|
||||||
|
import androidx.compose.runtime.remember
|
||||||
import androidx.lifecycle.lifecycleScope
|
import androidx.lifecycle.lifecycleScope
|
||||||
import io.element.android.compound.theme.ElementTheme
|
import io.element.android.compound.theme.ElementTheme
|
||||||
|
import io.element.android.compound.theme.Theme
|
||||||
|
import io.element.android.compound.theme.isDark
|
||||||
|
import io.element.android.compound.theme.mapToTheme
|
||||||
import io.element.android.features.lockscreen.api.LockScreenLockState
|
import io.element.android.features.lockscreen.api.LockScreenLockState
|
||||||
import io.element.android.features.lockscreen.api.LockScreenService
|
import io.element.android.features.lockscreen.api.LockScreenService
|
||||||
import io.element.android.features.lockscreen.impl.unlock.PinUnlockPresenter
|
import io.element.android.features.lockscreen.impl.unlock.PinUnlockPresenter
|
||||||
import io.element.android.features.lockscreen.impl.unlock.PinUnlockView
|
import io.element.android.features.lockscreen.impl.unlock.PinUnlockView
|
||||||
import io.element.android.features.lockscreen.impl.unlock.di.PinUnlockBindings
|
import io.element.android.features.lockscreen.impl.unlock.di.PinUnlockBindings
|
||||||
import io.element.android.libraries.architecture.bindings
|
import io.element.android.libraries.architecture.bindings
|
||||||
|
import io.element.android.libraries.preferences.api.store.AppPreferencesStore
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
|
|
@ -43,13 +50,20 @@ class PinUnlockActivity : AppCompatActivity() {
|
||||||
|
|
||||||
@Inject lateinit var presenter: PinUnlockPresenter
|
@Inject lateinit var presenter: PinUnlockPresenter
|
||||||
@Inject lateinit var lockScreenService: LockScreenService
|
@Inject lateinit var lockScreenService: LockScreenService
|
||||||
|
@Inject lateinit var appPreferencesStore: AppPreferencesStore
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
enableEdgeToEdge()
|
enableEdgeToEdge()
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
bindings<PinUnlockBindings>().inject(this)
|
bindings<PinUnlockBindings>().inject(this)
|
||||||
setContent {
|
setContent {
|
||||||
ElementTheme {
|
val theme by remember {
|
||||||
|
appPreferencesStore.getThemeFlow().mapToTheme()
|
||||||
|
}
|
||||||
|
.collectAsState(initial = Theme.System)
|
||||||
|
ElementTheme(
|
||||||
|
darkTheme = theme.isDark()
|
||||||
|
) {
|
||||||
val state = presenter.present()
|
val state = presenter.present()
|
||||||
PinUnlockView(state = state, isInAppUnlock = false)
|
PinUnlockView(state = state, isInAppUnlock = false)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue