Skip to content

Commit

Permalink
Revert "Implement task card shared transition"
Browse files Browse the repository at this point in the history
This reverts commit a498744.
  • Loading branch information
kamerok committed Sep 7, 2024
1 parent a498744 commit 490be52
Show file tree
Hide file tree
Showing 4 changed files with 172 additions and 285 deletions.
320 changes: 147 additions & 173 deletions builder/src/main/java/com/kamer/builder/MainNavigationScreenHolder.kt
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,6 @@ import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import androidx.compose.animation.EnterTransition
import androidx.compose.animation.ExitTransition
import androidx.compose.animation.ExperimentalSharedTransitionApi
import androidx.compose.animation.SharedTransitionLayout
import androidx.compose.animation.core.tween
import androidx.compose.animation.fadeIn
import androidx.compose.animation.fadeOut
Expand All @@ -14,7 +12,6 @@ import androidx.compose.animation.scaleOut
import androidx.compose.animation.slideOutHorizontally
import androidx.compose.animation.slideOutVertically
import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.runtime.DisposableEffect
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.remember
Expand All @@ -31,8 +28,6 @@ import easydone.core.domain.LocalDataSource
import easydone.core.domain.RemoteDataSource
import easydone.core.domain.SyncScheduler
import easydone.core.domain.model.Task
import easydone.coreui.design.LocalNavAnimatedVisibilityScope
import easydone.coreui.design.LocalSharedTransitionScope
import easydone.feature.edittask.EditTaskArgs
import easydone.feature.edittask.EditTaskNavigator
import easydone.feature.edittask.EditTaskRoute
Expand Down Expand Up @@ -121,201 +116,180 @@ class MainNavigationScreenHolder(
navigate("task/create")
}

@OptIn(ExperimentalSharedTransitionApi::class)
@Composable
fun MainScreen() {
SharedTransitionLayout {
CompositionLocalProvider(
LocalSharedTransitionScope provides this
) {
val navController = rememberNavController()
val isRemoteDataSourceConnected = remember {
runBlocking { remoteDataSource.isConnected() }
}
val startDestination = if (isRemoteDataSourceConnected) {
"home"
} else {
"setup"
}
val navController = rememberNavController()
val isRemoteDataSourceConnected = remember {
runBlocking { remoteDataSource.isConnected() }
}
val startDestination = if (isRemoteDataSourceConnected) {
"home"
} else {
"setup"
}

LaunchedEffect(Unit) {
val intent = activity.intent
val isInboxLaunch = !intent.isOpenedFromHistory() &&
intent.getBooleanExtra("inbox", false)
if (isInboxLaunch) {
navController.navigate("inbox")
}
}
LaunchedEffect(Unit) {
val intent = activity.intent
val isInboxLaunch = !intent.isOpenedFromHistory() &&
intent.getBooleanExtra("inbox", false)
if (isInboxLaunch) {
navController.navigate("inbox")
}
}

DisposableEffect(Unit) {
val listener = Consumer<Intent> { intent ->
//check inbox deeplink
if (intent.getBooleanExtra("inbox", false)) {
with(navController) {
navigate("inbox", navOptions {
popUpTo("home") {}
})
}
}
DisposableEffect(Unit) {
val listener = Consumer<Intent> { intent ->
//check inbox deeplink
if (intent.getBooleanExtra("inbox", false)) {
with(navController) {
navigate("inbox", navOptions {
popUpTo("home") {}
})
}
activity.addOnNewIntentListener(listener)
onDispose { activity.removeOnNewIntentListener(listener) }
}
}
activity.addOnNewIntentListener(listener)
onDispose { activity.removeOnNewIntentListener(listener) }
}

NavHost(
navController = navController,
startDestination = startDestination,
enterTransition = { scaleIntoContainer() },
exitTransition = { scaleOutOfContainer(direction = ScaleTransitionDirection.INWARDS) },
popEnterTransition = { scaleIntoContainer(direction = ScaleTransitionDirection.OUTWARDS) },
popExitTransition = { scaleOutOfContainer() }
NavHost(
navController = navController,
startDestination = startDestination,
enterTransition = { scaleIntoContainer() },
exitTransition = { scaleOutOfContainer(direction = ScaleTransitionDirection.INWARDS) },
popEnterTransition = { scaleIntoContainer(direction = ScaleTransitionDirection.OUTWARDS) },
popExitTransition = { scaleOutOfContainer() }
) {
composable("setup") {
SetupRoute(
trelloRemoteDataSource = trelloRemoteDataSource,
trelloApi = trelloApi,
trelloApiKey = trelloApiKey
) {
composable("setup") {
SetupRoute(
trelloRemoteDataSource = trelloRemoteDataSource,
trelloApi = trelloApi,
trelloApiKey = trelloApiKey
) {
navController.popBackStack("setup", true)
navController.navigate("home")
}
navController.popBackStack("setup", true)
navController.navigate("home")
}
}

composable("home") {
HomeRoute(syncScheduler, domainRepository, object : HomeNavigator {
override fun navigateToCreate() {
navController.openCreateTask()
}

composable("home") {
CompositionLocalProvider(LocalNavAnimatedVisibilityScope provides this) {
HomeRoute(
syncScheduler = syncScheduler,
domainRepository = domainRepository,
navigator = object : HomeNavigator {
override fun navigateToCreate() {
navController.openCreateTask()
}

override fun navigateToSettings() {
navController.navigate("settings")
}

override fun navigateToInbox() {
navController.navigate("inbox")
}

override fun navigateToWaiting() {
navController.navigate("waiting")
}

override fun navigateToTask(id: String) {
navController.openViewTask(id)
}
}
)
}
override fun navigateToSettings() {
navController.navigate("settings")
}

composable("inbox") {
CompositionLocalProvider(LocalNavAnimatedVisibilityScope provides this) {
InboxRoute(
domainRepository,
object : InboxNavigator {
override fun openTask(id: String) {
navController.openViewTask(id)
}

override fun close() {
navController.popBackStack()
}
}
)
}
override fun navigateToInbox() {
navController.navigate("inbox")
}

composable("waiting") {
CompositionLocalProvider(LocalNavAnimatedVisibilityScope provides this) {
WaitingRoute(domainRepository, object : WaitingNavigator {
override fun openTask(id: String) {
navController.openViewTask(id)
}
})
}
override fun navigateToWaiting() {
navController.navigate("waiting")
}

composable("settings") {
SettingScreen(
remoteDataSource,
localDataSource,
object : SettingsNavigator {
override fun navigateToSetup() {
navController.navigate("setup", navOptions {
popUpTo("home") { inclusive = true }
})
}
})
override fun navigateToTask(id: String) {
navController.openViewTask(id)
}
})
}

composable(
route = "task/{taskId}",
arguments = listOf(navArgument("taskId") { type = NavType.StringType }),
popExitTransition = {
val animation = initialState.savedStateHandle
.get<TaskPopAnimation>(TASK_POP_ANIMATION_KEY)
when (animation) {
TaskPopAnimation.Move -> taskExitMove()
TaskPopAnimation.Archive -> taskExitArchive()
else -> scaleOutOfContainer()
}
composable("inbox") {
InboxRoute(
domainRepository,
object : InboxNavigator {
override fun openTask(id: String) {
navController.openViewTask(id)
}
) { backStackEntry ->
CompositionLocalProvider(LocalNavAnimatedVisibilityScope provides this) {
val id = checkNotNull(backStackEntry.arguments?.getString("taskId")) {
"Task id is required"
}
TaskDetailsRoute(id, domainRepository, object : TaskDetailsNavigator {
override fun editTask(id: String) {
navController.openEditTask(id)
}

override fun closeMove() {
navController.currentBackStackEntry
?.savedStateHandle
?.set(TASK_POP_ANIMATION_KEY, TaskPopAnimation.Move)
navController.popBackStack()
}

override fun closeArchive() {
navController.currentBackStackEntry
?.savedStateHandle
?.set(TASK_POP_ANIMATION_KEY, TaskPopAnimation.Archive)
navController.popBackStack()
}
})

override fun close() {
navController.popBackStack()
}
}
)
}

composable(
route = "task/edit/{taskId}",
arguments = listOf(navArgument("taskId") { type = NavType.StringType })
) { backStackEntry ->
val id = checkNotNull(backStackEntry.arguments?.getString("taskId")) {
"Task id is required"
}
val args = remember { EditTaskArgs.Edit(id) }
EditTaskRoute(args, domainRepository, object : EditTaskNavigator {
override fun close() {
activity.onBackPressedDispatcher.onBackPressed()
}
composable("waiting") {
WaitingRoute(domainRepository, object : WaitingNavigator {
override fun openTask(id: String) {
navController.openViewTask(id)
}
})
}

composable("settings") {
SettingScreen(remoteDataSource, localDataSource, object : SettingsNavigator {
override fun navigateToSetup() {
navController.navigate("setup", navOptions {
popUpTo("home") { inclusive = true }
})
}
})
}

composable("task/create") {
EditTaskRoute(
EditTaskArgs.Create(type = Task.Type.ToDo),
domainRepository,
object : EditTaskNavigator {
override fun close() {
activity.onBackPressedDispatcher.onBackPressed()
}
})
composable(
route = "task/{taskId}",
arguments = listOf(navArgument("taskId") { type = NavType.StringType }),
popExitTransition = {
val animation = initialState.savedStateHandle
.get<TaskPopAnimation>(TASK_POP_ANIMATION_KEY)
println("asdf $animation")
when (animation) {
TaskPopAnimation.Move -> taskExitMove()
TaskPopAnimation.Archive -> taskExitArchive()
else -> scaleOutOfContainer()
}
}
) { backStackEntry ->
val id = checkNotNull(backStackEntry.arguments?.getString("taskId")) {
"Task id is required"
}
TaskDetailsRoute(id, domainRepository, object : TaskDetailsNavigator {
override fun editTask(id: String) {
navController.openEditTask(id)
}

override fun closeMove() {
navController.currentBackStackEntry
?.savedStateHandle
?.set(TASK_POP_ANIMATION_KEY, TaskPopAnimation.Move)
navController.popBackStack()
}

override fun closeArchive() {
navController.currentBackStackEntry
?.savedStateHandle
?.set(TASK_POP_ANIMATION_KEY, TaskPopAnimation.Archive)
navController.popBackStack()
}
})
}

composable(
route = "task/edit/{taskId}",
arguments = listOf(navArgument("taskId") { type = NavType.StringType })
) { backStackEntry ->
val id = checkNotNull(backStackEntry.arguments?.getString("taskId")) {
"Task id is required"
}
val args = remember { EditTaskArgs.Edit(id) }
EditTaskRoute(args, domainRepository, object : EditTaskNavigator {
override fun close() {
activity.onBackPressedDispatcher.onBackPressed()
}
})
}

composable("task/create") {
EditTaskRoute(
EditTaskArgs.Create(type = Task.Type.ToDo),
domainRepository,
object : EditTaskNavigator {
override fun close() {
activity.onBackPressedDispatcher.onBackPressed()
}
})
}
}
}
Expand Down
Loading

0 comments on commit 490be52

Please sign in to comment.