1 /* 2 * Copyright (C) 2023 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.settings.widget; 18 19 import static com.google.common.truth.Truth.assertThat; 20 21 import static org.mockito.ArgumentMatchers.eq; 22 import static org.mockito.Mockito.mock; 23 import static org.mockito.Mockito.never; 24 import static org.mockito.Mockito.verify; 25 26 import android.os.UserHandle; 27 import android.os.UserManager; 28 import android.os.UserManager.EnforcingUser; 29 import android.view.View.OnClickListener; 30 31 import androidx.fragment.app.FragmentActivity; 32 33 import com.android.settings.testutils.shadow.ShadowDevicePolicyManager; 34 import com.android.settings.testutils.shadow.ShadowUserManager; 35 36 import org.junit.Before; 37 import org.junit.Test; 38 import org.junit.runner.RunWith; 39 import org.robolectric.Robolectric; 40 import org.robolectric.RobolectricTestRunner; 41 import org.robolectric.annotation.Config; 42 43 import java.util.ArrayList; 44 import java.util.List; 45 46 @RunWith(RobolectricTestRunner.class) 47 @Config(shadows = {ShadowUserManager.class, ShadowDevicePolicyManager.class}) 48 public class RestrictedButtonTest { 49 50 private RestrictedButton mButton; 51 private OnClickListener mOnClickListener; 52 private UserHandle mUser; 53 54 @Before setUp()55 public void setUp() { 56 mButton = new RestrictedButton(Robolectric.setupActivity(FragmentActivity.class)); 57 mOnClickListener = mock(OnClickListener.class); 58 mButton.setOnClickListener(mOnClickListener); 59 60 int userId = UserHandle.myUserId(); 61 mUser = UserHandle.of(userId); 62 List<EnforcingUser> enforcingUsers = new ArrayList<>(); 63 enforcingUsers.add(new EnforcingUser(userId, UserManager.RESTRICTION_SOURCE_DEVICE_OWNER)); 64 // Ensure that RestrictedLockUtils.checkIfRestrictionEnforced doesn't return null. 65 ShadowUserManager.getShadow().setUserRestrictionSources( 66 UserManager.DISALLOW_MODIFY_ACCOUNTS, 67 mUser, 68 enforcingUsers); 69 } 70 71 @Test performClick_buttonIsNotInited_shouldCallListener()72 public void performClick_buttonIsNotInited_shouldCallListener() { 73 mButton.performClick(); 74 75 verify(mOnClickListener).onClick(eq(mButton)); 76 } 77 78 @Test performClick_noRestriction_shouldCallListener()79 public void performClick_noRestriction_shouldCallListener() { 80 mButton.init(mUser, UserManager.DISALLOW_ADJUST_VOLUME); 81 82 mButton.performClick(); 83 84 verify(mOnClickListener).onClick(eq(mButton)); 85 } 86 87 @Test performClick_hasRestriction_shouldNotCallListener()88 public void performClick_hasRestriction_shouldNotCallListener() { 89 mButton.init(mUser, UserManager.DISALLOW_MODIFY_ACCOUNTS); 90 91 mButton.performClick(); 92 93 verify(mOnClickListener, never()).onClick(eq(mButton)); 94 } 95 96 @Test updateState_noRestriction_shouldEnableButton()97 public void updateState_noRestriction_shouldEnableButton() { 98 mButton.init(mUser, UserManager.DISALLOW_ADJUST_VOLUME); 99 100 mButton.updateState(); 101 102 assertThat(mButton.isEnabled()).isTrue(); 103 } 104 105 @Test updateState_noRestriction_shoulddisableButton()106 public void updateState_noRestriction_shoulddisableButton() { 107 mButton.init(mUser, UserManager.DISALLOW_MODIFY_ACCOUNTS); 108 109 mButton.updateState(); 110 111 assertThat(mButton.isEnabled()).isFalse(); 112 } 113 } 114