Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6cdb0786 authored by tiansiming [田思明]'s avatar tiansiming [田思明]
Browse files

Fix NPE in AutoSyncWorkDataPreferenceController

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: default avatartiansiming [田思明] <tiansiming@xiaomi.com>
parent f94ff6ce
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -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;
    }
}
+15 −0
Original line number Diff line number Diff line
@@ -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<UserInfo> 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);