From fc63619d492af6f6af34b059d8002bb10eaf9843 Mon Sep 17 00:00:00 2001 From: Daisuke Niwa Date: Fri, 1 Mar 2019 11:30:31 +0900 Subject: [PATCH] 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 (Cherry-pick from pa/1302748) Change-Id: If92c12041b91dbab0f083a1b49d263b201e87699 --- .../settingslib/RestrictedLockUtils.java | 10 ++++---- .../settingslib/RestrictedLockUtilsTest.java | 24 +++++++++++++++++++ 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 87b5b57c7d9e3..4f4aef0b0fae9 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 2b5a4e0690018..11c799ea9df58 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 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 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);