Hide app if it shares uid with whitelisted app

Statsd blame app based on uid, which may mapping to multiple packages.
If there is one app in whitelist, then we shouldn't blame other apps
in same group.

Bug: 77560853
Test: RunSettingsLibTests
Change-Id: Ic21fea9701f9199c016674eaca3b0382e3a80837
diff --git a/packages/SettingsLib/src/com/android/settingslib/fuelgauge/PowerWhitelistBackend.java b/packages/SettingsLib/src/com/android/settingslib/fuelgauge/PowerWhitelistBackend.java
index 7081678..06e2ee1 100644
--- a/packages/SettingsLib/src/com/android/settingslib/fuelgauge/PowerWhitelistBackend.java
+++ b/packages/SettingsLib/src/com/android/settingslib/fuelgauge/PowerWhitelistBackend.java
@@ -16,6 +16,7 @@
 
 package com.android.settingslib.fuelgauge;
 
+import android.content.pm.PackageManager;
 import android.os.IDeviceIdleController;
 import android.os.RemoteException;
 import android.os.ServiceManager;
@@ -24,6 +25,8 @@
 import android.util.ArraySet;
 import android.util.Log;
 
+import com.android.internal.util.ArrayUtils;
+
 /**
  * Handles getting/changing the whitelist for the exceptions to battery saving features.
  */
@@ -68,6 +71,19 @@
         return mSysWhitelistedAppsExceptIdle.contains(pkg);
     }
 
+    public boolean isSysWhitelistedExceptIdle(String[] pkgs) {
+        if (ArrayUtils.isEmpty(pkgs)) {
+            return false;
+        }
+        for (String pkg : pkgs) {
+            if (isSysWhitelistedExceptIdle(pkg)) {
+                return true;
+            }
+        }
+
+        return false;
+    }
+
     public void addApp(String pkg) {
         try {
             mDeviceIdleService.addPowerSaveWhitelistApp(pkg);
diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/fuelgauge/PowerWhitelistBackendTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/fuelgauge/PowerWhitelistBackendTest.java
index 5a123af..f591781 100644
--- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/fuelgauge/PowerWhitelistBackendTest.java
+++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/fuelgauge/PowerWhitelistBackendTest.java
@@ -92,7 +92,7 @@
     }
 
     @Test
-    public void testIsSystemWhitelistedExceptIdle() throws Exception {
+    public void testIsSystemWhitelistedExceptIdle_onePackage() throws Exception {
         doReturn(new String[]{PACKAGE_TWO}).when(
                 mDeviceIdleService).getSystemPowerWhitelistExceptIdle();
         mPowerWhitelistBackend.refreshList();
@@ -100,4 +100,17 @@
         assertThat(mPowerWhitelistBackend.isSysWhitelistedExceptIdle(PACKAGE_ONE)).isFalse();
         assertThat(mPowerWhitelistBackend.isSysWhitelistedExceptIdle(PACKAGE_TWO)).isTrue();
     }
+
+    @Test
+    public void testIsSystemWhitelistedExceptIdle_packageArray() throws Exception {
+        doReturn(new String[]{PACKAGE_TWO}).when(
+                mDeviceIdleService).getSystemPowerWhitelistExceptIdle();
+        mPowerWhitelistBackend.refreshList();
+
+        final String[] idlePackages = {PACKAGE_ONE, PACKAGE_TWO};
+        final String[] normalPackages = {PACKAGE_ONE};
+
+        assertThat(mPowerWhitelistBackend.isSysWhitelistedExceptIdle(normalPackages)).isFalse();
+        assertThat(mPowerWhitelistBackend.isSysWhitelistedExceptIdle(idlePackages)).isTrue();
+    }
 }