Merge "Do not check features in PackageManagerService" into honeycomb
diff --git a/core/tests/coretests/res/raw/install_uses_feature b/core/tests/coretests/res/raw/install_uses_feature
index 769a246..eeeb309 100644
--- a/core/tests/coretests/res/raw/install_uses_feature
+++ b/core/tests/coretests/res/raw/install_uses_feature
Binary files differ
diff --git a/core/tests/coretests/src/android/content/pm/PackageManagerTests.java b/core/tests/coretests/src/android/content/pm/PackageManagerTests.java
index 0e65df5..7af64e4 100755
--- a/core/tests/coretests/src/android/content/pm/PackageManagerTests.java
+++ b/core/tests/coretests/src/android/content/pm/PackageManagerTests.java
@@ -3098,10 +3098,19 @@
                 fail, retCode, PackageInfo.INSTALL_LOCATION_UNSPECIFIED);
     }
 
+    /**
+     * Unknown features should be allowed to install. This prevents older phones
+     * from rejecting new packages that specify features that didn't exist when
+     * an older phone existed. All older phones are assumed to have those
+     * features.
+     * <p>
+     * Right now we allow all packages to be installed regardless of their
+     * features.
+     */
     @LargeTest
-    public void testUsesFeatureMissingFeature() {
-        int retCode = PackageManager.INSTALL_FAILED_MISSING_FEATURE;
-        installFromRawResource("install.apk", R.raw.install_uses_feature, 0, true, true, retCode,
+    public void testUsesFeatureUnknownFeature() {
+        int retCode = PackageManager.INSTALL_SUCCEEDED;
+        installFromRawResource("install.apk", R.raw.install_uses_feature, 0, true, false, retCode,
                 PackageInfo.INSTALL_LOCATION_UNSPECIFIED);
     }
 
diff --git a/services/java/com/android/server/PackageManagerService.java b/services/java/com/android/server/PackageManagerService.java
index d75aef6..f3b5f4b 100644
--- a/services/java/com/android/server/PackageManagerService.java
+++ b/services/java/com/android/server/PackageManagerService.java
@@ -2924,26 +2924,6 @@
                 }
             }
 
-            if (pkg.reqFeatures != null) {
-                int N = pkg.reqFeatures.size();
-                for (int i = 0; i < N; i++) {
-                    FeatureInfo fi = pkg.reqFeatures.get(i);
-                    if ((fi.flags & FeatureInfo.FLAG_REQUIRED) == 0) {
-                        // Don't care.
-                        continue;
-                    }
-
-                    if (fi.name != null) {
-                        if (mAvailableFeatures.get(fi.name) == null) {
-                            Slog.e(TAG, "Package " + pkg.packageName
-                                    + " requires unavailable feature " + fi.name + "; failing!");
-                            mLastScanError = PackageManager.INSTALL_FAILED_MISSING_FEATURE;
-                            return null;
-                        }
-                    }
-                }
-            }
-
             if (pkg.mSharedUserId != null) {
                 suid = mSettings.getSharedUserLP(pkg.mSharedUserId,
                         pkg.applicationInfo.flags, true);