Add confirm tap metrics for emergency call shortcut
Bug: 111378820
Test: manual and check the result of
'adb logcat -b events | grep sysui_multi_action'
Change-Id: I962c583fb4820e9f3200e0ef93632f30458a4edc
diff --git a/src/com/android/phone/EmergencyShortcutButton.java b/src/com/android/phone/EmergencyShortcutButton.java
index 275dac0..59b3794 100644
--- a/src/com/android/phone/EmergencyShortcutButton.java
+++ b/src/com/android/phone/EmergencyShortcutButton.java
@@ -19,6 +19,8 @@
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.content.Context;
+import android.metrics.LogMaker;
+import android.os.SystemClock;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
@@ -30,6 +32,9 @@
import androidx.annotation.NonNull;
+import com.android.internal.logging.MetricsLogger;
+import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
+
/**
* Emergency shortcut button displays a local emergency phone number information(including phone
* number, and phone type). To decrease false clicking, it need to click twice to confirm to place
@@ -61,6 +66,12 @@
private boolean mConfirmViewHiding;
+ /**
+ * The time, in millis, since boot when user taps on shortcut button to reveal confirm view.
+ * This is used for metrics when calculating the interval between reveal tap and confirm tap.
+ */
+ private long mTimeOfRevealTapInMillis = 0;
+
public EmergencyShortcutButton(Context context, AttributeSet attrs) {
super(context, attrs);
}
@@ -185,6 +196,8 @@
switch (view.getId()) {
case R.id.emergency_call_number_info_view:
if (AccessibilityManager.getInstance(mContext).isTouchExplorationEnabled()) {
+ // TalkBack itself includes a prompt to confirm click action implicitly,
+ // so we don't need an additional confirmation with second tap on button.
if (mOnConfirmClickListener != null) {
mOnConfirmClickListener.onConfirmClick(this);
}
@@ -193,6 +206,15 @@
}
break;
case R.id.emergency_call_confirm_view:
+ if (mTimeOfRevealTapInMillis != 0) {
+ long timeBetweenTwoTaps =
+ SystemClock.elapsedRealtime() - mTimeOfRevealTapInMillis;
+ // Reset reveal time to zero for next reveal-confirm taps pair.
+ mTimeOfRevealTapInMillis = 0;
+
+ writeMetricsForConfirmTap(timeBetweenTwoTaps);
+ }
+
if (mOnConfirmClickListener != null) {
mOnConfirmClickListener.onConfirmClick(this);
}
@@ -204,6 +226,7 @@
mConfirmViewHiding = false;
mConfirmView.setVisibility(View.VISIBLE);
+ mTimeOfRevealTapInMillis = SystemClock.elapsedRealtime();
int centerX = mCallNumberInfoView.getLeft() + mCallNumberInfoView.getWidth() / 2;
int centerY = mCallNumberInfoView.getTop() + mCallNumberInfoView.getHeight() / 2;
Animator reveal = ViewAnimationUtils.createCircularReveal(
@@ -240,6 +263,8 @@
@Override
public void onAnimationEnd(Animator animation) {
mConfirmView.setVisibility(INVISIBLE);
+ // Reset reveal time to zero for next reveal-confirm taps pair.
+ mTimeOfRevealTapInMillis = 0;
}
});
reveal.start();
@@ -254,4 +279,12 @@
hideSelectedButton();
}
};
+
+ private void writeMetricsForConfirmTap(long timeBetweenTwoTaps) {
+ LogMaker logContent = new LogMaker(MetricsEvent.EMERGENCY_DIALER_SHORTCUT_CONFIRM_TAP)
+ .setType(MetricsEvent.TYPE_ACTION)
+ .addTaggedData(MetricsEvent.FIELD_EMERGENCY_DIALER_SHORTCUT_TAPS_INTERVAL,
+ timeBetweenTwoTaps);
+ MetricsLogger.action(logContent);
+ }
}