Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
a8b266b
Fixed a number of bugs
mpretty-cyro Dec 12, 2025
33d9f91
Tweak to debug info
mpretty-cyro Dec 14, 2025
062b6a4
Attempts to fix background Core Animation crash
mpretty-cyro Dec 14, 2025
796907a
Merge remote-tracking branch 'upstream/dev' into fix/general-bugs
mpretty-cyro Dec 14, 2025
b8e9eb7
Tweaked some ProfilePicture/image loading logic to prevent file i/o o…
mpretty-cyro Dec 15, 2025
c7cfc38
Fixed an issue where placeholder community icons didn't render proper…
mpretty-cyro Dec 15, 2025
99ca81a
Another tweak for background UI layout crash
mpretty-cyro Dec 15, 2025
71bdaa7
Fixed a few TSan warnings
mpretty-cyro Dec 15, 2025
e64b024
Resolved a number of "main actor" warnings
mpretty-cyro Dec 15, 2025
5d7ca9a
Updated some dependencies
mpretty-cyro Dec 15, 2025
a013fe4
A couple more threading tweaks
mpretty-cyro Dec 15, 2025
367bb35
A couple more minor threading tweaks
mpretty-cyro Dec 15, 2025
a548be7
Fixed an issue where the user may not be able to enable call permissi…
mpretty-cyro Dec 15, 2025
ea86fdc
Merge remote-tracking branch 'upstream/dev' into fix/general-bugs
mpretty-cyro Dec 15, 2025
6aeff73
Updated review prompt modal
mpretty-cyro Dec 15, 2025
4ae2fb4
Removed a few more `UIScreen.main.scale` uses
mpretty-cyro Dec 15, 2025
e0c7de6
Fixed an issue where the QueryRunner would never go out of scope
mpretty-cyro Dec 15, 2025
b882ec4
Fixed a crash which could occur on launch after getting a missed call
mpretty-cyro Dec 15, 2025
563c6fa
Fixed an issue where the calls permissions may not be correct after r…
mpretty-cyro Dec 16, 2025
d5cfe79
Fixed a case where the calls permissions might not correctly trigger …
mpretty-cyro Dec 16, 2025
1172a44
Bumped build number
mpretty-cyro Dec 16, 2025
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
Prev Previous commit
Next Next commit
Updated review prompt modal
  • Loading branch information
mpretty-cyro committed Dec 15, 2025
commit 6aeff73b9c236972ee9e950ed7bb175995bd7c82
28 changes: 18 additions & 10 deletions Session/Home/App Review/AppReviewPromptModel.swift
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,11 @@ struct AppReviewPromptModel {
let message: String

var primaryButtonTitle: String?
var primaryButtonColor: ThemeValue?
var primaryButtonAccessibilityIdentifier: String?

var secondaryButtonTitle: String?
var secondaryButtonColor: ThemeValue?
var secondaryButtonAccessibilityIdentifier: String?
}

Expand Down Expand Up @@ -87,14 +89,16 @@ enum AppReviewPromptState {
message: "enjoyingSessionDescription"
.put(key: "app_name", value: Constants.app_name)
.localized(),
primaryButtonTitle: "enjoyingSessionButtonPositive"
.put(key: "emoji", value: "❤️")
.localized(),
primaryButtonAccessibilityIdentifier: "enjoy-session-positive-button",
secondaryButtonTitle: "enjoyingSessionButtonNegative"
primaryButtonTitle: "enjoyingSessionButtonNegative"
.put(key: "emoji", value: "😕")
.localized(),
secondaryButtonAccessibilityIdentifier: "enjoy-session-negative-button"
primaryButtonColor: .textPrimary,
primaryButtonAccessibilityIdentifier: "enjoy-session-negative-button",
secondaryButtonTitle: "enjoyingSessionButtonPositive"
.put(key: "emoji", value: "❤️")
.localized(),
secondaryButtonColor: .sessionButton_text,
secondaryButtonAccessibilityIdentifier: "enjoy-session-positive-button"
)

case .rateSession:
Expand All @@ -107,14 +111,16 @@ enum AppReviewPromptState {
title: "rateSession"
.put(key: "app_name", value: Constants.app_name)
.localized(),
message: "rateSessionModalDescription"
message: "rateSessionModalDescriptionUpdated"
.put(key: "app_name", value: Constants.app_name)
.put(key: "storevariant", value: storeVaraint)
.localized(),
primaryButtonTitle: "rateSessionApp".localized(),
primaryButtonTitle: "rateUs".localized(),
primaryButtonColor: .sessionButton_text,
primaryButtonAccessibilityIdentifier: "rate-app-button",
secondaryButtonTitle: "notNow".localized(),
secondaryButtonAccessibilityIdentifier: "not-now-button"
secondaryButtonTitle: nil,
secondaryButtonColor: nil,
secondaryButtonAccessibilityIdentifier: nil
)

case .feedback:
Expand All @@ -124,8 +130,10 @@ enum AppReviewPromptState {
.put(key: "app_name", value: Constants.app_name)
.localized(),
primaryButtonTitle: "openSurvey".localized(),
primaryButtonColor: .sessionButton_text,
primaryButtonAccessibilityIdentifier: "open-survey-button",
secondaryButtonTitle: "notNow".localized(),
secondaryButtonColor: .textPrimary,
secondaryButtonAccessibilityIdentifier: "not-now-button"
)

Expand Down
14 changes: 12 additions & 2 deletions Session/Home/App Review/View/AppReviewPromptDialog.swift
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ class AppReviewPromptDialog: UIView {
private lazy var primaryButton: UIButton = {
let result = UIButton(type: .custom)
result.setThemeTitleColor(.sessionButton_text, for: .normal)
result.setThemeTitleColor(.sessionButton_highlight, for: .highlighted)
result.setThemeTitleColor(.highlighted(.sessionButton_text, alwaysDarken: false), for: .highlighted)
result.titleLabel?.font = .boldSystemFont(ofSize: Values.mediumFontSize)
result.titleLabel?.numberOfLines = 0
result.titleLabel?.textAlignment = .center
Expand All @@ -66,7 +66,7 @@ class AppReviewPromptDialog: UIView {
private lazy var secondaryButton: UIButton = {
let result = UIButton(type: .custom)
result.setThemeTitleColor(.textPrimary, for: .normal)
result.setThemeTitleColor(.textSecondary, for: .highlighted)
result.setThemeTitleColor(.highlighted(.textPrimary, alwaysDarken: false), for: .highlighted)
result.titleLabel?.font = .boldSystemFont(ofSize: Values.mediumFontSize)
result.titleLabel?.numberOfLines = 0
result.titleLabel?.textAlignment = .center
Expand Down Expand Up @@ -138,10 +138,20 @@ class AppReviewPromptDialog: UIView {

primaryButton.isHidden = prompt?.promptContent.primaryButtonTitle == nil
primaryButton.setTitle(prompt?.promptContent.primaryButtonTitle, for: .normal)
primaryButton.setThemeTitleColor(prompt?.promptContent.primaryButtonColor, for: .normal)
primaryButton.setThemeTitleColor(
(prompt?.promptContent.primaryButtonColor).map { .highlighted($0, alwaysDarken: false) },
for: .highlighted
)
primaryButton.accessibilityIdentifier = prompt?.promptContent.primaryButtonAccessibilityIdentifier

secondaryButton.isHidden = prompt?.promptContent.secondaryButtonTitle == nil
secondaryButton.setTitle(prompt?.promptContent.secondaryButtonTitle, for: .normal)
secondaryButton.setThemeTitleColor(prompt?.promptContent.secondaryButtonColor, for: .normal)
secondaryButton.setThemeTitleColor(
(prompt?.promptContent.secondaryButtonColor).map { .highlighted($0, alwaysDarken: false) },
for: .highlighted
)
secondaryButton.accessibilityIdentifier = prompt?.promptContent.secondaryButtonAccessibilityIdentifier

let isButtonsHidden = primaryButton.isHidden && secondaryButton.isHidden
Expand Down
17 changes: 8 additions & 9 deletions Session/Home/HomeViewModel.swift
Original file line number Diff line number Diff line change
Expand Up @@ -802,16 +802,11 @@ public class HomeViewModel: NavigatableStateHolder {
self.transitionToScreen(modal, transitionType: .present)
}

@MainActor
func handlePrimaryTappedForState(_ state: AppReviewPromptState) {
@MainActor func handlePrimaryTappedForState(_ state: AppReviewPromptState) {
dependencies[defaults: .standard, key: .didActionAppReviewPrompt] = true

switch state {
case .enjoyingSession:
handlePromptChangeState(.rateSession)
scheduleAppReviewRetry()
dependencies[singleton: .donationsManager].positiveReviewChosen()

case .enjoyingSession: handlePromptChangeState(.feedback)
case .feedback:
// Close prompt before showing survery
handlePromptChangeState(nil)
Expand All @@ -824,12 +819,16 @@ public class HomeViewModel: NavigatableStateHolder {
}
}

func handleSecondayTappedForState(_ state: AppReviewPromptState) {
@MainActor func handleSecondayTappedForState(_ state: AppReviewPromptState) {
dependencies[defaults: .standard, key: .didActionAppReviewPrompt] = true

switch state {
case .feedback, .rateSession: handlePromptChangeState(nil)
case .enjoyingSession: handlePromptChangeState(.feedback)
case .enjoyingSession:
handlePromptChangeState(.rateSession)
scheduleAppReviewRetry()
dependencies[singleton: .donationsManager].positiveReviewChosen()

default: break
}
}
Expand Down
30 changes: 30 additions & 0 deletions Session/Meta/Translations/InfoPlist.xcstrings
Original file line number Diff line number Diff line change
Expand Up @@ -1504,6 +1504,12 @@
"NSLocalNetworkUsageDescription" : {
"extractionState" : "manual",
"localizations" : {
"ar" : {
"stringUnit" : {
"state" : "translated",
"value" : "يتطلب Session الوصول إلى الشبكة المحلية لإجراء المكالمات الصوتية ومكالمات الفيديو."
}
},
"az" : {
"stringUnit" : {
"state" : "translated",
Expand Down Expand Up @@ -1600,18 +1606,42 @@
"value" : "Session이 음성 및 영상 통화를 하기 위해 로컬 네트워크에 접근해야 합니다."
}
},
"nb" : {
"stringUnit" : {
"state" : "translated",
"value" : "Session må ha tilgang til det lokale nettverket for å kunne foreta tale- og videosamtaler."
}
},
"nb-NO" : {
"stringUnit" : {
"state" : "translated",
"value" : "Session må ha tilgang til det lokale nettverket for å kunne foreta tale- og videosamtaler."
}
},
"nl" : {
"stringUnit" : {
"state" : "translated",
"value" : "Session heeft toegang nodig tot het lokale netwerk om spraak- en videogesprekken uit te voeren."
}
},
"nn-NO" : {
"stringUnit" : {
"state" : "translated",
"value" : "Session må ha tilgang til det lokale nettverket for å kunne foreta tale- og videosamtaler."
}
},
"pl" : {
"stringUnit" : {
"state" : "translated",
"value" : "Session potrzebuje dostępu do sieci lokalnej, aby wykonywać połączenia głosowe i wideo."
}
},
"pt-BR" : {
"stringUnit" : {
"state" : "translated",
"value" : "Session precisa de acesso à rede local para realizar chamadas de voz e vídeo."
}
},
"pt-PT" : {
"stringUnit" : {
"state" : "translated",
Expand Down