Increase font-size for pure emoji-messages with max. 3 emojis

Signed-off-by: Marcel Müller <marcel-mueller@gmx.de>
This commit is contained in:
Marcel Müller 2020-11-28 01:54:26 +01:00 коммит произвёл Marcel Müller
Родитель e6d67e3b71
Коммит 012018af5c
4 изменённых файлов: 135 добавлений и 4 удалений

Просмотреть файл

@ -10,6 +10,9 @@
1F3D3B22255F109E00230DAE /* BarButtonItemWithActivity.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F3D3B20255F109E00230DAE /* BarButtonItemWithActivity.m */; };
1F3D3B23255F109E00230DAE /* BarButtonItemWithActivity.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F3D3B20255F109E00230DAE /* BarButtonItemWithActivity.m */; };
1F3D3B24255F109E00230DAE /* BarButtonItemWithActivity.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F3D3B20255F109E00230DAE /* BarButtonItemWithActivity.m */; };
1F4DD3EB2571C688007DC98E /* EmojiUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F4DD3EA2571C688007DC98E /* EmojiUtils.swift */; };
1F4DD3EC2571C688007DC98E /* EmojiUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F4DD3EA2571C688007DC98E /* EmojiUtils.swift */; };
1F4DD3ED2571C688007DC98E /* EmojiUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F4DD3EA2571C688007DC98E /* EmojiUtils.swift */; };
2C0574821EDD9E8E00D9E7F2 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C0574811EDD9E8E00D9E7F2 /* main.m */; };
2C0574851EDD9E8E00D9E7F2 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C0574841EDD9E8E00D9E7F2 /* AppDelegate.m */; };
2C05748E1EDD9E8E00D9E7F2 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2C05748C1EDD9E8E00D9E7F2 /* Main.storyboard */; };
@ -449,6 +452,7 @@
/* Begin PBXFileReference section */
1F3D3B20255F109E00230DAE /* BarButtonItemWithActivity.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BarButtonItemWithActivity.m; sourceTree = "<group>"; };
1F3D3B21255F109E00230DAE /* BarButtonItemWithActivity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BarButtonItemWithActivity.h; sourceTree = "<group>"; };
1F4DD3EA2571C688007DC98E /* EmojiUtils.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmojiUtils.swift; sourceTree = "<group>"; };
2C05747D1EDD9E8E00D9E7F2 /* NextcloudTalk.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = NextcloudTalk.app; sourceTree = BUILT_PRODUCTS_DIR; };
2C0574811EDD9E8E00D9E7F2 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
2C0574831EDD9E8E00D9E7F2 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = "<group>"; };
@ -1177,6 +1181,7 @@
2C6DEAB2243CCC7F00AE8437 /* Chat cells */ = {
isa = PBXGroup;
children = (
1F4DD3EA2571C688007DC98E /* EmojiUtils.swift */,
2CC7159220C54D080045C789 /* ChatTableViewCell.h */,
2CC7159320C54D080045C789 /* ChatTableViewCell.m */,
2CA15546208EA1EA00CE8EF0 /* ChatMessageTableViewCell.h */,
@ -1612,7 +1617,8 @@
TargetAttributes = {
2C05747C1EDD9E8E00D9E7F2 = {
CreatedOnToolsVersion = 8.3.2;
DevelopmentTeam = NKUJUXUJ3B;
DevelopmentTeam = NKUJUXUJ3B;
LastSwiftMigration = 1220;
ProvisioningStyle = Automatic;
SystemCapabilities = {
com.apple.ApplicationGroups.iOS = {
@ -1631,12 +1637,14 @@
};
2C62AFA224C08845007E460A = {
CreatedOnToolsVersion = 11.5;
DevelopmentTeam = NKUJUXUJ3B;
DevelopmentTeam = NKUJUXUJ3B;
LastSwiftMigration = 1220;
ProvisioningStyle = Automatic;
};
2CC0014E24A1F0E900A20167 = {
CreatedOnToolsVersion = 11.5;
DevelopmentTeam = NKUJUXUJ3B;
DevelopmentTeam = NKUJUXUJ3B;
LastSwiftMigration = 1220;
ProvisioningStyle = Automatic;
};
};
@ -1916,6 +1924,7 @@
2C961E1B2216BF4B00F5C23F /* OCWebDAVClient.m in Sources */,
2C961E162216BF4B00F5C23F /* OCShareUser.m in Sources */,
2C5E957D227097E0009CA9BE /* NCUtils.m in Sources */,
1F4DD3EB2571C688007DC98E /* EmojiUtils.swift in Sources */,
2C4D7D731F309DA500FF4A0D /* RTCSessionDescription+JSON.m in Sources */,
2CB3041C2264775E0053078A /* SLKTextView+SLKAdditions.m in Sources */,
2C961E102216BF4B00F5C23F /* OCExternalSites.m in Sources */,
@ -2015,6 +2024,7 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
1F4DD3ED2571C688007DC98E /* EmojiUtils.swift in Sources */,
2C62AFF824C1BDA5007E460A /* QuotedMessageView.m in Sources */,
2C62B02424C1BDCF007E460A /* NCAppBranding.m in Sources */,
2C62AFD024C1BD78007E460A /* OCSharedDto.m in Sources */,
@ -2225,6 +2235,7 @@
2CC001B524A37A9500A20167 /* NCChatViewController.m in Sources */,
2CC0017E24A37A5000A20167 /* SLKTextViewController.m in Sources */,
2CC0019724A37A7400A20167 /* NSString+Encode.m in Sources */,
1F4DD3EC2571C688007DC98E /* EmojiUtils.swift in Sources */,
2CC001E224A37AD400A20167 /* VideoSettingsViewController.m in Sources */,
2CC001AA24A37A8F00A20167 /* ChatMessageTableViewCell.m in Sources */,
2C78E9E42512136000E3D4CA /* NCUserStatus.m in Sources */,
@ -2417,6 +2428,7 @@
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = NextcloudTalk/NextcloudTalk.entitlements;
CODE_SIGN_IDENTITY = "iPhone Developer";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
@ -2454,6 +2466,10 @@
PRODUCT_BUNDLE_IDENTIFIER = com.nextcloud.Talk;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
SWIFT_OBJC_BRIDGING_HEADER = "";
SWIFT_OBJC_INTERFACE_HEADER_NAME = "NextcloudTalk-Swift.h";
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0;
};
name = Debug;
};
@ -2463,6 +2479,7 @@
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = NextcloudTalk/NextcloudTalk.entitlements;
CODE_SIGN_IDENTITY = "iPhone Distribution: Nextcloud GmbH (NKUJUXUJ3B)";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
@ -2500,6 +2517,9 @@
PRODUCT_BUNDLE_IDENTIFIER = com.nextcloud.Talk;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
SWIFT_OBJC_BRIDGING_HEADER = "";
SWIFT_OBJC_INTERFACE_HEADER_NAME = "NextcloudTalk-Swift.h";
SWIFT_VERSION = 5.0;
};
name = Release;
};
@ -2509,6 +2529,7 @@
buildSettings = {
APPLICATION_EXTENSION_API_ONLY = NO;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_COMMA = YES;
@ -2585,6 +2606,11 @@
PRODUCT_BUNDLE_IDENTIFIER = com.nextcloud.Talk.ShareExtension;
PRODUCT_NAME = ShareExtension;
SKIP_INSTALL = YES;
SWIFT_INSTALL_OBJC_HEADER = YES;
SWIFT_OBJC_BRIDGING_HEADER = "";
SWIFT_OBJC_INTERFACE_HEADER_NAME = "NextcloudTalk-Swift.h";
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = Debug;
@ -2595,6 +2621,7 @@
buildSettings = {
APPLICATION_EXTENSION_API_ONLY = NO;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_COMMA = YES;
@ -2670,6 +2697,10 @@
PRODUCT_BUNDLE_IDENTIFIER = com.nextcloud.Talk.ShareExtension;
PRODUCT_NAME = ShareExtension;
SKIP_INSTALL = YES;
SWIFT_INSTALL_OBJC_HEADER = YES;
SWIFT_OBJC_BRIDGING_HEADER = "";
SWIFT_OBJC_INTERFACE_HEADER_NAME = "NextcloudTalk-Swift.h";
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = Release;
@ -2680,6 +2711,7 @@
buildSettings = {
APPLICATION_EXTENSION_API_ONLY = NO;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_COMMA = YES;
@ -2739,6 +2771,10 @@
PRODUCT_BUNDLE_IDENTIFIER = com.nextcloud.Talk.NotificationServiceExtension;
PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES;
SWIFT_OBJC_BRIDGING_HEADER = "";
SWIFT_OBJC_INTERFACE_HEADER_NAME = "NextcloudTalk-Swift.h";
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = Debug;
@ -2749,6 +2785,7 @@
buildSettings = {
APPLICATION_EXTENSION_API_ONLY = NO;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_COMMA = YES;
@ -2807,6 +2844,9 @@
PRODUCT_BUNDLE_IDENTIFIER = com.nextcloud.Talk.NotificationServiceExtension;
PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES;
SWIFT_OBJC_BRIDGING_HEADER = "";
SWIFT_OBJC_INTERFACE_HEADER_NAME = "NextcloudTalk-Swift.h";
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = Release;

Просмотреть файл

@ -0,0 +1,75 @@
/**
* @copyright Copyright (c) 2020 Marcel Müller <marcel-mueller@gmx.de>
*
* @author Marcel Müller <marcel-mueller@gmx.de>
*
* @license GNU GPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
import Foundation
// based on https://stackoverflow.com/a/39425959/2512312
@available(iOS 10.2, *)
extension Character {
/// A simple emoji is one scalar and presented to the user as an Emoji
var isSimpleEmoji: Bool {
guard let firstScalar = unicodeScalars.first else { return false }
return firstScalar.properties.isEmoji && firstScalar.value > 0x238C
}
/// Checks if the scalars will be merged into an emoji
var isCombinedIntoEmoji: Bool { unicodeScalars.count > 1 && unicodeScalars.first?.properties.isEmoji ?? false }
var isEmoji: Bool { isSimpleEmoji || isCombinedIntoEmoji }
}
@available(iOS 10.2, *)
extension String {
var isSingleEmoji: Bool { count == 1 && containsEmoji }
var containsEmoji: Bool { contains { $0.isEmoji } }
var containsOnlyEmoji: Bool { !isEmpty && !contains { !$0.isEmoji } }
var emojiString: String { emojis.map { String($0) }.reduce("", +) }
var emojis: [Character] { filter { $0.isEmoji } }
var emojiScalars: [UnicodeScalar] { filter { $0.isEmoji }.flatMap { $0.unicodeScalars } }
}
@objc extension NSString {
public var containsOnlyEmoji : Bool {
if #available(iOS 10.2, *) {
let str = self as String
return str.containsOnlyEmoji
}
return false
}
public var emojiCount: Int {
if #available(iOS 10.2, *) {
let str = self as String
return str.emojis.count
}
return 0
}
}

Просмотреть файл

@ -52,6 +52,7 @@ extern NSInteger const kChatMessageGroupTimeDifference;
+ (void)updateChatMessage:(NCChatMessage *)managedChatMessage withChatMessage:(NCChatMessage *)chatMessage;
- (BOOL)isSystemMessage;
- (BOOL)isEmojiMessage;
- (NCMessageParameter *)file;
- (NSDictionary *)messageParameters;
- (NSMutableAttributedString *)parsedMessage;

Просмотреть файл

@ -24,6 +24,7 @@
#import "NCAppBranding.h"
#import "NCSettingsController.h"
#import "NextcloudTalk-Swift.h"
NSInteger const kChatMessageGroupTimeDifference = 30;
@ -112,6 +113,15 @@ NSInteger const kChatMessageGroupTimeDifference = 30;
return NO;
}
- (BOOL)isEmojiMessage
{
if (self.message && self.message.containsOnlyEmoji && self.message.emojiCount <= 3) {
return YES;
}
return NO;
}
- (NCMessageParameter *)file;
{
NCMessageParameter *fileParam = nil;
@ -192,9 +202,14 @@ NSInteger const kChatMessageGroupTimeDifference = 30;
}
NSMutableAttributedString *attributedMessage = [[NSMutableAttributedString alloc] initWithString:parsedMessage];
[attributedMessage addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:16.0f] range:NSMakeRange(0,parsedMessage.length)];
[attributedMessage addAttribute:NSForegroundColorAttributeName value:[UIColor darkGrayColor] range:NSMakeRange(0,parsedMessage.length)];
if (self.isEmojiMessage) {
[attributedMessage addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:36.0f] range:NSMakeRange(0,parsedMessage.length)];
} else {
[attributedMessage addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:16.0f] range:NSMakeRange(0,parsedMessage.length)];
}
for (NCMessageParameter *param in parameters) {
//Set color for mentions
if ([param.type isEqualToString:@"user"] || [param.type isEqualToString:@"guest"] || [param.type isEqualToString:@"call"]) {