From c7677a297039eca333277ed6a2f54d0fcd8eb282 Mon Sep 17 00:00:00 2001 From: Miranda Kephart Date: Fri, 5 Aug 2022 14:18:51 -0400 Subject: Guard clipboard overlay logging method Currently, there's no enforcement in the clipboard logs of the fact that the overlay can only be dismissed once per session -- e.g. if the user taps multiple times outside the UI to get it dismiss, we log all of those as separate events. This change guards the logs so that we only log one dismissal per session (unguarding on a reset). Bug: 241548007 Test: manual Change-Id: I4857a0344287f5f1d795ce14c8fce69b4af70c93 --- .../ClipboardOverlayController.java | 51 ++++++++++++++++------ 1 file changed, 37 insertions(+), 14 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/clipboardoverlay/ClipboardOverlayController.java b/packages/SystemUI/src/com/android/systemui/clipboardoverlay/ClipboardOverlayController.java index e16ac08c88f8..c7fddb4f74c7 100644 --- a/packages/SystemUI/src/com/android/systemui/clipboardoverlay/ClipboardOverlayController.java +++ b/packages/SystemUI/src/com/android/systemui/clipboardoverlay/ClipboardOverlayController.java @@ -97,6 +97,7 @@ import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; +import androidx.annotation.NonNull; import androidx.core.view.ViewCompat; import androidx.core.view.accessibility.AccessibilityNodeInfoCompat; @@ -132,7 +133,7 @@ public class ClipboardOverlayController { private static final int FONT_SEARCH_STEP_PX = 4; private final Context mContext; - private final UiEventLogger mUiEventLogger; + private final ClipboardLogger mClipboardLogger; private final BroadcastDispatcher mBroadcastDispatcher; private final DisplayManager mDisplayManager; private final DisplayMetrics mDisplayMetrics; @@ -181,7 +182,7 @@ public class ClipboardOverlayController { final Context displayContext = context.createDisplayContext(getDefaultDisplay()); mContext = displayContext.createWindowContext(TYPE_SCREENSHOT, null); - mUiEventLogger = uiEventLogger; + mClipboardLogger = new ClipboardLogger(uiEventLogger); mAccessibilityManager = AccessibilityManager.getInstance(mContext); mTextClassifier = requireNonNull(context.getSystemService(TextClassificationManager.class)) @@ -231,7 +232,7 @@ public class ClipboardOverlayController { @Override public void onSwipeDismissInitiated(Animator animator) { - mUiEventLogger.log(CLIPBOARD_OVERLAY_SWIPE_DISMISSED); + mClipboardLogger.logSessionComplete(CLIPBOARD_OVERLAY_SWIPE_DISMISSED); mExitAnimator = animator; } @@ -249,7 +250,7 @@ public class ClipboardOverlayController { }); mDismissButton.setOnClickListener(view -> { - mUiEventLogger.log(CLIPBOARD_OVERLAY_DISMISS_TAPPED); + mClipboardLogger.logSessionComplete(CLIPBOARD_OVERLAY_DISMISS_TAPPED); animateOut(); }); @@ -285,7 +286,8 @@ public class ClipboardOverlayController { int newDisplayId) { if (mContext.getResources().getConfiguration().orientation != mOrientation) { - mUiEventLogger.log(CLIPBOARD_OVERLAY_DISMISSED_OTHER); + mClipboardLogger.logSessionComplete( + CLIPBOARD_OVERLAY_DISMISSED_OTHER); hideImmediate(); } } @@ -300,7 +302,7 @@ public class ClipboardOverlayController { }); mTimeoutHandler.setOnTimeoutRunnable(() -> { - mUiEventLogger.log(CLIPBOARD_OVERLAY_TIMED_OUT); + mClipboardLogger.logSessionComplete(CLIPBOARD_OVERLAY_TIMED_OUT); animateOut(); }); @@ -308,7 +310,7 @@ public class ClipboardOverlayController { @Override public void onReceive(Context context, Intent intent) { if (ACTION_CLOSE_SYSTEM_DIALOGS.equals(intent.getAction())) { - mUiEventLogger.log(CLIPBOARD_OVERLAY_DISMISSED_OTHER); + mClipboardLogger.logSessionComplete(CLIPBOARD_OVERLAY_DISMISSED_OTHER); animateOut(); } } @@ -320,7 +322,7 @@ public class ClipboardOverlayController { @Override public void onReceive(Context context, Intent intent) { if (SCREENSHOT_ACTION.equals(intent.getAction())) { - mUiEventLogger.log(CLIPBOARD_OVERLAY_DISMISSED_OTHER); + mClipboardLogger.logSessionComplete(CLIPBOARD_OVERLAY_DISMISSED_OTHER); animateOut(); } } @@ -390,7 +392,7 @@ public class ClipboardOverlayController { mContext.getString(R.string.clipboard_send_nearby_description)); mRemoteCopyChip.setVisibility(View.VISIBLE); mRemoteCopyChip.setOnClickListener((v) -> { - mUiEventLogger.log(CLIPBOARD_OVERLAY_REMOTE_COPY_TAPPED); + mClipboardLogger.logSessionComplete(CLIPBOARD_OVERLAY_REMOTE_COPY_TAPPED); mContext.startActivity(remoteCopyIntent); animateOut(); }); @@ -450,7 +452,7 @@ public class ClipboardOverlayController { chip.setContentDescription(action.getTitle()); chip.setIcon(action.getIcon(), false); chip.setPendingIntent(action.getActionIntent(), () -> { - mUiEventLogger.log(CLIPBOARD_OVERLAY_ACTION_TAPPED); + mClipboardLogger.logSessionComplete(CLIPBOARD_OVERLAY_ACTION_TAPPED); animateOut(); }); chip.setAlpha(1); @@ -486,7 +488,7 @@ public class ClipboardOverlayController { touchRegion.op(tmpRect, Region.Op.UNION); if (!touchRegion.contains( (int) motionEvent.getRawX(), (int) motionEvent.getRawY())) { - mUiEventLogger.log(CLIPBOARD_OVERLAY_TAP_OUTSIDE); + mClipboardLogger.logSessionComplete(CLIPBOARD_OVERLAY_TAP_OUTSIDE); animateOut(); } } @@ -497,7 +499,7 @@ public class ClipboardOverlayController { } private void editImage(Uri uri) { - mUiEventLogger.log(CLIPBOARD_OVERLAY_EDIT_TAPPED); + mClipboardLogger.logSessionComplete(CLIPBOARD_OVERLAY_EDIT_TAPPED); String editorPackage = mContext.getString(R.string.config_screenshotEditor); Intent editIntent = new Intent(Intent.ACTION_EDIT); if (!TextUtils.isEmpty(editorPackage)) { @@ -512,7 +514,7 @@ public class ClipboardOverlayController { } private void editText() { - mUiEventLogger.log(CLIPBOARD_OVERLAY_EDIT_TAPPED); + mClipboardLogger.logSessionComplete(CLIPBOARD_OVERLAY_EDIT_TAPPED); Intent editIntent = new Intent(mContext, EditTextActivity.class); editIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); mContext.startActivity(editIntent); @@ -520,7 +522,7 @@ public class ClipboardOverlayController { } private void shareContent(ClipData clip) { - mUiEventLogger.log(CLIPBOARD_OVERLAY_SHARE_TAPPED); + mClipboardLogger.logSessionComplete(CLIPBOARD_OVERLAY_SHARE_TAPPED); Intent shareIntent = new Intent(Intent.ACTION_SEND); shareIntent.putExtra(Intent.EXTRA_TEXT, clip.getItemAt(0).getText().toString()); shareIntent.setDataAndType( @@ -864,6 +866,7 @@ public class ClipboardOverlayController { mRemoteCopyChip.setVisibility(View.GONE); resetActionChips(); mTimeoutHandler.cancelTimeout(); + mClipboardLogger.reset(); } @MainThread @@ -969,4 +972,24 @@ public class ClipboardOverlayController { mWindowManager.updateViewLayout(decorView, mWindowLayoutParams); } } + + static class ClipboardLogger { + private final UiEventLogger mUiEventLogger; + private boolean mGuarded = false; + + ClipboardLogger(UiEventLogger uiEventLogger) { + mUiEventLogger = uiEventLogger; + } + + void logSessionComplete(@NonNull UiEventLogger.UiEventEnum event) { + if (!mGuarded) { + mGuarded = true; + mUiEventLogger.log(event); + } + } + + void reset() { + mGuarded = false; + } + } } -- cgit v1.2.3-59-g8ed1b