1
0
Fork 0
mirror of https://github.com/anyproto/anytype-kotlin.git synced 2025-06-08 05:47:05 +09:00

DROID-3074 App | Tech | Introduce feature toggle for new home screen (#1802)

This commit is contained in:
Evgenii Kozlov 2024-11-18 13:42:25 +01:00 committed by GitHub
parent 7f638d4e84
commit 3a2defa5ec
Signed by: github
GPG key ID: B5690EEEBB952194
5 changed files with 122 additions and 88 deletions

View file

@ -26,8 +26,8 @@ class DefaultFeatureToggles @Inject constructor(
override val enableDiscussionDemo: Boolean = true
override val isSpaceLevelChatEnabled: Boolean
get() = true
override val isSpaceLevelChatWidgetEnabled: Boolean
get() = false
override val isNewSpaceHomeEnabled: Boolean
get() = true

View file

@ -100,87 +100,127 @@ class HomeScreenFragment : BaseComposeFragment(),
surface = colorResource(id = R.color.background_secondary)
)
) {
val focus = LocalFocusManager.current
val component = componentManager().spaceLevelChatComponent
val spaceLevelChatViewModel = daggerViewModel {
component.get(
key = space,
param = DiscussionViewModel.Params.SpaceLevelChat(
space = Space(space)
)
).getViewModel()
}
val pagerState = rememberPagerState { 2 }
val coroutineScope = rememberCoroutineScope()
Box(
Modifier.fillMaxSize()
) {
HomeScreenToolbar(
onWidgetTabClicked = {
coroutineScope.launch {
pagerState.animateScrollToPage(0)
}
},
onChatTabClicked = {
coroutineScope.launch {
pagerState.animateScrollToPage(1)
}
}
)
HorizontalPager(
modifier = Modifier.padding(top = 64.dp),
state = pagerState,
userScrollEnabled = false
) { page ->
if (page == 0) {
focus.clearFocus(force = true)
HomeScreen(
modifier = Modifier,
widgets = vm.views.collectAsState().value,
mode = vm.mode.collectAsState().value,
onExpand = { path -> vm.onExpand(path) },
onCreateWidget = vm::onCreateWidgetClicked,
onEditWidgets = vm::onEditWidgets,
onExitEditMode = vm::onExitEditMode,
onWidgetMenuAction = { widget: Id, action: DropDownMenuAction ->
vm.onDropDownMenuAction(widget, action)
},
onWidgetObjectClicked = vm::onWidgetObjectClicked,
onWidgetSourceClicked = vm::onWidgetSourceClicked,
onChangeWidgetView = vm::onChangeCurrentWidgetView,
onToggleExpandedWidgetState = vm::onToggleCollapsedWidgetState,
onSearchClicked = vm::onSearchIconClicked,
onCreateNewObjectClicked = throttledClick(
onClick = { vm.onCreateNewObjectClicked() }
),
onCreateNewObjectLongClicked = throttledClick(
onClick = { vm.onCreateNewObjectLongClicked() }
),
onBackClicked = throttledClick(
onClick = vm::onBackClicked
),
onSpaceWidgetClicked = throttledClick(
onClick = vm::onSpaceSettingsClicked
),
onBundledWidgetClicked = vm::onBundledWidgetClicked,
onMove = vm::onMove,
onObjectCheckboxClicked = vm::onObjectCheckboxClicked,
onSpaceShareIconClicked = vm::onSpaceShareIconClicked,
onSeeAllObjectsClicked = vm::onSeeAllObjectsClicked,
onCreateObjectInsideWidget = vm::onCreateObjectInsideWidget,
onCreateDataViewObject = vm::onCreateDataViewObject,
onBackLongClicked = vm::onBackLongClicked
if (featureToggles.isNewSpaceHomeEnabled) {
val focus = LocalFocusManager.current
val component = componentManager().spaceLevelChatComponent
val spaceLevelChatViewModel = daggerViewModel {
component.get(
key = space,
param = DiscussionViewModel.Params.SpaceLevelChat(
space = Space(space)
)
} else {
DiscussionScreenWrapper(
isSpaceLevelChat = true,
vm = spaceLevelChatViewModel,
onAttachClicked = {
// TODO
).getViewModel()
}
val pagerState = rememberPagerState { 2 }
val coroutineScope = rememberCoroutineScope()
Box(
Modifier.fillMaxSize()
) {
HomeScreenToolbar(
onWidgetTabClicked = {
coroutineScope.launch {
pagerState.animateScrollToPage(0)
}
)
},
onChatTabClicked = {
coroutineScope.launch {
pagerState.animateScrollToPage(1)
}
}
)
HorizontalPager(
modifier = Modifier.padding(top = 64.dp),
state = pagerState,
userScrollEnabled = false
) { page ->
if (page == 0) {
focus.clearFocus(force = true)
HomeScreen(
modifier = Modifier,
widgets = vm.views.collectAsState().value,
mode = vm.mode.collectAsState().value,
onExpand = { path -> vm.onExpand(path) },
onCreateWidget = vm::onCreateWidgetClicked,
onEditWidgets = vm::onEditWidgets,
onExitEditMode = vm::onExitEditMode,
onWidgetMenuAction = { widget: Id, action: DropDownMenuAction ->
vm.onDropDownMenuAction(widget, action)
},
onWidgetObjectClicked = vm::onWidgetObjectClicked,
onWidgetSourceClicked = vm::onWidgetSourceClicked,
onChangeWidgetView = vm::onChangeCurrentWidgetView,
onToggleExpandedWidgetState = vm::onToggleCollapsedWidgetState,
onSearchClicked = vm::onSearchIconClicked,
onCreateNewObjectClicked = throttledClick(
onClick = { vm.onCreateNewObjectClicked() }
),
onCreateNewObjectLongClicked = throttledClick(
onClick = { vm.onCreateNewObjectLongClicked() }
),
onBackClicked = throttledClick(
onClick = vm::onBackClicked
),
onSpaceWidgetClicked = throttledClick(
onClick = vm::onSpaceSettingsClicked
),
onBundledWidgetClicked = vm::onBundledWidgetClicked,
onMove = vm::onMove,
onObjectCheckboxClicked = vm::onObjectCheckboxClicked,
onSpaceShareIconClicked = vm::onSpaceShareIconClicked,
onSeeAllObjectsClicked = vm::onSeeAllObjectsClicked,
onCreateObjectInsideWidget = vm::onCreateObjectInsideWidget,
onCreateDataViewObject = vm::onCreateDataViewObject,
onBackLongClicked = vm::onBackLongClicked
)
} else {
DiscussionScreenWrapper(
isSpaceLevelChat = true,
vm = spaceLevelChatViewModel,
onAttachClicked = {
// TODO
}
)
}
}
}
} else {
HomeScreen(
modifier = Modifier,
widgets = vm.views.collectAsState().value,
mode = vm.mode.collectAsState().value,
onExpand = { path -> vm.onExpand(path) },
onCreateWidget = vm::onCreateWidgetClicked,
onEditWidgets = vm::onEditWidgets,
onExitEditMode = vm::onExitEditMode,
onWidgetMenuAction = { widget: Id, action: DropDownMenuAction ->
vm.onDropDownMenuAction(widget, action)
},
onWidgetObjectClicked = vm::onWidgetObjectClicked,
onWidgetSourceClicked = vm::onWidgetSourceClicked,
onChangeWidgetView = vm::onChangeCurrentWidgetView,
onToggleExpandedWidgetState = vm::onToggleCollapsedWidgetState,
onSearchClicked = vm::onSearchIconClicked,
onCreateNewObjectClicked = throttledClick(
onClick = { vm.onCreateNewObjectClicked() }
),
onCreateNewObjectLongClicked = throttledClick(
onClick = { vm.onCreateNewObjectLongClicked() }
),
onBackClicked = throttledClick(
onClick = vm::onBackClicked
),
onSpaceWidgetClicked = throttledClick(
onClick = vm::onSpaceSettingsClicked
),
onBundledWidgetClicked = vm::onBundledWidgetClicked,
onMove = vm::onMove,
onObjectCheckboxClicked = vm::onObjectCheckboxClicked,
onSpaceShareIconClicked = vm::onSpaceShareIconClicked,
onSeeAllObjectsClicked = vm::onSeeAllObjectsClicked,
onCreateObjectInsideWidget = vm::onCreateObjectInsideWidget,
onCreateDataViewObject = vm::onCreateDataViewObject,
onBackLongClicked = vm::onBackLongClicked
)
}
}
}
@ -444,10 +484,6 @@ class HomeScreenFragment : BaseComposeFragment(),
componentManager().homeScreenComponent.release()
}
override fun onApplyWindowRootInsets(view: View) {
super.onApplyWindowRootInsets(view)
}
companion object {
const val SHOW_MNEMONIC_KEY = "arg.home-screen.show-mnemonic"
const val DEEP_LINK_KEY = "arg.home-screen.deep-link"

View file

@ -19,7 +19,7 @@
android:layout_height="wrap_content"
android:layout_gravity="bottom|center_horizontal"
android:layout_marginBottom="16dp"
android:textColor="#DBDAD4"
android:textColor="@color/text_secondary"
android:textSize="10sp"
tools:text="0.0.10-alpha" />

View file

@ -16,7 +16,7 @@ interface FeatureToggles {
val enableDiscussionDemo: Boolean
val isSpaceLevelChatEnabled: Boolean
val isSpaceLevelChatWidgetEnabled: Boolean
val isNewSpaceHomeEnabled: Boolean
}

View file

@ -1,6 +1,5 @@
package com.anytypeio.anytype.presentation.home
import android.R
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.viewModelScope
@ -48,7 +47,6 @@ import com.anytypeio.anytype.domain.collections.AddObjectToCollection
import com.anytypeio.anytype.domain.dataview.interactor.CreateDataViewObject
import com.anytypeio.anytype.domain.event.interactor.InterceptEvents
import com.anytypeio.anytype.domain.launch.GetDefaultObjectType
import com.anytypeio.anytype.domain.library.StoreSearchByIdsParams
import com.anytypeio.anytype.domain.library.StorelessSubscriptionContainer
import com.anytypeio.anytype.domain.misc.AppActionManager
import com.anytypeio.anytype.domain.misc.DateProvider
@ -408,7 +406,7 @@ class HomeScreenViewModel(
combine(
flows = buildList<Flow<WidgetView>> {
add(spaceWidgetView)
if (featureToggles.isSpaceLevelChatEnabled) {
if (featureToggles.isSpaceLevelChatWidgetEnabled) {
add(spaceChatWidget.view)
}
add(allContentWidget.view)