From 95b09f90675c487cdbdd56f23c896d73105c13bd Mon Sep 17 00:00:00 2001 From: Thiru Ramasamy Date: Tue, 15 Jun 2021 16:33:35 -0700 Subject: [PATCH] Fixes duplicate logging for LAUNCHER_ALLAPPS_KEYBOARD_CLOSED events. Bug: 178562918 Test: Manual Change-Id: Id32b621c0f506bba4378f6f6b81d7cfece3cb373 --- .../launcher3/util/UiThreadHelper.java | 30 +++++++++++++++---- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/src/com/android/launcher3/util/UiThreadHelper.java b/src/com/android/launcher3/util/UiThreadHelper.java index cb721e68d0..0f40179f79 100644 --- a/src/com/android/launcher3/util/UiThreadHelper.java +++ b/src/com/android/launcher3/util/UiThreadHelper.java @@ -21,6 +21,7 @@ import static com.android.launcher3.util.Executors.UI_HELPER_EXECUTOR; import android.annotation.SuppressLint; import android.app.Activity; import android.content.Context; +import android.os.Bundle; import android.os.Handler; import android.os.IBinder; import android.os.Message; @@ -42,15 +43,30 @@ public class UiThreadHelper { private static final int MSG_HIDE_KEYBOARD = 1; private static final int MSG_SET_ORIENTATION = 2; private static final int MSG_RUN_COMMAND = 3; + private static final String STATS_LOGGER_KEY = "STATS_LOGGER_KEY"; @SuppressLint("NewApi") public static void hideKeyboardAsync(ActivityContext activityContext, IBinder token) { View root = activityContext.getDragLayer(); - Message.obtain(HANDLER.get(root.getContext()), - MSG_HIDE_KEYBOARD, token).sendToTarget(); - Launcher.cast(activityContext).getStatsLogManager().logger().log( - LAUNCHER_ALLAPPS_KEYBOARD_CLOSED); + // Since the launcher context cannot be accessed directly from callback, adding secondary + // message to log keyboard close event asynchronously. + Bundle mHideKeyboardLoggerMsg = new Bundle(); + mHideKeyboardLoggerMsg.putParcelable( + STATS_LOGGER_KEY, + Message.obtain( + HANDLER.get(root.getContext()), + () -> Launcher.cast(activityContext) + .getStatsLogManager() + .logger() + .log(LAUNCHER_ALLAPPS_KEYBOARD_CLOSED) + ) + ); + + Message mHideKeyboardMsg = Message.obtain(HANDLER.get(root.getContext()), MSG_HIDE_KEYBOARD, + token); + mHideKeyboardMsg.setData(mHideKeyboardLoggerMsg); + mHideKeyboardMsg.sendToTarget(); } public static void setOrientationAsync(Activity activity, int orientation) { @@ -81,7 +97,11 @@ public class UiThreadHelper { public boolean handleMessage(Message message) { switch (message.what) { case MSG_HIDE_KEYBOARD: - mIMM.hideSoftInputFromWindow((IBinder) message.obj, 0); + if (mIMM.hideSoftInputFromWindow((IBinder) message.obj, 0)) { + // log keyboard close event only when keyboard is actually closed + ((Message) message.getData().getParcelable(STATS_LOGGER_KEY)) + .sendToTarget(); + } return true; case MSG_SET_ORIENTATION: ((Activity) message.obj).setRequestedOrientation(message.arg1);