Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
24 changes: 14 additions & 10 deletions Stepic.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -1912,7 +1912,6 @@
2C4F3407210A177100E259FE /* NotificationsBadgesManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C4F3406210A177100E259FE /* NotificationsBadgesManager.swift */; };
2C558780217521E8009E1BDE /* LocalNotificationsMigrator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C55877F217521E8009E1BDE /* LocalNotificationsMigrator.swift */; };
2C570A63212FD61B00B56AD9 /* TopologicalSortTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C570A62212FD61B00B56AD9 /* TopologicalSortTests.swift */; };
2C5A791021B19B6400909C04 /* AchievementPopupSplitTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C5A790F21B19B6400909C04 /* AchievementPopupSplitTest.swift */; };
2C5D51592024653B00B9D932 /* BaseCardsStepsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C5D51582024653B00B9D932 /* BaseCardsStepsViewController.swift */; };
2C5D515A202468CE00B9D932 /* AchievementNotificationView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2C3DA0031F3C68B700D74968 /* AchievementNotificationView.xib */; };
2C5D515B202468D100B9D932 /* AchievementNotificationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C2544081F3480BE004DB3D9 /* AchievementNotificationView.swift */; };
Expand Down Expand Up @@ -4013,9 +4012,9 @@
62E9826D2C6AABDF608C2B57 /* ProfileDescriptionPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62E98AFF3B8AC3CB8374445B /* ProfileDescriptionPresenter.swift */; };
62E982769C19C7852BCD59C4 /* TooltipStorageManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62E98117E7E58E81E4BF6E24 /* TooltipStorageManager.swift */; };
62E9829488F863D10CF5544C /* UITableView+TableHeaderLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62E98D9D45E6DA6099AF1C0B /* UITableView+TableHeaderLayout.swift */; };
62E982C316E409B90DC3AA21 /* SubscribeNotificationsOnLaunchSplitTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62E988F198B6ED19738CB0B5 /* SubscribeNotificationsOnLaunchSplitTest.swift */; };
62E982CD54C2C86F14DF84EB /* ProfileHeaderInfoView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 62E98801330B94B34FA0D7B9 /* ProfileHeaderInfoView.xib */; };
62E982F7B4EDC6C94D1283FE /* ProgressesNetworkService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62E982F6B023E2C827407B1B /* ProgressesNetworkService.swift */; };
62E982F9CF826D3E99B7EE08 /* NotificationPermissionStatusSettingsObserver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62E98F44D1201CE83EAE3D49 /* NotificationPermissionStatusSettingsObserver.swift */; };
62E983397736699787D8DD35 /* UIView+fromNib.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62E982BB5246C2BBC5E88D06 /* UIView+fromNib.swift */; };
62E9834EF86EA5676FD4686E /* ProfileInfoPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62E98275C20698D3770CD6D8 /* ProfileInfoPresenter.swift */; };
62E983594B255BB6BE92AD8A /* UniqueIdentifierType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62E98E01E2DDDEEEB0CDFE47 /* UniqueIdentifierType.swift */; };
Expand Down Expand Up @@ -4068,6 +4067,7 @@
62E9868BAC8E63E53A9BD0AE /* PinsMapPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62E98750EE80BFD97E4C7072 /* PinsMapPresenter.swift */; };
62E986991E9352C3266CAE49 /* AchievementProgress.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62E98C688DF80BD29740D967 /* AchievementProgress.swift */; };
62E986B9852E979D92D45A41 /* PinsMapBlockContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62E985F73C3288F8D0045327 /* PinsMapBlockContentView.swift */; };
62E986CCAAEADFC7B783A7DD /* RetentionLocalNotificationsSplitTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62E98460843705C1038203E5 /* RetentionLocalNotificationsSplitTest.swift */; };
62E986E3352543F9ED07093F /* NotificationBannerType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62E98C84F59654D91C200A81 /* NotificationBannerType.swift */; };
62E986FEE32E9FF1028FBC2B /* ExploreBlockContainerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62E9827B52EA42AD5A939265 /* ExploreBlockContainerView.swift */; };
62E9870883D5C6A1DCB15E4B /* TagsOutputProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62E981EDE8C762C38B5DA237 /* TagsOutputProtocol.swift */; };
Expand All @@ -4079,6 +4079,7 @@
62E987459D5C971C022BE7A5 /* StepikURLSessionConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62E98DC7237B8757A9F58935 /* StepikURLSessionConfiguration.swift */; };
62E9874BC64111A2CBDB7DE6 /* UITableViewExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62E98480E472319CCB60BE83 /* UITableViewExtensions.swift */; };
62E9874D1EAE49639F81C916 /* URL+AppendQueryParameters.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62E98F7C1643A576801B8D47 /* URL+AppendQueryParameters.swift */; };
62E987560B7A0EFE8D4753CB /* RetentionLocalNotificationProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62E9863EA3DABDA4ACF78273 /* RetentionLocalNotificationProvider.swift */; };
62E98756CDAA7BEBB48B53EA /* UICollectionViewExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62E981D7FD7BD900738BB677 /* UICollectionViewExtensions.swift */; };
62E98760B61DB08132C71EE9 /* ContentLanguageService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62E98C116ED420A46A8D2642 /* ContentLanguageService.swift */; };
62E987790F995FE9E728A308 /* CourseListOutputProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62E9854FAF9EE4F6763E65F8 /* CourseListOutputProtocol.swift */; };
Expand Down Expand Up @@ -5652,7 +5653,6 @@
2C59F03A20EB8ACA00666EE0 /* ExamEGERussianTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ExamEGERussianTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
2C59F04020EB8ACA00666EE0 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
2C59F06620EBA2EE00666EE0 /* UserRegistrationService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserRegistrationService.swift; sourceTree = "<group>"; };
2C5A790F21B19B6400909C04 /* AchievementPopupSplitTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AchievementPopupSplitTest.swift; sourceTree = "<group>"; };
2C5D51582024653B00B9D932 /* BaseCardsStepsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BaseCardsStepsViewController.swift; sourceTree = "<group>"; };
2C5DF1381FEBDC8C003B1177 /* CardsStepsPresenter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CardsStepsPresenter.swift; sourceTree = "<group>"; };
2C5DF13A1FEC0534003B1177 /* CardsStepsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CardsStepsViewController.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -6007,6 +6007,7 @@
62E983ECB91B2F753DC02E22 /* AchievementsListViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AchievementsListViewController.swift; sourceTree = "<group>"; };
62E9840661E3EE43A4552946 /* StreakNotificationsControlPresenter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StreakNotificationsControlPresenter.swift; sourceTree = "<group>"; };
62E9842C04E29BCAAE9FAB20 /* Reusable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Reusable.swift; sourceTree = "<group>"; };
62E98460843705C1038203E5 /* RetentionLocalNotificationsSplitTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RetentionLocalNotificationsSplitTest.swift; sourceTree = "<group>"; };
62E9846DC5987C75FCD9D69E /* CourseListInteractor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CourseListInteractor.swift; sourceTree = "<group>"; };
62E98480E472319CCB60BE83 /* UITableViewExtensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UITableViewExtensions.swift; sourceTree = "<group>"; };
62E9848BCD3343E626596F54 /* HeaderEmptyAuthView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HeaderEmptyAuthView.swift; sourceTree = "<group>"; };
Expand All @@ -6024,6 +6025,7 @@
62E985F73C3288F8D0045327 /* PinsMapBlockContentView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PinsMapBlockContentView.swift; sourceTree = "<group>"; };
62E98614E194A5CFD78CFF63 /* ExploreSearchBar.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ExploreSearchBar.swift; sourceTree = "<group>"; };
62E9863AAABC06CDEE98110E /* StepWebView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StepWebView.swift; sourceTree = "<group>"; };
62E9863EA3DABDA4ACF78273 /* RetentionLocalNotificationProvider.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RetentionLocalNotificationProvider.swift; sourceTree = "<group>"; };
62E98672561A64F1223F9A03 /* StepsPagerRouterImpl.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StepsPagerRouterImpl.swift; sourceTree = "<group>"; };
62E98696D8F1FF253E8BF1D3 /* ClearNavigationViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ClearNavigationViewController.swift; sourceTree = "<group>"; };
62E986AC9C1AEF85E04C2916 /* CourseListViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CourseListViewController.swift; sourceTree = "<group>"; };
Expand All @@ -6047,7 +6049,6 @@
62E9888C0199CE31C6B4E91D /* ProfileViewController+StreakNotificationsControlView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "ProfileViewController+StreakNotificationsControlView.swift"; sourceTree = "<group>"; };
62E988EACCEC4FB37B0567A7 /* VerticalCourseListFlowLayout.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VerticalCourseListFlowLayout.swift; sourceTree = "<group>"; };
62E988EC03C89C26C42DE55E /* CourseListCollectionViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CourseListCollectionViewCell.swift; sourceTree = "<group>"; };
62E988F198B6ED19738CB0B5 /* SubscribeNotificationsOnLaunchSplitTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SubscribeNotificationsOnLaunchSplitTest.swift; sourceTree = "<group>"; };
62E989338C0834107DD43B60 /* CourseReviewSummariesNetworkService.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CourseReviewSummariesNetworkService.swift; sourceTree = "<group>"; };
62E989579A70D89D559F7520 /* CodeEditorSettingsPresenter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CodeEditorSettingsPresenter.swift; sourceTree = "<group>"; };
62E9897F76726E9D4EF78C1A /* StepsPagerRouter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StepsPagerRouter.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -6104,6 +6105,7 @@
62E98F2E4C0915BDB749A255 /* CourseListsCollectionNetworkService.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CourseListsCollectionNetworkService.swift; sourceTree = "<group>"; };
62E98F30729AE1CF9C9E0109 /* FormatterHelper.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FormatterHelper.swift; sourceTree = "<group>"; };
62E98F34F48CF83CC3A6939B /* CodeEditorSettingsViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CodeEditorSettingsViewController.swift; sourceTree = "<group>"; };
62E98F44D1201CE83EAE3D49 /* NotificationPermissionStatusSettingsObserver.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NotificationPermissionStatusSettingsObserver.swift; sourceTree = "<group>"; };
62E98F54E53E13FA7F6EDB82 /* AchievementsAPI.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AchievementsAPI.swift; sourceTree = "<group>"; };
62E98F62D7F739C8E411BB98 /* AchievementDescription.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AchievementDescription.swift; sourceTree = "<group>"; };
62E98F7C1643A576801B8D47 /* URL+AppendQueryParameters.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "URL+AppendQueryParameters.swift"; sourceTree = "<group>"; };
Expand Down Expand Up @@ -6778,6 +6780,7 @@
08AC214A1CE0DE9B00FBB9CD /* DeviceDefaults.swift */,
0870392F1CD7413D00B6571B /* LegacyNotificationsPresenter.swift */,
2CA3DAA22179C71500F43888 /* NotificationPermissionStatus.swift */,
62E9863EA3DABDA4ACF78273 /* RetentionLocalNotificationProvider.swift */,
);
name = Notifications;
sourceTree = "<group>";
Expand Down Expand Up @@ -9044,8 +9047,7 @@
isa = PBXGroup;
children = (
08421BCA21764FC400E8A81B /* ActiveSplitTestsContainer.swift */,
62E988F198B6ED19738CB0B5 /* SubscribeNotificationsOnLaunchSplitTest.swift */,
2C5A790F21B19B6400909C04 /* AchievementPopupSplitTest.swift */,
62E98460843705C1038203E5 /* RetentionLocalNotificationsSplitTest.swift */,
);
path = ActiveTests;
sourceTree = "<group>";
Expand Down Expand Up @@ -9905,6 +9907,7 @@
2C10AFE8217E04780019966D /* Registration */,
2C89089F216F465200083341 /* NotificationsService.swift */,
2CE02A762176649F009C633C /* UserNotificationsCenterDelegate.swift */,
62E98F44D1201CE83EAE3D49 /* NotificationPermissionStatusSettingsObserver.swift */,
);
path = Notifications;
sourceTree = "<group>";
Expand Down Expand Up @@ -15041,9 +15044,10 @@
62E982769C19C7852BCD59C4 /* TooltipStorageManager.swift in Sources */,
62E985DD90444821A835C02F /* CourseListsCollectionSkeletonView.swift in Sources */,
62E98A53567525055BCCA089 /* AppDelegate.swift in Sources */,
2C5A791021B19B6400909C04 /* AchievementPopupSplitTest.swift in Sources */,
62E982C316E409B90DC3AA21 /* SubscribeNotificationsOnLaunchSplitTest.swift in Sources */,
62E9874D1EAE49639F81C916 /* URL+AppendQueryParameters.swift in Sources */,
62E982F9CF826D3E99B7EE08 /* NotificationPermissionStatusSettingsObserver.swift in Sources */,
62E987560B7A0EFE8D4753CB /* RetentionLocalNotificationProvider.swift in Sources */,
62E986CCAAEADFC7B783A7DD /* RetentionLocalNotificationsSplitTest.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
Expand Down Expand Up @@ -19078,7 +19082,7 @@
CODE_SIGN_IDENTITY = "iPhone Developer";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 114;
CURRENT_PROJECT_VERSION = 116;
DEVELOPMENT_TEAM = "";
ENABLE_BITCODE = YES;
INFOPLIST_FILE = Stepic/Info.plist;
Expand Down Expand Up @@ -19109,7 +19113,7 @@
CODE_SIGN_IDENTITY = "iPhone Developer";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 114;
CURRENT_PROJECT_VERSION = 116;
DEVELOPMENT_TEAM = "";
ENABLE_BITCODE = YES;
INFOPLIST_FILE = Stepic/Info.plist;
Expand Down
37 changes: 15 additions & 22 deletions Stepic/AchievementBadgeView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,10 @@ struct AchievementViewData {

let badge: UIImage

let completedLevel: Int?
let maxLevel: Int?
let score: Int?
let maxScore: Int?
let completedLevel: Int
let maxLevel: Int
let score: Int
let maxScore: Int

var isLocked: Bool {
return completedLevel == 0
Expand Down Expand Up @@ -188,26 +188,19 @@ class AchievementBadgeView: UIView {
}

private func updateProgress() {
guard let data = self.data,
let score = data.score,
let maxScore = data.maxScore,
let completedLevel = data.completedLevel,
let maxLevel = data.maxLevel else {
return
}
if let data = self.data {
if data.isLocked {
self.circleView.alpha = 0.3
self.circleViewGradientLayer?.isHidden = true
} else {
self.circleView.alpha = 1.0
self.circleViewGradientLayer?.isHidden = false
}

if data.isLocked {
circleView.alpha = 0.3
circleViewGradientLayer?.isHidden = true
} else {
circleView.alpha = 1.0
circleViewGradientLayer?.isHidden = false
self.initStageProgress(value: Float(data.score) / Float(data.maxScore))
self.badgeImageView.image = data.badge
self.initLevelProgress(completedLevel: data.completedLevel, maxLevel: data.maxLevel)
}

self.initStageProgress(value: Float(score) / Float(maxScore))
self.badgeImageView.image = data.badge
self.initLevelProgress(completedLevel: completedLevel, maxLevel: maxLevel)

}

override func layoutSubviews() {
Expand Down
15 changes: 7 additions & 8 deletions Stepic/AchievementPopupViewController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -68,20 +68,19 @@ final class AchievementPopupViewController: UIViewController {

if data.completedLevel == data.maxLevel {
self.progressLabel.alpha = 0.0
} else if let maxScore = data.maxScore, let score = data.score {
self.progressLabel.text = String(format: NSLocalizedString("AchievementsNextLevel", comment: ""), "\(maxScore - score)")
} else {
self.progressLabel.text = String(
format: NSLocalizedString("AchievementsNextLevel", comment: ""), "\(data.maxScore - data.score)"
)
}

if data.isLocked {
self.levelLabel.text = NSLocalizedString("AchievementsLevelNotObtained", comment: "")
} else if let completedLevel = data.completedLevel, let maxLevel = data.maxLevel {
self.levelLabel.text = String(format: NSLocalizedString("AchievementsLevel", comment: ""), "\(completedLevel)", "\(maxLevel)")
} else {
self.levelLabel.alpha = 0.0
self.levelLabel.text = String(
format: NSLocalizedString("AchievementsLevel", comment: ""), "\(data.completedLevel)", "\(data.maxLevel)"
)
}

self.separatorView.alpha = self.progressLabel.alpha == 0
&& self.levelLabel.alpha == 0 ? 0 : 1
}

enum Source: String {
Expand Down
4 changes: 2 additions & 2 deletions Stepic/AchievementsListPresenter.swift
Original file line number Diff line number Diff line change
Expand Up @@ -57,8 +57,8 @@ class AchievementsListPresenter {
}

self?.view?.set(achievements: viewData.sorted(by: { a, b in
let aScore = !a.isLocked ? 1 : (a.score ?? 0 > 0 ? 2 : 3)
let bScore = !b.isLocked ? 1 : (b.score ?? 0 > 0 ? 2 : 3)
let aScore = !a.isLocked ? 1 : (a.score > 0 ? 2 : 3)
let bScore = !b.isLocked ? 1 : (b.score > 0 ? 2 : 3)
return aScore < bScore
}))
}.catch { [weak self] error in
Expand Down
Loading