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