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:
parent
7f638d4e84
commit
3a2defa5ec
5 changed files with 122 additions and 88 deletions
|
@ -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
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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" />
|
||||
|
||||
|
|
|
@ -16,7 +16,7 @@ interface FeatureToggles {
|
|||
|
||||
val enableDiscussionDemo: Boolean
|
||||
|
||||
val isSpaceLevelChatEnabled: Boolean
|
||||
val isSpaceLevelChatWidgetEnabled: Boolean
|
||||
|
||||
val isNewSpaceHomeEnabled: Boolean
|
||||
}
|
|
@ -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)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue