diff options
| author | 2017-04-07 00:39:27 +0000 | |
|---|---|---|
| committer | 2017-04-07 00:39:31 +0000 | |
| commit | 809b79da2f5c0b1f913a11462d9c58f19e940bba (patch) | |
| tree | 2f6dfc2c90518a52690d45beb66fb0692c7a65de | |
| parent | ad27aa11b1af13c70f69cfff58e7a078eb33b8e2 (diff) | |
| parent | 1b77565a6f702f4e986c195fe7345a7d7ebd31e3 (diff) | |
Merge "Add metrics for nav buttons through KeyButtonView" into oc-dev
3 files changed, 110 insertions, 0 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyButtonView.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyButtonView.java index b5d22b1da288..d77796144282 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyButtonView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyButtonView.java @@ -24,6 +24,7 @@ import android.graphics.drawable.Drawable; import android.graphics.drawable.Icon; import android.hardware.input.InputManager; import android.media.AudioManager; +import android.metrics.LogMaker; import android.os.AsyncTask; import android.os.Bundle; import android.os.SystemClock; @@ -41,6 +42,9 @@ import android.view.accessibility.AccessibilityEvent; import android.view.accessibility.AccessibilityNodeInfo; import android.widget.ImageView; +import com.android.internal.logging.MetricsLogger; +import com.android.internal.logging.nano.MetricsProto.MetricsEvent; +import com.android.systemui.Dependency; import com.android.systemui.R; import com.android.systemui.plugins.statusbar.phone.NavBarButtonProvider.ButtonInterface; @@ -60,6 +64,7 @@ public class KeyButtonView extends ImageView implements ButtonInterface { private boolean mLongClicked; private OnClickListener mOnClickListener; private final KeyButtonRipple mRipple; + private final MetricsLogger mMetricsLogger = Dependency.get(MetricsLogger.class); private final Runnable mCheckLongPress = new Runnable() { public void run() { @@ -252,6 +257,11 @@ public class KeyButtonView extends ImageView implements ButtonInterface { } void sendEvent(int action, int flags, long when) { + mMetricsLogger.write(new LogMaker(MetricsEvent.ACTION_NAV_BUTTON_EVENT) + .setType(MetricsEvent.TYPE_ACTION) + .setSubtype(mCode) + .addTaggedData(MetricsEvent.FIELD_NAV_ACTION, action) + .addTaggedData(MetricsEvent.FIELD_FLAGS, flags)); final int repeatCount = (flags & KeyEvent.FLAG_LONG_PRESS) != 0 ? 1 : 0; final KeyEvent ev = new KeyEvent(mDownTime, when, action, mCode, repeatCount, 0, KeyCharacterMap.VIRTUAL_KEYBOARD, 0, diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/KeyButtonViewTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/KeyButtonViewTest.java new file mode 100644 index 000000000000..21fddf2106d4 --- /dev/null +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/KeyButtonViewTest.java @@ -0,0 +1,91 @@ +/* + * Copyright (C) 2017 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package com.android.systemui.statusbar.policy; + +import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.ACTION_NAV_BUTTON_EVENT; +import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.FIELD_FLAGS; +import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.FIELD_NAV_ACTION; + +import static org.mockito.ArgumentMatchers.argThat; + +import android.metrics.LogMaker; +import android.testing.AndroidTestingRunner; +import android.testing.TestableLooper; +import android.testing.TestableLooper.RunWithLooper; +import android.view.KeyEvent; + +import com.android.internal.logging.MetricsLogger; +import com.android.internal.logging.nano.MetricsProto.MetricsEvent; +import com.android.systemui.SysuiTestCase; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.ArgumentMatcher; +import org.mockito.Mockito; + +import java.util.Objects; + +@RunWith(AndroidTestingRunner.class) +@RunWithLooper +public class KeyButtonViewTest extends SysuiTestCase { + + private KeyButtonView mKeyButtonView; + private MetricsLogger mMetricsLogger; + + @Before + public void setup() throws Exception { + mMetricsLogger = mDependency.injectMockDependency(MetricsLogger.class); + TestableLooper.get(this).runWithLooper(() -> + mKeyButtonView = new KeyButtonView(mContext, null)); + } + + @Test + public void testMetrics() { + int action = 42; + int flags = 0x141; + int code = KeyEvent.KEYCODE_ENTER; + mKeyButtonView.setCode(code); + mKeyButtonView.sendEvent(action, flags); + + Mockito.verify(mMetricsLogger).write(argThat(new ArgumentMatcher<LogMaker>() { + public String mReason; + + @Override + public boolean matches(LogMaker argument) { + return checkField("category", argument.getCategory(), ACTION_NAV_BUTTON_EVENT) + && checkField("type", argument.getType(), MetricsEvent.TYPE_ACTION) + && checkField("subtype", argument.getSubtype(), code) + && checkField("FIELD_FLAGS", argument.getTaggedData(FIELD_FLAGS), flags) + && checkField("FIELD_NAV_ACTION", argument.getTaggedData(FIELD_NAV_ACTION), + action); + } + + private boolean checkField(String field, Object val, Object val2) { + if (!Objects.equals(val, val2)) { + mReason = "Expected " + field + " " + val2 + " but was " + val; + return false; + } + return true; + } + + @Override + public String toString() { + return mReason; + } + })); + } + +}
\ No newline at end of file diff --git a/proto/src/metrics_constants.proto b/proto/src/metrics_constants.proto index 78bc01dc5389..b59e00d1956c 100644 --- a/proto/src/metrics_constants.proto +++ b/proto/src/metrics_constants.proto @@ -3892,6 +3892,15 @@ message MetricsEvent { // ACTION: QS -> Click date ACTION_QS_DATE = 930; + // ACTION: Event on nav button + ACTION_NAV_BUTTON_EVENT = 931; + + // FIELD: Flags for a nav button event + FIELD_FLAGS = 932; + + // FIELD: Action for a nav button event + FIELD_NAV_ACTION = 933; + // ---- End O Constants, all O constants go above this line ---- // Add new aosp constants above this line. |