1 package com.android.settings.notification; 2 3 import static android.app.admin.DevicePolicyManager.KEYGUARD_DISABLE_SECURE_NOTIFICATIONS; 4 import static android.app.admin.DevicePolicyManager.KEYGUARD_DISABLE_UNREDACTED_NOTIFICATIONS; 5 import static android.provider.Settings.Secure.LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS; 6 import static android.provider.Settings.Secure.LOCK_SCREEN_SHOW_NOTIFICATIONS; 7 8 import static com.google.common.truth.Truth.assertThat; 9 10 import static org.robolectric.Robolectric.buildActivity; 11 12 import android.content.ContentResolver; 13 import android.content.Intent; 14 import android.os.UserHandle; 15 import android.provider.Settings; 16 import android.view.View; 17 import android.widget.RadioButton; 18 19 import com.android.settings.R; 20 import com.android.settings.RestrictedRadioButton; 21 import com.android.settings.notification.RedactionInterstitial.RedactionInterstitialFragment; 22 import com.android.settings.testutils.SettingsRobolectricTestRunner; 23 import com.android.settings.testutils.shadow.SettingsShadowResources; 24 import com.android.settings.testutils.shadow.SettingsShadowResourcesImpl; 25 import com.android.settings.testutils.shadow.ShadowRestrictedLockUtils; 26 import com.android.settings.testutils.shadow.ShadowUserManager; 27 import com.android.settings.testutils.shadow.ShadowUtils; 28 29 import org.junit.After; 30 import org.junit.Assert; 31 import org.junit.Test; 32 import org.junit.runner.RunWith; 33 import org.robolectric.RuntimeEnvironment; 34 import org.robolectric.annotation.Config; 35 36 @RunWith(SettingsRobolectricTestRunner.class) 37 @Config(shadows = { 38 SettingsShadowResources.class, 39 SettingsShadowResourcesImpl.class, 40 SettingsShadowResources.SettingsShadowTheme.class, 41 ShadowUtils.class, 42 ShadowRestrictedLockUtils.class, 43 ShadowUserManager.class, 44 }) 45 public class RedactionInterstitialTest { 46 private RedactionInterstitial mActivity; 47 private RedactionInterstitialFragment mFragment; 48 49 @After 50 public void tearDown() { 51 ShadowUserManager.getShadow().reset(); 52 ShadowRestrictedLockUtils.reset(); 53 } 54 55 @Test 56 public void primaryUserDefaultStateTest() { 57 setupSettings(1 /* show */, 1 /* showUnredacted */); 58 setupActivity(); 59 60 assertHideAllVisible(true); 61 assertEnabledButtons(true /* all */, true /* redact */); 62 assertSelectedButton(R.id.show_all); 63 } 64 65 @Test 66 public void primaryUserRedactSensitiveTest() { 67 setupSettings(1 /* show */, 0 /* showUnredacted */); 68 setupActivity(); 69 70 assertHideAllVisible(true); 71 assertEnabledButtons(true /* all */, true /* redact */); 72 assertSelectedButton(R.id.redact_sensitive); 73 } 74 75 @Test 76 public void primaryUserHideAllTest() { 77 setupSettings(0 /* show */, 0 /* showUnredacted */); 78 setupActivity(); 79 80 assertHideAllVisible(true); 81 assertEnabledButtons(true /* all */, true /* redact */); 82 assertSelectedButton(R.id.hide_all); 83 } 84 85 @Test 86 public void primaryUserUnredactedRestrictionTest() { 87 setupSettings(1 /* show */, 1 /* showUnredacted */); 88 ShadowRestrictedLockUtils.setKeyguardDisabledFeatures( 89 KEYGUARD_DISABLE_UNREDACTED_NOTIFICATIONS); 90 setupActivity(); 91 92 assertHideAllVisible(true); 93 assertEnabledButtons(false /* all */, true /* redact */); 94 assertSelectedButton(R.id.redact_sensitive); 95 } 96 97 @Test 98 public void primaryUserNotificationRestrictionTest() { 99 setupSettings(1 /* show */, 1 /* showUnredacted */); 100 ShadowRestrictedLockUtils.setKeyguardDisabledFeatures( 101 KEYGUARD_DISABLE_SECURE_NOTIFICATIONS); 102 setupActivity(); 103 104 assertHideAllVisible(true); 105 assertEnabledButtons(false /* all */, false /* redact */); 106 assertSelectedButton(R.id.hide_all); 107 } 108 109 @Test 110 public void managedProfileNoRestrictionsTest() { 111 setupSettings(1 /* show */, 1 /* showUnredacted */); 112 ShadowUserManager.getShadow().addManagedProfile(UserHandle.myUserId()); 113 setupActivity(); 114 115 assertHideAllVisible(false); 116 assertEnabledButtons(true /* all */, true /* redact */); 117 assertSelectedButton(R.id.show_all); 118 } 119 120 @Test 121 public void managedProfileUnredactedRestrictionTest() { 122 setupSettings(1 /* show */, 1 /* showUnredacted */); 123 ShadowUserManager.getShadow().addManagedProfile(UserHandle.myUserId()); 124 ShadowRestrictedLockUtils.setKeyguardDisabledFeatures( 125 KEYGUARD_DISABLE_UNREDACTED_NOTIFICATIONS); 126 setupActivity(); 127 128 assertHideAllVisible(false); 129 assertEnabledButtons(false /* all */, true /* redact */); 130 assertSelectedButton(R.id.redact_sensitive); 131 } 132 133 private void setupActivity() { 134 mActivity = buildActivity(RedactionInterstitial.class, new Intent()).setup().get(); 135 mFragment = (RedactionInterstitialFragment) 136 mActivity.getFragmentManager().findFragmentById(R.id.main_content); 137 assertThat(mActivity).isNotNull(); 138 assertThat(mFragment).isNotNull(); 139 } 140 141 private void setupSettings(int show, int showUnredacted) { 142 final ContentResolver resolver = RuntimeEnvironment.application.getContentResolver(); 143 Settings.Secure.putIntForUser(resolver, 144 LOCK_SCREEN_SHOW_NOTIFICATIONS, show, UserHandle.myUserId()); 145 Settings.Secure.putIntForUser(resolver, 146 LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS, showUnredacted, UserHandle.myUserId()); 147 } 148 149 private void assertHideAllVisible(boolean visible) { 150 Assert.assertEquals(visible, getButton(R.id.hide_all).getVisibility() != View.GONE); 151 } 152 153 private void assertEnabledButtons(boolean all, boolean redact) { 154 Assert.assertEquals(all, buttonEnabled(R.id.show_all)); 155 Assert.assertEquals(redact, buttonEnabled(R.id.redact_sensitive)); 156 } 157 158 private void assertSelectedButton(int resId) { 159 Assert.assertEquals(resId == R.id.show_all, buttonChecked(R.id.show_all)); 160 Assert.assertEquals(resId == R.id.redact_sensitive, buttonChecked(R.id.redact_sensitive)); 161 Assert.assertEquals(resId == R.id.hide_all, buttonChecked(R.id.hide_all)); 162 } 163 164 private boolean buttonChecked(int resource) { 165 return getButton(resource).isChecked(); 166 } 167 168 private boolean buttonEnabled(int resource) { 169 return !((RestrictedRadioButton) getButton(resource)).isDisabledByAdmin(); 170 } 171 172 private RadioButton getButton(int resource) { 173 return (RadioButton) mFragment.getView().findViewById(resource); 174 } 175 } 176