• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
tearDown()50     public void tearDown() {
51         ShadowUserManager.getShadow().reset();
52         ShadowRestrictedLockUtils.reset();
53     }
54 
55     @Test
primaryUserDefaultStateTest()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
primaryUserRedactSensitiveTest()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
primaryUserHideAllTest()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
primaryUserUnredactedRestrictionTest()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
primaryUserNotificationRestrictionTest()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
managedProfileNoRestrictionsTest()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
managedProfileUnredactedRestrictionTest()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 
setupActivity()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 
setupSettings(int show, int showUnredacted)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 
assertHideAllVisible(boolean visible)149     private void assertHideAllVisible(boolean visible) {
150         Assert.assertEquals(visible, getButton(R.id.hide_all).getVisibility() != View.GONE);
151     }
152 
assertEnabledButtons(boolean all, boolean redact)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 
assertSelectedButton(int resId)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 
buttonChecked(int resource)164     private boolean buttonChecked(int resource) {
165         return getButton(resource).isChecked();
166     }
167 
buttonEnabled(int resource)168     private boolean buttonEnabled(int resource) {
169         return !((RestrictedRadioButton) getButton(resource)).isDisabledByAdmin();
170     }
171 
getButton(int resource)172     private RadioButton getButton(int resource) {
173         return (RadioButton) mFragment.getView().findViewById(resource);
174     }
175 }
176