Skip to content

Commit

Permalink
Merge pull request #1122 from hyperskill/release/1.66
Browse files Browse the repository at this point in the history
Release 1.66
  • Loading branch information
ivan-magda authored Aug 5, 2024
2 parents 9e7aea8 + 101e872 commit 4c1e694
Show file tree
Hide file tree
Showing 227 changed files with 3,902 additions and 2,253 deletions.
3 changes: 2 additions & 1 deletion androidHyperskillApp/Gemfile
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
source "https://rubygems.org"
ruby "3.3.0"

gem "fastlane", "2.221.1"
gem "fastlane", "2.222.0"
gem "rexml", ">= 3.3.2"

eval_gemfile("fastlane/Pluginfile")
11 changes: 6 additions & 5 deletions androidHyperskillApp/Gemfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ GEM
artifactory (3.0.17)
atomos (0.1.3)
aws-eventstream (1.3.0)
aws-partitions (1.957.0)
aws-partitions (1.960.0)
aws-sdk-core (3.201.3)
aws-eventstream (~> 1, >= 1.3.0)
aws-partitions (~> 1, >= 1.651.0)
Expand All @@ -23,7 +23,7 @@ GEM
aws-sdk-core (~> 3, >= 3.201.0)
aws-sdk-kms (~> 1)
aws-sigv4 (~> 1.5)
aws-sigv4 (1.9.0)
aws-sigv4 (1.9.1)
aws-eventstream (~> 1, >= 1.0.2)
babosa (1.0.4)
base64 (0.2.0)
Expand Down Expand Up @@ -60,15 +60,15 @@ GEM
faraday-httpclient (1.0.1)
faraday-multipart (1.0.4)
multipart-post (~> 2)
faraday-net_http (1.0.1)
faraday-net_http (1.0.2)
faraday-net_http_persistent (1.2.0)
faraday-patron (1.0.0)
faraday-rack (1.0.0)
faraday-retry (1.0.3)
faraday_middleware (1.2.0)
faraday (~> 1.0)
fastimage (2.3.1)
fastlane (2.221.1)
fastlane (2.222.0)
CFPropertyList (>= 2.3, < 4.0.0)
addressable (>= 2.8, < 3.0.0)
artifactory (~> 3.0)
Expand Down Expand Up @@ -223,8 +223,9 @@ PLATFORMS
x86_64-linux

DEPENDENCIES
fastlane (= 2.221.1)
fastlane (= 2.222.0)
fastlane-plugin-firebase_app_distribution
rexml (>= 3.3.2)

RUBY VERSION
ruby 3.3.0p0
Expand Down
2 changes: 1 addition & 1 deletion androidHyperskillApp/fastlane/Fastfile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
fastlane_version "2.221.0"
fastlane_version "2.222.0"

default_platform(:android)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ class CodeAnalyzer(private val autocompleteContainer: AutocompleteContainer) {

private val quotes = hashMapOf(
"\"" to "\"",
"'" to "'",
"`" to "`"
)

Expand Down Expand Up @@ -84,9 +85,10 @@ class CodeAnalyzer(private val autocompleteContainer: AutocompleteContainer) {
}

in quotes -> {
val next = getNextSymbolAsString(start + 1, text)
val prev = getPrevSymbolAsString(start, text)
// don't want auto quote if there is a statement next
if (prev != inserted) {
if ((next == null || Character.isWhitespace(next[0])) && prev != inserted) {
insertTextAfterCursor(start, count, codeEditor, inserted)
} else {
onClosingSymbolInserted(start, count, codeEditor, inserted, text)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,4 +15,11 @@ fun NestedScrollView.smoothScrollToBottom(durationMilliseconds: Int = DEFAULT_SM
val y = view.bottom + lp.bottomMargin + scrollView.paddingBottom
scrollView.smoothScrollTo(0, y, durationMilliseconds)
}
}

fun NestedScrollView.smoothScrollTo(view: View, durationMilliseconds: Int = DEFAULT_SMOOTH_SCROLL_DURATION) {
val scrollView = this
val lp = view.layoutParams as ViewGroup.MarginLayoutParams
val y = view.bottom + lp.bottomMargin
scrollView.smoothScrollTo(0, y, durationMilliseconds)
}
Original file line number Diff line number Diff line change
Expand Up @@ -207,8 +207,8 @@ class HomeFragment :

val homeState = state.homeState
if (homeState is HomeFeature.HomeState.Content) {
renderProblemOfDay(viewBinding, homeState.problemOfDayState, homeState.areProblemsLimited)
renderTopicsRepetition(homeState.repetitionsState, homeState.areProblemsLimited)
renderProblemOfDay(viewBinding, homeState.problemOfDayState, homeState.isProblemsLimitEnabled)
renderTopicsRepetition(homeState.repetitionsState, homeState.isProblemsLimitEnabled)
}

renderChallengeCard(state.challengeWidgetViewState)
Expand Down Expand Up @@ -242,19 +242,19 @@ class HomeFragment :
private fun renderProblemOfDay(
viewBinding: FragmentHomeBinding,
state: HomeFeature.ProblemOfDayState,
areProblemsLimited: Boolean
isProblemsLimitEnabled: Boolean
) {
problemOfDayCardFormDelegate.render(
dateFormatter = dateFormatter,
binding = viewBinding.homeScreenProblemOfDayCard,
state = state,
areProblemsLimited = areProblemsLimited
areProblemsLimited = isProblemsLimitEnabled
)
}

private fun renderTopicsRepetition(
repetitionsState: HomeFeature.RepetitionsState,
areProblemsLimited: Boolean
isProblemsLimitEnabled: Boolean
) {
viewBinding.homeScreenTopicsRepetitionCard.root.isVisible =
repetitionsState is HomeFeature.RepetitionsState.Available
Expand All @@ -263,7 +263,7 @@ class HomeFragment :
context = requireContext(),
binding = viewBinding.homeScreenTopicsRepetitionCard,
recommendedRepetitionsCount = repetitionsState.recommendedRepetitionsCount,
areProblemsLimited = areProblemsLimited
isProblemsLimitEnabled = isProblemsLimitEnabled
)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import org.hyperskill.app.android.HyperskillApp
import org.hyperskill.app.android.R
import org.hyperskill.app.android.core.extensions.argument
import org.hyperskill.app.android.core.extensions.logger
import org.hyperskill.app.android.core.extensions.smoothScrollTo
import org.hyperskill.app.android.core.extensions.smoothScrollToBottom
import org.hyperskill.app.android.core.view.ui.fragment.setChildFragment
import org.hyperskill.app.android.core.view.ui.navigation.requireRouter
Expand Down Expand Up @@ -228,4 +229,10 @@ class StageStepWrapperFragment :
.stagePracticeContainer
.smoothScrollToBottom(SMOOTH_SCROLL_DURATION_MILLISECONDS)
}

override fun scrollTo(view: View) {
viewBinding
.stagePracticeContainer
.smoothScrollTo(view, SMOOTH_SCROLL_DURATION_MILLISECONDS)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ import org.hyperskill.app.step.domain.model.StepMenuSecondaryAction
@OptIn(FlowPreview::class)
class StepMenuDelegate(
menuHost: MenuHost,
private val viewLifecycleOwner: LifecycleOwner,
viewLifecycleOwner: LifecycleOwner,
private val onPrimaryActionClick: (StepMenuPrimaryAction) -> Unit,
private val onSecondaryActionClick: (StepMenuSecondaryAction) -> Unit,
private val onBackClick: () -> Unit
Expand Down Expand Up @@ -78,6 +78,7 @@ class StepMenuDelegate(
val state = menuActionsStateFlow.value
renderMainAction(menu, state.primaryActions)
renderSecondaryActions(menu, state.secondaryActions)
renderCommentsAction(menu, state)
}

private fun renderMainAction(
Expand All @@ -86,12 +87,11 @@ class StepMenuDelegate(
) {
StepMenuPrimaryAction.entries.forEach { action ->
val params: StepMenuPrimaryActionParams? = primaryActions[action]
val menuItem: MenuItem? = menu.findItem(
val menuItem: MenuItem? =
when (action) {
StepMenuPrimaryAction.THEORY -> R.id.theory
StepMenuPrimaryAction.COMMENTS -> R.id.comments
StepMenuPrimaryAction.THEORY -> menu.findItem(R.id.theory)
StepMenuPrimaryAction.COMMENTS -> null
}
)
val isVisible = params?.isVisible == true
menuItem?.isVisible = isVisible
if (isVisible) {
Expand All @@ -108,21 +108,32 @@ class StepMenuDelegate(
StepMenuSecondaryAction.REPORT -> R.id.practiceFeedback
StepMenuSecondaryAction.SKIP -> R.id.skip
StepMenuSecondaryAction.OPEN_IN_WEB -> R.id.open_in_web
StepMenuSecondaryAction.COMMENTS -> null
}
menu.findItem(menuItemId)?.isVisible = actions.contains(action)
menuItemId?.let(menu::findItem)?.isVisible = actions.contains(action)
}
}

private fun renderCommentsAction(menu: Menu, state: MenuActionsState) {
val commentsAction = menu.findItem(R.id.comments)
val isPrimary = state.primaryActions[StepMenuPrimaryAction.COMMENTS]?.isVisible == true
commentsAction?.isVisible =
isPrimary || state.secondaryActions.contains(StepMenuSecondaryAction.COMMENTS)
commentsAction?.setShowAsAction(
if (isPrimary) MenuItem.SHOW_AS_ACTION_IF_ROOM else MenuItem.SHOW_AS_ACTION_NEVER
)
}

override fun onMenuItemSelected(menuItem: MenuItem): Boolean =
when (menuItem.itemId) {
R.id.comments -> {
onPrimaryActionClick.invoke(StepMenuPrimaryAction.COMMENTS)
true
}
R.id.theory -> {
onPrimaryActionClick.invoke(StepMenuPrimaryAction.THEORY)
true
}
R.id.comments -> {
onSecondaryActionClick.invoke(StepMenuSecondaryAction.COMMENTS)
true
}
R.id.practiceFeedback -> {
onSecondaryActionClick.invoke(StepMenuSecondaryAction.REPORT)
true
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -136,14 +136,14 @@ class StepWrapperFragment :
initStepContainer(stepState)
parentOfType(StepToolbarHost::class.java)?.apply {
renderTopicProgress(state.stepToolbarViewState)
renderSecondaryMenuActions(state.stepMenuSecondaryActions)
renderPrimaryAction(
StepMenuPrimaryAction.COMMENTS,
StepMenuPrimaryActionParams(
isVisible = state.isCommentsToolbarItemAvailable,
isEnabled = true
)
)
renderSecondaryMenuActions(state.stepMenuSecondaryActions)
}
(childFragmentManager.findFragmentByTag(STEP_CONTENT_TAG) as? StepCompletionView)
?.renderPracticeLoading(stepState.stepCompletionState.isPracticingLoading)
Expand Down Expand Up @@ -224,12 +224,20 @@ class StepWrapperFragment :
?.onTheoryClick()
}
StepMenuPrimaryAction.COMMENTS -> {
stepViewModel.onCommentsClick()
stepViewModel.onActionClick(StepMenuSecondaryAction.COMMENTS)
}
}
}

override fun onSecondaryActionClicked(action: StepMenuSecondaryAction) {
stepViewModel.onActionClick(action)
}

override fun requestShowComments() {
stepViewModel.requestShowComments()
}

override fun requestSkip() {
stepViewModel.requestSkip()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,6 @@ import org.hyperskill.app.step.domain.model.StepMenuSecondaryAction
interface StepToolbarCallback {
fun onPrimaryActionClicked(action: StepMenuPrimaryAction)
fun onSecondaryActionClicked(action: StepMenuSecondaryAction)
fun requestShowComments()
fun requestSkip()
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
package org.hyperskill.app.android.step_practice.model

import android.view.View

interface StepPracticeHost {
fun fullScrollDown()
fun scrollTo(view: View)
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import by.kirich1409.viewbindingdelegate.viewBinding
import dev.chrisbanes.insetter.applyInsetter
import org.hyperskill.app.android.R
import org.hyperskill.app.android.core.extensions.argument
import org.hyperskill.app.android.core.extensions.smoothScrollTo
import org.hyperskill.app.android.core.extensions.smoothScrollToBottom
import org.hyperskill.app.android.core.view.ui.fragment.setChildFragment
import org.hyperskill.app.android.databinding.FragmentStepPracticeBinding
Expand Down Expand Up @@ -90,4 +91,10 @@ class StepPracticeFragment :
.stepPracticeContainer
.smoothScrollToBottom(SMOOTH_SCROLL_DURATION_MILLISECONDS)
}

override fun scrollTo(view: View) {
stepPracticeViewBinding
.stepPracticeContainer
.smoothScrollTo(view, SMOOTH_SCROLL_DURATION_MILLISECONDS)
}
}
Loading

0 comments on commit 4c1e694

Please sign in to comment.