Home | History | Annotate | Download | only in notification
      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