diff --git a/Signal.xcodeproj/project.pbxproj b/Signal.xcodeproj/project.pbxproj
index bc28411d8..89f2f78b4 100644
--- a/Signal.xcodeproj/project.pbxproj
+++ b/Signal.xcodeproj/project.pbxproj
@@ -2493,45 +2493,29 @@
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
- 4503F1BE20470A5B00CEE724 /* classic-quiet.aifc in Resources */,
34CF078A203E6B78005C4D61 /* end_call_tone_cept.caf in Resources */,
- 45B74A8B2044AAB600CD42F8 /* synth.aifc in Resources */,
- 45B74A7D2044AAB600CD42F8 /* popcorn-quiet.aifc in Resources */,
- 45B74A792044AAB600CD42F8 /* input.aifc in Resources */,
AD83FF3F1A73426500B5C81A /* audio_pause_button_blue.png in Resources */,
34330A5A1E7875FB00DF2FB9 /* fontawesome-webfont.ttf in Resources */,
A5509ECA1A69AB8B00ABA4BC /* Main.storyboard in Resources */,
AD83FF421A73426500B5C81A /* audio_play_button.png in Resources */,
- 45B74A762044AAB600CD42F8 /* keys-quiet.aifc in Resources */,
34330A5C1E787A9800DF2FB9 /* dripicons-v2.ttf in Resources */,
B633C5C41A1D190B0059AC12 /* mute_on@2x.png in Resources */,
B633C5CE1A1D190B0059AC12 /* quit@2x.png in Resources */,
- 45B74A7F2044AAB600CD42F8 /* note-quiet.aifc in Resources */,
- 45B74A752044AAB600CD42F8 /* synth-quiet.aifc in Resources */,
AD83FF441A73426500B5C81A /* audio_pause_button.png in Resources */,
B6F509971AA53F760068F56A /* Localizable.strings in Resources */,
B633C59D1A1D190B0059AC12 /* endcall@2x.png in Resources */,
FC5CDF391A3393DD00B47253 /* error_white@2x.png in Resources */,
- 45B74A872044AAB600CD42F8 /* complete-quiet.aifc in Resources */,
B633C5D21A1D190B0059AC12 /* savephoto@2x.png in Resources */,
- 45B74A7E2044AAB600CD42F8 /* complete.aifc in Resources */,
- 45B74A802044AAB600CD42F8 /* pulse-quiet.aifc in Resources */,
B10C9B611A7049EC00ECA2BF /* play_icon.png in Resources */,
AD83FF401A73426500B5C81A /* audio_pause_button_blue@2x.png in Resources */,
- 45B74A882044AAB600CD42F8 /* aurora.aifc in Resources */,
B66DBF4A19D5BBC8006EA940 /* Images.xcassets in Resources */,
34CF0788203E6B78005C4D61 /* ringback_tone_ansi.caf in Resources */,
34C3C78F2040A4F70000134C /* sonarping.mp3 in Resources */,
4517642A1DE939FD00EDB8B9 /* ContactCell.xib in Resources */,
AD83FF431A73426500B5C81A /* audio_play_button@2x.png in Resources */,
- 45B74A7A2044AAB600CD42F8 /* keys.aifc in Resources */,
- 45B74A772044AAB600CD42F8 /* hello.aifc in Resources */,
- 45B74A812044AAB600CD42F8 /* chord-quiet.aifc in Resources */,
45CB2FA81CB7146C00E1B343 /* Launch Screen.storyboard in Resources */,
34B3F8781E8DF1700035BE1A /* ContactsPicker.xib in Resources */,
- 45B74A892044AAB600CD42F8 /* circles-quiet.aifc in Resources */,
B633C5C31A1D190B0059AC12 /* mute_off@2x.png in Resources */,
- 45B74A832044AAB600CD42F8 /* circles.aifc in Resources */,
AD83FF411A73426500B5C81A /* audio_play_button_blue@2x.png in Resources */,
34C3C78D20409F320000134C /* Opening.m4r in Resources */,
FC5CDF3A1A3393DD00B47253 /* warning_white@2x.png in Resources */,
@@ -2539,24 +2523,40 @@
B10C9B621A7049EC00ECA2BF /* play_icon@2x.png in Resources */,
B633C5861A1D190B0059AC12 /* call@2x.png in Resources */,
B67EBF5D19194AC60084CCFD /* Settings.bundle in Resources */,
- 45B74A782044AAB600CD42F8 /* bamboo-quiet.aifc in Resources */,
- 4503F1BF20470A5B00CEE724 /* classic.aifc in Resources */,
- 45B74A852044AAB600CD42F8 /* bamboo.aifc in Resources */,
B10C9B601A7049EC00ECA2BF /* pause_icon@2x.png in Resources */,
FC9120411A39EFB70074545C /* qr@2x.png in Resources */,
- 45B74A842044AAB600CD42F8 /* popcorn.aifc in Resources */,
34CF0787203E6B78005C4D61 /* busy_tone_ansi.caf in Resources */,
B10C9B5F1A7049EC00ECA2BF /* pause_icon.png in Resources */,
- 45B74A742044AAB600CD42F8 /* aurora-quiet.aifc in Resources */,
- 45B74A7B2044AAB600CD42F8 /* chord.aifc in Resources */,
AD83FF471A73428300B5C81A /* audio_play_button_blue.png in Resources */,
- 45B74A862044AAB600CD42F8 /* note.aifc in Resources */,
34330A5E1E787BD800DF2FB9 /* ElegantIcons.ttf in Resources */,
AD83FF451A73426500B5C81A /* audio_pause_button@2x.png in Resources */,
+ 45A2F005204473A3002E978A /* NewMessage.aifc in Resources */,
+ 45B74A882044AAB600CD42F8 /* aurora.aifc in Resources */,
+ 45B74A742044AAB600CD42F8 /* aurora-quiet.aifc in Resources */,
+ 45B74A852044AAB600CD42F8 /* bamboo.aifc in Resources */,
+ 45B74A782044AAB600CD42F8 /* bamboo-quiet.aifc in Resources */,
+ 45B74A7B2044AAB600CD42F8 /* chord.aifc in Resources */,
+ 45B74A812044AAB600CD42F8 /* chord-quiet.aifc in Resources */,
+ 45B74A832044AAB600CD42F8 /* circles.aifc in Resources */,
+ 45B74A892044AAB600CD42F8 /* circles-quiet.aifc in Resources */,
+ 4503F1BF20470A5B00CEE724 /* classic.aifc in Resources */,
+ 4503F1BE20470A5B00CEE724 /* classic-quiet.aifc in Resources */,
+ 45B74A7E2044AAB600CD42F8 /* complete.aifc in Resources */,
+ 45B74A872044AAB600CD42F8 /* complete-quiet.aifc in Resources */,
+ 45B74A772044AAB600CD42F8 /* hello.aifc in Resources */,
45B74A7C2044AAB600CD42F8 /* hello-quiet.aifc in Resources */,
+ 45B74A792044AAB600CD42F8 /* input.aifc in Resources */,
45B74A8C2044AAB600CD42F8 /* input-quiet.aifc in Resources */,
+ 45B74A7A2044AAB600CD42F8 /* keys.aifc in Resources */,
+ 45B74A762044AAB600CD42F8 /* keys-quiet.aifc in Resources */,
+ 45B74A862044AAB600CD42F8 /* note.aifc in Resources */,
+ 45B74A7F2044AAB600CD42F8 /* note-quiet.aifc in Resources */,
+ 45B74A842044AAB600CD42F8 /* popcorn.aifc in Resources */,
+ 45B74A7D2044AAB600CD42F8 /* popcorn-quiet.aifc in Resources */,
45B74A822044AAB600CD42F8 /* pulse.aifc in Resources */,
- 45A2F005204473A3002E978A /* NewMessage.aifc in Resources */,
+ 45B74A802044AAB600CD42F8 /* pulse-quiet.aifc in Resources */,
+ 45B74A8B2044AAB600CD42F8 /* synth.aifc in Resources */,
+ 45B74A752044AAB600CD42F8 /* synth-quiet.aifc in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
diff --git a/Signal/AudioFiles/NewMessage.aifc b/Signal/AudioFiles/NewMessage.aifc
index 694ff1c23..0f8777861 100644
Binary files a/Signal/AudioFiles/NewMessage.aifc and b/Signal/AudioFiles/NewMessage.aifc differ
diff --git a/Signal/Signal-Info.plist b/Signal/Signal-Info.plist
index 8caf76b20..151ecf1bd 100644
--- a/Signal/Signal-Info.plist
+++ b/Signal/Signal-Info.plist
@@ -38,7 +38,7 @@
CFBundleVersion
- 2.21.0.1
+ 2.21.0.4
ITSAppUsesNonExemptEncryption
LOGS_EMAIL
diff --git a/Signal/src/ViewControllers/HomeViewController.m b/Signal/src/ViewControllers/HomeViewController.m
index 0943158d2..fd6148776 100644
--- a/Signal/src/ViewControllers/HomeViewController.m
+++ b/Signal/src/ViewControllers/HomeViewController.m
@@ -47,7 +47,7 @@ typedef NS_ENUM(NSInteger, CellState) { kArchiveState, kInboxState };
@property (nonatomic) UISegmentedControl *segmentedControl;
@property (nonatomic) id previewingContext;
@property (nonatomic) NSSet *blockedPhoneNumberSet;
-@property (nonatomic) BOOL viewHasEverAppeared;
+@property (nonatomic) BOOL hasShownAnyUnseenUpgradeExperiences;
@property (nonatomic) BOOL isViewVisible;
@property (nonatomic) BOOL isAppInBackground;
@@ -510,15 +510,18 @@ typedef NS_ENUM(NSInteger, CellState) { kArchiveState, kInboxState };
});
}];
}
-}
-
-- (void)viewDidAppear:(BOOL)animated
-{
- [super viewDidAppear:animated];
-
- if (!self.viewHasEverAppeared) {
- self.viewHasEverAppeared = YES;
- [self displayAnyUnseenUpgradeExperience];
+
+ // We want to show the user the upgrade experience as soon as the app is visible to them.
+ // It cannot go in viewDidAppear, which is called while the app is in the background if
+ // we were launched from a voip notification.
+ if (!self.hasShownAnyUnseenUpgradeExperiences) {
+ dispatch_async(dispatch_get_main_queue(), ^{
+ if ([[UIApplication sharedApplication] applicationState] != UIApplicationStateActive) {
+ return;
+ }
+ [self displayAnyUnseenUpgradeExperience];
+ self.hasShownAnyUnseenUpgradeExperiences = YES;
+ });
}
}
diff --git a/SignalShareExtension/Info.plist b/SignalShareExtension/Info.plist
index b81d29e0d..58d671728 100644
--- a/SignalShareExtension/Info.plist
+++ b/SignalShareExtension/Info.plist
@@ -19,7 +19,7 @@
CFBundleShortVersionString
2.21.0
CFBundleVersion
- 2.21.0.1
+ 2.21.0.4
ITSAppUsesNonExemptEncryption
NSAppTransportSecurity