diff options
author | Daisuke Niwa <daisuke.niwa@sony.com> | 2019-03-01 11:30:31 +0900 |
---|---|---|
committer | Fan Zhang <zhfan@google.com> | 2019-04-15 13:09:58 -0700 |
commit | fc63619d492af6f6af34b059d8002bb10eaf9843 (patch) | |
tree | 60f96cd422079fc6784b2edb27773bb42bee7bb3 | |
parent | 4bea465dbb5f1613ab0a3c331c6b78c647e47894 (diff) |
Avoid NPE when accessing to EnforcedAdmin
NPE happens when "modify" is tapped on the carrier wifi network
connected using CarrierConfig information. null is passed to
sendShowAdminSupportDetailsIntent method through 2nd argument.
Bug: 128188146
Test: Manually verified the crash scenario
Test: RunSettingsLibRoboTests
Signed-off-by: Daichi Ueura <daichi.ueura@sony.com>
(Cherry-pick from pa/1302748)
Change-Id: If92c12041b91dbab0f083a1b49d263b201e87699
2 files changed, 30 insertions, 4 deletions
diff --git a/packages/SettingsLib/RestrictedLockUtils/src/com/android/settingslib/RestrictedLockUtils.java b/packages/SettingsLib/RestrictedLockUtils/src/com/android/settingslib/RestrictedLockUtils.java index 87b5b57c7d9e..4f4aef0b0fae 100644 --- a/packages/SettingsLib/RestrictedLockUtils/src/com/android/settingslib/RestrictedLockUtils.java +++ b/packages/SettingsLib/RestrictedLockUtils/src/com/android/settingslib/RestrictedLockUtils.java @@ -76,11 +76,13 @@ public class RestrictedLockUtils { public static void sendShowAdminSupportDetailsIntent(Context context, EnforcedAdmin admin) { final Intent intent = getShowAdminSupportDetailsIntent(context, admin); int targetUserId = UserHandle.myUserId(); - if (admin != null && admin.user != null - && isCurrentUserOrProfile(context, admin.user.getIdentifier())) { - targetUserId = admin.user.getIdentifier(); + if (admin != null) { + if (admin.user != null + && isCurrentUserOrProfile(context, admin.user.getIdentifier())) { + targetUserId = admin.user.getIdentifier(); + } + intent.putExtra(DevicePolicyManager.EXTRA_RESTRICTION, admin.enforcedRestriction); } - intent.putExtra(DevicePolicyManager.EXTRA_RESTRICTION, admin.enforcedRestriction); context.startActivityAsUser(intent, UserHandle.of(targetUserId)); } diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/RestrictedLockUtilsTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/RestrictedLockUtilsTest.java index 2b5a4e069001..11c799ea9df5 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/RestrictedLockUtilsTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/RestrictedLockUtilsTest.java @@ -16,6 +16,7 @@ package com.android.settingslib; +import static android.app.admin.DevicePolicyManager.EXTRA_RESTRICTION; import static android.app.admin.DevicePolicyManager.KEYGUARD_DISABLE_FEATURES_NONE; import static android.app.admin.DevicePolicyManager.KEYGUARD_DISABLE_FINGERPRINT; import static android.app.admin.DevicePolicyManager.KEYGUARD_DISABLE_REMOTE_INPUT; @@ -28,11 +29,13 @@ import static com.google.common.truth.Truth.assertThat; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import android.app.admin.DevicePolicyManager; import android.content.ComponentName; import android.content.Context; +import android.content.Intent; import android.content.pm.PackageManager; import android.content.pm.UserInfo; import android.os.UserHandle; @@ -42,6 +45,7 @@ import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Answers; +import org.mockito.ArgumentCaptor; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.RobolectricTestRunner; @@ -283,6 +287,26 @@ public class RestrictedLockUtilsTest { assertThat(profile).isNull(); } + @Test + public void sendShowAdminSupportDetailsIntent_extraRestrictionProvided() { + EnforcedAdmin enforcedAdmin = new EnforcedAdmin(); + enforcedAdmin.enforcedRestriction = "Dummy"; + RestrictedLockUtils.sendShowAdminSupportDetailsIntent(mContext, enforcedAdmin); + + ArgumentCaptor<Intent> intentCaptor = ArgumentCaptor.forClass(Intent.class); + verify(mContext).startActivityAsUser(intentCaptor.capture(), any()); + assertThat(intentCaptor.getValue().getExtra(EXTRA_RESTRICTION)).isEqualTo("Dummy"); + } + + @Test + public void sendShowAdminSupportDetailsIntent_noExtraRestriction() { + RestrictedLockUtils.sendShowAdminSupportDetailsIntent(mContext, null); + + ArgumentCaptor<Intent> intentCaptor = ArgumentCaptor.forClass(Intent.class); + verify(mContext).startActivityAsUser(intentCaptor.capture(), any()); + assertThat(intentCaptor.getValue().getExtra(EXTRA_RESTRICTION)).isNull(); + } + private UserInfo setUpUser(int userId, ComponentName[] admins) { UserInfo userInfo = new UserInfo(userId, "primary", 0); when(mUserManager.getUserInfo(userId)).thenReturn(userInfo); |