1fc9af34b9d0815a27077d29c5aea360a3e73ae57Selim Cinek/*
2fc9af34b9d0815a27077d29c5aea360a3e73ae57Selim Cinek * Copyright (C) 2017 The Android Open Source Project
3fc9af34b9d0815a27077d29c5aea360a3e73ae57Selim Cinek *
4fc9af34b9d0815a27077d29c5aea360a3e73ae57Selim Cinek * Licensed under the Apache License, Version 2.0 (the "License");
5fc9af34b9d0815a27077d29c5aea360a3e73ae57Selim Cinek * you may not use this file except in compliance with the License.
6fc9af34b9d0815a27077d29c5aea360a3e73ae57Selim Cinek * You may obtain a copy of the License at
7fc9af34b9d0815a27077d29c5aea360a3e73ae57Selim Cinek *
8fc9af34b9d0815a27077d29c5aea360a3e73ae57Selim Cinek *      http://www.apache.org/licenses/LICENSE-2.0
9fc9af34b9d0815a27077d29c5aea360a3e73ae57Selim Cinek *
10fc9af34b9d0815a27077d29c5aea360a3e73ae57Selim Cinek * Unless required by applicable law or agreed to in writing, software
11fc9af34b9d0815a27077d29c5aea360a3e73ae57Selim Cinek * distributed under the License is distributed on an "AS IS" BASIS,
12fc9af34b9d0815a27077d29c5aea360a3e73ae57Selim Cinek * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13fc9af34b9d0815a27077d29c5aea360a3e73ae57Selim Cinek * See the License for the specific language governing permissions and
14fc9af34b9d0815a27077d29c5aea360a3e73ae57Selim Cinek * limitations under the License
15fc9af34b9d0815a27077d29c5aea360a3e73ae57Selim Cinek */
16fc9af34b9d0815a27077d29c5aea360a3e73ae57Selim Cinek
17fc9af34b9d0815a27077d29c5aea360a3e73ae57Selim Cinekpackage com.android.systemui.settings;
18fc9af34b9d0815a27077d29c5aea360a3e73ae57Selim Cinek
19fc9af34b9d0815a27077d29c5aea360a3e73ae57Selim Cinekimport android.content.Intent;
2025a52b65b2cac1f49f37f4532cfa62282432957aJason Monkimport android.support.test.filters.SmallTest;
21fc9af34b9d0815a27077d29c5aea360a3e73ae57Selim Cinek
22fc9af34b9d0815a27077d29c5aea360a3e73ae57Selim Cinekimport com.android.systemui.SysuiTestCase;
23fc9af34b9d0815a27077d29c5aea360a3e73ae57Selim Cinek
24fc9af34b9d0815a27077d29c5aea360a3e73ae57Selim Cinekimport org.junit.Before;
25fc9af34b9d0815a27077d29c5aea360a3e73ae57Selim Cinekimport org.junit.Test;
26fc9af34b9d0815a27077d29c5aea360a3e73ae57Selim Cinek
27fc9af34b9d0815a27077d29c5aea360a3e73ae57Selim Cinek/**
28fc9af34b9d0815a27077d29c5aea360a3e73ae57Selim Cinek * Testing functionality of the current user tracker
29fc9af34b9d0815a27077d29c5aea360a3e73ae57Selim Cinek */
3025a52b65b2cac1f49f37f4532cfa62282432957aJason Monk@SmallTest
31fc9af34b9d0815a27077d29c5aea360a3e73ae57Selim Cinekpublic class CurrentUserTrackerTest extends SysuiTestCase {
32fc9af34b9d0815a27077d29c5aea360a3e73ae57Selim Cinek
33fc9af34b9d0815a27077d29c5aea360a3e73ae57Selim Cinek    private CurrentUserTracker mTracker;
34fc9af34b9d0815a27077d29c5aea360a3e73ae57Selim Cinek    private CurrentUserTracker.UserReceiver mReceiver;
35fc9af34b9d0815a27077d29c5aea360a3e73ae57Selim Cinek
36fc9af34b9d0815a27077d29c5aea360a3e73ae57Selim Cinek    @Before
37fc9af34b9d0815a27077d29c5aea360a3e73ae57Selim Cinek    public void setUp() {
38fc9af34b9d0815a27077d29c5aea360a3e73ae57Selim Cinek        mReceiver = new CurrentUserTracker.UserReceiver(getContext());
39fc9af34b9d0815a27077d29c5aea360a3e73ae57Selim Cinek        mTracker = new CurrentUserTracker(mReceiver) {
40fc9af34b9d0815a27077d29c5aea360a3e73ae57Selim Cinek            @Override
41fc9af34b9d0815a27077d29c5aea360a3e73ae57Selim Cinek            public void onUserSwitched(int newUserId) {
42fc9af34b9d0815a27077d29c5aea360a3e73ae57Selim Cinek                stopTracking();
43fc9af34b9d0815a27077d29c5aea360a3e73ae57Selim Cinek            }
44fc9af34b9d0815a27077d29c5aea360a3e73ae57Selim Cinek        };
45fc9af34b9d0815a27077d29c5aea360a3e73ae57Selim Cinek    }
46fc9af34b9d0815a27077d29c5aea360a3e73ae57Selim Cinek
47fc9af34b9d0815a27077d29c5aea360a3e73ae57Selim Cinek    @Test
48fc9af34b9d0815a27077d29c5aea360a3e73ae57Selim Cinek    public void testBroadCastDoesntCrashOnConcurrentModification() {
49fc9af34b9d0815a27077d29c5aea360a3e73ae57Selim Cinek        mTracker.startTracking();
50fc9af34b9d0815a27077d29c5aea360a3e73ae57Selim Cinek        CurrentUserTracker secondTracker = new CurrentUserTracker(mReceiver) {
51fc9af34b9d0815a27077d29c5aea360a3e73ae57Selim Cinek            @Override
52fc9af34b9d0815a27077d29c5aea360a3e73ae57Selim Cinek            public void onUserSwitched(int newUserId) {
53fc9af34b9d0815a27077d29c5aea360a3e73ae57Selim Cinek                stopTracking();
54fc9af34b9d0815a27077d29c5aea360a3e73ae57Selim Cinek            }
55fc9af34b9d0815a27077d29c5aea360a3e73ae57Selim Cinek        };
56fc9af34b9d0815a27077d29c5aea360a3e73ae57Selim Cinek        secondTracker.startTracking();
57fc9af34b9d0815a27077d29c5aea360a3e73ae57Selim Cinek        triggerUserSwitch();
58fc9af34b9d0815a27077d29c5aea360a3e73ae57Selim Cinek    }
59fc9af34b9d0815a27077d29c5aea360a3e73ae57Selim Cinek    /**
60fc9af34b9d0815a27077d29c5aea360a3e73ae57Selim Cinek     * Simulates a user switch event.
61fc9af34b9d0815a27077d29c5aea360a3e73ae57Selim Cinek     */
62fc9af34b9d0815a27077d29c5aea360a3e73ae57Selim Cinek    private void triggerUserSwitch() {
63fc9af34b9d0815a27077d29c5aea360a3e73ae57Selim Cinek        Intent intent = new Intent(Intent.ACTION_USER_SWITCHED);
64fc9af34b9d0815a27077d29c5aea360a3e73ae57Selim Cinek        intent.putExtra(Intent.EXTRA_USER_HANDLE, 1);
65fc9af34b9d0815a27077d29c5aea360a3e73ae57Selim Cinek        mReceiver.onReceive(getContext(), intent);
66fc9af34b9d0815a27077d29c5aea360a3e73ae57Selim Cinek    }
67fc9af34b9d0815a27077d29c5aea360a3e73ae57Selim Cinek}
68