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;