Implement ShadowApplicationPackageManager.getPackageUid()

Allows tests to return valid UIDs from ShadowPackageManager.

PiperRevId: 167056042
diff --git a/robolectric/src/test/java/org/robolectric/shadows/ShadowPackageManagerTest.java b/robolectric/src/test/java/org/robolectric/shadows/ShadowPackageManagerTest.java
index 1bfa66a..c2e62e3 100644
--- a/robolectric/src/test/java/org/robolectric/shadows/ShadowPackageManagerTest.java
+++ b/robolectric/src/test/java/org/robolectric/shadows/ShadowPackageManagerTest.java
@@ -1048,6 +1048,16 @@
   }
 
   @Test
+  @Config(minSdk = N)
+  public void getPackageUid() throws NameNotFoundException {
+    assertThat(packageManager.getPackageUid("a_name", 0)).isEqualTo(0);
+
+    shadowPackageManager.setPackagesForUid(10, new String[] {"a_name"});
+
+    assertThat(packageManager.getPackageUid("a_name", 0)).isEqualTo(10);
+  }
+
+  @Test
   public void getResourcesForApplication_currentApplication() throws Exception {
     assertThat(packageManager.getResourcesForApplication("org.robolectric").getString(R.string.app_name))
         .isEqualTo(RuntimeEnvironment.application.getString(R.string.app_name));
diff --git a/shadows/framework/src/main/java/org/robolectric/shadows/ShadowApplicationPackageManager.java b/shadows/framework/src/main/java/org/robolectric/shadows/ShadowApplicationPackageManager.java
index 4ad0b18..28791be 100644
--- a/shadows/framework/src/main/java/org/robolectric/shadows/ShadowApplicationPackageManager.java
+++ b/shadows/framework/src/main/java/org/robolectric/shadows/ShadowApplicationPackageManager.java
@@ -668,7 +668,8 @@
 
   @Implementation
   public int getPackageUid(String packageName, int flags) throws NameNotFoundException {
-    return 0;
+    Integer uid = uidForPackage.get(packageName);
+    return uid != null ? uid : 0;
   }
 
   @Implementation
diff --git a/shadows/framework/src/main/java/org/robolectric/shadows/ShadowPackageManager.java b/shadows/framework/src/main/java/org/robolectric/shadows/ShadowPackageManager.java
index a39bc6d..fda42b2 100644
--- a/shadows/framework/src/main/java/org/robolectric/shadows/ShadowPackageManager.java
+++ b/shadows/framework/src/main/java/org/robolectric/shadows/ShadowPackageManager.java
@@ -130,6 +130,7 @@
   final Map<String, PackageStats> packageStatsMap = new HashMap<>();
   final Map<String, String> packageInstallerMap = new HashMap<>();
   final Map<Integer, String[]> packagesForUid = new HashMap<>();
+  final Map<String, Integer> uidForPackage = new HashMap<>();
   final Map<Integer, String> namesForUid = new HashMap<>();
   final Map<Integer, Integer> verificationResults = new HashMap<>();
   final Map<Integer, Long> verificationTimeoutExtension = new HashMap<>();
@@ -839,10 +840,16 @@
 
   public void setPackagesForCallingUid(String... packagesForCallingUid) {
     packagesForUid.put(Binder.getCallingUid(), packagesForCallingUid);
+    for (String packageName : packagesForCallingUid) {
+      uidForPackage.put(packageName, Binder.getCallingUid());
+    }
   }
 
   public void setPackagesForUid(int uid, String... packagesForCallingUid) {
     packagesForUid.put(uid, packagesForCallingUid);
+    for (String packageName : packagesForCallingUid) {
+      uidForPackage.put(packageName, uid);
+    }
   }
 
   public void setPackageArchiveInfo(String archiveFilePath, PackageInfo packageInfo) {
@@ -1065,7 +1072,7 @@
    * @deprecated Use {@link android.app.ApplicationPackageManager#getComponentEnabledSetting(ComponentName)} instead. This class will be made private in Robolectric 3.5.
    */
   @Deprecated
-  public class ComponentState {
+  public static class ComponentState {
     public int newState;
     public int flags;