mirror of
https://github.com/oxen-io/session-ios.git
synced 2023-12-13 21:30:14 +01:00
Merge branch 'mkirk/callscreen-uses-profile-name' into hotfix/2.16.1
This commit is contained in:
commit
07c579c349
7 changed files with 1914 additions and 7 deletions
|
@ -219,6 +219,7 @@
|
|||
45DF5DF21DDB843F00C936C7 /* CompareSafetyNumbersActivity.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45DF5DF11DDB843F00C936C7 /* CompareSafetyNumbersActivity.swift */; };
|
||||
45DF5DF31DDB843F00C936C7 /* CompareSafetyNumbersActivity.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45DF5DF11DDB843F00C936C7 /* CompareSafetyNumbersActivity.swift */; };
|
||||
45E2E9201E153B3D00457AA0 /* Strings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45E2E91F1E153B3D00457AA0 /* Strings.swift */; };
|
||||
45E5A6991F61E6DE001E4A8A /* MarqueeLabel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45E5A6981F61E6DD001E4A8A /* MarqueeLabel.swift */; };
|
||||
45E615161E8C590B0018AD52 /* DisplayableTextFilter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45E615151E8C590B0018AD52 /* DisplayableTextFilter.swift */; };
|
||||
45E615171E8C59100018AD52 /* DisplayableTextFilter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45E615151E8C590B0018AD52 /* DisplayableTextFilter.swift */; };
|
||||
45E7A6A81E71CA7E00D44FB5 /* DisplayableTextFilterTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45E7A6A61E71CA7E00D44FB5 /* DisplayableTextFilterTest.swift */; };
|
||||
|
@ -685,6 +686,7 @@
|
|||
45E282DF1D08E6CC00ADD4C8 /* id */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = id; path = translations/id.lproj/Localizable.strings; sourceTree = "<group>"; };
|
||||
45E2E91E1E13EE3500457AA0 /* OWSCallNotificationsAdaptee.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; name = OWSCallNotificationsAdaptee.h; path = UserInterface/OWSCallNotificationsAdaptee.h; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; };
|
||||
45E2E91F1E153B3D00457AA0 /* Strings.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; name = Strings.swift; path = UserInterface/Strings.swift; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };
|
||||
45E5A6981F61E6DD001E4A8A /* MarqueeLabel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MarqueeLabel.swift; sourceTree = "<group>"; };
|
||||
45E615151E8C590B0018AD52 /* DisplayableTextFilter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DisplayableTextFilter.swift; sourceTree = "<group>"; };
|
||||
45E7A6A61E71CA7E00D44FB5 /* DisplayableTextFilterTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DisplayableTextFilterTest.swift; sourceTree = "<group>"; };
|
||||
45F170AB1E2F0351003FC1F2 /* CallAudioSession.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CallAudioSession.swift; sourceTree = "<group>"; };
|
||||
|
@ -1478,6 +1480,7 @@
|
|||
76EB052B18170B33006006FC /* Views */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
45E5A6981F61E6DD001E4A8A /* MarqueeLabel.swift */,
|
||||
452EA09D1EA7ABE00078744B /* AttachmentPointerView.swift */,
|
||||
34E3E5671EC4B19400495BAC /* AudioProgressView.swift */,
|
||||
45F3AEB51DFDE7900080CE33 /* AvatarImageView.swift */,
|
||||
|
@ -2396,6 +2399,7 @@
|
|||
346B66311F4E29B200E5122F /* CropScaleImageViewController.swift in Sources */,
|
||||
76EB058818170B33006006FC /* PropertyListPreferences.m in Sources */,
|
||||
34330A611E788EA900DF2FB9 /* AttachmentUploadView.m in Sources */,
|
||||
45E5A6991F61E6DE001E4A8A /* MarqueeLabel.swift in Sources */,
|
||||
34B3F87D1E8DF1700035BE1A /* FullImageViewController.m in Sources */,
|
||||
45666F7B1D9C0533008FE134 /* OWSDatabaseMigration.m in Sources */,
|
||||
B90418E6183E9DD40038554A /* DateUtil.m in Sources */,
|
||||
|
|
|
@ -31,7 +31,7 @@ class CallViewController: OWSViewController, CallObserver, CallServiceObserver,
|
|||
|
||||
// MARK: Contact Views
|
||||
|
||||
var contactNameLabel: UILabel!
|
||||
var contactNameLabel: MarqueeLabel!
|
||||
var contactAvatarView: AvatarImageView!
|
||||
var callStatusLabel: UILabel!
|
||||
var callDurationTimer: Timer?
|
||||
|
@ -188,7 +188,7 @@ class CallViewController: OWSViewController, CallObserver, CallServiceObserver,
|
|||
override func viewDidLoad() {
|
||||
super.viewDidLoad()
|
||||
|
||||
contactNameLabel.text = contactsManager.displayName(forPhoneIdentifier: thread.contactIdentifier())
|
||||
contactNameLabel.text = contactsManager.stringForConversationTitle(withPhoneIdentifier: thread.contactIdentifier())
|
||||
updateAvatarImage()
|
||||
NotificationCenter.default.addObserver(forName: .OWSContactsManagerSignalAccountsDidChange, object: nil, queue: nil) { [weak self] _ in
|
||||
guard let strongSelf = self else { return }
|
||||
|
@ -243,12 +243,25 @@ class CallViewController: OWSViewController, CallObserver, CallServiceObserver,
|
|||
}
|
||||
|
||||
func createContactViews() {
|
||||
contactNameLabel = UILabel()
|
||||
contactNameLabel = MarqueeLabel()
|
||||
|
||||
// marquee config
|
||||
contactNameLabel.type = .continuous
|
||||
// This feels pretty slow when you're initially waiting for it, but when you're overlaying video calls, anything faster is distracting.
|
||||
contactNameLabel.speed = .duration(30.0)
|
||||
contactNameLabel.animationCurve = .linear
|
||||
contactNameLabel.fadeLength = 10.0
|
||||
contactNameLabel.animationDelay = 5
|
||||
// Add trailing space after the name scrolls before it wraps around and scrolls back in.
|
||||
contactNameLabel.trailingBuffer = ScaleFromIPhone5(80.0)
|
||||
|
||||
// label config
|
||||
contactNameLabel.font = UIFont.ows_lightFont(withSize:ScaleFromIPhone5To7Plus(32, 40))
|
||||
contactNameLabel.textColor = UIColor.white
|
||||
contactNameLabel.layer.shadowOffset = CGSize.zero
|
||||
contactNameLabel.layer.shadowOpacity = 0.35
|
||||
contactNameLabel.layer.shadowRadius = 4
|
||||
|
||||
self.view.addSubview(contactNameLabel)
|
||||
|
||||
callStatusLabel = UILabel()
|
||||
|
@ -729,6 +742,9 @@ class CallViewController: OWSViewController, CallObserver, CallServiceObserver,
|
|||
return
|
||||
}
|
||||
|
||||
// Marquee scrolling is distractingn during a video call, disable it.
|
||||
contactNameLabel.labelize = call.hasLocalVideo
|
||||
|
||||
audioModeMuteButton.isSelected = call.isMuted
|
||||
videoModeMuteButton.isSelected = call.isMuted
|
||||
audioModeVideoButton.isSelected = call.hasLocalVideo
|
||||
|
|
|
@ -21,6 +21,7 @@ final class CallKitCallUIAdaptee: NSObject, CallUIAdaptee, CXProviderDelegate {
|
|||
private let callManager: CallKitCallManager
|
||||
internal let callService: CallService
|
||||
internal let notificationsAdapter: CallNotificationsAdapter
|
||||
internal let contactsManager: OWSContactsManager
|
||||
private let provider: CXProvider
|
||||
|
||||
// CallKit handles incoming ringer stop/start for us. Yay!
|
||||
|
@ -48,13 +49,14 @@ final class CallKitCallUIAdaptee: NSObject, CallUIAdaptee, CXProviderDelegate {
|
|||
return providerConfiguration
|
||||
}
|
||||
|
||||
init(callService: CallService, notificationsAdapter: CallNotificationsAdapter) {
|
||||
init(callService: CallService, contactsManager: OWSContactsManager, notificationsAdapter: CallNotificationsAdapter) {
|
||||
AssertIsOnMainThread()
|
||||
|
||||
Logger.debug("\(self.TAG) \(#function)")
|
||||
|
||||
self.callManager = CallKitCallManager()
|
||||
self.callService = callService
|
||||
self.contactsManager = contactsManager
|
||||
self.notificationsAdapter = notificationsAdapter
|
||||
self.provider = CXProvider(configuration: type(of: self).providerConfiguration)
|
||||
|
||||
|
@ -104,13 +106,14 @@ final class CallKitCallUIAdaptee: NSObject, CallUIAdaptee, CXProviderDelegate {
|
|||
let callKitId = CallKitCallManager.kAnonymousCallHandlePrefix + call.localId.uuidString
|
||||
update.remoteHandle = CXHandle(type: .generic, value: callKitId)
|
||||
TSStorageManager.shared().setPhoneNumber(call.remotePhoneNumber, forCallKitId:callKitId)
|
||||
update.localizedCallerName = NSLocalizedString("CALLKIT_ANONYMOUS_CONTACT_NAME", comment: "The generic name used for calls if CallKit privacy is enabled")
|
||||
} else {
|
||||
update.localizedCallerName = self.contactsManager.stringForConversationTitle(withPhoneIdentifier: call.remotePhoneNumber)
|
||||
update.remoteHandle = CXHandle(type: .phoneNumber, value: call.remotePhoneNumber)
|
||||
}
|
||||
|
||||
update.hasVideo = call.hasLocalVideo
|
||||
// Update the name used in the CallKit UI for incoming calls.
|
||||
update.localizedCallerName = NSLocalizedString("CALLKIT_ANONYMOUS_CONTACT_NAME", comment: "The generic name used for calls if CallKit privacy is enabled")
|
||||
|
||||
disableUnsupportedFeatures(callUpdate: update)
|
||||
|
||||
// Report the incoming call to the system
|
||||
|
|
|
@ -91,7 +91,7 @@ extension CallUIAdaptee {
|
|||
adaptee = NonCallKitCallUIAdaptee(callService: callService, notificationsAdapter: notificationsAdapter)
|
||||
} else if #available(iOS 10.0, *), Environment.getCurrent().preferences.isCallKitEnabled() {
|
||||
Logger.info("\(TAG) choosing callkit adaptee for iOS10+")
|
||||
adaptee = CallKitCallUIAdaptee(callService: callService, notificationsAdapter: notificationsAdapter)
|
||||
adaptee = CallKitCallUIAdaptee(callService: callService, contactsManager: contactsManager, notificationsAdapter: notificationsAdapter)
|
||||
} else {
|
||||
Logger.info("\(TAG) choosing non-callkit adaptee")
|
||||
adaptee = NonCallKitCallUIAdaptee(callService: callService, notificationsAdapter: notificationsAdapter)
|
||||
|
|
|
@ -68,6 +68,7 @@ extern NSString *const OWSContactsManagerSignalAccountsDidChangeNotification;
|
|||
- (nullable NSString *)formattedProfileNameForRecipientId:(NSString *)recipientId;
|
||||
- (nullable NSString *)profileNameForRecipientId:(NSString *)recipientId;
|
||||
- (nullable NSString *)nameFromSystemContactsForRecipientId:(NSString *)recipientId;
|
||||
- (NSString *)stringForConversationTitleWithPhoneIdentifier:(NSString *)recipientId;
|
||||
|
||||
- (nullable UIImage *)imageForPhoneIdentifier:(nullable NSString *)identifier;
|
||||
- (NSAttributedString *)formattedDisplayNameForSignalAccount:(SignalAccount *)signalAccount font:(UIFont *_Nonnull)font;
|
||||
|
|
|
@ -610,6 +610,34 @@ NSString *const kTSStorageManager_AccountLastNames = @"kTSStorageManager_Account
|
|||
return [[NSAttributedString alloc] initWithString:recipientId];
|
||||
}
|
||||
|
||||
// TODO refactor attributed counterparts to use this as a helper method?
|
||||
- (NSString *)stringForConversationTitleWithPhoneIdentifier:(NSString *)recipientId
|
||||
{
|
||||
// Prefer a saved name from system contacts, if available
|
||||
NSString *_Nullable savedContactName = [self cachedDisplayNameForRecipientId:recipientId];
|
||||
if (savedContactName.length > 0) {
|
||||
return savedContactName;
|
||||
}
|
||||
|
||||
NSString *formattedPhoneNumber =
|
||||
[PhoneNumber bestEffortFormatPartialUserSpecifiedTextToLookLikeAPhoneNumber:recipientId];
|
||||
NSString *_Nullable profileName = [self.profileManager profileNameForRecipientId:recipientId];
|
||||
if (profileName.length > 0) {
|
||||
NSString *numberAndProfileNameFormat = NSLocalizedString(@"PROFILE_NAME_AND_PHONE_NUMBER_LABEL_FORMAT",
|
||||
@"Label text combining the phone number and profile name separated by a simple demarcation character. "
|
||||
@"Phone number should be most prominent. '%1$@' is replaced with {{phone number}} and '%2$@' is replaced "
|
||||
@"with {{profile name}}");
|
||||
|
||||
NSString *numberAndProfileName =
|
||||
[NSString stringWithFormat:numberAndProfileNameFormat, formattedPhoneNumber, profileName];
|
||||
|
||||
return numberAndProfileName;
|
||||
}
|
||||
|
||||
// else fall back phone number
|
||||
return formattedPhoneNumber;
|
||||
}
|
||||
|
||||
- (nullable SignalAccount *)signalAccountForRecipientId:(NSString *)recipientId
|
||||
{
|
||||
OWSAssert(recipientId.length > 0);
|
||||
|
|
1855
Signal/src/views/MarqueeLabel.swift
Normal file
1855
Signal/src/views/MarqueeLabel.swift
Normal file
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue