From f05208818a07e1d80665a4a391b5b04d57e7a710 Mon Sep 17 00:00:00 2001 From: Kevin Han Date: Wed, 17 Feb 2021 18:13:56 -0800 Subject: [PATCH] Check user states exist before package add/removal It's possible for packages to be added/removed for a user even if they are not yet unlocked. This could cause a NPE, so we check beforehand and ignore if the the user states have not been initialized. This is fine because on user unlock, we get the most up to date package data anyway. Bug: 175829330 Test: atest AppHibernationService Change-Id: Ia29359d38325be5a40d84237fd7fc1b5ba356c5d --- .../server/apphibernation/AppHibernationService.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/services/core/java/com/android/server/apphibernation/AppHibernationService.java b/services/core/java/com/android/server/apphibernation/AppHibernationService.java index e97f0b47380a3..d98057dc87cc1 100644 --- a/services/core/java/com/android/server/apphibernation/AppHibernationService.java +++ b/services/core/java/com/android/server/apphibernation/AppHibernationService.java @@ -421,6 +421,9 @@ public final class AppHibernationService extends SystemService { private void onPackageAdded(@NonNull String packageName, int userId) { synchronized (mLock) { + if (!mUserStates.contains(userId)) { + return; + } UserLevelState userState = new UserLevelState(); userState.packageName = packageName; mUserStates.get(userId).put(packageName, userState); @@ -434,6 +437,9 @@ public final class AppHibernationService extends SystemService { private void onPackageRemoved(@NonNull String packageName, int userId) { synchronized (mLock) { + if (!mUserStates.contains(userId)) { + return; + } mUserStates.get(userId).remove(packageName); } }