11b77565a6f702f4e986c195fe7345a7d7ebd31e3Jason Monk/* 21b77565a6f702f4e986c195fe7345a7d7ebd31e3Jason Monk * Copyright (C) 2017 The Android Open Source Project 31b77565a6f702f4e986c195fe7345a7d7ebd31e3Jason Monk * 41b77565a6f702f4e986c195fe7345a7d7ebd31e3Jason Monk * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file 51b77565a6f702f4e986c195fe7345a7d7ebd31e3Jason Monk * except in compliance with the License. You may obtain a copy of the License at 61b77565a6f702f4e986c195fe7345a7d7ebd31e3Jason Monk * 71b77565a6f702f4e986c195fe7345a7d7ebd31e3Jason Monk * http://www.apache.org/licenses/LICENSE-2.0 81b77565a6f702f4e986c195fe7345a7d7ebd31e3Jason Monk * 91b77565a6f702f4e986c195fe7345a7d7ebd31e3Jason Monk * Unless required by applicable law or agreed to in writing, software distributed under the 101b77565a6f702f4e986c195fe7345a7d7ebd31e3Jason Monk * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 111b77565a6f702f4e986c195fe7345a7d7ebd31e3Jason Monk * KIND, either express or implied. See the License for the specific language governing 121b77565a6f702f4e986c195fe7345a7d7ebd31e3Jason Monk * permissions and limitations under the License. 131b77565a6f702f4e986c195fe7345a7d7ebd31e3Jason Monk */ 141b77565a6f702f4e986c195fe7345a7d7ebd31e3Jason Monk 151b77565a6f702f4e986c195fe7345a7d7ebd31e3Jason Monkpackage com.android.systemui.statusbar.policy; 161b77565a6f702f4e986c195fe7345a7d7ebd31e3Jason Monk 171b77565a6f702f4e986c195fe7345a7d7ebd31e3Jason Monkimport static com.android.internal.logging.nano.MetricsProto.MetricsEvent.ACTION_NAV_BUTTON_EVENT; 181b77565a6f702f4e986c195fe7345a7d7ebd31e3Jason Monkimport static com.android.internal.logging.nano.MetricsProto.MetricsEvent.FIELD_FLAGS; 191b77565a6f702f4e986c195fe7345a7d7ebd31e3Jason Monkimport static com.android.internal.logging.nano.MetricsProto.MetricsEvent.FIELD_NAV_ACTION; 201b77565a6f702f4e986c195fe7345a7d7ebd31e3Jason Monk 211b77565a6f702f4e986c195fe7345a7d7ebd31e3Jason Monkimport static org.mockito.ArgumentMatchers.argThat; 221b77565a6f702f4e986c195fe7345a7d7ebd31e3Jason Monk 231b77565a6f702f4e986c195fe7345a7d7ebd31e3Jason Monkimport android.metrics.LogMaker; 2425a52b65b2cac1f49f37f4532cfa62282432957aJason Monkimport android.support.test.filters.SmallTest; 251b77565a6f702f4e986c195fe7345a7d7ebd31e3Jason Monkimport android.testing.AndroidTestingRunner; 261b77565a6f702f4e986c195fe7345a7d7ebd31e3Jason Monkimport android.testing.TestableLooper; 271b77565a6f702f4e986c195fe7345a7d7ebd31e3Jason Monkimport android.testing.TestableLooper.RunWithLooper; 281b77565a6f702f4e986c195fe7345a7d7ebd31e3Jason Monkimport android.view.KeyEvent; 291b77565a6f702f4e986c195fe7345a7d7ebd31e3Jason Monk 301b77565a6f702f4e986c195fe7345a7d7ebd31e3Jason Monkimport com.android.internal.logging.MetricsLogger; 311b77565a6f702f4e986c195fe7345a7d7ebd31e3Jason Monkimport com.android.internal.logging.nano.MetricsProto.MetricsEvent; 321b77565a6f702f4e986c195fe7345a7d7ebd31e3Jason Monkimport com.android.systemui.SysuiTestCase; 331b77565a6f702f4e986c195fe7345a7d7ebd31e3Jason Monk 341b77565a6f702f4e986c195fe7345a7d7ebd31e3Jason Monkimport org.junit.Before; 351b77565a6f702f4e986c195fe7345a7d7ebd31e3Jason Monkimport org.junit.Test; 361b77565a6f702f4e986c195fe7345a7d7ebd31e3Jason Monkimport org.junit.runner.RunWith; 371b77565a6f702f4e986c195fe7345a7d7ebd31e3Jason Monkimport org.mockito.ArgumentMatcher; 381b77565a6f702f4e986c195fe7345a7d7ebd31e3Jason Monkimport org.mockito.Mockito; 391b77565a6f702f4e986c195fe7345a7d7ebd31e3Jason Monk 401b77565a6f702f4e986c195fe7345a7d7ebd31e3Jason Monkimport java.util.Objects; 411b77565a6f702f4e986c195fe7345a7d7ebd31e3Jason Monk 421b77565a6f702f4e986c195fe7345a7d7ebd31e3Jason Monk@RunWith(AndroidTestingRunner.class) 431b77565a6f702f4e986c195fe7345a7d7ebd31e3Jason Monk@RunWithLooper 4425a52b65b2cac1f49f37f4532cfa62282432957aJason Monk@SmallTest 451b77565a6f702f4e986c195fe7345a7d7ebd31e3Jason Monkpublic class KeyButtonViewTest extends SysuiTestCase { 461b77565a6f702f4e986c195fe7345a7d7ebd31e3Jason Monk 471b77565a6f702f4e986c195fe7345a7d7ebd31e3Jason Monk private KeyButtonView mKeyButtonView; 481b77565a6f702f4e986c195fe7345a7d7ebd31e3Jason Monk private MetricsLogger mMetricsLogger; 491b77565a6f702f4e986c195fe7345a7d7ebd31e3Jason Monk 501b77565a6f702f4e986c195fe7345a7d7ebd31e3Jason Monk @Before 511b77565a6f702f4e986c195fe7345a7d7ebd31e3Jason Monk public void setup() throws Exception { 521b77565a6f702f4e986c195fe7345a7d7ebd31e3Jason Monk mMetricsLogger = mDependency.injectMockDependency(MetricsLogger.class); 531b77565a6f702f4e986c195fe7345a7d7ebd31e3Jason Monk TestableLooper.get(this).runWithLooper(() -> 541b77565a6f702f4e986c195fe7345a7d7ebd31e3Jason Monk mKeyButtonView = new KeyButtonView(mContext, null)); 551b77565a6f702f4e986c195fe7345a7d7ebd31e3Jason Monk } 561b77565a6f702f4e986c195fe7345a7d7ebd31e3Jason Monk 571b77565a6f702f4e986c195fe7345a7d7ebd31e3Jason Monk @Test 581b77565a6f702f4e986c195fe7345a7d7ebd31e3Jason Monk public void testMetrics() { 591b77565a6f702f4e986c195fe7345a7d7ebd31e3Jason Monk int action = 42; 601b77565a6f702f4e986c195fe7345a7d7ebd31e3Jason Monk int flags = 0x141; 611b77565a6f702f4e986c195fe7345a7d7ebd31e3Jason Monk int code = KeyEvent.KEYCODE_ENTER; 621b77565a6f702f4e986c195fe7345a7d7ebd31e3Jason Monk mKeyButtonView.setCode(code); 631b77565a6f702f4e986c195fe7345a7d7ebd31e3Jason Monk mKeyButtonView.sendEvent(action, flags); 641b77565a6f702f4e986c195fe7345a7d7ebd31e3Jason Monk 651b77565a6f702f4e986c195fe7345a7d7ebd31e3Jason Monk Mockito.verify(mMetricsLogger).write(argThat(new ArgumentMatcher<LogMaker>() { 661b77565a6f702f4e986c195fe7345a7d7ebd31e3Jason Monk public String mReason; 671b77565a6f702f4e986c195fe7345a7d7ebd31e3Jason Monk 681b77565a6f702f4e986c195fe7345a7d7ebd31e3Jason Monk @Override 691b77565a6f702f4e986c195fe7345a7d7ebd31e3Jason Monk public boolean matches(LogMaker argument) { 701b77565a6f702f4e986c195fe7345a7d7ebd31e3Jason Monk return checkField("category", argument.getCategory(), ACTION_NAV_BUTTON_EVENT) 711b77565a6f702f4e986c195fe7345a7d7ebd31e3Jason Monk && checkField("type", argument.getType(), MetricsEvent.TYPE_ACTION) 721b77565a6f702f4e986c195fe7345a7d7ebd31e3Jason Monk && checkField("subtype", argument.getSubtype(), code) 731b77565a6f702f4e986c195fe7345a7d7ebd31e3Jason Monk && checkField("FIELD_FLAGS", argument.getTaggedData(FIELD_FLAGS), flags) 741b77565a6f702f4e986c195fe7345a7d7ebd31e3Jason Monk && checkField("FIELD_NAV_ACTION", argument.getTaggedData(FIELD_NAV_ACTION), 751b77565a6f702f4e986c195fe7345a7d7ebd31e3Jason Monk action); 761b77565a6f702f4e986c195fe7345a7d7ebd31e3Jason Monk } 771b77565a6f702f4e986c195fe7345a7d7ebd31e3Jason Monk 781b77565a6f702f4e986c195fe7345a7d7ebd31e3Jason Monk private boolean checkField(String field, Object val, Object val2) { 791b77565a6f702f4e986c195fe7345a7d7ebd31e3Jason Monk if (!Objects.equals(val, val2)) { 801b77565a6f702f4e986c195fe7345a7d7ebd31e3Jason Monk mReason = "Expected " + field + " " + val2 + " but was " + val; 811b77565a6f702f4e986c195fe7345a7d7ebd31e3Jason Monk return false; 821b77565a6f702f4e986c195fe7345a7d7ebd31e3Jason Monk } 831b77565a6f702f4e986c195fe7345a7d7ebd31e3Jason Monk return true; 841b77565a6f702f4e986c195fe7345a7d7ebd31e3Jason Monk } 851b77565a6f702f4e986c195fe7345a7d7ebd31e3Jason Monk 861b77565a6f702f4e986c195fe7345a7d7ebd31e3Jason Monk @Override 871b77565a6f702f4e986c195fe7345a7d7ebd31e3Jason Monk public String toString() { 881b77565a6f702f4e986c195fe7345a7d7ebd31e3Jason Monk return mReason; 891b77565a6f702f4e986c195fe7345a7d7ebd31e3Jason Monk } 901b77565a6f702f4e986c195fe7345a7d7ebd31e3Jason Monk })); 911b77565a6f702f4e986c195fe7345a7d7ebd31e3Jason Monk } 921b77565a6f702f4e986c195fe7345a7d7ebd31e3Jason Monk 931b77565a6f702f4e986c195fe7345a7d7ebd31e3Jason Monk}