Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/develop' into release/1.37
Browse files Browse the repository at this point in the history
  • Loading branch information
github-actions committed Oct 13, 2023
2 parents 2c09c62 + ba26e49 commit 4e39d4c
Show file tree
Hide file tree
Showing 97 changed files with 164 additions and 1,435 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,8 @@ import com.google.android.material.appbar.AppBarLayout
import org.hyperskill.app.android.R
import org.hyperskill.app.android.databinding.LayoutGamificationToolbarBinding
import org.hyperskill.app.android.main.view.ui.navigation.MainScreenRouter
import org.hyperskill.app.android.profile.view.navigation.ProfileScreen
import org.hyperskill.app.android.main.view.ui.navigation.Tabs
import org.hyperskill.app.android.main.view.ui.navigation.switch
import org.hyperskill.app.android.progress.navigation.ProgressScreen
import org.hyperskill.app.android.view.base.ui.extension.setElevationOnCollapsed
import org.hyperskill.app.gamification_toolbar.presentation.GamificationToolbarFeature
Expand Down Expand Up @@ -88,7 +89,7 @@ class GamificationToolbarDelegate(
) {
when (action) {
is GamificationToolbarFeature.Action.ViewAction.ShowProfileTab ->
mainScreenRouter.switch(ProfileScreen(isInitCurrent = true))
mainScreenRouter.switch(Tabs.PROFILE)
GamificationToolbarFeature.Action.ViewAction.ShowProgressScreen ->
router.navigateTo(ProgressScreen)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,34 +10,27 @@ import androidx.lifecycle.ViewModelProvider
import by.kirich1409.viewbindingdelegate.viewBinding
import org.hyperskill.app.android.HyperskillApp
import org.hyperskill.app.android.R
import org.hyperskill.app.android.core.view.ui.dialog.dismissDialogFragmentIfExists
import org.hyperskill.app.android.core.view.ui.navigation.requireRouter
import org.hyperskill.app.android.core.view.ui.setHyperskillColors
import org.hyperskill.app.android.core.view.ui.updateIsRefreshing
import org.hyperskill.app.android.databinding.FragmentHomeBinding
import org.hyperskill.app.android.gamification_toolbar.view.ui.delegate.GamificationToolbarDelegate
import org.hyperskill.app.android.main.view.ui.navigation.MainScreenRouter
import org.hyperskill.app.android.next_learning_activity.view.delegate.NextLearningActivityDelegate
import org.hyperskill.app.android.problem_of_day.view.delegate.ProblemOfDayCardFormDelegate
import org.hyperskill.app.android.problems_limit.view.ui.delegate.ProblemsLimitDelegate
import org.hyperskill.app.android.stage_implementation.view.dialog.UnsupportedStageBottomSheet
import org.hyperskill.app.android.step.view.screen.StepScreen
import org.hyperskill.app.android.topics_repetitions.view.delegate.TopicsRepetitionCardFormDelegate
import org.hyperskill.app.android.topics_repetitions.view.screen.TopicsRepetitionScreen
import org.hyperskill.app.core.view.mapper.SharedDateFormatter
import org.hyperskill.app.home.presentation.HomeFeature
import org.hyperskill.app.home.presentation.HomeViewModel
import org.hyperskill.app.problems_limit.domain.model.ProblemsLimitScreen
import org.hyperskill.app.problems_limit.view.mapper.ProblemsLimitViewStateMapper
import org.hyperskill.app.step.domain.model.StepRoute
import ru.nobird.android.view.base.ui.delegate.ViewStateDelegate
import ru.nobird.android.view.redux.ui.extension.reduxViewModel
import ru.nobird.app.presentation.redux.container.ReduxView

class HomeFragment :
Fragment(R.layout.fragment_home),
ReduxView<HomeFeature.State, HomeFeature.Action.ViewAction>,
UnsupportedStageBottomSheet.Callback {
ReduxView<HomeFeature.State, HomeFeature.Action.ViewAction> {
companion object {
fun newInstance(): Fragment =
HomeFragment()
Expand All @@ -50,9 +43,6 @@ class HomeFragment :
private val homeViewModel: HomeViewModel by reduxViewModel(this) { viewModelFactory }
private val homeViewStateDelegate: ViewStateDelegate<HomeFeature.HomeState> = ViewStateDelegate()

private var problemsLimitDelegate: ProblemsLimitDelegate? = null
private var problemsLimitViewStateMapper: ProblemsLimitViewStateMapper? = null

private val problemOfDayCardFormDelegate: ProblemOfDayCardFormDelegate by lazy(LazyThreadSafetyMode.NONE) {
ProblemOfDayCardFormDelegate(
onCardClicked = ::onProblemOfDayCardActionButtonClicked,
Expand All @@ -65,14 +55,6 @@ class HomeFragment :
TopicsRepetitionCardFormDelegate()
}

private val nextLearningActivityDelegate: NextLearningActivityDelegate by lazy(LazyThreadSafetyMode.NONE) {
NextLearningActivityDelegate(requireContext()) { nextLearningActivityMessage ->
homeViewModel.onNewMessage(
HomeFeature.Message.NextLearningActivityWidgetMessage(nextLearningActivityMessage)
)
}
}

private var gamificationToolbarDelegate: GamificationToolbarDelegate? = null

private val onForegroundObserver =
Expand All @@ -96,9 +78,7 @@ class HomeFragment :
super.onViewCreated(view, savedInstanceState)
initViewStateDelegate()
initGamificationToolbarDelegate()
initProblemsLimitDelegate()
problemOfDayCardFormDelegate.setup(viewBinding.homeScreenProblemOfDayCard)
nextLearningActivityDelegate.setup(requireContext(), viewBinding.homeNextLearningActivity)
with(viewBinding) {
homeScreenSwipeRefreshLayout.setHyperskillColors()
homeScreenSwipeRefreshLayout.setOnRefreshListener {
Expand All @@ -120,8 +100,6 @@ class HomeFragment :
override fun onDestroyView() {
super.onDestroyView()
gamificationToolbarDelegate = null
problemsLimitDelegate?.cleanup()
problemsLimitDelegate = null
}

override fun onDestroy() {
Expand All @@ -132,9 +110,7 @@ class HomeFragment :
private fun injectComponents() {
val homeComponent = HyperskillApp.graph().buildHomeComponent()
val platformHomeComponent = HyperskillApp.graph().buildPlatformHomeComponent(homeComponent)
val problemsLimitComponent = HyperskillApp.graph().buildProblemsLimitComponent(ProblemsLimitScreen.HOME)
viewModelFactory = platformHomeComponent.reduxViewModelFactory
problemsLimitViewStateMapper = problemsLimitComponent.problemsLimitViewStateMapper
dateFormatter = HyperskillApp.graph().commonComponent.dateFormatter
}

Expand Down Expand Up @@ -174,16 +150,6 @@ class HomeFragment :
}
}

private fun initProblemsLimitDelegate() {
problemsLimitDelegate = ProblemsLimitDelegate(
viewBinding = viewBinding.homeProblemsLimit,
onNewMessage = {
homeViewModel.onNewMessage(HomeFeature.Message.ProblemsLimitMessage(it))
}
)
problemsLimitDelegate?.setup()
}

override fun onAction(action: HomeFeature.Action.ViewAction) {
when (action) {
is HomeFeature.Action.ViewAction.NavigateTo.TopicsRepetitionsScreen -> {
Expand All @@ -200,15 +166,6 @@ class HomeFragment :
StepScreen(action.stepRoute)
)
}
is HomeFeature.Action.ViewAction.ProblemsLimitViewAction -> {
// no op
}
is HomeFeature.Action.ViewAction.NextLearningActivityWidgetViewAction -> {
nextLearningActivityDelegate.handleAction(
fragment = this,
action = action.viewAction
)
}
}
}

Expand All @@ -224,10 +181,6 @@ class HomeFragment :
}

gamificationToolbarDelegate?.render(state.toolbarState)
problemsLimitViewStateMapper?.let { mapper ->
problemsLimitDelegate?.render(mapper.mapState(state.problemsLimitState))
}
nextLearningActivityDelegate.render(state.nextLearningActivityWidgetState)
}

private fun renderSwipeRefresh(state: HomeFeature.State) {
Expand Down Expand Up @@ -265,19 +218,4 @@ class HomeFragment :
)
}
}

// UnsupportedStageBottomSheet.Callback methods
override fun onShow() {
homeViewModel.onNewMessage(HomeFeature.Message.StageImplementUnsupportedModalShownEventMessage)
}

override fun onDismiss() {
homeViewModel.onNewMessage(HomeFeature.Message.StageImplementUnsupportedModalHiddenEventMessage)
}

override fun onHomeClick() {
homeViewModel.onNewMessage(HomeFeature.Message.StageImplementUnsupportedModalGoToHomeClicked)
childFragmentManager
.dismissDialogFragmentIfExists(UnsupportedStageBottomSheet.TAG)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ import com.github.terrakok.cicerone.androidx.FragmentScreen
import org.hyperskill.app.android.home.view.ui.fragment.HomeFragment
import org.hyperskill.app.android.main.view.ui.navigation.Tabs

object HomeScreen : FragmentScreen {
override val screenKey: String = Tabs.HOME.name
object TrainingScreen : FragmentScreen {
override val screenKey: String = Tabs.TRAINING.name

override fun createFragment(factory: FragmentFactory): Fragment =
HomeFragment.newInstance()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -237,8 +237,6 @@ class MainActivity :
router.newRootScreen(OnboardingScreen)
is AppFeature.Action.ViewAction.NavigateTo.AuthScreen ->
router.newRootScreen(AuthScreen())
is AppFeature.Action.ViewAction.NavigateTo.HomeScreen ->
router.newRootScreen(MainScreen())
is AppFeature.Action.ViewAction.NavigateTo.TrackSelectionScreen ->
router.newRootScreen(
TrackSelectionListScreen(
Expand Down Expand Up @@ -274,9 +272,9 @@ class MainActivity :
router.newRootScreen(
FirstProblemOnboardingScreen(action.isNewUserMode)
)
is AppFeature.Action.ViewAction.NavigateTo.HomeScreenWithStep ->
is AppFeature.Action.ViewAction.NavigateTo.StudyPlanWithStep ->
router.newRootChain(
MainScreen(),
MainScreen(Tabs.STUDY_PLAN),
StepScreen(action.stepRoute)
)
AppFeature.Action.ViewAction.NavigateTo.StudyPlan ->
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,8 @@ class MainFragment : Fragment(R.layout.fragment_main) {
onScreenChanged = { screenKey ->
viewBinding.mainBottomNavigation.selectedItemId =
when (Tabs.valueOf(screenKey)) {
Tabs.HOME ->
R.id.home_tab
Tabs.TRAINING ->
R.id.training_tab
Tabs.STUDY_PLAN ->
R.id.study_plan_tab
Tabs.PROFILE ->
Expand Down Expand Up @@ -93,8 +93,8 @@ class MainFragment : Fragment(R.layout.fragment_main) {
}

when (item.itemId) {
R.id.home_tab -> {
localCicerone.router.switch(Tabs.HOME)
R.id.training_tab -> {
localCicerone.router.switch(Tabs.TRAINING)
}
R.id.profile_tab -> {
localCicerone.router.switch(Tabs.PROFILE)
Expand Down Expand Up @@ -136,7 +136,7 @@ class MainFragment : Fragment(R.layout.fragment_main) {
itemId: Int
): AppClickedBottomNavigationItemHyperskillAnalyticEvent.NavigationItem? =
when (itemId) {
R.id.home_tab -> AppClickedBottomNavigationItemHyperskillAnalyticEvent.NavigationItem.HOME
R.id.training_tab -> AppClickedBottomNavigationItemHyperskillAnalyticEvent.NavigationItem.HOME
R.id.study_plan_tab -> AppClickedBottomNavigationItemHyperskillAnalyticEvent.NavigationItem.STUDY_PLAN
R.id.profile_tab -> AppClickedBottomNavigationItemHyperskillAnalyticEvent.NavigationItem.PROFILE
R.id.debug_tab -> AppClickedBottomNavigationItemHyperskillAnalyticEvent.NavigationItem.DEBUG
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import org.hyperskill.app.android.main.view.ui.fragment.MainFragment
* Represent the main screen with the bottom app bar.
* @param initialTab means the tab which will be opened during the first screen show
*/
data class MainScreen(private val initialTab: Tabs = Tabs.HOME) : FragmentScreen {
data class MainScreen(private val initialTab: Tabs = Tabs.STUDY_PLAN) : FragmentScreen {
override fun createFragment(factory: FragmentFactory): Fragment =
MainFragment.newInstance(initialTab)
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package org.hyperskill.app.android.main.view.ui.navigation

import org.hyperskill.app.android.debug.DebugScreen
import org.hyperskill.app.android.home.view.ui.screen.HomeScreen
import org.hyperskill.app.android.home.view.ui.screen.TrainingScreen
import org.hyperskill.app.android.profile.view.navigation.ProfileScreen
import org.hyperskill.app.android.study_plan.screen.StudyPlanScreen
import ru.nobird.android.view.navigation.router.RetainedRouter
Expand All @@ -10,7 +10,7 @@ typealias MainScreenRouter = RetainedRouter

fun MainScreenRouter.switch(tab: Tabs) {
val tabScreen = when (tab) {
Tabs.HOME -> HomeScreen
Tabs.TRAINING -> TrainingScreen
Tabs.STUDY_PLAN -> StudyPlanScreen
Tabs.PROFILE -> ProfileScreen(isInitCurrent = true)
Tabs.DEBUG -> DebugScreen
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package org.hyperskill.app.android.main.view.ui.navigation

enum class Tabs {
HOME,
TRAINING,
STUDY_PLAN,
PROFILE,
DEBUG
Expand Down

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,6 @@ object NotificationClickHandlingDelegate {
navigateTo: NotificationClickHandlingFeature.Action.ViewAction.NavigateTo
) {
when (navigateTo) {
NotificationClickHandlingFeature.Action.ViewAction.NavigateTo.Home ->
router.newRootScreen(MainScreen(initialTab = Tabs.HOME))
NotificationClickHandlingFeature.Action.ViewAction.NavigateTo.Profile ->
router.newRootScreen(MainScreen(initialTab = Tabs.PROFILE))
NotificationClickHandlingFeature.Action.ViewAction.NavigateTo.StudyPlan ->
Expand Down
Loading

0 comments on commit 4e39d4c

Please sign in to comment.