diff --git a/app/src/main/java/org/thoughtcrime/securesms/main/MainMegaphoneContainer.kt b/app/src/main/java/org/thoughtcrime/securesms/main/MainMegaphoneContainer.kt index a71207595a..f370ebf208 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/main/MainMegaphoneContainer.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/main/MainMegaphoneContainer.kt @@ -8,38 +8,27 @@ package org.thoughtcrime.securesms.main import android.app.Activity import android.content.Intent import android.content.res.Configuration -import android.view.LayoutInflater -import android.widget.FrameLayout import androidx.compose.animation.AnimatedVisibility -import androidx.compose.foundation.background -import androidx.compose.foundation.layout.Box -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.height import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.remember -import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.LocalConfiguration -import androidx.compose.ui.platform.LocalInspectionMode -import androidx.compose.ui.unit.dp -import androidx.compose.ui.viewinterop.AndroidView import androidx.fragment.app.DialogFragment import org.signal.core.ui.compose.Previews import org.signal.core.ui.compose.SignalPreview -import org.thoughtcrime.securesms.R import org.thoughtcrime.securesms.megaphone.Megaphone import org.thoughtcrime.securesms.megaphone.MegaphoneActionController -import org.thoughtcrime.securesms.megaphone.MegaphoneViewBuilder +import org.thoughtcrime.securesms.megaphone.MegaphoneComponent import org.thoughtcrime.securesms.megaphone.Megaphones -import org.thoughtcrime.securesms.util.visible data class MainMegaphoneState( val megaphone: Megaphone = Megaphone.NONE, val isDisplayingArchivedChats: Boolean = false, - val isSearchOpen: Boolean = false, - val isInActionMode: Boolean = false -) + private val isSearchOpen: Boolean = false, + private val isInActionMode: Boolean = false +) { + fun isVisible(): Boolean = !isDisplayingArchivedChats && !isSearchOpen && !isInActionMode +} object EmptyMegaphoneActionController : MegaphoneActionController { override fun onMegaphoneNavigationRequested(intent: Intent) = Unit @@ -61,40 +50,21 @@ fun MainMegaphoneContainer( onMegaphoneVisible: (Megaphone) -> Unit ) { val isLandscape = LocalConfiguration.current.orientation == Configuration.ORIENTATION_LANDSCAPE - val visible = remember(isLandscape, state.isDisplayingArchivedChats, state.isSearchOpen, state.isInActionMode, state.megaphone) { - !(state.megaphone == Megaphone.NONE || state.megaphone.style == Megaphone.Style.FULLSCREEN || state.isDisplayingArchivedChats || isLandscape || state.isSearchOpen || state.isInActionMode) + val visible = remember(isLandscape, state) { + !isLandscape && state.isVisible() } AnimatedVisibility(visible = visible) { - if (LocalInspectionMode.current) { - Box( - modifier = Modifier - .background(color = Color.Red) - .fillMaxWidth() - .height(80.dp) - ) - } else { - AndroidView(factory = { context -> - LayoutInflater.from(context).inflate(R.layout.conversation_list_megaphone_container, null, false) as FrameLayout - }) { megaphoneContainer -> - val view = requireNotNull(MegaphoneViewBuilder.build(megaphoneContainer.context, state.megaphone, controller)) - megaphoneContainer.removeAllViews() - megaphoneContainer.addView(view) - megaphoneContainer.visible = true - } - } + MegaphoneComponent( + megaphone = state.megaphone, + megaphoneActionController = controller + ) } LaunchedEffect(state.megaphone, state.isDisplayingArchivedChats, isLandscape) { - if (state.megaphone == Megaphone.NONE || state.isDisplayingArchivedChats || isLandscape) { - return@LaunchedEffect + if (!(state.megaphone == Megaphone.NONE || state.isDisplayingArchivedChats || isLandscape)) { + onMegaphoneVisible(state.megaphone) } - - if (state.megaphone.style == Megaphone.Style.FULLSCREEN) { - state.megaphone.onVisibleListener?.onEvent(state.megaphone, controller) - } - - onMegaphoneVisible(state.megaphone) } } @@ -103,7 +73,9 @@ fun MainMegaphoneContainer( private fun MainMegaphoneContainerPreview() { Previews.Preview { MainMegaphoneContainer( - state = MainMegaphoneState(), + state = MainMegaphoneState( + megaphone = Megaphone.Builder(Megaphones.Event.ONBOARDING, Megaphone.Style.ONBOARDING).build() + ), controller = EmptyMegaphoneActionController, onMegaphoneVisible = {} )