Skip to content

Commit

Permalink
Add support for sending generated character with key events.
Browse files Browse the repository at this point in the history
  • Loading branch information
gspencergoog committed Feb 8, 2019
1 parent 6fd04aa commit 4ec8646
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import java.util.HashMap;
import java.util.Map;

import android.view.KeyCharacterMap;
import io.flutter.embedding.engine.dart.DartExecutor;
import io.flutter.plugin.common.BasicMessageChannel;
import io.flutter.plugin.common.JSONMessageCodec;
Expand All @@ -22,6 +23,8 @@ public class KeyEventChannel {
@NonNull
public final BasicMessageChannel<Object> channel;

private int mCombiningCharacter;

public KeyEventChannel(@NonNull DartExecutor dartExecutor) {
this.channel = new BasicMessageChannel<>(dartExecutor, "flutter/keyevent", JSONMessageCodec.INSTANCE);
}
Expand All @@ -46,9 +49,32 @@ public void keyDown(@NonNull KeyEvent keyEvent) {

private void encodeKeyEvent(@NonNull KeyEvent event, @NonNull Map<String, Object> message) {
message.put("flags", event.getFlags());
message.put("codePoint", event.getUnicodeChar());
int codePoint = event.getUnicodeChar();
message.put("plainCodePoint", event.getUnicodeChar(0x0));
message.put("codePoint", codePoint);
message.put("keyCode", event.getKeyCode());
message.put("scanCode", event.getScanCode());
message.put("metaState", event.getMetaState());
if (codePoint == 0) {
return;
}
if ((codePoint & KeyCharacterMap.COMBINING_ACCENT) != 0) {
// If a combining character was entered before, combine this one with that one.
int plainCodePoint = codePoint & KeyCharacterMap.COMBINING_ACCENT_MASK;
if (mCombiningCharacter != 0) {
mCombiningCharacter = KeyCharacterMap.getDeadChar(mCombiningCharacter, plainCodePoint);
} else {
mCombiningCharacter = plainCodePoint;
}
} else {
if (mCombiningCharacter != 0) {
int combinedChar = KeyCharacterMap.getDeadChar(mCombiningCharacter, codePoint);
if (combinedChar > 0) {
codePoint = combinedChar;
}
mCombiningCharacter = 0;
}
message.put("character", Character.toString((char) codePoint));
}
}
}
1 change: 1 addition & 0 deletions shell/platform/android/io/flutter/view/FlutterView.java
Original file line number Diff line number Diff line change
Expand Up @@ -173,6 +173,7 @@ public void surfaceDestroyed(SurfaceHolder holder) {
mImm = (InputMethodManager) getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
mTextInputPlugin = new TextInputPlugin(this);


setLocales(getResources().getConfiguration());
sendUserPlatformSettingsToDart();
}
Expand Down

0 comments on commit 4ec8646

Please sign in to comment.