Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Release 1.42 #745

Merged
merged 35 commits into from
Nov 21, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
9050c51
Merge remote-tracking branch 'origin/main' into develop
invalid-email-address Nov 7, 2023
9766e74
Shared share streak (#737)
ivan-magda Nov 9, 2023
a668890
iOS share streak (#739)
ivan-magda Nov 9, 2023
9f10b23
iOS: Fix content mode for images in modals
ivan-magda Nov 10, 2023
b7ef768
iOS: LatexView improvements (#741)
ivan-magda Nov 12, 2023
29afffc
ALTAPPS-1027: Remove corner radius from shareable images
ivan-magda Nov 13, 2023
6dc3972
Android fill in the blanks with select (#743)
XanderZhu Nov 13, 2023
5741925
Merge remote-tracking branch 'origin/main' into develop
invalid-email-address Nov 14, 2023
39c8977
Set version number to 1.42
ivan-magda Nov 14, 2023
ece6e9e
Bump build number
ivan-magda Nov 14, 2023
0102ea1
[Shared, iOS] Fill blanks problem onboarding modal (#740)
ivan-magda Nov 14, 2023
7fe2fc7
Merge remote-tracking branch 'origin/develop' into release/1.42
ivan-magda Nov 14, 2023
88c471d
Bump build number
ivan-magda Nov 14, 2023
1e96025
Update ios_unit_testing.yml
ivan-magda Nov 14, 2023
eb45649
ALTAPPS-1031: Android FillBlanks onboarding animation (#746)
XanderZhu Nov 15, 2023
fe46417
Merge remote-tracking branch 'origin/develop' into release/1.42
XanderZhu Nov 15, 2023
54b8d36
Android: Bump build number
XanderZhu Nov 15, 2023
990a6eb
ALTAPPS-1028: Android share streak (#747)
XanderZhu Nov 17, 2023
4ba44e1
Merge branch 'develop' into release/1.42
XanderZhu Nov 17, 2023
5676eb3
Android: Bump build number
XanderZhu Nov 17, 2023
b576c8f
Bundler: Bump fastlane from 2.216.0 to 2.217.0 in /iosHyperskillApp (…
dependabot[bot] Nov 17, 2023
683d959
Bundler: Bump fastlane from 2.216.0 to 2.217.0 in /androidHyperskillA…
dependabot[bot] Nov 17, 2023
8cdeea1
Shared challenges (#742)
ivan-magda Nov 20, 2023
7a56dde
iOS fix stage implement step error placeholder (#751)
ivan-magda Nov 20, 2023
5c9575a
Merge remote-tracking branch 'origin/develop' into release/1.42
ivan-magda Nov 20, 2023
fbc4955
Bump build number
ivan-magda Nov 20, 2023
2b28dd0
iOS challenges (#750)
ivan-magda Nov 20, 2023
977bcbb
Merge remote-tracking branch 'origin/develop' into release/1.42
ivan-magda Nov 20, 2023
7599944
iOS: Bump build number
ivan-magda Nov 20, 2023
2964d3f
ALTAPPS-1035: iOS remove content transition for GamificationToolbar
ivan-magda Nov 20, 2023
7655d04
Merge remote-tracking branch 'origin/develop' into release/1.42
ivan-magda Nov 20, 2023
3b2ec65
iOS: LinkedList fix generic parameter 'T' shadows generic parameter
ivan-magda Nov 20, 2023
b3776b3
GitHub Actions: Automerge fix get current version number (#752)
ivan-magda Nov 21, 2023
bc92548
Merge remote-tracking branch 'origin/develop' into release/1.42
invalid-email-address Nov 21, 2023
963a815
Bump build number
invalid-email-address Nov 21, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/automerge_into_release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ jobs:
set -e

echo "Getting latest tag without v* prefix..."
current_version_number=$(git describe --tags --abbrev=0 | cut -c 2-)
current_version_number=$(git tag --sort=committerdate | tail -1 | cut -c 2-)
echo "Current version number is $current_version_number"

next_version_number=$(echo $current_version_number | awk -F. -v OFS=. '{$NF++;print}')
Expand Down
1 change: 1 addition & 0 deletions .github/workflows/ios_unit_testing.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ defaults:

jobs:
test:
if: ${{ vars.IS_IOS_UNIT_TESTING_ENABLED == 'true' }}
name: Run iOS unit tests
runs-on: macos-13
timeout-minutes: 60
Expand Down
2 changes: 1 addition & 1 deletion androidHyperskillApp/Gemfile
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
source "https://rubygems.org"
ruby "3.1.0"

gem "fastlane", "2.216.0"
gem "fastlane", "2.217.0"

eval_gemfile("fastlane/Pluginfile")
46 changes: 21 additions & 25 deletions androidHyperskillApp/Gemfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -8,20 +8,20 @@ GEM
artifactory (3.0.15)
atomos (0.1.3)
aws-eventstream (1.2.0)
aws-partitions (1.826.0)
aws-sdk-core (3.183.0)
aws-partitions (1.853.0)
aws-sdk-core (3.187.0)
aws-eventstream (~> 1, >= 1.0.2)
aws-partitions (~> 1, >= 1.651.0)
aws-sigv4 (~> 1.5)
jmespath (~> 1, >= 1.6.1)
aws-sdk-kms (1.71.0)
aws-sdk-core (~> 3, >= 3.177.0)
aws-sdk-kms (1.72.0)
aws-sdk-core (~> 3, >= 3.184.0)
aws-sigv4 (~> 1.1)
aws-sdk-s3 (1.135.0)
aws-sdk-s3 (1.137.0)
aws-sdk-core (~> 3, >= 3.181.0)
aws-sdk-kms (~> 1)
aws-sigv4 (~> 1.6)
aws-sigv4 (1.6.0)
aws-sigv4 (1.6.1)
aws-eventstream (~> 1, >= 1.0.2)
babosa (1.0.4)
claide (1.1.0)
Expand All @@ -32,11 +32,10 @@ GEM
declarative (0.0.20)
digest-crc (0.6.5)
rake (>= 12.0.0, < 14.0.0)
domain_name (0.5.20190701)
unf (>= 0.0.5, < 1.0.0)
domain_name (0.6.20231109)
dotenv (2.8.1)
emoji_regex (3.2.3)
excon (0.103.0)
excon (0.104.0)
faraday (1.10.3)
faraday-em_http (~> 1.0)
faraday-em_synchrony (~> 1.0)
Expand Down Expand Up @@ -66,7 +65,7 @@ GEM
faraday_middleware (1.2.0)
faraday (~> 1.0)
fastimage (2.2.7)
fastlane (2.216.0)
fastlane (2.217.0)
CFPropertyList (>= 2.3, < 4.0.0)
addressable (>= 2.8, < 3.0.0)
artifactory (~> 3.0)
Expand Down Expand Up @@ -106,12 +105,12 @@ GEM
xcodeproj (>= 1.13.0, < 2.0.0)
xcpretty (~> 0.3.0)
xcpretty-travis-formatter (>= 0.0.3)
fastlane-plugin-firebase_app_distribution (0.7.3)
fastlane-plugin-firebase_app_distribution (0.7.4)
google-apis-firebaseappdistribution_v1 (~> 0.3.0)
gh_inspector (1.1.3)
google-apis-androidpublisher_v3 (0.49.0)
google-apis-androidpublisher_v3 (0.52.0)
google-apis-core (>= 0.11.0, < 2.a)
google-apis-core (0.11.1)
google-apis-core (0.11.2)
addressable (~> 2.5, >= 2.5.1)
googleauth (>= 0.16.2, < 2.a)
httpclient (>= 2.8.1, < 3.a)
Expand All @@ -126,19 +125,19 @@ GEM
google-apis-core (>= 0.11.0, < 2.a)
google-apis-playcustomapp_v1 (0.13.0)
google-apis-core (>= 0.11.0, < 2.a)
google-apis-storage_v1 (0.19.0)
google-apis-core (>= 0.9.0, < 2.a)
google-apis-storage_v1 (0.29.0)
google-apis-core (>= 0.11.0, < 2.a)
google-cloud-core (1.6.0)
google-cloud-env (~> 1.0)
google-cloud-errors (~> 1.0)
google-cloud-env (1.6.0)
faraday (>= 0.17.3, < 3.0)
google-cloud-errors (1.3.1)
google-cloud-storage (1.44.0)
google-cloud-storage (1.45.0)
addressable (~> 2.8)
digest-crc (~> 0.4)
google-apis-iamcredentials_v1 (~> 0.1)
google-apis-storage_v1 (~> 0.19.0)
google-apis-storage_v1 (~> 0.29.0)
google-cloud-core (~> 1.6)
googleauth (>= 0.16.2, < 2.a)
mini_mime (~> 1.0)
Expand All @@ -164,8 +163,8 @@ GEM
optparse (0.1.1)
os (1.1.4)
plist (3.7.0)
public_suffix (5.0.3)
rake (13.0.6)
public_suffix (5.0.4)
rake (13.1.0)
representable (3.2.0)
declarative (< 0.1.0)
trailblazer-option (>= 0.1.1, < 0.2.0)
Expand Down Expand Up @@ -193,13 +192,10 @@ GEM
tty-spinner (0.9.3)
tty-cursor (~> 0.7)
uber (0.1.0)
unf (0.1.4)
unf_ext
unf_ext (0.0.8.2)
unicode-display_width (2.4.2)
unicode-display_width (2.5.0)
webrick (1.8.1)
word_wrap (1.0.0)
xcodeproj (1.22.0)
xcodeproj (1.23.0)
CFPropertyList (>= 2.3.3, < 4.0)
atomos (~> 0.1.3)
claide (>= 1.0.2, < 2.0)
Expand All @@ -217,7 +213,7 @@ PLATFORMS
x86_64-linux

DEPENDENCIES
fastlane (= 2.216.0)
fastlane (= 2.217.0)
fastlane-plugin-firebase_app_distribution

RUBY VERSION
Expand Down
10 changes: 10 additions & 0 deletions androidHyperskillApp/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -64,5 +64,15 @@
android:name="firebase_analytics_collection_enabled"
android:value="false" />

<provider
android:name="androidx.core.content.FileProvider"
android:authorities="${applicationId}.provider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/provider_paths"/>
</provider>

</application>
</manifest>
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
package org.hyperskill.app.android.core.extensions

import android.content.ClipData
import android.content.Context
import android.content.Intent
import android.graphics.Bitmap
import android.graphics.BitmapFactory
import android.net.Uri
import androidx.annotation.DrawableRes
import androidx.core.content.FileProvider
import java.io.File
import java.io.FileOutputStream
import org.hyperskill.app.android.BuildConfig
import org.hyperskill.app.android.HyperskillApp

object ShareUtils {
fun getShareDrawableIntent(
context: Context,
@DrawableRes drawableRes: Int,
text: String,
title: String
): Intent {
val shareIntent = Intent().apply {
val bitmap = BitmapFactory.decodeResource(context.resources, drawableRes)

val originImageUri = getUriForBitmap(context, bitmap, "$drawableRes.png")

action = Intent.ACTION_SEND
putExtra(Intent.EXTRA_STREAM, originImageUri)
addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
putExtra(Intent.EXTRA_TEXT, text)
clipData = ClipData.newRawUri(null, originImageUri)
type = "image/*"
}
return Intent.createChooser(
shareIntent,
title
)
}

private fun getUriForBitmap(
context: Context,
bitmap: Bitmap,
name: String
): Uri {
val file = File(context.cacheDir, name).apply {
createNewFile()
}
FileOutputStream(file).use { stream ->
bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream)
}
return FileProvider.getUriForFile(
HyperskillApp.getAppContext(),
"${BuildConfig.APPLICATION_ID}.provider",
file
)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ import org.hyperskill.app.android.problem_of_day.view.delegate.ProblemOfDayCardF
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.core.view.mapper.date.SharedDateFormatter
import org.hyperskill.app.home.presentation.HomeFeature
import org.hyperskill.app.home.presentation.HomeViewModel
import org.hyperskill.app.step.domain.model.StepRoute
Expand All @@ -30,7 +30,7 @@ import ru.nobird.app.presentation.redux.container.ReduxView

class HomeFragment :
Fragment(R.layout.fragment_home),
ReduxView<HomeFeature.State, HomeFeature.Action.ViewAction> {
ReduxView<HomeFeature.ViewState, HomeFeature.Action.ViewAction> {
companion object {
fun newInstance(): Fragment =
HomeFragment()
Expand Down Expand Up @@ -166,10 +166,13 @@ class HomeFragment :
StepScreen(action.stepRoute)
)
}
is HomeFeature.Action.ViewAction.ChallengeWidgetViewAction -> {
// TODO: ALTAPPS-1036 handle challenge widget view actions
}
}
}

override fun render(state: HomeFeature.State) {
override fun render(state: HomeFeature.ViewState) {
homeViewStateDelegate.switchState(state.homeState)

renderSwipeRefresh(state)
Expand All @@ -183,7 +186,7 @@ class HomeFragment :
gamificationToolbarDelegate?.render(state.toolbarState)
}

private fun renderSwipeRefresh(state: HomeFeature.State) {
private fun renderSwipeRefresh(state: HomeFeature.ViewState) {
with(viewBinding.homeScreenSwipeRefreshLayout) {
isEnabled = state.homeState is HomeFeature.HomeState.Content
updateIsRefreshing(state.isRefreshing)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import android.view.View
import androidx.core.view.isVisible
import org.hyperskill.app.android.R
import org.hyperskill.app.android.databinding.LayoutProblemOfTheDayCardBinding
import org.hyperskill.app.core.view.mapper.SharedDateFormatter
import org.hyperskill.app.core.view.mapper.date.SharedDateFormatter
import org.hyperskill.app.home.presentation.HomeFeature

class ProblemOfDayCardFormDelegate(
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
package org.hyperskill.app.android.share_streak.fragment

import android.app.Dialog
import android.content.DialogInterface
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.annotation.DrawableRes
import by.kirich1409.viewbindingdelegate.viewBinding
import coil.load
import coil.transform.RoundedCornersTransformation
import com.google.android.material.bottomsheet.BottomSheetBehavior
import com.google.android.material.bottomsheet.BottomSheetDialog
import com.google.android.material.bottomsheet.BottomSheetDialogFragment
import org.hyperskill.app.android.R
import org.hyperskill.app.android.databinding.FragmentShareStreakBinding
import org.hyperskill.app.android.view.base.ui.extension.wrapWithTheme
import ru.nobird.android.view.base.ui.extension.argument

class ShareStreakDialogFragment : BottomSheetDialogFragment() {

companion object {
const val TAG = "ShareStreakBottomSheetTag"

fun newInstance(
streak: Int,
@DrawableRes imageRes: Int
): ShareStreakDialogFragment =
ShareStreakDialogFragment().apply {
this.streak = streak
this.imageRes = imageRes
}
}

private var streak: Int by argument()
@get:DrawableRes
private var imageRes: Int by argument()

private val binding: FragmentShareStreakBinding by viewBinding(FragmentShareStreakBinding::bind)

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setStyle(STYLE_NORMAL, R.style.TopCornersRoundedBottomSheetDialog)
}

override fun onCreateDialog(savedInstanceState: Bundle?): Dialog =
BottomSheetDialog(requireContext(), theme).also { dialog ->
dialog.setOnShowListener {
dialog.behavior.state = BottomSheetBehavior.STATE_EXPANDED
if (savedInstanceState == null) {
(parentFragment as? Callback)?.onShareStreakBottomSheetShown(streak)
}
}
}

override fun onDismiss(dialog: DialogInterface) {
(parentFragment as? Callback)?.onShareStreakBottomSheetDismissed(streak)
}

override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? =
inflater.wrapWithTheme(requireActivity())
.inflate(R.layout.fragment_share_streak, container, false)

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
with(binding) {
shareStreakImage.load(imageRes) {
transformations(
RoundedCornersTransformation(
requireContext().resources.getDimension(R.dimen.corner_radius)
)
)
}
shareStreakShareButton.setOnClickListener {
(parentFragment as? Callback)?.onShareClick(streak)
}
shareStreakRefuseButton.setOnClickListener {
(parentFragment as? Callback)?.onRefuseStreakSharingClick(streak)
}
}
}

interface Callback {
fun onShareStreakBottomSheetShown(streak: Int)

fun onShareStreakBottomSheetDismissed(streak: Int)

fun onShareClick(streak: Int)

fun onRefuseStreakSharingClick(streak: Int)
}
}
Loading