| package com.android.settings.notification; |
| |
| import static android.app.admin.DevicePolicyManager.KEYGUARD_DISABLE_SECURE_NOTIFICATIONS; |
| import static android.app.admin.DevicePolicyManager.KEYGUARD_DISABLE_UNREDACTED_NOTIFICATIONS; |
| import static android.provider.Settings.Secure.LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS; |
| import static android.provider.Settings.Secure.LOCK_SCREEN_SHOW_NOTIFICATIONS; |
| |
| import static com.google.common.truth.Truth.assertThat; |
| |
| import static org.robolectric.Robolectric.buildActivity; |
| |
| import android.content.ContentResolver; |
| import android.content.Intent; |
| import android.os.UserHandle; |
| import android.os.UserManager; |
| import android.provider.Settings; |
| import android.view.View; |
| import android.widget.RadioButton; |
| |
| import com.android.settings.R; |
| import com.android.settings.RestrictedRadioButton; |
| import com.android.settings.notification.RedactionInterstitial.RedactionInterstitialFragment; |
| import com.android.settings.testutils.shadow.ShadowRestrictedLockUtilsInternal; |
| import com.android.settings.testutils.shadow.ShadowUtils; |
| |
| import org.junit.After; |
| import org.junit.Assert; |
| import org.junit.Test; |
| import org.junit.runner.RunWith; |
| import org.robolectric.RobolectricTestRunner; |
| import org.robolectric.RuntimeEnvironment; |
| import org.robolectric.annotation.Config; |
| import org.robolectric.shadow.api.Shadow; |
| import org.robolectric.shadows.ShadowUserManager; |
| |
| @RunWith(RobolectricTestRunner.class) |
| @Config(shadows = { |
| ShadowUtils.class, |
| ShadowRestrictedLockUtilsInternal.class, |
| }) |
| public class RedactionInterstitialTest { |
| private RedactionInterstitial mActivity; |
| private RedactionInterstitialFragment mFragment; |
| |
| @After |
| public void tearDown() { |
| ShadowRestrictedLockUtilsInternal.reset(); |
| } |
| |
| @Test |
| public void primaryUserDefaultStateTest() { |
| setupSettings(1 /* show */, 1 /* showUnredacted */); |
| setupActivity(); |
| |
| assertHideAllVisible(true); |
| assertEnabledButtons(true /* all */, true /* redact */); |
| assertSelectedButton(R.id.show_all); |
| } |
| |
| @Test |
| public void primaryUserRedactSensitiveTest() { |
| setupSettings(1 /* show */, 0 /* showUnredacted */); |
| setupActivity(); |
| |
| assertHideAllVisible(true); |
| assertEnabledButtons(true /* all */, true /* redact */); |
| assertSelectedButton(R.id.redact_sensitive); |
| } |
| |
| @Test |
| public void primaryUserHideAllTest() { |
| setupSettings(0 /* show */, 0 /* showUnredacted */); |
| setupActivity(); |
| |
| assertHideAllVisible(true); |
| assertEnabledButtons(true /* all */, true /* redact */); |
| assertSelectedButton(R.id.hide_all); |
| } |
| |
| @Test |
| public void primaryUserUnredactedRestrictionTest() { |
| setupSettings(1 /* show */, 1 /* showUnredacted */); |
| ShadowRestrictedLockUtilsInternal.setKeyguardDisabledFeatures( |
| KEYGUARD_DISABLE_UNREDACTED_NOTIFICATIONS); |
| setupActivity(); |
| |
| assertHideAllVisible(true); |
| assertEnabledButtons(false /* all */, true /* redact */); |
| assertSelectedButton(R.id.redact_sensitive); |
| } |
| |
| @Test |
| public void primaryUserNotificationRestrictionTest() { |
| setupSettings(1 /* show */, 1 /* showUnredacted */); |
| ShadowRestrictedLockUtilsInternal.setKeyguardDisabledFeatures( |
| KEYGUARD_DISABLE_SECURE_NOTIFICATIONS); |
| setupActivity(); |
| |
| assertHideAllVisible(true); |
| assertEnabledButtons(false /* all */, false /* redact */); |
| assertSelectedButton(R.id.hide_all); |
| } |
| |
| @Test |
| public void managedProfileNoRestrictionsTest() { |
| setupSettings(1 /* show */, 1 /* showUnredacted */); |
| final ShadowUserManager sum = |
| Shadow.extract(RuntimeEnvironment.application.getSystemService(UserManager.class)); |
| sum.setManagedProfile(true); |
| setupActivity(); |
| |
| assertHideAllVisible(false); |
| assertEnabledButtons(true /* all */, true /* redact */); |
| assertSelectedButton(R.id.show_all); |
| } |
| |
| @Test |
| public void managedProfileUnredactedRestrictionTest() { |
| setupSettings(1 /* show */, 1 /* showUnredacted */); |
| final ShadowUserManager sum = |
| Shadow.extract(RuntimeEnvironment.application.getSystemService(UserManager.class)); |
| sum.setManagedProfile(true); |
| ShadowRestrictedLockUtilsInternal.setKeyguardDisabledFeatures( |
| KEYGUARD_DISABLE_UNREDACTED_NOTIFICATIONS); |
| setupActivity(); |
| |
| assertHideAllVisible(false); |
| assertEnabledButtons(false /* all */, true /* redact */); |
| assertSelectedButton(R.id.redact_sensitive); |
| } |
| |
| private void setupActivity() { |
| mActivity = buildActivity(RedactionInterstitial.class, new Intent()).setup().get(); |
| mFragment = (RedactionInterstitialFragment) |
| mActivity.getSupportFragmentManager().findFragmentById(R.id.main_content); |
| assertThat(mActivity).isNotNull(); |
| assertThat(mFragment).isNotNull(); |
| } |
| |
| private void setupSettings(int show, int showUnredacted) { |
| final ContentResolver resolver = RuntimeEnvironment.application.getContentResolver(); |
| Settings.Secure.putIntForUser(resolver, |
| LOCK_SCREEN_SHOW_NOTIFICATIONS, show, UserHandle.myUserId()); |
| Settings.Secure.putIntForUser(resolver, |
| LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS, showUnredacted, UserHandle.myUserId()); |
| } |
| |
| private void assertHideAllVisible(boolean visible) { |
| Assert.assertEquals(visible, getButton(R.id.hide_all).getVisibility() != View.GONE); |
| } |
| |
| private void assertEnabledButtons(boolean all, boolean redact) { |
| Assert.assertEquals(all, buttonEnabled(R.id.show_all)); |
| Assert.assertEquals(redact, buttonEnabled(R.id.redact_sensitive)); |
| } |
| |
| private void assertSelectedButton(int resId) { |
| Assert.assertEquals(resId == R.id.show_all, buttonChecked(R.id.show_all)); |
| Assert.assertEquals(resId == R.id.redact_sensitive, buttonChecked(R.id.redact_sensitive)); |
| Assert.assertEquals(resId == R.id.hide_all, buttonChecked(R.id.hide_all)); |
| } |
| |
| private boolean buttonChecked(int resource) { |
| return getButton(resource).isChecked(); |
| } |
| |
| private boolean buttonEnabled(int resource) { |
| return !((RestrictedRadioButton) getButton(resource)).isDisabledByAdmin(); |
| } |
| |
| private RadioButton getButton(int resource) { |
| return (RadioButton) mFragment.getView().findViewById(resource); |
| } |
| } |