1 /* 2 * Copyright (C) 2024 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.privatespace; 18 19 import static com.android.settings.core.BasePreferenceController.AVAILABLE; 20 import static com.android.settings.core.BasePreferenceController.UNSUPPORTED_ON_DEVICE; 21 22 import static com.google.common.truth.Truth.assertThat; 23 24 import android.content.Context; 25 import android.platform.test.flag.junit.SetFlagsRule; 26 27 import androidx.fragment.app.FragmentActivity; 28 import androidx.test.core.app.ApplicationProvider; 29 30 import com.android.settings.R; 31 32 import org.junit.Before; 33 import org.junit.Rule; 34 import org.junit.Test; 35 import org.junit.runner.RunWith; 36 import org.mockito.junit.MockitoJUnit; 37 import org.mockito.junit.MockitoRule; 38 import org.robolectric.Robolectric; 39 import org.robolectric.RobolectricTestRunner; 40 import org.robolectric.RuntimeEnvironment; 41 import org.robolectric.annotation.Config; 42 import org.robolectric.shadow.api.Shadow; 43 import org.robolectric.shadows.ShadowAlertDialog; 44 import org.robolectric.shadows.ShadowApplication; 45 46 @RunWith(RobolectricTestRunner.class) 47 @Config(shadows = {ShadowAlertDialog.class}) 48 public class HidePrivateSpaceControllerTest { 49 @Rule public final MockitoRule mMockitoRule = MockitoJUnit.rule(); 50 @Rule public final SetFlagsRule mSetFlagsRule = new SetFlagsRule(); 51 private static final String KEY = "private_space_hidden"; 52 private static final String DETAIL_PAGE_KEY = "private_space_hidden_details"; 53 private HidePrivateSpaceController mHidePrivateSpaceController; 54 private HidePrivateSpaceSummaryController mHidePrivateSpaceSummaryController; 55 private FragmentActivity mActivity; 56 57 @Before setUp()58 public void setUp() { 59 Context context = RuntimeEnvironment.application; 60 mHidePrivateSpaceController = new HidePrivateSpaceController(context, DETAIL_PAGE_KEY); 61 mHidePrivateSpaceSummaryController = new HidePrivateSpaceSummaryController(context, KEY); 62 mActivity = Robolectric.setupActivity(FragmentActivity.class); 63 } 64 65 /** Tests that when flags enabled the controller is available. */ 66 @Test getAvailabilityStatus_flagEnabled_returnsAvailable()67 public void getAvailabilityStatus_flagEnabled_returnsAvailable() { 68 mSetFlagsRule.enableFlags(android.multiuser.Flags.FLAG_ENABLE_PRIVATE_SPACE_FEATURES); 69 70 assertThat(mHidePrivateSpaceController.getAvailabilityStatus()).isEqualTo(AVAILABLE); 71 } 72 73 /** Tests that when flags disabled the controller is unsupported. */ 74 @Test getAvailabilityStatus_flagDisabled_returnsUnsupported()75 public void getAvailabilityStatus_flagDisabled_returnsUnsupported() { 76 mSetFlagsRule.disableFlags(android.multiuser.Flags.FLAG_ENABLE_PRIVATE_SPACE_FEATURES); 77 78 assertThat(mHidePrivateSpaceController.getAvailabilityStatus()) 79 .isEqualTo(UNSUPPORTED_ON_DEVICE); 80 } 81 82 /** Tests that when hide toggle is enabled dialog is displayed. */ 83 @Test setChecked_enabled_showsDialog()84 public void setChecked_enabled_showsDialog() { 85 mSetFlagsRule.enableFlags(android.multiuser.Flags.FLAG_ENABLE_PRIVATE_SPACE_FEATURES); 86 mHidePrivateSpaceController.setChecked(true); 87 88 ShadowAlertDialog shadowAlertDialog = getShadowAlertDialog(); 89 assertThat(shadowAlertDialog).isNotNull(); 90 assertThat(shadowAlertDialog.getTitle().toString()) 91 .isEqualTo(mActivity.getString(R.string.private_space_hide_dialog_title)); 92 assertThat(shadowAlertDialog.getMessage().toString()) 93 .isEqualTo(mActivity.getString(R.string.private_space_hide_dialog_message)); 94 } 95 96 /** Tests that when hide toggle is disabled dialog is not displayed. */ 97 @Test setChecked_disabled_NoDialogShown()98 public void setChecked_disabled_NoDialogShown() { 99 mSetFlagsRule.enableFlags(android.multiuser.Flags.FLAG_ENABLE_PRIVATE_SPACE_FEATURES); 100 mHidePrivateSpaceController.setChecked(false); 101 102 ShadowAlertDialog shadowAlertDialog = getShadowAlertDialog(); 103 assertThat(shadowAlertDialog).isNull(); 104 } 105 106 /** Tests that when hide toggle is enabled then isChecked returns true. */ 107 @Test setChecked_enabled_isCheckedIsTrue()108 public void setChecked_enabled_isCheckedIsTrue() { 109 mSetFlagsRule.enableFlags(android.multiuser.Flags.FLAG_ENABLE_PRIVATE_SPACE_FEATURES); 110 mHidePrivateSpaceController.setChecked(true); 111 assertThat(mHidePrivateSpaceController.isChecked()).isTrue(); 112 } 113 114 /** Tests that when hide toggle is disabled then isChecked returns false. */ 115 @Test setChecked_disabled_isCheckedIsFalse()116 public void setChecked_disabled_isCheckedIsFalse() { 117 mSetFlagsRule.enableFlags(android.multiuser.Flags.FLAG_ENABLE_PRIVATE_SPACE_FEATURES); 118 mHidePrivateSpaceController.setChecked(false); 119 assertThat(mHidePrivateSpaceController.isChecked()).isFalse(); 120 } 121 122 /** Tests that hide preference summary displays On when toggle is enabled. */ 123 @Test setChecked_enable_summaryShouldDisplayOn()124 public void setChecked_enable_summaryShouldDisplayOn() { 125 mSetFlagsRule.enableFlags(android.multiuser.Flags.FLAG_ENABLE_PRIVATE_SPACE_FEATURES); 126 mHidePrivateSpaceController.setChecked(true); 127 128 assertThat(mHidePrivateSpaceSummaryController.getSummary().toString()).isEqualTo("On"); 129 } 130 131 /** Tests that hide preference summary displays Off when toggle is disabled. */ 132 @Test setChecked_disable_summaryShouldDisplayOff()133 public void setChecked_disable_summaryShouldDisplayOff() { 134 mSetFlagsRule.enableFlags(android.multiuser.Flags.FLAG_ENABLE_PRIVATE_SPACE_FEATURES); 135 mHidePrivateSpaceController.setChecked(false); 136 137 assertThat(mHidePrivateSpaceSummaryController.getSummary().toString()).isEqualTo("Off"); 138 } 139 getShadowAlertDialog()140 private ShadowAlertDialog getShadowAlertDialog() { 141 ShadowApplication shadowApplication = 142 Shadow.extract(ApplicationProvider.getApplicationContext()); 143 ShadowAlertDialog shadowAlertDialog = shadowApplication.getLatestAlertDialog(); 144 return shadowAlertDialog; 145 } 146 } 147