From 77b53b2c56fd63d4aa3c5e61e8a98011ffc9da86 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?M=C3=A5rten=20Kongstad?= <marten.kongstad@sony.com>
Date: Tue, 1 Oct 2019 08:29:21 +0200
Subject: [PATCH] Remove the FEATURE_FLAG_IDMAP2 flag

Test: atest OverlayDeviceTests OverlayHostTests FrameworksServicesTests:com.android.server.om CtsAppSecurityHostTestCases:OverlayHostTest

Change-Id: Ib68eaf7f721c5d440fe7185777e88e23cb9840a4
---
 .../android/content/res/AssetManager.java     | 19 +++----
 .../com/android/server/om/IdmapManager.java   | 50 ++++++-------------
 .../server/om/OverlayManagerService.java      |  6 +--
 .../java/com/android/server/SystemServer.java |  2 +-
 .../om/OverlayManagerServiceImplTests.java    |  2 +-
 5 files changed, 24 insertions(+), 55 deletions(-)

diff --git a/core/java/android/content/res/AssetManager.java b/core/java/android/content/res/AssetManager.java
index 567e26b4c2f61..7d6dc97e82cba 100644
--- a/core/java/android/content/res/AssetManager.java
+++ b/core/java/android/content/res/AssetManager.java
@@ -60,7 +60,6 @@ import java.util.Map;
 public final class AssetManager implements AutoCloseable {
     private static final String TAG = "AssetManager";
     private static final boolean DEBUG_REFS = false;
-    private static final boolean FEATURE_FLAG_IDMAP2 = true;
 
     private static final String FRAMEWORK_APK_PATH = "/system/framework/framework-res.apk";
 
@@ -202,20 +201,14 @@ public final class AssetManager implements AutoCloseable {
         try {
             final ArrayList<ApkAssets> apkAssets = new ArrayList<>();
             apkAssets.add(ApkAssets.loadFromPath(FRAMEWORK_APK_PATH, true /*system*/));
-            if (FEATURE_FLAG_IDMAP2) {
-                final String[] systemIdmapPaths =
-                    nativeCreateIdmapsForStaticOverlaysTargetingAndroid();
-                if (systemIdmapPaths != null) {
-                    for (String idmapPath : systemIdmapPaths) {
-                        apkAssets.add(ApkAssets.loadOverlayFromPath(idmapPath, true /*system*/));
-                    }
-                } else {
-                    Log.w(TAG, "'idmap2 --scan' failed: no static=\"true\" overlays targeting "
-                            + "\"android\" will be loaded");
+            final String[] systemIdmapPaths = nativeCreateIdmapsForStaticOverlaysTargetingAndroid();
+            if (systemIdmapPaths != null) {
+                for (String idmapPath : systemIdmapPaths) {
+                    apkAssets.add(ApkAssets.loadOverlayFromPath(idmapPath, true /*system*/));
                 }
             } else {
-                nativeVerifySystemIdmaps();
-                loadStaticRuntimeOverlays(apkAssets);
+                Log.w(TAG, "'idmap2 --scan' failed: no static=\"true\" overlays targeting "
+                        + "\"android\" will be loaded");
             }
 
             sSystemApkAssetsSet = new ArraySet<>(apkAssets);
diff --git a/services/core/java/com/android/server/om/IdmapManager.java b/services/core/java/com/android/server/om/IdmapManager.java
index 288ef0e618b62..f3c912817d05c 100644
--- a/services/core/java/com/android/server/om/IdmapManager.java
+++ b/services/core/java/com/android/server/om/IdmapManager.java
@@ -30,20 +30,17 @@ import android.os.UserHandle;
 import android.util.Slog;
 
 import com.android.server.om.OverlayManagerServiceImpl.PackageManagerHelper;
-import com.android.server.pm.Installer;
 
 import java.io.File;
 
 /**
  * Handle the creation and deletion of idmap files.
  *
- * The actual work is performed by the idmap binary, launched through Installer
- * and installd (or idmap2).
+ * The actual work is performed by the idmap binary, launched through idmap2d.
  *
  * Note: this class is subclassed in the OMS unit tests, and hence not marked as final.
  */
 class IdmapManager {
-    private static final boolean FEATURE_FLAG_IDMAP2 = true;
     private static final boolean VENDOR_IS_Q_OR_LATER;
     static {
         final String value = SystemProperties.get("ro.vndk.version", "29");
@@ -58,12 +55,10 @@ class IdmapManager {
         VENDOR_IS_Q_OR_LATER = isQOrLater;
     }
 
-    private final Installer mInstaller;
     private final PackageManagerHelper mPackageManager;
     private final IdmapDaemon mIdmapDaemon;
 
-    IdmapManager(final Installer installer, final PackageManagerHelper packageManager) {
-        mInstaller = installer;
+    IdmapManager(final PackageManagerHelper packageManager) {
         mPackageManager = packageManager;
         mIdmapDaemon = IdmapDaemon.getInstance();
     }
@@ -78,18 +73,13 @@ class IdmapManager {
         final String targetPath = targetPackage.applicationInfo.getBaseCodePath();
         final String overlayPath = overlayPackage.applicationInfo.getBaseCodePath();
         try {
-            if (FEATURE_FLAG_IDMAP2) {
-                int policies = calculateFulfilledPolicies(targetPackage, overlayPackage, userId);
-                boolean enforce = enforceOverlayable(overlayPackage);
-                if (mIdmapDaemon.verifyIdmap(overlayPath, policies, enforce, userId)) {
-                    return true;
-                }
-                return mIdmapDaemon.createIdmap(targetPath, overlayPath, policies,
-                        enforce, userId) != null;
-            } else {
-                mInstaller.idmap(targetPath, overlayPath, sharedGid);
+            int policies = calculateFulfilledPolicies(targetPackage, overlayPackage, userId);
+            boolean enforce = enforceOverlayable(overlayPackage);
+            if (mIdmapDaemon.verifyIdmap(overlayPath, policies, enforce, userId)) {
                 return true;
             }
+            return mIdmapDaemon.createIdmap(targetPath, overlayPath, policies,
+                    enforce, userId) != null;
         } catch (Exception e) {
             Slog.w(TAG, "failed to generate idmap for " + targetPath + " and "
                     + overlayPath + ": " + e.getMessage());
@@ -102,12 +92,7 @@ class IdmapManager {
             Slog.d(TAG, "remove idmap for " + oi.baseCodePath);
         }
         try {
-            if (FEATURE_FLAG_IDMAP2) {
-                return mIdmapDaemon.removeIdmap(oi.baseCodePath, userId);
-            } else {
-                mInstaller.removeIdmap(oi.baseCodePath);
-                return true;
-            }
+            return mIdmapDaemon.removeIdmap(oi.baseCodePath, userId);
         } catch (Exception e) {
             Slog.w(TAG, "failed to remove idmap for " + oi.baseCodePath + ": " + e.getMessage());
             return false;
@@ -125,19 +110,12 @@ class IdmapManager {
 
     private @NonNull String getIdmapPath(@NonNull final String overlayPackagePath,
             final int userId) {
-        if (FEATURE_FLAG_IDMAP2) {
-            try {
-                return mIdmapDaemon.getIdmapPath(overlayPackagePath, userId);
-            } catch (Exception e) {
-                Slog.w(TAG, "failed to get idmap path for " + overlayPackagePath + ": "
-                        + e.getMessage());
-                return "";
-            }
-        } else {
-            final StringBuilder sb = new StringBuilder("/data/resource-cache/");
-            sb.append(overlayPackagePath.substring(1).replace('/', '@'));
-            sb.append("@idmap");
-            return sb.toString();
+        try {
+            return mIdmapDaemon.getIdmapPath(overlayPackagePath, userId);
+        } catch (Exception e) {
+            Slog.w(TAG, "failed to get idmap path for " + overlayPackagePath + ": "
+                    + e.getMessage());
+            return "";
         }
     }
 
diff --git a/services/core/java/com/android/server/om/OverlayManagerService.java b/services/core/java/com/android/server/om/OverlayManagerService.java
index f8b3fb2590896..83bea9dd1efce 100644
--- a/services/core/java/com/android/server/om/OverlayManagerService.java
+++ b/services/core/java/com/android/server/om/OverlayManagerService.java
@@ -62,7 +62,6 @@ import com.android.server.FgThread;
 import com.android.server.IoThread;
 import com.android.server.LocalServices;
 import com.android.server.SystemService;
-import com.android.server.pm.Installer;
 import com.android.server.pm.UserManagerService;
 
 import libcore.util.EmptyArray;
@@ -230,8 +229,7 @@ public final class OverlayManagerService extends SystemService {
 
     private final AtomicBoolean mPersistSettingsScheduled = new AtomicBoolean(false);
 
-    public OverlayManagerService(@NonNull final Context context,
-            @NonNull final Installer installer) {
+    public OverlayManagerService(@NonNull final Context context) {
         super(context);
         try {
             traceBegin(TRACE_TAG_RRO, "OMS#OverlayManagerService");
@@ -239,7 +237,7 @@ public final class OverlayManagerService extends SystemService {
                     new File(Environment.getDataSystemDirectory(), "overlays.xml"), "overlays");
             mPackageManager = new PackageManagerHelper();
             mUserManager = UserManagerService.getInstance();
-            IdmapManager im = new IdmapManager(installer, mPackageManager);
+            IdmapManager im = new IdmapManager(mPackageManager);
             mSettings = new OverlayManagerSettings();
             mImpl = new OverlayManagerServiceImpl(mPackageManager, im, mSettings,
                     getDefaultOverlayPackages(), new OverlayChangeListener());
diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java
index e93e17ae7a3cf..de65002c2c31f 100644
--- a/services/java/com/android/server/SystemServer.java
+++ b/services/java/com/android/server/SystemServer.java
@@ -804,7 +804,7 @@ public final class SystemServer {
 
         // Manages Overlay packages
         t.traceBegin("StartOverlayManagerService");
-        mSystemServiceManager.startService(new OverlayManagerService(mSystemContext, installer));
+        mSystemServiceManager.startService(new OverlayManagerService(mSystemContext));
         t.traceEnd();
 
         t.traceBegin("StartSensorPrivacyService");
diff --git a/services/tests/servicestests/src/com/android/server/om/OverlayManagerServiceImplTests.java b/services/tests/servicestests/src/com/android/server/om/OverlayManagerServiceImplTests.java
index 3cdadd58486ff..c566dfc4a23e8 100644
--- a/services/tests/servicestests/src/com/android/server/om/OverlayManagerServiceImplTests.java
+++ b/services/tests/servicestests/src/com/android/server/om/OverlayManagerServiceImplTests.java
@@ -444,7 +444,7 @@ public class OverlayManagerServiceImplTests {
         private Set<String> mIdmapFiles = new ArraySet<>();
 
         DummyIdmapManager(DummyDeviceState state, DummyPackageManagerHelper packageManagerHelper) {
-            super(null, packageManagerHelper);
+            super(packageManagerHelper);
             mState = state;
         }
 
-- 
GitLab