146bea2e685915fe45d372389b0a90815e6067febBartosz Fabianowski/*
246bea2e685915fe45d372389b0a90815e6067febBartosz Fabianowski * Copyright (C) 2016 The Android Open Source Project
346bea2e685915fe45d372389b0a90815e6067febBartosz Fabianowski *
446bea2e685915fe45d372389b0a90815e6067febBartosz Fabianowski * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
546bea2e685915fe45d372389b0a90815e6067febBartosz Fabianowski * except in compliance with the License. You may obtain a copy of the License at
646bea2e685915fe45d372389b0a90815e6067febBartosz Fabianowski *
746bea2e685915fe45d372389b0a90815e6067febBartosz Fabianowski *      http://www.apache.org/licenses/LICENSE-2.0
846bea2e685915fe45d372389b0a90815e6067febBartosz Fabianowski *
946bea2e685915fe45d372389b0a90815e6067febBartosz Fabianowski * Unless required by applicable law or agreed to in writing, software distributed under the
1046bea2e685915fe45d372389b0a90815e6067febBartosz Fabianowski * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
1146bea2e685915fe45d372389b0a90815e6067febBartosz Fabianowski * KIND, either express or implied. See the License for the specific language governing
1246bea2e685915fe45d372389b0a90815e6067febBartosz Fabianowski * permissions and limitations under the License.
1346bea2e685915fe45d372389b0a90815e6067febBartosz Fabianowski */
1446bea2e685915fe45d372389b0a90815e6067febBartosz Fabianowski
1546bea2e685915fe45d372389b0a90815e6067febBartosz Fabianowskipackage com.android.systemui.qs;
1646bea2e685915fe45d372389b0a90815e6067febBartosz Fabianowski
173cfedd78b1e3704481de27d7354cb29b2fb43781Jason Monkimport static junit.framework.Assert.assertEquals;
183cfedd78b1e3704481de27d7354cb29b2fb43781Jason Monk
19509711105d6514f93891c6cf29a028ec4b87f3d4Christine Franksimport static org.mockito.ArgumentMatchers.anyInt;
203cfedd78b1e3704481de27d7354cb29b2fb43781Jason Monkimport static org.mockito.Mockito.mock;
213cfedd78b1e3704481de27d7354cb29b2fb43781Jason Monkimport static org.mockito.Mockito.when;
223cfedd78b1e3704481de27d7354cb29b2fb43781Jason Monk
2346bea2e685915fe45d372389b0a90815e6067febBartosz Fabianowskiimport android.content.Context;
24509711105d6514f93891c6cf29a028ec4b87f3d4Christine Franksimport android.content.pm.UserInfo;
253cfedd78b1e3704481de27d7354cb29b2fb43781Jason Monkimport android.os.Handler;
2646bea2e685915fe45d372389b0a90815e6067febBartosz Fabianowskiimport android.os.Looper;
27509711105d6514f93891c6cf29a028ec4b87f3d4Christine Franksimport android.os.UserManager;
28509711105d6514f93891c6cf29a028ec4b87f3d4Christine Franksimport android.provider.Settings;
2946bea2e685915fe45d372389b0a90815e6067febBartosz Fabianowskiimport android.support.test.runner.AndroidJUnit4;
3046bea2e685915fe45d372389b0a90815e6067febBartosz Fabianowskiimport android.test.suitebuilder.annotation.SmallTest;
3146bea2e685915fe45d372389b0a90815e6067febBartosz Fabianowskiimport android.text.SpannableStringBuilder;
329aaa8cfc919db3b0fcb9ca3254ce1408981bcf48Winston Manimport android.view.LayoutInflater;
3346bea2e685915fe45d372389b0a90815e6067febBartosz Fabianowskiimport android.view.View;
3446bea2e685915fe45d372389b0a90815e6067febBartosz Fabianowskiimport android.view.ViewGroup;
3546bea2e685915fe45d372389b0a90815e6067febBartosz Fabianowskiimport android.widget.TextView;
3646bea2e685915fe45d372389b0a90815e6067febBartosz Fabianowski
379c7844cb91b43929d0a86b1c90aa1efb37f5463aJason Monkimport com.android.systemui.Dependency;
3846bea2e685915fe45d372389b0a90815e6067febBartosz Fabianowskiimport com.android.systemui.R;
3946bea2e685915fe45d372389b0a90815e6067febBartosz Fabianowskiimport com.android.systemui.SysuiTestCase;
4046bea2e685915fe45d372389b0a90815e6067febBartosz Fabianowskiimport com.android.systemui.statusbar.policy.SecurityController;
41340b0e5216b4fcc435e0459b1ca46155a572100dJason Monkimport android.testing.LayoutInflaterBuilder;
42340b0e5216b4fcc435e0459b1ca46155a572100dJason Monkimport android.testing.TestableImageView;
433cfedd78b1e3704481de27d7354cb29b2fb43781Jason Monk
4446bea2e685915fe45d372389b0a90815e6067febBartosz Fabianowskiimport org.junit.Before;
4546bea2e685915fe45d372389b0a90815e6067febBartosz Fabianowskiimport org.junit.Test;
4646bea2e685915fe45d372389b0a90815e6067febBartosz Fabianowskiimport org.junit.runner.RunWith;
47509711105d6514f93891c6cf29a028ec4b87f3d4Christine Franksimport org.mockito.Mockito;
4846bea2e685915fe45d372389b0a90815e6067febBartosz Fabianowski
49774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss/*
50774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss * Compile and run the whole SystemUI test suite:
51774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss   runtest --path frameworks/base/packages/SystemUI/tests
52774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss *
53774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss * Compile and run just this class:
54774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss   runtest --path \
55774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss   frameworks/base/packages/SystemUI/tests/src/com/android/systemui/qs/QSSecurityFooterTest.java
56774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss*/
57774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss
5846bea2e685915fe45d372389b0a90815e6067febBartosz Fabianowski@SmallTest
5946bea2e685915fe45d372389b0a90815e6067febBartosz Fabianowski@RunWith(AndroidJUnit4.class)
60e5b770e47d44a40d412c7d42010b2cf67920d9e3Jason Monkpublic class QSSecurityFooterTest extends SysuiTestCase {
6146bea2e685915fe45d372389b0a90815e6067febBartosz Fabianowski
6246bea2e685915fe45d372389b0a90815e6067febBartosz Fabianowski    private final String MANAGING_ORGANIZATION = "organization";
6346bea2e685915fe45d372389b0a90815e6067febBartosz Fabianowski    private final String DEVICE_OWNER_PACKAGE = "TestDPC";
6446bea2e685915fe45d372389b0a90815e6067febBartosz Fabianowski    private final String VPN_PACKAGE = "TestVPN";
65774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss    private final String VPN_PACKAGE_2 = "TestVPN 2";
6646bea2e685915fe45d372389b0a90815e6067febBartosz Fabianowski
673cfedd78b1e3704481de27d7354cb29b2fb43781Jason Monk    private ViewGroup mRootView;
683cfedd78b1e3704481de27d7354cb29b2fb43781Jason Monk    private TextView mFooterText;
693cfedd78b1e3704481de27d7354cb29b2fb43781Jason Monk    private TestableImageView mFooterIcon;
70e5b770e47d44a40d412c7d42010b2cf67920d9e3Jason Monk    private QSSecurityFooter mFooter;
7146bea2e685915fe45d372389b0a90815e6067febBartosz Fabianowski    private SecurityController mSecurityController = mock(SecurityController.class);
72509711105d6514f93891c6cf29a028ec4b87f3d4Christine Franks    private UserManager mUserManager;
7346bea2e685915fe45d372389b0a90815e6067febBartosz Fabianowski
7446bea2e685915fe45d372389b0a90815e6067febBartosz Fabianowski    @Before
7546bea2e685915fe45d372389b0a90815e6067febBartosz Fabianowski    public void setUp() {
76340b0e5216b4fcc435e0459b1ca46155a572100dJason Monk        mDependency.injectTestDependency(SecurityController.class, mSecurityController);
77340b0e5216b4fcc435e0459b1ca46155a572100dJason Monk        mDependency.injectTestDependency(Dependency.BG_LOOPER, Looper.getMainLooper());
783cfedd78b1e3704481de27d7354cb29b2fb43781Jason Monk        mContext.addMockSystemService(Context.LAYOUT_INFLATER_SERVICE,
793cfedd78b1e3704481de27d7354cb29b2fb43781Jason Monk                new LayoutInflaterBuilder(mContext)
803cfedd78b1e3704481de27d7354cb29b2fb43781Jason Monk                        .replace("ImageView", TestableImageView.class)
813cfedd78b1e3704481de27d7354cb29b2fb43781Jason Monk                        .build());
82509711105d6514f93891c6cf29a028ec4b87f3d4Christine Franks        mUserManager = Mockito.mock(UserManager.class);
83509711105d6514f93891c6cf29a028ec4b87f3d4Christine Franks        mContext.addMockSystemService(Context.USER_SERVICE, mUserManager);
843cfedd78b1e3704481de27d7354cb29b2fb43781Jason Monk        Handler h = new Handler(Looper.getMainLooper());
85e5b770e47d44a40d412c7d42010b2cf67920d9e3Jason Monk        h.post(() -> mFooter = new QSSecurityFooter(null, mContext));
863cfedd78b1e3704481de27d7354cb29b2fb43781Jason Monk        waitForIdleSync(h);
873cfedd78b1e3704481de27d7354cb29b2fb43781Jason Monk        mRootView = (ViewGroup) mFooter.getView();
883cfedd78b1e3704481de27d7354cb29b2fb43781Jason Monk        mFooterText = (TextView) mRootView.findViewById(R.id.footer_text);
893cfedd78b1e3704481de27d7354cb29b2fb43781Jason Monk        mFooterIcon = (TestableImageView) mRootView.findViewById(R.id.footer_icon);
909c7844cb91b43929d0a86b1c90aa1efb37f5463aJason Monk        mFooter.setHostEnvironment(null);
9146bea2e685915fe45d372389b0a90815e6067febBartosz Fabianowski    }
9246bea2e685915fe45d372389b0a90815e6067febBartosz Fabianowski
9346bea2e685915fe45d372389b0a90815e6067febBartosz Fabianowski    @Test
9446bea2e685915fe45d372389b0a90815e6067febBartosz Fabianowski    public void testUnmanaged() {
9546bea2e685915fe45d372389b0a90815e6067febBartosz Fabianowski        when(mSecurityController.isDeviceManaged()).thenReturn(false);
9646bea2e685915fe45d372389b0a90815e6067febBartosz Fabianowski        mFooter.refreshState();
9746bea2e685915fe45d372389b0a90815e6067febBartosz Fabianowski
9846bea2e685915fe45d372389b0a90815e6067febBartosz Fabianowski        waitForIdleSync(mFooter.mHandler);
993cfedd78b1e3704481de27d7354cb29b2fb43781Jason Monk        assertEquals(View.GONE, mRootView.getVisibility());
10046bea2e685915fe45d372389b0a90815e6067febBartosz Fabianowski    }
10146bea2e685915fe45d372389b0a90815e6067febBartosz Fabianowski
10246bea2e685915fe45d372389b0a90815e6067febBartosz Fabianowski    @Test
10346bea2e685915fe45d372389b0a90815e6067febBartosz Fabianowski    public void testManagedNoOwnerName() {
10446bea2e685915fe45d372389b0a90815e6067febBartosz Fabianowski        when(mSecurityController.isDeviceManaged()).thenReturn(true);
10546bea2e685915fe45d372389b0a90815e6067febBartosz Fabianowski        when(mSecurityController.getDeviceOwnerOrganizationName()).thenReturn(null);
10646bea2e685915fe45d372389b0a90815e6067febBartosz Fabianowski        mFooter.refreshState();
10746bea2e685915fe45d372389b0a90815e6067febBartosz Fabianowski
10846bea2e685915fe45d372389b0a90815e6067febBartosz Fabianowski        waitForIdleSync(mFooter.mHandler);
109774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss        assertEquals(mContext.getString(R.string.quick_settings_disclosure_management),
110774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss                     mFooterText.getText());
1113cfedd78b1e3704481de27d7354cb29b2fb43781Jason Monk        assertEquals(View.VISIBLE, mRootView.getVisibility());
112774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss        assertEquals(View.VISIBLE, mFooterIcon.getVisibility());
113774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss        // -1 == never set.
114774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss        assertEquals(-1, mFooterIcon.getLastImageResource());
11546bea2e685915fe45d372389b0a90815e6067febBartosz Fabianowski    }
11646bea2e685915fe45d372389b0a90815e6067febBartosz Fabianowski
11746bea2e685915fe45d372389b0a90815e6067febBartosz Fabianowski    @Test
11846bea2e685915fe45d372389b0a90815e6067febBartosz Fabianowski    public void testManagedOwnerName() {
11946bea2e685915fe45d372389b0a90815e6067febBartosz Fabianowski        when(mSecurityController.isDeviceManaged()).thenReturn(true);
12046bea2e685915fe45d372389b0a90815e6067febBartosz Fabianowski        when(mSecurityController.getDeviceOwnerOrganizationName())
12146bea2e685915fe45d372389b0a90815e6067febBartosz Fabianowski                .thenReturn(MANAGING_ORGANIZATION);
12246bea2e685915fe45d372389b0a90815e6067febBartosz Fabianowski        mFooter.refreshState();
12346bea2e685915fe45d372389b0a90815e6067febBartosz Fabianowski
12446bea2e685915fe45d372389b0a90815e6067febBartosz Fabianowski        waitForIdleSync(mFooter.mHandler);
125774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss        assertEquals(mContext.getString(R.string.quick_settings_disclosure_named_management,
126774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss                                        MANAGING_ORGANIZATION),
1273cfedd78b1e3704481de27d7354cb29b2fb43781Jason Monk                mFooterText.getText());
1283cfedd78b1e3704481de27d7354cb29b2fb43781Jason Monk        assertEquals(View.VISIBLE, mRootView.getVisibility());
129774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss        assertEquals(View.VISIBLE, mFooterIcon.getVisibility());
130774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss        // -1 == never set.
131774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss        assertEquals(-1, mFooterIcon.getLastImageResource());
13246bea2e685915fe45d372389b0a90815e6067febBartosz Fabianowski    }
13346bea2e685915fe45d372389b0a90815e6067febBartosz Fabianowski
13446bea2e685915fe45d372389b0a90815e6067febBartosz Fabianowski    @Test
135509711105d6514f93891c6cf29a028ec4b87f3d4Christine Franks    public void testManagedDemoMode() {
136509711105d6514f93891c6cf29a028ec4b87f3d4Christine Franks        when(mSecurityController.isDeviceManaged()).thenReturn(true);
137509711105d6514f93891c6cf29a028ec4b87f3d4Christine Franks        when(mSecurityController.getDeviceOwnerOrganizationName()).thenReturn(null);
138509711105d6514f93891c6cf29a028ec4b87f3d4Christine Franks        final UserInfo mockUserInfo = Mockito.mock(UserInfo.class);
139509711105d6514f93891c6cf29a028ec4b87f3d4Christine Franks        when(mockUserInfo.isDemo()).thenReturn(true);
140509711105d6514f93891c6cf29a028ec4b87f3d4Christine Franks        when(mUserManager.getUserInfo(anyInt())).thenReturn(mockUserInfo);
141509711105d6514f93891c6cf29a028ec4b87f3d4Christine Franks        Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.DEVICE_DEMO_MODE, 1);
142509711105d6514f93891c6cf29a028ec4b87f3d4Christine Franks
143509711105d6514f93891c6cf29a028ec4b87f3d4Christine Franks        mFooter.refreshState();
144509711105d6514f93891c6cf29a028ec4b87f3d4Christine Franks
145509711105d6514f93891c6cf29a028ec4b87f3d4Christine Franks        waitForIdleSync(mFooter.mHandler);
146509711105d6514f93891c6cf29a028ec4b87f3d4Christine Franks        assertEquals(View.GONE, mRootView.getVisibility());
147509711105d6514f93891c6cf29a028ec4b87f3d4Christine Franks    }
148509711105d6514f93891c6cf29a028ec4b87f3d4Christine Franks
149509711105d6514f93891c6cf29a028ec4b87f3d4Christine Franks    @Test
150a4e169ed68ee57aa249e5e79fcd6bff5df46199ephweiss    public void testNetworkLoggingEnabled() {
151a4e169ed68ee57aa249e5e79fcd6bff5df46199ephweiss        when(mSecurityController.isDeviceManaged()).thenReturn(true);
152a4e169ed68ee57aa249e5e79fcd6bff5df46199ephweiss        when(mSecurityController.isNetworkLoggingEnabled()).thenReturn(true);
153a4e169ed68ee57aa249e5e79fcd6bff5df46199ephweiss        mFooter.refreshState();
154a4e169ed68ee57aa249e5e79fcd6bff5df46199ephweiss
155a4e169ed68ee57aa249e5e79fcd6bff5df46199ephweiss        waitForIdleSync(mFooter.mHandler);
156774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss        assertEquals(mContext.getString(R.string.quick_settings_disclosure_management_monitoring),
157774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss                mFooterText.getText());
1583cfedd78b1e3704481de27d7354cb29b2fb43781Jason Monk        assertEquals(View.VISIBLE, mFooterIcon.getVisibility());
159774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss        // -1 == never set.
160774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss        assertEquals(-1, mFooterIcon.getLastImageResource());
161774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss
162774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss        // Same situation, but with organization name set
163774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss        when(mSecurityController.getDeviceOwnerOrganizationName())
164774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss                .thenReturn(MANAGING_ORGANIZATION);
165774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss        mFooter.refreshState();
166774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss
167774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss        waitForIdleSync(mFooter.mHandler);
168774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss        assertEquals(mContext.getString(
169774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss                             R.string.quick_settings_disclosure_named_management_monitoring,
170774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss                             MANAGING_ORGANIZATION),
171774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss                     mFooterText.getText());
172a4e169ed68ee57aa249e5e79fcd6bff5df46199ephweiss    }
173a4e169ed68ee57aa249e5e79fcd6bff5df46199ephweiss
174a4e169ed68ee57aa249e5e79fcd6bff5df46199ephweiss    @Test
175774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss    public void testManagedCACertsInstalled() {
176774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss        when(mSecurityController.isDeviceManaged()).thenReturn(true);
177774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss        when(mSecurityController.hasCACertInCurrentUser()).thenReturn(true);
178774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss        mFooter.refreshState();
179774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss
180774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss        waitForIdleSync(mFooter.mHandler);
181774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss        assertEquals(mContext.getString(R.string.quick_settings_disclosure_management_monitoring),
182774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss                mFooterText.getText());
183774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss    }
184774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss
185774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss    @Test
186774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss    public void testManagedOneVpnEnabled() {
187a4e169ed68ee57aa249e5e79fcd6bff5df46199ephweiss        when(mSecurityController.isDeviceManaged()).thenReturn(true);
188a4e169ed68ee57aa249e5e79fcd6bff5df46199ephweiss        when(mSecurityController.isVpnEnabled()).thenReturn(true);
189774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss        when(mSecurityController.getPrimaryVpnName()).thenReturn(VPN_PACKAGE);
190a4e169ed68ee57aa249e5e79fcd6bff5df46199ephweiss        mFooter.refreshState();
191a4e169ed68ee57aa249e5e79fcd6bff5df46199ephweiss
192a4e169ed68ee57aa249e5e79fcd6bff5df46199ephweiss        waitForIdleSync(mFooter.mHandler);
193774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss        assertEquals(mContext.getString(R.string.quick_settings_disclosure_management_named_vpn,
194774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss                                        VPN_PACKAGE),
195774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss                     mFooterText.getText());
1963cfedd78b1e3704481de27d7354cb29b2fb43781Jason Monk        assertEquals(View.VISIBLE, mFooterIcon.getVisibility());
197774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss        assertEquals(R.drawable.ic_qs_vpn, mFooterIcon.getLastImageResource());
198774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss
199774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss        // Same situation, but with organization name set
200774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss        when(mSecurityController.getDeviceOwnerOrganizationName())
201774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss                .thenReturn(MANAGING_ORGANIZATION);
202774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss        mFooter.refreshState();
203774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss
204774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss        waitForIdleSync(mFooter.mHandler);
205774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss        assertEquals(mContext.getString(
206774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss                              R.string.quick_settings_disclosure_named_management_named_vpn,
207774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss                              MANAGING_ORGANIZATION, VPN_PACKAGE),
208774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss                     mFooterText.getText());
209774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss    }
210774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss
211774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss    @Test
212774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss    public void testManagedTwoVpnsEnabled() {
213774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss        when(mSecurityController.isDeviceManaged()).thenReturn(true);
214774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss        when(mSecurityController.isVpnEnabled()).thenReturn(true);
215774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss        when(mSecurityController.getPrimaryVpnName()).thenReturn(VPN_PACKAGE);
216774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss        when(mSecurityController.getWorkProfileVpnName()).thenReturn(VPN_PACKAGE_2);
217774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss        mFooter.refreshState();
218774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss
219774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss        waitForIdleSync(mFooter.mHandler);
220774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss        assertEquals(mContext.getString(R.string.quick_settings_disclosure_management_vpns),
221774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss                     mFooterText.getText());
222774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss        assertEquals(View.VISIBLE, mFooterIcon.getVisibility());
223774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss        assertEquals(R.drawable.ic_qs_vpn, mFooterIcon.getLastImageResource());
224774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss
225774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss        // Same situation, but with organization name set
226774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss        when(mSecurityController.getDeviceOwnerOrganizationName())
227774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss                .thenReturn(MANAGING_ORGANIZATION);
228774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss        mFooter.refreshState();
229774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss
230774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss        waitForIdleSync(mFooter.mHandler);
231774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss        assertEquals(mContext.getString(R.string.quick_settings_disclosure_named_management_vpns,
232774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss                                        MANAGING_ORGANIZATION),
233774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss                     mFooterText.getText());
234a4e169ed68ee57aa249e5e79fcd6bff5df46199ephweiss    }
235a4e169ed68ee57aa249e5e79fcd6bff5df46199ephweiss
236a4e169ed68ee57aa249e5e79fcd6bff5df46199ephweiss    @Test
237a4e169ed68ee57aa249e5e79fcd6bff5df46199ephweiss    public void testNetworkLoggingAndVpnEnabled() {
238a4e169ed68ee57aa249e5e79fcd6bff5df46199ephweiss        when(mSecurityController.isDeviceManaged()).thenReturn(true);
239a4e169ed68ee57aa249e5e79fcd6bff5df46199ephweiss        when(mSecurityController.isNetworkLoggingEnabled()).thenReturn(true);
240a4e169ed68ee57aa249e5e79fcd6bff5df46199ephweiss        when(mSecurityController.isVpnEnabled()).thenReturn(true);
241774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss        when(mSecurityController.getPrimaryVpnName()).thenReturn("VPN Test App");
242a4e169ed68ee57aa249e5e79fcd6bff5df46199ephweiss        mFooter.refreshState();
243a4e169ed68ee57aa249e5e79fcd6bff5df46199ephweiss
244a4e169ed68ee57aa249e5e79fcd6bff5df46199ephweiss        waitForIdleSync(mFooter.mHandler);
2453cfedd78b1e3704481de27d7354cb29b2fb43781Jason Monk        assertEquals(View.VISIBLE, mFooterIcon.getVisibility());
246774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss        assertEquals(R.drawable.ic_qs_vpn, mFooterIcon.getLastImageResource());
247774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss        assertEquals(mContext.getString(R.string.quick_settings_disclosure_management_monitoring),
248774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss                mFooterText.getText());
249774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss    }
250774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss
251774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss    @Test
252774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss    public void testWorkProfileCACertsInstalled() {
253774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss        when(mSecurityController.isDeviceManaged()).thenReturn(false);
254774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss        when(mSecurityController.hasCACertInWorkProfile()).thenReturn(true);
255774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss        mFooter.refreshState();
256774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss
257774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss        waitForIdleSync(mFooter.mHandler);
2583cfedd78b1e3704481de27d7354cb29b2fb43781Jason Monk        // -1 == never set.
2593cfedd78b1e3704481de27d7354cb29b2fb43781Jason Monk        assertEquals(-1, mFooterIcon.getLastImageResource());
260774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss        assertEquals(mContext.getString(
261774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss                             R.string.quick_settings_disclosure_managed_profile_monitoring),
262774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss                     mFooterText.getText());
263774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss
264774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss        // Same situation, but with organization name set
265774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss        when(mSecurityController.getWorkProfileOrganizationName())
266774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss                .thenReturn(MANAGING_ORGANIZATION);
267774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss        mFooter.refreshState();
268774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss
269774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss        waitForIdleSync(mFooter.mHandler);
270774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss        assertEquals(mContext.getString(
271774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss                             R.string.quick_settings_disclosure_named_managed_profile_monitoring,
272774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss                             MANAGING_ORGANIZATION),
273774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss                     mFooterText.getText());
274774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss    }
275774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss
276774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss    @Test
277774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss    public void testCACertsInstalled() {
278774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss        when(mSecurityController.isDeviceManaged()).thenReturn(false);
279774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss        when(mSecurityController.hasCACertInCurrentUser()).thenReturn(true);
280774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss        mFooter.refreshState();
281774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss
282774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss        waitForIdleSync(mFooter.mHandler);
283774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss        // -1 == never set.
284774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss        assertEquals(-1, mFooterIcon.getLastImageResource());
285774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss        assertEquals(mContext.getString(R.string.quick_settings_disclosure_monitoring),
286774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss                     mFooterText.getText());
287774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss    }
288774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss
289774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss    @Test
290774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss    public void testTwoVpnsEnabled() {
291774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss        when(mSecurityController.isVpnEnabled()).thenReturn(true);
292774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss        when(mSecurityController.getPrimaryVpnName()).thenReturn(VPN_PACKAGE);
293774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss        when(mSecurityController.getWorkProfileVpnName()).thenReturn(VPN_PACKAGE_2);
294774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss        mFooter.refreshState();
295774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss
296774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss        waitForIdleSync(mFooter.mHandler);
297774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss        assertEquals(R.drawable.ic_qs_vpn, mFooterIcon.getLastImageResource());
298774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss        assertEquals(mContext.getString(R.string.quick_settings_disclosure_vpns),
299774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss                     mFooterText.getText());
300774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss    }
301774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss
302774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss    @Test
303774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss    public void testWorkProfileVpnEnabled() {
304774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss        when(mSecurityController.isVpnEnabled()).thenReturn(true);
305774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss        when(mSecurityController.getWorkProfileVpnName()).thenReturn(VPN_PACKAGE_2);
306774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss        mFooter.refreshState();
307774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss
308774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss        waitForIdleSync(mFooter.mHandler);
309774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss        assertEquals(R.drawable.ic_qs_vpn, mFooterIcon.getLastImageResource());
310774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss        assertEquals(mContext.getString(
311774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss                             R.string.quick_settings_disclosure_managed_profile_named_vpn,
312774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss                             VPN_PACKAGE_2),
313774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss                     mFooterText.getText());
314774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss    }
315774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss
316774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss    @Test
317774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss    public void testVpnEnabled() {
318774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss        when(mSecurityController.isVpnEnabled()).thenReturn(true);
319774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss        when(mSecurityController.getPrimaryVpnName()).thenReturn(VPN_PACKAGE);
320774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss        mFooter.refreshState();
321774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss
322774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss        waitForIdleSync(mFooter.mHandler);
323774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss        assertEquals(R.drawable.ic_qs_vpn, mFooterIcon.getLastImageResource());
324774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss        assertEquals(mContext.getString(R.string.quick_settings_disclosure_named_vpn,
325774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss                                        VPN_PACKAGE),
326774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss                     mFooterText.getText());
327774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss
328774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss        when(mSecurityController.hasWorkProfile()).thenReturn(true);
329774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss        mFooter.refreshState();
330774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss
331774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss        waitForIdleSync(mFooter.mHandler);
332774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss        assertEquals(mContext.getString(
333774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss                             R.string.quick_settings_disclosure_personal_profile_named_vpn,
334774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss                             VPN_PACKAGE),
335774c6542cd429e33a8dcecd9c775d61f3675cdafphweiss                     mFooterText.getText());
336a4e169ed68ee57aa249e5e79fcd6bff5df46199ephweiss    }
337a4e169ed68ee57aa249e5e79fcd6bff5df46199ephweiss
338a4e169ed68ee57aa249e5e79fcd6bff5df46199ephweiss    @Test
3390330f881447b053f88de6d30c99bfe4feed3c91dphweiss    public void testGetManagementMessage() {
3400330f881447b053f88de6d30c99bfe4feed3c91dphweiss        assertEquals(null, mFooter.getManagementMessage(false, MANAGING_ORGANIZATION));
3410330f881447b053f88de6d30c99bfe4feed3c91dphweiss        assertEquals(mContext.getString(R.string.monitoring_description_named_management,
3420330f881447b053f88de6d30c99bfe4feed3c91dphweiss                                        MANAGING_ORGANIZATION),
3430330f881447b053f88de6d30c99bfe4feed3c91dphweiss                     mFooter.getManagementMessage(true, MANAGING_ORGANIZATION));
3440330f881447b053f88de6d30c99bfe4feed3c91dphweiss        assertEquals(mContext.getString(R.string.monitoring_description_management),
3450330f881447b053f88de6d30c99bfe4feed3c91dphweiss                     mFooter.getManagementMessage(true, null));
34646bea2e685915fe45d372389b0a90815e6067febBartosz Fabianowski    }
34746bea2e685915fe45d372389b0a90815e6067febBartosz Fabianowski
34846bea2e685915fe45d372389b0a90815e6067febBartosz Fabianowski    @Test
3490330f881447b053f88de6d30c99bfe4feed3c91dphweiss    public void testGetCaCertsMessage() {
3500330f881447b053f88de6d30c99bfe4feed3c91dphweiss        assertEquals(null, mFooter.getCaCertsMessage(true, false, false));
3510330f881447b053f88de6d30c99bfe4feed3c91dphweiss        assertEquals(null, mFooter.getCaCertsMessage(false, false, false));
3520330f881447b053f88de6d30c99bfe4feed3c91dphweiss        assertEquals(mContext.getString(R.string.monitoring_description_management_ca_certificate),
3530330f881447b053f88de6d30c99bfe4feed3c91dphweiss                     mFooter.getCaCertsMessage(true, true, true));
3540330f881447b053f88de6d30c99bfe4feed3c91dphweiss        assertEquals(mContext.getString(R.string.monitoring_description_management_ca_certificate),
3550330f881447b053f88de6d30c99bfe4feed3c91dphweiss                     mFooter.getCaCertsMessage(true, false, true));
3560330f881447b053f88de6d30c99bfe4feed3c91dphweiss        assertEquals(mContext.getString(
3570330f881447b053f88de6d30c99bfe4feed3c91dphweiss                         R.string.monitoring_description_managed_profile_ca_certificate),
3580330f881447b053f88de6d30c99bfe4feed3c91dphweiss                     mFooter.getCaCertsMessage(false, false, true));
3590330f881447b053f88de6d30c99bfe4feed3c91dphweiss        assertEquals(mContext.getString(
3600330f881447b053f88de6d30c99bfe4feed3c91dphweiss                         R.string.monitoring_description_ca_certificate),
3610330f881447b053f88de6d30c99bfe4feed3c91dphweiss                     mFooter.getCaCertsMessage(false, true, false));
36246bea2e685915fe45d372389b0a90815e6067febBartosz Fabianowski    }
36346bea2e685915fe45d372389b0a90815e6067febBartosz Fabianowski
36446bea2e685915fe45d372389b0a90815e6067febBartosz Fabianowski    @Test
3650330f881447b053f88de6d30c99bfe4feed3c91dphweiss    public void testGetNetworkLoggingMessage() {
3660330f881447b053f88de6d30c99bfe4feed3c91dphweiss        assertEquals(null, mFooter.getNetworkLoggingMessage(false));
3670330f881447b053f88de6d30c99bfe4feed3c91dphweiss        assertEquals(mContext.getString(R.string.monitoring_description_management_network_logging),
3680330f881447b053f88de6d30c99bfe4feed3c91dphweiss                     mFooter.getNetworkLoggingMessage(true));
36946bea2e685915fe45d372389b0a90815e6067febBartosz Fabianowski    }
37046bea2e685915fe45d372389b0a90815e6067febBartosz Fabianowski
37146bea2e685915fe45d372389b0a90815e6067febBartosz Fabianowski    @Test
3720330f881447b053f88de6d30c99bfe4feed3c91dphweiss    public void testGetVpnMessage() {
3730330f881447b053f88de6d30c99bfe4feed3c91dphweiss        assertEquals(null, mFooter.getVpnMessage(true, true, null, null));
3740330f881447b053f88de6d30c99bfe4feed3c91dphweiss        assertEquals(addLink(mContext.getString(R.string.monitoring_description_two_named_vpns,
3750330f881447b053f88de6d30c99bfe4feed3c91dphweiss                                 VPN_PACKAGE, VPN_PACKAGE_2)),
3760330f881447b053f88de6d30c99bfe4feed3c91dphweiss                     mFooter.getVpnMessage(true, true, VPN_PACKAGE, VPN_PACKAGE_2));
3770330f881447b053f88de6d30c99bfe4feed3c91dphweiss        assertEquals(addLink(mContext.getString(R.string.monitoring_description_two_named_vpns,
3780330f881447b053f88de6d30c99bfe4feed3c91dphweiss                                 VPN_PACKAGE, VPN_PACKAGE_2)),
3790330f881447b053f88de6d30c99bfe4feed3c91dphweiss                     mFooter.getVpnMessage(false, true, VPN_PACKAGE, VPN_PACKAGE_2));
3800330f881447b053f88de6d30c99bfe4feed3c91dphweiss        assertEquals(addLink(mContext.getString(R.string.monitoring_description_named_vpn,
3810330f881447b053f88de6d30c99bfe4feed3c91dphweiss                                 VPN_PACKAGE)),
3820330f881447b053f88de6d30c99bfe4feed3c91dphweiss                     mFooter.getVpnMessage(true, false, VPN_PACKAGE, null));
3830330f881447b053f88de6d30c99bfe4feed3c91dphweiss        assertEquals(addLink(mContext.getString(R.string.monitoring_description_named_vpn,
3840330f881447b053f88de6d30c99bfe4feed3c91dphweiss                                 VPN_PACKAGE)),
3850330f881447b053f88de6d30c99bfe4feed3c91dphweiss                     mFooter.getVpnMessage(false, false, VPN_PACKAGE, null));
3860330f881447b053f88de6d30c99bfe4feed3c91dphweiss        assertEquals(addLink(mContext.getString(R.string.monitoring_description_named_vpn,
3870330f881447b053f88de6d30c99bfe4feed3c91dphweiss                                 VPN_PACKAGE_2)),
3880330f881447b053f88de6d30c99bfe4feed3c91dphweiss                     mFooter.getVpnMessage(true, true, null, VPN_PACKAGE_2));
3890330f881447b053f88de6d30c99bfe4feed3c91dphweiss        assertEquals(addLink(mContext.getString(
3900330f881447b053f88de6d30c99bfe4feed3c91dphweiss                                 R.string.monitoring_description_managed_profile_named_vpn,
3910330f881447b053f88de6d30c99bfe4feed3c91dphweiss                                 VPN_PACKAGE_2)),
3920330f881447b053f88de6d30c99bfe4feed3c91dphweiss                     mFooter.getVpnMessage(false, true, null, VPN_PACKAGE_2));
3930330f881447b053f88de6d30c99bfe4feed3c91dphweiss        assertEquals(addLink(mContext.getString(
3940330f881447b053f88de6d30c99bfe4feed3c91dphweiss                                 R.string.monitoring_description_personal_profile_named_vpn,
3950330f881447b053f88de6d30c99bfe4feed3c91dphweiss                                 VPN_PACKAGE)),
3960330f881447b053f88de6d30c99bfe4feed3c91dphweiss                     mFooter.getVpnMessage(false, true, VPN_PACKAGE, null));
39746bea2e685915fe45d372389b0a90815e6067febBartosz Fabianowski    }
39846bea2e685915fe45d372389b0a90815e6067febBartosz Fabianowski
3999aaa8cfc919db3b0fcb9ca3254ce1408981bcf48Winston Man    @Test
4009aaa8cfc919db3b0fcb9ca3254ce1408981bcf48Winston Man    public void testConfigSubtitleVisibility() {
4019aaa8cfc919db3b0fcb9ca3254ce1408981bcf48Winston Man        View view = LayoutInflater.from(mContext)
4029aaa8cfc919db3b0fcb9ca3254ce1408981bcf48Winston Man                .inflate(R.layout.quick_settings_footer_dialog, null);
4039aaa8cfc919db3b0fcb9ca3254ce1408981bcf48Winston Man
4049aaa8cfc919db3b0fcb9ca3254ce1408981bcf48Winston Man        // Device Management subtitle should be shown when there is Device Management section only
4059aaa8cfc919db3b0fcb9ca3254ce1408981bcf48Winston Man        // Other sections visibility will be set somewhere else so it will not be tested here
4069aaa8cfc919db3b0fcb9ca3254ce1408981bcf48Winston Man        mFooter.configSubtitleVisibility(true, false, false, false, view);
4079aaa8cfc919db3b0fcb9ca3254ce1408981bcf48Winston Man        assertEquals(View.VISIBLE,
4089aaa8cfc919db3b0fcb9ca3254ce1408981bcf48Winston Man                view.findViewById(R.id.device_management_subtitle).getVisibility());
4099aaa8cfc919db3b0fcb9ca3254ce1408981bcf48Winston Man
4109aaa8cfc919db3b0fcb9ca3254ce1408981bcf48Winston Man        // If there are multiple sections, all subtitles should be shown
4119aaa8cfc919db3b0fcb9ca3254ce1408981bcf48Winston Man        mFooter.configSubtitleVisibility(true, true, false, false, view);
4129aaa8cfc919db3b0fcb9ca3254ce1408981bcf48Winston Man        assertEquals(View.VISIBLE,
4139aaa8cfc919db3b0fcb9ca3254ce1408981bcf48Winston Man                view.findViewById(R.id.device_management_subtitle).getVisibility());
4149aaa8cfc919db3b0fcb9ca3254ce1408981bcf48Winston Man        assertEquals(View.VISIBLE,
4159aaa8cfc919db3b0fcb9ca3254ce1408981bcf48Winston Man                view.findViewById(R.id.ca_certs_subtitle).getVisibility());
4169aaa8cfc919db3b0fcb9ca3254ce1408981bcf48Winston Man
4179aaa8cfc919db3b0fcb9ca3254ce1408981bcf48Winston Man        // If there are multiple sections, all subtitles should be shown
4189aaa8cfc919db3b0fcb9ca3254ce1408981bcf48Winston Man        mFooter.configSubtitleVisibility(true, true, true, true, view);
4199aaa8cfc919db3b0fcb9ca3254ce1408981bcf48Winston Man        assertEquals(View.VISIBLE,
4209aaa8cfc919db3b0fcb9ca3254ce1408981bcf48Winston Man                view.findViewById(R.id.device_management_subtitle).getVisibility());
4219aaa8cfc919db3b0fcb9ca3254ce1408981bcf48Winston Man        assertEquals(View.VISIBLE,
4229aaa8cfc919db3b0fcb9ca3254ce1408981bcf48Winston Man                view.findViewById(R.id.ca_certs_subtitle).getVisibility());
4239aaa8cfc919db3b0fcb9ca3254ce1408981bcf48Winston Man        assertEquals(View.VISIBLE,
4249aaa8cfc919db3b0fcb9ca3254ce1408981bcf48Winston Man                view.findViewById(R.id.network_logging_subtitle).getVisibility());
4259aaa8cfc919db3b0fcb9ca3254ce1408981bcf48Winston Man        assertEquals(View.VISIBLE,
4269aaa8cfc919db3b0fcb9ca3254ce1408981bcf48Winston Man                view.findViewById(R.id.vpn_subtitle).getVisibility());
4279aaa8cfc919db3b0fcb9ca3254ce1408981bcf48Winston Man
4289aaa8cfc919db3b0fcb9ca3254ce1408981bcf48Winston Man        // If there are multiple sections, all subtitles should be shown, event if there is no
4299aaa8cfc919db3b0fcb9ca3254ce1408981bcf48Winston Man        // Device Management section
4309aaa8cfc919db3b0fcb9ca3254ce1408981bcf48Winston Man        mFooter.configSubtitleVisibility(false, true, true, true, view);
4319aaa8cfc919db3b0fcb9ca3254ce1408981bcf48Winston Man        assertEquals(View.VISIBLE,
4329aaa8cfc919db3b0fcb9ca3254ce1408981bcf48Winston Man                view.findViewById(R.id.ca_certs_subtitle).getVisibility());
4339aaa8cfc919db3b0fcb9ca3254ce1408981bcf48Winston Man        assertEquals(View.VISIBLE,
4349aaa8cfc919db3b0fcb9ca3254ce1408981bcf48Winston Man                view.findViewById(R.id.network_logging_subtitle).getVisibility());
4359aaa8cfc919db3b0fcb9ca3254ce1408981bcf48Winston Man        assertEquals(View.VISIBLE,
4369aaa8cfc919db3b0fcb9ca3254ce1408981bcf48Winston Man                view.findViewById(R.id.vpn_subtitle).getVisibility());
4379aaa8cfc919db3b0fcb9ca3254ce1408981bcf48Winston Man
4389aaa8cfc919db3b0fcb9ca3254ce1408981bcf48Winston Man        // If there is only 1 section, the title should be hidden
4399aaa8cfc919db3b0fcb9ca3254ce1408981bcf48Winston Man        mFooter.configSubtitleVisibility(false, true, false, false, view);
4409aaa8cfc919db3b0fcb9ca3254ce1408981bcf48Winston Man        assertEquals(View.GONE,
4419aaa8cfc919db3b0fcb9ca3254ce1408981bcf48Winston Man                view.findViewById(R.id.ca_certs_subtitle).getVisibility());
4429aaa8cfc919db3b0fcb9ca3254ce1408981bcf48Winston Man        mFooter.configSubtitleVisibility(false, false, true, false, view);
4439aaa8cfc919db3b0fcb9ca3254ce1408981bcf48Winston Man        assertEquals(View.GONE,
4449aaa8cfc919db3b0fcb9ca3254ce1408981bcf48Winston Man                view.findViewById(R.id.network_logging_subtitle).getVisibility());
4459aaa8cfc919db3b0fcb9ca3254ce1408981bcf48Winston Man        mFooter.configSubtitleVisibility(false, false, false, true, view);
4469aaa8cfc919db3b0fcb9ca3254ce1408981bcf48Winston Man        assertEquals(View.GONE,
4479aaa8cfc919db3b0fcb9ca3254ce1408981bcf48Winston Man                view.findViewById(R.id.vpn_subtitle).getVisibility());
4489aaa8cfc919db3b0fcb9ca3254ce1408981bcf48Winston Man    }
4499aaa8cfc919db3b0fcb9ca3254ce1408981bcf48Winston Man
4500330f881447b053f88de6d30c99bfe4feed3c91dphweiss    private CharSequence addLink(CharSequence description) {
45146bea2e685915fe45d372389b0a90815e6067febBartosz Fabianowski        final SpannableStringBuilder message = new SpannableStringBuilder();
4520330f881447b053f88de6d30c99bfe4feed3c91dphweiss        message.append(description);
4530330f881447b053f88de6d30c99bfe4feed3c91dphweiss        message.append(mContext.getString(R.string.monitoring_description_vpn_settings_separator));
4540330f881447b053f88de6d30c99bfe4feed3c91dphweiss        message.append(mContext.getString(R.string.monitoring_description_vpn_settings),
4550330f881447b053f88de6d30c99bfe4feed3c91dphweiss                mFooter.new VpnSpan(), 0);
45646bea2e685915fe45d372389b0a90815e6067febBartosz Fabianowski        return message;
45746bea2e685915fe45d372389b0a90815e6067febBartosz Fabianowski    }
45846bea2e685915fe45d372389b0a90815e6067febBartosz Fabianowski}
459