diff options
| author | 2020-06-18 11:03:17 +0000 | |
|---|---|---|
| committer | 2020-06-18 11:03:17 +0000 | |
| commit | cf5f65cbe3ed774417fdeee140679ffc4243cfdf (patch) | |
| tree | 5f269c14d37a8dd913e872ca8d1ddf91368ce267 | |
| parent | 0f1076a4dc61f232ef62405e6a12be7cff3596a9 (diff) | |
| parent | ffd9affb749443c22c70f40a69d47648a4037c13 (diff) | |
Merge "Callback the surface package after the views are drawn locally" into rvc-dev
| -rw-r--r-- | core/java/android/service/autofill/InlineSuggestionRenderService.java | 31 |
1 files changed, 19 insertions, 12 deletions
diff --git a/core/java/android/service/autofill/InlineSuggestionRenderService.java b/core/java/android/service/autofill/InlineSuggestionRenderService.java index 3ea443bab3f8..8790fb2299f5 100644 --- a/core/java/android/service/autofill/InlineSuggestionRenderService.java +++ b/core/java/android/service/autofill/InlineSuggestionRenderService.java @@ -64,7 +64,7 @@ public abstract class InlineSuggestionRenderService extends Service { public static final String SERVICE_INTERFACE = "android.service.autofill.InlineSuggestionRenderService"; - private final Handler mHandler = new Handler(Looper.getMainLooper(), null, true); + private final Handler mMainHandler = new Handler(Looper.getMainLooper(), null, true); private IInlineSuggestionUiCallback mCallback; @@ -192,15 +192,22 @@ public abstract class InlineSuggestionRenderService extends Service { } return true; }); - - try { - InlineSuggestionUiImpl uiImpl = new InlineSuggestionUiImpl(host, mHandler); - mActiveInlineSuggestions.put(uiImpl, true); - callback.onContent(new InlineSuggestionUiWrapper(uiImpl), host.getSurfacePackage(), - measuredSize.getWidth(), measuredSize.getHeight()); - } catch (RemoteException e) { - Log.w(TAG, "RemoteException calling onContent()"); - } + final InlineSuggestionUiImpl uiImpl = new InlineSuggestionUiImpl(host, mMainHandler); + mActiveInlineSuggestions.put(uiImpl, true); + + // We post the callback invocation to the end of the main thread handler queue, to make + // sure the callback happens after the views are drawn. This is needed because calling + // {@link SurfaceControlViewHost#setView()} will post a task to the main thread + // to draw the view asynchronously. + mMainHandler.post(() -> { + try { + callback.onContent(new InlineSuggestionUiWrapper(uiImpl), + host.getSurfacePackage(), + measuredSize.getWidth(), measuredSize.getHeight()); + } catch (RemoteException e) { + Log.w(TAG, "RemoteException calling onContent()"); + } + }); } finally { updateDisplay(Display.DEFAULT_DISPLAY); } @@ -305,7 +312,7 @@ public abstract class InlineSuggestionRenderService extends Service { public void renderSuggestion(@NonNull IInlineSuggestionUiCallback callback, @NonNull InlinePresentation presentation, int width, int height, @Nullable IBinder hostInputToken, int displayId) { - mHandler.sendMessage( + mMainHandler.sendMessage( obtainMessage(InlineSuggestionRenderService::handleRenderSuggestion, InlineSuggestionRenderService.this, callback, presentation, width, height, hostInputToken, displayId)); @@ -313,7 +320,7 @@ public abstract class InlineSuggestionRenderService extends Service { @Override public void getInlineSuggestionsRendererInfo(@NonNull RemoteCallback callback) { - mHandler.sendMessage(obtainMessage( + mMainHandler.sendMessage(obtainMessage( InlineSuggestionRenderService::handleGetInlineSuggestionsRendererInfo, InlineSuggestionRenderService.this, callback)); } |