18c09ac7435c62a8ba2e34d57a7ac3be2ddf23adcJason Monk/*
28c09ac7435c62a8ba2e34d57a7ac3be2ddf23adcJason Monk * Copyright (C) 2017 The Android Open Source Project
38c09ac7435c62a8ba2e34d57a7ac3be2ddf23adcJason Monk *
48c09ac7435c62a8ba2e34d57a7ac3be2ddf23adcJason Monk * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
58c09ac7435c62a8ba2e34d57a7ac3be2ddf23adcJason Monk * except in compliance with the License. You may obtain a copy of the License at
68c09ac7435c62a8ba2e34d57a7ac3be2ddf23adcJason Monk *
78c09ac7435c62a8ba2e34d57a7ac3be2ddf23adcJason Monk *      http://www.apache.org/licenses/LICENSE-2.0
88c09ac7435c62a8ba2e34d57a7ac3be2ddf23adcJason Monk *
98c09ac7435c62a8ba2e34d57a7ac3be2ddf23adcJason Monk * Unless required by applicable law or agreed to in writing, software distributed under the
108c09ac7435c62a8ba2e34d57a7ac3be2ddf23adcJason Monk * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
118c09ac7435c62a8ba2e34d57a7ac3be2ddf23adcJason Monk * KIND, either express or implied. See the License for the specific language governing
128c09ac7435c62a8ba2e34d57a7ac3be2ddf23adcJason Monk * permissions and limitations under the License.
138c09ac7435c62a8ba2e34d57a7ac3be2ddf23adcJason Monk */
148c09ac7435c62a8ba2e34d57a7ac3be2ddf23adcJason Monk
158c09ac7435c62a8ba2e34d57a7ac3be2ddf23adcJason Monkpackage com.android.systemui.qs;
168c09ac7435c62a8ba2e34d57a7ac3be2ddf23adcJason Monk
178c09ac7435c62a8ba2e34d57a7ac3be2ddf23adcJason Monkimport static com.android.internal.logging.nano.MetricsProto.MetricsEvent.ACTION_QS_MORE_SETTINGS;
188c09ac7435c62a8ba2e34d57a7ac3be2ddf23adcJason Monk
198c09ac7435c62a8ba2e34d57a7ac3be2ddf23adcJason Monkimport static org.mockito.Matchers.any;
208c09ac7435c62a8ba2e34d57a7ac3be2ddf23adcJason Monkimport static org.mockito.Matchers.anyInt;
218c09ac7435c62a8ba2e34d57a7ac3be2ddf23adcJason Monkimport static org.mockito.Matchers.eq;
228c09ac7435c62a8ba2e34d57a7ac3be2ddf23adcJason Monkimport static org.mockito.Mockito.mock;
238c09ac7435c62a8ba2e34d57a7ac3be2ddf23adcJason Monkimport static org.mockito.Mockito.verify;
248c09ac7435c62a8ba2e34d57a7ac3be2ddf23adcJason Monkimport static org.mockito.Mockito.when;
258c09ac7435c62a8ba2e34d57a7ac3be2ddf23adcJason Monk
26fba8faf5c5f58f115fa3c099da9ef0953b484147Jason Monkimport android.support.test.filters.SmallTest;
278c09ac7435c62a8ba2e34d57a7ac3be2ddf23adcJason Monkimport android.testing.AndroidTestingRunner;
288c09ac7435c62a8ba2e34d57a7ac3be2ddf23adcJason Monkimport android.testing.TestableLooper;
298c09ac7435c62a8ba2e34d57a7ac3be2ddf23adcJason Monkimport android.testing.TestableLooper.RunWithLooper;
308c09ac7435c62a8ba2e34d57a7ac3be2ddf23adcJason Monkimport android.testing.ViewUtils;
318c09ac7435c62a8ba2e34d57a7ac3be2ddf23adcJason Monkimport android.view.LayoutInflater;
328c09ac7435c62a8ba2e34d57a7ac3be2ddf23adcJason Monkimport android.view.View;
338c09ac7435c62a8ba2e34d57a7ac3be2ddf23adcJason Monk
348c09ac7435c62a8ba2e34d57a7ac3be2ddf23adcJason Monkimport com.android.internal.logging.MetricsLogger;
358c09ac7435c62a8ba2e34d57a7ac3be2ddf23adcJason Monkimport com.android.systemui.R;
368c09ac7435c62a8ba2e34d57a7ac3be2ddf23adcJason Monkimport com.android.systemui.SysuiTestCase;
378c09ac7435c62a8ba2e34d57a7ac3be2ddf23adcJason Monkimport com.android.systemui.plugins.ActivityStarter;
388c09ac7435c62a8ba2e34d57a7ac3be2ddf23adcJason Monkimport com.android.systemui.plugins.qs.DetailAdapter;
398c09ac7435c62a8ba2e34d57a7ac3be2ddf23adcJason Monk
408c09ac7435c62a8ba2e34d57a7ac3be2ddf23adcJason Monkimport org.junit.Before;
418c09ac7435c62a8ba2e34d57a7ac3be2ddf23adcJason Monkimport org.junit.Test;
428c09ac7435c62a8ba2e34d57a7ac3be2ddf23adcJason Monkimport org.junit.runner.RunWith;
438c09ac7435c62a8ba2e34d57a7ac3be2ddf23adcJason Monk
448c09ac7435c62a8ba2e34d57a7ac3be2ddf23adcJason Monk@RunWith(AndroidTestingRunner.class)
458c09ac7435c62a8ba2e34d57a7ac3be2ddf23adcJason Monk@RunWithLooper
46fba8faf5c5f58f115fa3c099da9ef0953b484147Jason Monk@SmallTest
478c09ac7435c62a8ba2e34d57a7ac3be2ddf23adcJason Monkpublic class QSDetailTest extends SysuiTestCase {
488c09ac7435c62a8ba2e34d57a7ac3be2ddf23adcJason Monk
498c09ac7435c62a8ba2e34d57a7ac3be2ddf23adcJason Monk    private MetricsLogger mMetricsLogger;
508c09ac7435c62a8ba2e34d57a7ac3be2ddf23adcJason Monk    private QSDetail mQsDetail;
518c09ac7435c62a8ba2e34d57a7ac3be2ddf23adcJason Monk    private QSPanel mQsPanel;
528c09ac7435c62a8ba2e34d57a7ac3be2ddf23adcJason Monk    private QuickStatusBarHeader mQuickHeader;
538c09ac7435c62a8ba2e34d57a7ac3be2ddf23adcJason Monk    private ActivityStarter mActivityStarter;
548c09ac7435c62a8ba2e34d57a7ac3be2ddf23adcJason Monk    private DetailAdapter mMockDetailAdapter;
558c09ac7435c62a8ba2e34d57a7ac3be2ddf23adcJason Monk    private TestableLooper mTestableLooper;
568c09ac7435c62a8ba2e34d57a7ac3be2ddf23adcJason Monk
578c09ac7435c62a8ba2e34d57a7ac3be2ddf23adcJason Monk    @Before
588c09ac7435c62a8ba2e34d57a7ac3be2ddf23adcJason Monk    public void setup() throws Exception {
598c09ac7435c62a8ba2e34d57a7ac3be2ddf23adcJason Monk        mTestableLooper = TestableLooper.get(this);
608c09ac7435c62a8ba2e34d57a7ac3be2ddf23adcJason Monk        mTestableLooper.runWithLooper(() -> {
618c09ac7435c62a8ba2e34d57a7ac3be2ddf23adcJason Monk            mMetricsLogger = mDependency.injectMockDependency(MetricsLogger.class);
628c09ac7435c62a8ba2e34d57a7ac3be2ddf23adcJason Monk            mActivityStarter = mDependency.injectMockDependency(ActivityStarter.class);
638c09ac7435c62a8ba2e34d57a7ac3be2ddf23adcJason Monk            mQsDetail = (QSDetail) LayoutInflater.from(mContext).inflate(R.layout.qs_detail, null);
648c09ac7435c62a8ba2e34d57a7ac3be2ddf23adcJason Monk            mQsPanel = mock(QSPanel.class);
658c09ac7435c62a8ba2e34d57a7ac3be2ddf23adcJason Monk            mQuickHeader = mock(QuickStatusBarHeader.class);
66b4ec0b90dcb98548e358243fe6d0b74d34c9a5ceJason Monk            mQsDetail.setQsPanel(mQsPanel, mQuickHeader, mock(View.class));
678c09ac7435c62a8ba2e34d57a7ac3be2ddf23adcJason Monk
688c09ac7435c62a8ba2e34d57a7ac3be2ddf23adcJason Monk            mMockDetailAdapter = mock(DetailAdapter.class);
698c09ac7435c62a8ba2e34d57a7ac3be2ddf23adcJason Monk            when(mMockDetailAdapter.createDetailView(any(), any(), any()))
708c09ac7435c62a8ba2e34d57a7ac3be2ddf23adcJason Monk                    .thenReturn(mock(View.class));
718c09ac7435c62a8ba2e34d57a7ac3be2ddf23adcJason Monk        });
728c09ac7435c62a8ba2e34d57a7ac3be2ddf23adcJason Monk    }
738c09ac7435c62a8ba2e34d57a7ac3be2ddf23adcJason Monk
748c09ac7435c62a8ba2e34d57a7ac3be2ddf23adcJason Monk    @Test
758c09ac7435c62a8ba2e34d57a7ac3be2ddf23adcJason Monk    public void testShowDetail_Metrics() {
768c09ac7435c62a8ba2e34d57a7ac3be2ddf23adcJason Monk        ViewUtils.attachView(mQsDetail);
778c09ac7435c62a8ba2e34d57a7ac3be2ddf23adcJason Monk        mTestableLooper.processAllMessages();
788c09ac7435c62a8ba2e34d57a7ac3be2ddf23adcJason Monk
798c09ac7435c62a8ba2e34d57a7ac3be2ddf23adcJason Monk        mQsDetail.handleShowingDetail(mMockDetailAdapter, 0, 0, false);
808c09ac7435c62a8ba2e34d57a7ac3be2ddf23adcJason Monk        verify(mMetricsLogger).visible(eq(mMockDetailAdapter.getMetricsCategory()));
818c09ac7435c62a8ba2e34d57a7ac3be2ddf23adcJason Monk        mQsDetail.handleShowingDetail(null, 0, 0, false);
828c09ac7435c62a8ba2e34d57a7ac3be2ddf23adcJason Monk        verify(mMetricsLogger).hidden(eq(mMockDetailAdapter.getMetricsCategory()));
838c09ac7435c62a8ba2e34d57a7ac3be2ddf23adcJason Monk
848c09ac7435c62a8ba2e34d57a7ac3be2ddf23adcJason Monk        ViewUtils.detachView(mQsDetail);
858c09ac7435c62a8ba2e34d57a7ac3be2ddf23adcJason Monk        mTestableLooper.processAllMessages();
868c09ac7435c62a8ba2e34d57a7ac3be2ddf23adcJason Monk    }
878c09ac7435c62a8ba2e34d57a7ac3be2ddf23adcJason Monk
888c09ac7435c62a8ba2e34d57a7ac3be2ddf23adcJason Monk    @Test
898c09ac7435c62a8ba2e34d57a7ac3be2ddf23adcJason Monk    public void testMoreSettingsButton() {
908c09ac7435c62a8ba2e34d57a7ac3be2ddf23adcJason Monk        ViewUtils.attachView(mQsDetail);
918c09ac7435c62a8ba2e34d57a7ac3be2ddf23adcJason Monk        mTestableLooper.processAllMessages();
928c09ac7435c62a8ba2e34d57a7ac3be2ddf23adcJason Monk
938c09ac7435c62a8ba2e34d57a7ac3be2ddf23adcJason Monk        mQsDetail.handleShowingDetail(mMockDetailAdapter, 0, 0, false);
948c09ac7435c62a8ba2e34d57a7ac3be2ddf23adcJason Monk        mQsDetail.findViewById(android.R.id.button2).performClick();
958c09ac7435c62a8ba2e34d57a7ac3be2ddf23adcJason Monk
968c09ac7435c62a8ba2e34d57a7ac3be2ddf23adcJason Monk        int metricsCategory = mMockDetailAdapter.getMetricsCategory();
978c09ac7435c62a8ba2e34d57a7ac3be2ddf23adcJason Monk        verify(mMetricsLogger).action(eq(ACTION_QS_MORE_SETTINGS), eq(metricsCategory));
988c09ac7435c62a8ba2e34d57a7ac3be2ddf23adcJason Monk
998c09ac7435c62a8ba2e34d57a7ac3be2ddf23adcJason Monk        verify(mActivityStarter).postStartActivityDismissingKeyguard(any(), anyInt());
1008c09ac7435c62a8ba2e34d57a7ac3be2ddf23adcJason Monk
1018c09ac7435c62a8ba2e34d57a7ac3be2ddf23adcJason Monk        ViewUtils.detachView(mQsDetail);
1028c09ac7435c62a8ba2e34d57a7ac3be2ddf23adcJason Monk        mTestableLooper.processAllMessages();
1038c09ac7435c62a8ba2e34d57a7ac3be2ddf23adcJason Monk    }
1046997da71fb02ec2b2e5b797552a9174b86fc7c25Jason Monk
1056997da71fb02ec2b2e5b797552a9174b86fc7c25Jason Monk    @Test
1066997da71fb02ec2b2e5b797552a9174b86fc7c25Jason Monk    public void testNullAdapterClick() {
1076997da71fb02ec2b2e5b797552a9174b86fc7c25Jason Monk        mQsDetail.setupDetailFooter(mock(DetailAdapter.class));
1086997da71fb02ec2b2e5b797552a9174b86fc7c25Jason Monk        mQsDetail.findViewById(android.R.id.button2).performClick();
1096997da71fb02ec2b2e5b797552a9174b86fc7c25Jason Monk    }
1108c09ac7435c62a8ba2e34d57a7ac3be2ddf23adcJason Monk}
111