diff --git a/ci/licenses_golden/licenses_flutter b/ci/licenses_golden/licenses_flutter index 341dd7cce3f33b681326bd693ee6af003ff56f74..7b6cc4c07c701a794790211a834fc4db0b2833c4 100644 --- a/ci/licenses_golden/licenses_flutter +++ b/ci/licenses_golden/licenses_flutter @@ -424,6 +424,7 @@ FILE: ../../../flutter/shell/platform/android/io/flutter/plugin/common/ActivityL FILE: ../../../flutter/shell/platform/android/io/flutter/plugin/common/BasicMessageChannel.java FILE: ../../../flutter/shell/platform/android/io/flutter/plugin/common/BinaryCodec.java FILE: ../../../flutter/shell/platform/android/io/flutter/plugin/common/BinaryMessenger.java +FILE: ../../../flutter/shell/platform/android/io/flutter/plugin/common/ErrorLogResult.java FILE: ../../../flutter/shell/platform/android/io/flutter/plugin/common/EventChannel.java FILE: ../../../flutter/shell/platform/android/io/flutter/plugin/common/FlutterException.java FILE: ../../../flutter/shell/platform/android/io/flutter/plugin/common/JSONMessageCodec.java diff --git a/shell/platform/android/BUILD.gn b/shell/platform/android/BUILD.gn index 714aae7e96f9a2bee2ece7f7b291bb56ca59ecae..542c90312a0ca356e5a31477e7ef53484e1e3207 100644 --- a/shell/platform/android/BUILD.gn +++ b/shell/platform/android/BUILD.gn @@ -111,6 +111,7 @@ java_library("flutter_shell_java") { "io/flutter/plugin/common/BasicMessageChannel.java", "io/flutter/plugin/common/BinaryCodec.java", "io/flutter/plugin/common/BinaryMessenger.java", + "io/flutter/plugin/common/ErrorLogResult.java", "io/flutter/plugin/common/EventChannel.java", "io/flutter/plugin/common/FlutterException.java", "io/flutter/plugin/common/JSONMessageCodec.java", diff --git a/shell/platform/android/io/flutter/plugin/common/ErrorLogResult.java b/shell/platform/android/io/flutter/plugin/common/ErrorLogResult.java new file mode 100644 index 0000000000000000000000000000000000000000..bfa8c2fd0d45840bf3b3dffea762685c2682be21 --- /dev/null +++ b/shell/platform/android/io/flutter/plugin/common/ErrorLogResult.java @@ -0,0 +1,40 @@ +// Copyright 2013 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package io.flutter.plugin.common; + +import android.support.annotation.Nullable; +import android.util.Log; + +/** + * An implementation of {@link MethodChannel.Result} that writes error results + * to the Android log. + */ +public class ErrorLogResult implements MethodChannel.Result { + private String tag; + private int level; + + public ErrorLogResult(String tag) { + this(tag, Log.WARN); + } + + public ErrorLogResult(String tag, int level) { + this.tag = tag; + this.level = level; + } + + @Override + public void success(@Nullable Object result) {} + + @Override + public void error(String errorCode, @Nullable String errorMessage, @Nullable Object errorDetails) { + String details = (errorDetails != null) ? " details: " + errorDetails : ""; + Log.println(level, tag, errorMessage + details); + } + + @Override + public void notImplemented() { + Log.println(level, tag, "method not implemented"); + } +} diff --git a/shell/platform/android/io/flutter/plugin/editing/InputConnectionAdaptor.java b/shell/platform/android/io/flutter/plugin/editing/InputConnectionAdaptor.java index 5b2a95d2327ff884cc6a22689f401c05e246be71..df907be0b70a1eaf9cff981ce46944563accaaf8 100644 --- a/shell/platform/android/io/flutter/plugin/editing/InputConnectionAdaptor.java +++ b/shell/platform/android/io/flutter/plugin/editing/InputConnectionAdaptor.java @@ -11,6 +11,7 @@ import android.view.KeyEvent; import android.view.inputmethod.BaseInputConnection; import android.view.inputmethod.EditorInfo; import android.view.inputmethod.InputMethodManager; +import io.flutter.plugin.common.ErrorLogResult; import io.flutter.plugin.common.MethodChannel; import io.flutter.view.FlutterView; @@ -25,6 +26,9 @@ class InputConnectionAdaptor extends BaseInputConnection { private int mBatchCount; private InputMethodManager mImm; + private static final MethodChannel.Result logger = + new ErrorLogResult("FlutterTextInput"); + public InputConnectionAdaptor(FlutterView view, int client, MethodChannel flutterChannel, Editable editable) { super(view, true); @@ -58,7 +62,7 @@ class InputConnectionAdaptor extends BaseInputConnection { state.put("composingBase", composingStart); state.put("composingExtent", composingEnd); mFlutterChannel.invokeMethod("TextInputClient.updateEditingState", - Arrays.asList(mClient, state)); + Arrays.asList(mClient, state), logger); } @Override @@ -177,36 +181,36 @@ class InputConnectionAdaptor extends BaseInputConnection { // TODO(mattcarroll): is newline an appropriate action for "none"? case EditorInfo.IME_ACTION_NONE: mFlutterChannel.invokeMethod("TextInputClient.performAction", - Arrays.asList(mClient, "TextInputAction.newline")); + Arrays.asList(mClient, "TextInputAction.newline"), logger); break; case EditorInfo.IME_ACTION_UNSPECIFIED: mFlutterChannel.invokeMethod("TextInputClient.performAction", - Arrays.asList(mClient, "TextInputAction.unspecified")); + Arrays.asList(mClient, "TextInputAction.unspecified"), logger); break; case EditorInfo.IME_ACTION_GO: mFlutterChannel.invokeMethod("TextInputClient.performAction", - Arrays.asList(mClient, "TextInputAction.go")); + Arrays.asList(mClient, "TextInputAction.go"), logger); break; case EditorInfo.IME_ACTION_SEARCH: mFlutterChannel.invokeMethod("TextInputClient.performAction", - Arrays.asList(mClient, "TextInputAction.search")); + Arrays.asList(mClient, "TextInputAction.search"), logger); break; case EditorInfo.IME_ACTION_SEND: mFlutterChannel.invokeMethod("TextInputClient.performAction", - Arrays.asList(mClient, "TextInputAction.send")); + Arrays.asList(mClient, "TextInputAction.send"), logger); break; case EditorInfo.IME_ACTION_NEXT: mFlutterChannel.invokeMethod("TextInputClient.performAction", - Arrays.asList(mClient, "TextInputAction.next")); + Arrays.asList(mClient, "TextInputAction.next"), logger); break; case EditorInfo.IME_ACTION_PREVIOUS: mFlutterChannel.invokeMethod("TextInputClient.performAction", - Arrays.asList(mClient, "TextInputAction.previous")); + Arrays.asList(mClient, "TextInputAction.previous"), logger); break; default: case EditorInfo.IME_ACTION_DONE: mFlutterChannel.invokeMethod("TextInputClient.performAction", - Arrays.asList(mClient, "TextInputAction.done")); + Arrays.asList(mClient, "TextInputAction.done"), logger); break; } return true;