aboutsummaryrefslogtreecommitdiff
path: root/service-builtin
diff options
context:
space:
mode:
Diffstat (limited to 'service-builtin')
-rw-r--r--service-builtin/src/com/android/car/UpdatablePackageContext.java43
1 files changed, 31 insertions, 12 deletions
diff --git a/service-builtin/src/com/android/car/UpdatablePackageContext.java b/service-builtin/src/com/android/car/UpdatablePackageContext.java
index 84c4511e62..3d247f7f7f 100644
--- a/service-builtin/src/com/android/car/UpdatablePackageContext.java
+++ b/service-builtin/src/com/android/car/UpdatablePackageContext.java
@@ -16,12 +16,14 @@
package com.android.car;
+import android.annotation.Nullable;
import android.car.builtin.content.pm.PackageManagerHelper;
import android.car.builtin.util.Slogf;
import android.content.Context;
import android.content.ContextWrapper;
import android.content.om.OverlayManager;
import android.content.pm.PackageInfo;
+import android.content.pm.PackageManager;
import android.content.res.AssetManager;
import android.content.res.Resources;
import android.os.SystemProperties;
@@ -31,7 +33,9 @@ import android.text.TextUtils;
/** Context for updatable package */
public class UpdatablePackageContext extends ContextWrapper {
- public static final String UPDATABLE_CAR_SERVICE_PACKAGE_NAME = "com.android.car.updatable";
+ // TODO(b/216134347): Find a better way to find the package.
+ private static final String[] UPDATABLE_CAR_SERVICE_PACKAGE_CANDIDATES =
+ { "com.android.car.updatable", "com.google.android.car.updatable" };
private static final String TAG = UpdatablePackageContext.class.getSimpleName();
@@ -42,8 +46,7 @@ public class UpdatablePackageContext extends ContextWrapper {
public static UpdatablePackageContext create(Context baseContext) {
Context packageContext;
try {
- PackageInfo info = baseContext.getPackageManager().getPackageInfo(
- UPDATABLE_CAR_SERVICE_PACKAGE_NAME, 0);
+ PackageInfo info = findUpdatableServicePackage(baseContext);
if (info == null || info.applicationInfo == null || !(info.applicationInfo.isSystemApp()
|| info.applicationInfo.isUpdatedSystemApp())) {
throw new IllegalStateException(
@@ -56,8 +59,7 @@ public class UpdatablePackageContext extends ContextWrapper {
// CONTEXT_IGNORE_SECURITY: UID is different but ok as the package is trustable system
// app
- packageContext = baseContext.createPackageContext(
- UPDATABLE_CAR_SERVICE_PACKAGE_NAME,
+ packageContext = baseContext.createPackageContext(info.packageName,
Context.CONTEXT_INCLUDE_CODE | Context.CONTEXT_IGNORE_SECURITY);
} catch (Exception e) {
throw new RuntimeException("Cannot load updatable package code", e);
@@ -66,6 +68,23 @@ public class UpdatablePackageContext extends ContextWrapper {
return new UpdatablePackageContext(baseContext, packageContext);
}
+ @Nullable
+ private static PackageInfo findUpdatableServicePackage(Context baseContext) {
+ PackageInfo info = null;
+ for (int i = 0; i < UPDATABLE_CAR_SERVICE_PACKAGE_CANDIDATES.length; i++) {
+ try {
+ info = baseContext.getPackageManager().getPackageInfo(
+ UPDATABLE_CAR_SERVICE_PACKAGE_CANDIDATES[i], /* flags= */ 0);
+ if (info != null) {
+ break;
+ }
+ } catch (PackageManager.NameNotFoundException e) {
+ // ignore
+ }
+ }
+ return info;
+ }
+
private static void enableRROForCarServiceUpdatable(Context baseContext) {
String packageName = SystemProperties.get(
PackageManagerHelper.PROPERTY_CAR_SERVICE_OVERLAY_PACKAGE_NAME,
@@ -82,14 +101,14 @@ public class UpdatablePackageContext extends ContextWrapper {
PackageInfo info = baseContext.getPackageManager().getPackageInfo(packageName, 0);
if (info == null || info.applicationInfo == null
|| !(PackageManagerHelper.isSystemApp(info.applicationInfo)
- || PackageManagerHelper.isUpdatedSystemApp(info.applicationInfo)
- || PackageManagerHelper.isOemApp(info.applicationInfo)
- || PackageManagerHelper.isOdmApp(info.applicationInfo)
- || PackageManagerHelper.isVendorApp(info.applicationInfo)
- || PackageManagerHelper.isProductApp(info.applicationInfo)
- || PackageManagerHelper.isSystemExtApp(info.applicationInfo))) {
+ || PackageManagerHelper.isUpdatedSystemApp(info.applicationInfo)
+ || PackageManagerHelper.isOemApp(info.applicationInfo)
+ || PackageManagerHelper.isOdmApp(info.applicationInfo)
+ || PackageManagerHelper.isVendorApp(info.applicationInfo)
+ || PackageManagerHelper.isProductApp(info.applicationInfo)
+ || PackageManagerHelper.isSystemExtApp(info.applicationInfo))) {
Slogf.i(TAG, "%s is not usable: %s", packageName, ((info == null)
- ? "package do not exist" : info.applicationInfo));
+ ? "package do not exist" : info.applicationInfo));
return;
}
} catch (Exception e) {