From f6961b108069a49286a5751ffc5b0ba3a803a9c2 Mon Sep 17 00:00:00 2001
From: Timi Rautamäki <timi.rautamaki@gmail.com>
Date: Wed, 04 May 2022 12:31:56 +0000
Subject: [PATCH] PermissionManager: fix NPE in getIndicatorExemptedPackages

sLocationProviderPkgNames and sLocationExtraPkgNames can be null
because they're static.
Also rename them from member to static variable to follow code style.

Change-Id: I7d08e02047ccf183cc75ce18b3ebd2086b2831b3
---

diff --git a/core/java/android/permission/PermissionManager.java b/core/java/android/permission/PermissionManager.java
index 2ab7e97..a2a182c 100644
--- a/core/java/android/permission/PermissionManager.java
+++ b/core/java/android/permission/PermissionManager.java
@@ -217,8 +217,8 @@
 
     private List<SplitPermissionInfo> mSplitPermissionInfos;
 
-    private static String[] mLocationProviderPkgNames;
-    private static String[] mLocationExtraPkgNames;
+    private static String[] sLocationProviderPkgNames;
+    private static String[] sLocationExtraPkgNames;
 
     /**
      * Creates a new instance.
@@ -234,11 +234,6 @@
         mPermissionManager = IPermissionManager.Stub.asInterface(ServiceManager.getServiceOrThrow(
                 "permissionmgr"));
         mLegacyPermissionManager = context.getSystemService(LegacyPermissionManager.class);
-
-        mLocationProviderPkgNames = context.getResources().getStringArray(
-                R.array.config_locationProviderPackageNames);
-        mLocationExtraPkgNames = context.getResources().getStringArray(
-                R.array.config_locationExtraPackageNames);
     }
 
     /**
@@ -1173,12 +1168,12 @@
                 pkgNames.add(exemptedPackage);
             }
         }
-        for (String pkgName: mLocationProviderPkgNames) {
+        for (String pkgName: sLocationProviderPkgNames) {
             if (pkgName != null) {
                 pkgNames.add(pkgName);
             }
         }
-        for (String pkgName: mLocationExtraPkgNames) {
+        for (String pkgName: sLocationExtraPkgNames) {
             if (pkgName != null) {
                 pkgNames.add(pkgName);
             }
@@ -1198,6 +1193,10 @@
             for (int i = 0; i < EXEMPTED_ROLES.length; i++) {
                 INDICATOR_EXEMPTED_PACKAGES[i] = context.getString(EXEMPTED_ROLES[i]);
             }
+            sLocationProviderPkgNames = context.getResources().getStringArray(
+                    R.array.config_locationProviderPackageNames);
+            sLocationExtraPkgNames = context.getResources().getStringArray(
+                    R.array.config_locationExtraPackageNames);
         }
     }
     /**
