Fixes capitalized I's when emojiis are present after the text being edited. (#21951)
Summary: Fixes #21243. Fixes #20908. Credit goes to superandrew213 who provided the patch based on 0.56; this commit merges and resolved the conflict introduced in 0.57. Pull Request resolved: https://github.com/facebook/react-native/pull/21951 Differential Revision: D13980799 Pulled By: cpojer fbshipit-source-id: 6b9f1a1ae54ad9dba043005d683d6a221472c729
This commit is contained in:
parent
9842e39019
commit
f307ac7c5e
|
@ -105,12 +105,22 @@ RCT_NOT_IMPLEMENTED(- (instancetype)initWithFrame:(CGRect)frame)
|
|||
// Similarly, when the user is in the middle of inputting some text in Japanese/Chinese, there will be styling on the
|
||||
// text that we should disregard. See https://developer.apple.com/documentation/uikit/uitextinput/1614489-markedtextrange?language=objc
|
||||
// for more info.
|
||||
// If the user added an emoji, the sytem adds a font attribute for the emoji and stores the original font in NSOriginalFont.
|
||||
// Lastly, when entering a password, etc., there will be additional styling on the field as the native text view
|
||||
// handles showing the last character for a split second.
|
||||
__block BOOL fontHasBeenUpdatedBySystem = false;
|
||||
[oldText enumerateAttribute:@"NSOriginalFont" inRange:NSMakeRange(0, oldText.length) options:0 usingBlock:^(id value, NSRange range, BOOL *stop) {
|
||||
if (value){
|
||||
fontHasBeenUpdatedBySystem = true;
|
||||
}
|
||||
}];
|
||||
|
||||
BOOL shouldFallbackToBareTextComparison =
|
||||
[self.backedTextInputView.textInputMode.primaryLanguage isEqualToString:@"dictation"] ||
|
||||
self.backedTextInputView.markedTextRange ||
|
||||
self.backedTextInputView.isSecureTextEntry;
|
||||
self.backedTextInputView.isSecureTextEntry ||
|
||||
fontHasBeenUpdatedBySystem;
|
||||
|
||||
if (shouldFallbackToBareTextComparison) {
|
||||
return ([newText.string isEqualToString:oldText.string]);
|
||||
} else {
|
||||
|
|
Loading…
Reference in New Issue