1 /* 2 * Copyright (C) 2019 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.systemui.model; 18 19 20 import static android.view.Display.DEFAULT_DISPLAY; 21 22 import static org.mockito.Mockito.mock; 23 import static org.mockito.Mockito.times; 24 import static org.mockito.Mockito.verify; 25 26 import androidx.test.filters.SmallTest; 27 28 import com.android.systemui.SysuiTestCase; 29 import com.android.systemui.settings.FakeDisplayTracker; 30 31 import org.junit.Before; 32 import org.junit.Test; 33 import org.junit.runner.RunWith; 34 import org.mockito.junit.MockitoJUnitRunner; 35 36 @SmallTest 37 @RunWith(MockitoJUnitRunner.class) 38 public class SysUiStateTest extends SysuiTestCase { 39 private static final int FLAG_1 = 1; 40 private static final int FLAG_2 = 1 << 1; 41 private static final int FLAG_3 = 1 << 2; 42 private static final int FLAG_4 = 1 << 3; 43 private static final int DISPLAY_ID = DEFAULT_DISPLAY; 44 45 private SysUiState.SysUiStateCallback mCallback; 46 private SysUiState mFlagsContainer; 47 48 @Before setup()49 public void setup() { 50 FakeDisplayTracker displayTracker = new FakeDisplayTracker(mContext); 51 mFlagsContainer = new SysUiState(displayTracker); 52 mCallback = mock(SysUiState.SysUiStateCallback.class); 53 mFlagsContainer.addCallback(mCallback); 54 } 55 56 @Test addSingle_setFlag()57 public void addSingle_setFlag() { 58 setFlags(FLAG_1); 59 60 verify(mCallback, times(1)).onSystemUiStateChanged(FLAG_1); 61 } 62 63 @Test addMultiple_setFlag()64 public void addMultiple_setFlag() { 65 setFlags(FLAG_1); 66 setFlags(FLAG_2); 67 68 verify(mCallback, times(1)).onSystemUiStateChanged(FLAG_1); 69 verify(mCallback, times(1)) 70 .onSystemUiStateChanged(FLAG_1 | FLAG_2); 71 } 72 73 @Test addMultipleRemoveOne_setFlag()74 public void addMultipleRemoveOne_setFlag() { 75 setFlags(FLAG_1); 76 setFlags(FLAG_2); 77 mFlagsContainer.setFlag(FLAG_1, false) 78 .commitUpdate(DISPLAY_ID); 79 80 verify(mCallback, times(1)).onSystemUiStateChanged(FLAG_1); 81 verify(mCallback, times(1)) 82 .onSystemUiStateChanged(FLAG_1 | FLAG_2); 83 verify(mCallback, times(1)).onSystemUiStateChanged(FLAG_2); 84 } 85 86 @Test addMultiple_setFlags()87 public void addMultiple_setFlags() { 88 setFlags(FLAG_1, FLAG_2, FLAG_3, FLAG_4); 89 90 int expected = FLAG_1 | FLAG_2 | FLAG_3 | FLAG_4; 91 verify(mCallback, times(1)).onSystemUiStateChanged(expected); 92 } 93 94 @Test addMultipleRemoveOne_setFlags()95 public void addMultipleRemoveOne_setFlags() { 96 setFlags(FLAG_1, FLAG_2, FLAG_3, FLAG_4); 97 mFlagsContainer.setFlag(FLAG_2, false) 98 .commitUpdate(DISPLAY_ID); 99 100 int expected1 = FLAG_1 | FLAG_2 | FLAG_3 | FLAG_4; 101 verify(mCallback, times(1)).onSystemUiStateChanged(expected1); 102 int expected2 = FLAG_1 | FLAG_3 | FLAG_4; 103 verify(mCallback, times(1)).onSystemUiStateChanged(expected2); 104 } 105 106 @Test removeCallback()107 public void removeCallback() { 108 mFlagsContainer.removeCallback(mCallback); 109 setFlags(FLAG_1, FLAG_2, FLAG_3, FLAG_4); 110 111 int expected = FLAG_1 | FLAG_2 | FLAG_3 | FLAG_4; 112 verify(mCallback, times(0)).onSystemUiStateChanged(expected); 113 } 114 setFlags(int... flags)115 private void setFlags(int... flags) { 116 for (int i = 0; i < flags.length; i++) { 117 mFlagsContainer.setFlag(flags[i], true); 118 } 119 mFlagsContainer.commitUpdate(DISPLAY_ID); 120 } 121 } 122