From 441d61bf16fb63a0e19d6252ab9ac4c35a739006 Mon Sep 17 00:00:00 2001 From: Martijn Coenen Date: Wed, 12 Apr 2017 13:52:40 -0700 Subject: [PATCH] Add persistentFeature application attribute. This allows us to only mark processes as persistent when a feature it actually depends on is present on the device. Also adds a "android.hardware.nfc.any" feature, to indicate the device supports any of the NFC features that require the NFC process to run persistently. Bug: 36873979 Bug: 37269025 Test: NFC is still started on devices with NFC Change-Id: I5792d75d8714f39718fa957177a632efcbbd37d3 --- api/current.txt | 1 + api/system-current.txt | 1 + api/test-current.txt | 1 + core/java/android/content/pm/PackageManager.java | 11 +++++++++++ core/java/android/content/pm/PackageParser.java | 7 ++++++- core/res/res/values/attrs_manifest.xml | 5 +++++ core/res/res/values/public.xml | 1 + 7 files changed, 26 insertions(+), 1 deletion(-) diff --git a/api/current.txt b/api/current.txt index c490b17b51b2d..4de8fc32f4b23 100644 --- a/api/current.txt +++ b/api/current.txt @@ -992,6 +992,7 @@ package android { field public static final int persistableMode = 16843821; // 0x101042d field public static final int persistent = 16842765; // 0x101000d field public static final int persistentDrawingCache = 16842990; // 0x10100ee + field public static final int persistentFeature = 16844134; // 0x1010566 field public static final deprecated int phoneNumber = 16843111; // 0x1010167 field public static final int pivotX = 16843189; // 0x10101b5 field public static final int pivotY = 16843190; // 0x10101b6 diff --git a/api/system-current.txt b/api/system-current.txt index ed486b8eae329..c5435b94e1e48 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -1108,6 +1108,7 @@ package android { field public static final int persistableMode = 16843821; // 0x101042d field public static final int persistent = 16842765; // 0x101000d field public static final int persistentDrawingCache = 16842990; // 0x10100ee + field public static final int persistentFeature = 16844134; // 0x1010566 field public static final deprecated int phoneNumber = 16843111; // 0x1010167 field public static final int pivotX = 16843189; // 0x10101b5 field public static final int pivotY = 16843190; // 0x10101b6 diff --git a/api/test-current.txt b/api/test-current.txt index 35e5bfc63b9f9..c51981e400e53 100644 --- a/api/test-current.txt +++ b/api/test-current.txt @@ -992,6 +992,7 @@ package android { field public static final int persistableMode = 16843821; // 0x101042d field public static final int persistent = 16842765; // 0x101000d field public static final int persistentDrawingCache = 16842990; // 0x10100ee + field public static final int persistentFeature = 16844134; // 0x1010566 field public static final deprecated int phoneNumber = 16843111; // 0x1010167 field public static final int pivotX = 16843189; // 0x10101b5 field public static final int pivotY = 16843190; // 0x10101b6 diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java index c7a0da508b2b6..e5c8f0d2ab3e9 100644 --- a/core/java/android/content/pm/PackageManager.java +++ b/core/java/android/content/pm/PackageManager.java @@ -1761,6 +1761,17 @@ public abstract class PackageManager { @SdkConstant(SdkConstantType.FEATURE) public static final String FEATURE_NFC_HOST_CARD_EMULATION_NFCF = "android.hardware.nfc.hcef"; + /** + * Feature for {@link #getSystemAvailableFeatures} and + * {@link #hasSystemFeature}: The device supports any + * one of the {@link #FEATURE_NFC}, {@link #FEATURE_NFC_HOST_CARD_EMULATION}, + * or {@link #FEATURE_NFC_HOST_CARD_EMULATION_NFCF} features. + * + * @hide + */ + @SdkConstant(SdkConstantType.FEATURE) + public static final String FEATURE_NFC_ANY = "android.hardware.nfc.any"; + /** * Feature for {@link #getSystemAvailableFeatures} and * {@link #hasSystemFeature}: The device supports the OpenGL ES diff --git a/core/java/android/content/pm/PackageParser.java b/core/java/android/content/pm/PackageParser.java index e64b2a56a2777..11c658a1d4cf8 100644 --- a/core/java/android/content/pm/PackageParser.java +++ b/core/java/android/content/pm/PackageParser.java @@ -3363,7 +3363,12 @@ public class PackageParser { if (sa.getBoolean( com.android.internal.R.styleable.AndroidManifestApplication_persistent, false)) { - ai.flags |= ApplicationInfo.FLAG_PERSISTENT; + // Check if persistence is based on a feature being present + final String requiredFeature = sa.getNonResourceString( + com.android.internal.R.styleable.AndroidManifestApplication_persistentFeature); + if (requiredFeature == null || mCallback.hasFeature(requiredFeature)) { + ai.flags |= ApplicationInfo.FLAG_PERSISTENT; + } } } diff --git a/core/res/res/values/attrs_manifest.xml b/core/res/res/values/attrs_manifest.xml index 3e4b66d780adf..569646820402f 100644 --- a/core/res/res/values/attrs_manifest.xml +++ b/core/res/res/values/attrs_manifest.xml @@ -322,6 +322,10 @@ your application running at all times. --> + + + @@ -1358,6 +1362,7 @@ for normal behavior. --> +