From 6cdb07862a33bcac2645fffdd976a2461a576ae9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?tiansiming=20=5B=E7=94=B0=E6=80=9D=E6=98=8E=5D?= Date: Sun, 4 Feb 2018 20:45:42 +0800 Subject: [PATCH] Fix NPE in AutoSyncWorkDataPreferenceController MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit AutoSyncWorkDataPreferenceController gets mUserHandle from Utils.getManagedProfileWithDisabled which may return null, crash will happend when updateState called. So a judgement here seems helpful to make the program more robust. Bug: https://partnerissuetracker.corp.google.com/u/1/issues/72908879 Test: make ROBOTEST_FILTER="(AutoSyncWorkDataPreferenceControllerTest)" RunSettingsRoboTests Change-Id: I53ca027a2f2dd79655cc2eee67db236cfa03f656 Signed-off-by: tiansiming [田思明] --- .../AutoSyncWorkDataPreferenceController.java | 7 +++++++ .../AutoSyncWorkDataPreferenceControllerTest.java | 15 +++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/src/com/android/settings/accounts/AutoSyncWorkDataPreferenceController.java b/src/com/android/settings/accounts/AutoSyncWorkDataPreferenceController.java index acf43aa635b..712dbb7ecfa 100644 --- a/src/com/android/settings/accounts/AutoSyncWorkDataPreferenceController.java +++ b/src/com/android/settings/accounts/AutoSyncWorkDataPreferenceController.java @@ -17,6 +17,7 @@ package com.android.settings.accounts; import android.app.Fragment; import android.content.Context; +import android.os.UserHandle; import com.android.settings.Utils; @@ -34,4 +35,10 @@ public class AutoSyncWorkDataPreferenceController extends AutoSyncPersonalDataPr public String getPreferenceKey() { return KEY_AUTO_SYNC_WORK_ACCOUNT; } + + @Override + public boolean isAvailable() { + return mUserHandle != null && !mUserManager.isManagedProfile() && !mUserManager.isLinkedUser() + && mUserManager.getProfiles(UserHandle.myUserId()).size() > 1; + } } diff --git a/tests/robotests/src/com/android/settings/accounts/AutoSyncWorkDataPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/accounts/AutoSyncWorkDataPreferenceControllerTest.java index a25aa281a01..4857120034f 100644 --- a/tests/robotests/src/com/android/settings/accounts/AutoSyncWorkDataPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/accounts/AutoSyncWorkDataPreferenceControllerTest.java @@ -91,6 +91,21 @@ public class AutoSyncWorkDataPreferenceControllerTest { assertThat(mController.isAvailable()).isFalse(); } + @Test + public void checkIsAvailable_null_workProfileUserHandle_shouldNotDisplay() { + when(mUserManager.isManagedProfile()).thenReturn(false); + when(mUserManager.isLinkedUser()).thenReturn(false); + + final List infos = new ArrayList<>(); + infos.add(new UserInfo(UserHandle.USER_SYSTEM, "user 1", 0 /* flags */)); + infos.add(new UserInfo(999, "xspace", 800010)); + when(mUserManager.getProfiles(eq(UserHandle.USER_SYSTEM))).thenReturn(infos); + mController = new AutoSyncWorkDataPreferenceController(mContext, mFragment); + + assertThat(mController.mUserHandle).isEqualTo(null); + assertThat(mController.isAvailable()).isFalse(); + } + @Test public void multipleProfile_shouldInitWithWorkProfileUserHandle() { when(mUserManager.isManagedProfile()).thenReturn(false);