Loading api/current.txt +4 −0 Original line number Diff line number Diff line Loading @@ -505,6 +505,7 @@ package android { field public static final int duplicateParentState = 16842985; // 0x10100e9 field public static final int duration = 16843160; // 0x1010198 field public static final int durationScaleHint = 16844014; // 0x10104ee field public static final int dynamicResources = 16844019; // 0x10104f3 field public static final int editTextBackground = 16843602; // 0x1010352 field public static final int editTextColor = 16843601; // 0x1010351 field public static final int editTextPreferenceStyle = 16842898; // 0x1010092 Loading Loading @@ -19752,9 +19753,12 @@ package android.nfc.cardemulation { method public boolean supportsAidPrefixRegistration(); method public boolean unsetPreferredService(android.app.Activity); field public static final java.lang.String ACTION_CHANGE_DEFAULT = "android.nfc.cardemulation.action.ACTION_CHANGE_DEFAULT"; field public static final java.lang.String ACTION_REQUEST_SERVICE_RESOURCES = "android.nfc.cardemulation.action.REQUEST_SERVICE_RESOURCES"; field public static final java.lang.String CATEGORY_OTHER = "other"; field public static final java.lang.String CATEGORY_PAYMENT = "payment"; field public static final java.lang.String EXTRA_BANNER_RES_ID = "android.nfc.cardemulation.extra.BANNER_RES_ID"; field public static final java.lang.String EXTRA_CATEGORY = "category"; field public static final java.lang.String EXTRA_DESCRIPTION = "android.nfc.cardemulation.extra.DESCRIPTION"; field public static final java.lang.String EXTRA_SERVICE_COMPONENT = "component"; field public static final int SELECTION_MODE_ALWAYS_ASK = 1; // 0x1 field public static final int SELECTION_MODE_ASK_IF_CONFLICT = 2; // 0x2 api/system-current.txt +4 −0 Original line number Diff line number Diff line Loading @@ -578,6 +578,7 @@ package android { field public static final int duplicateParentState = 16842985; // 0x10100e9 field public static final int duration = 16843160; // 0x1010198 field public static final int durationScaleHint = 16844014; // 0x10104ee field public static final int dynamicResources = 16844019; // 0x10104f3 field public static final int editTextBackground = 16843602; // 0x1010352 field public static final int editTextColor = 16843601; // 0x1010351 field public static final int editTextPreferenceStyle = 16842898; // 0x1010092 Loading Loading @@ -21640,9 +21641,12 @@ package android.nfc.cardemulation { method public boolean supportsAidPrefixRegistration(); method public boolean unsetPreferredService(android.app.Activity); field public static final java.lang.String ACTION_CHANGE_DEFAULT = "android.nfc.cardemulation.action.ACTION_CHANGE_DEFAULT"; field public static final java.lang.String ACTION_REQUEST_SERVICE_RESOURCES = "android.nfc.cardemulation.action.REQUEST_SERVICE_RESOURCES"; field public static final java.lang.String CATEGORY_OTHER = "other"; field public static final java.lang.String CATEGORY_PAYMENT = "payment"; field public static final java.lang.String EXTRA_BANNER_RES_ID = "android.nfc.cardemulation.extra.BANNER_RES_ID"; field public static final java.lang.String EXTRA_CATEGORY = "category"; field public static final java.lang.String EXTRA_DESCRIPTION = "android.nfc.cardemulation.extra.DESCRIPTION"; field public static final java.lang.String EXTRA_SERVICE_COMPONENT = "component"; field public static final int SELECTION_MODE_ALWAYS_ASK = 1; // 0x1 field public static final int SELECTION_MODE_ASK_IF_CONFLICT = 2; // 0x2 core/java/android/nfc/cardemulation/ApduServiceInfo.java +46 −2 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ package android.nfc.cardemulation; import android.content.ComponentName; import android.content.Context; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.content.pm.ServiceInfo; Loading @@ -28,6 +29,7 @@ import android.content.res.XmlResourceParser; import android.graphics.drawable.Drawable; import android.os.Parcel; import android.os.Parcelable; import android.os.ResultReceiver; import android.util.AttributeSet; import android.util.Log; import android.util.Xml; Loading Loading @@ -88,12 +90,24 @@ public final class ApduServiceInfo implements Parcelable { * The uid of the package the service belongs to */ final int mUid; /** * Whether this service has dynamic resources */ final boolean mHasDynamicResources; /** * Settings Activity for this service */ final String mSettingsActivityName; /** * @hide */ public ApduServiceInfo(ResolveInfo info, boolean onHost, String description, ArrayList<AidGroup> staticAidGroups, ArrayList<AidGroup> dynamicAidGroups, boolean requiresUnlock, int bannerResource, int uid) { boolean requiresUnlock, int bannerResource, int uid, boolean hasDynamicResources, String settingsActivityName) { this.mService = info; this.mDescription = description; this.mStaticAidGroups = new HashMap<String, AidGroup>(); Loading @@ -108,6 +122,8 @@ public final class ApduServiceInfo implements Parcelable { } this.mBannerResourceId = bannerResource; this.mUid = uid; this.mHasDynamicResources = hasDynamicResources; this.mSettingsActivityName = settingsActivityName; } public ApduServiceInfo(PackageManager pm, ResolveInfo info, boolean onHost) throws Loading Loading @@ -156,6 +172,10 @@ public final class ApduServiceInfo implements Parcelable { false); mBannerResourceId = sa.getResourceId( com.android.internal.R.styleable.HostApduService_apduServiceBanner, -1); mHasDynamicResources = sa.getBoolean( com.android.internal.R.styleable.HostApduService_dynamicResources, false); mSettingsActivityName = sa.getString( com.android.internal.R.styleable.HostApduService_settingsActivity); sa.recycle(); } else { TypedArray sa = res.obtainAttributes(attrs, Loading @@ -166,6 +186,10 @@ public final class ApduServiceInfo implements Parcelable { mRequiresDeviceUnlock = false; mBannerResourceId = sa.getResourceId( com.android.internal.R.styleable.OffHostApduService_apduServiceBanner, -1); mHasDynamicResources = sa.getBoolean( com.android.internal.R.styleable.OffHostApduService_dynamicResources, false); mSettingsActivityName = sa.getString( com.android.internal.R.styleable.HostApduService_settingsActivity); sa.recycle(); } Loading Loading @@ -359,6 +383,15 @@ public final class ApduServiceInfo implements Parcelable { return mService.loadLabel(pm); } public CharSequence loadAppLabel(PackageManager pm) { try { return pm.getApplicationLabel(pm.getApplicationInfo( mService.resolvePackageName, PackageManager.GET_META_DATA)); } catch (PackageManager.NameNotFoundException e) { return null; } } public Drawable loadIcon(PackageManager pm) { return mService.loadIcon(pm); } Loading @@ -377,6 +410,11 @@ public final class ApduServiceInfo implements Parcelable { return null; } } public boolean hasDynamicResources() { return mHasDynamicResources; } public String getSettingsActivityName() { return mSettingsActivityName; } @Override public String toString() { Loading Loading @@ -430,6 +468,8 @@ public final class ApduServiceInfo implements Parcelable { dest.writeInt(mRequiresDeviceUnlock ? 1 : 0); dest.writeInt(mBannerResourceId); dest.writeInt(mUid); dest.writeInt(mHasDynamicResources ? 1 : 0); dest.writeString(mSettingsActivityName); }; public static final Parcelable.Creator<ApduServiceInfo> CREATOR = Loading @@ -452,8 +492,11 @@ public final class ApduServiceInfo implements Parcelable { boolean requiresUnlock = source.readInt() != 0; int bannerResource = source.readInt(); int uid = source.readInt(); boolean dynamicResources = source.readInt() != 0; String settingsActivityName = source.readString(); return new ApduServiceInfo(info, onHost, description, staticAidGroups, dynamicAidGroups, requiresUnlock, bannerResource, uid); dynamicAidGroups, requiresUnlock, bannerResource, uid, dynamicResources, settingsActivityName); } @Override Loading @@ -479,5 +522,6 @@ public final class ApduServiceInfo implements Parcelable { pw.println(" AID: " + aid); } } pw.println(" Settings Activity: " + mSettingsActivityName); } } core/java/android/nfc/cardemulation/CardEmulation.java +31 −0 Original line number Diff line number Diff line Loading @@ -89,6 +89,37 @@ public final class CardEmulation { */ public static final String CATEGORY_OTHER = "other"; /** * Ordered broadcast that can be sent to your app to * request a description and banner to be shown in * Android Settings UI. * When sent to you, this broadcast will contain the * {@link #EXTRA_SERVICE_COMPONENT} extra to identify * the service. * * Note that this broadcast will only be sent to your * app, if a card emulation service in your app has requested * its resources to be loaded dynamically. */ @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION) public static final String ACTION_REQUEST_SERVICE_RESOURCES = "android.nfc.cardemulation.action.REQUEST_SERVICE_RESOURCES"; /** * The description of the service. Note that this must * be localized by your app, as the String will be shown * as is. */ public static final String EXTRA_DESCRIPTION = "android.nfc.cardemulation.extra.DESCRIPTION"; /** * The resource ID of the service banner to be shown * for this service. */ public static final String EXTRA_BANNER_RES_ID = "android.nfc.cardemulation.extra.BANNER_RES_ID"; /** * Return value for {@link #getSelectionModeForCategory(String)}. * Loading core/res/AndroidManifest.xml +2 −0 Original line number Diff line number Diff line Loading @@ -227,6 +227,8 @@ <protected-broadcast android:name="com.android.nfc_extras.action.AID_SELECTED" /> <protected-broadcast android:name="android.nfc.action.TRANSACTION_DETECTED" /> <protected-broadcast android:name="android.nfc.cardemulation.action.REQUEST_SERVICE_RESOURCES" /> <protected-broadcast android:name="android.intent.action.CLEAR_DNS_CACHE" /> <protected-broadcast android:name="android.intent.action.PROXY_CHANGE" /> Loading Loading
api/current.txt +4 −0 Original line number Diff line number Diff line Loading @@ -505,6 +505,7 @@ package android { field public static final int duplicateParentState = 16842985; // 0x10100e9 field public static final int duration = 16843160; // 0x1010198 field public static final int durationScaleHint = 16844014; // 0x10104ee field public static final int dynamicResources = 16844019; // 0x10104f3 field public static final int editTextBackground = 16843602; // 0x1010352 field public static final int editTextColor = 16843601; // 0x1010351 field public static final int editTextPreferenceStyle = 16842898; // 0x1010092 Loading Loading @@ -19752,9 +19753,12 @@ package android.nfc.cardemulation { method public boolean supportsAidPrefixRegistration(); method public boolean unsetPreferredService(android.app.Activity); field public static final java.lang.String ACTION_CHANGE_DEFAULT = "android.nfc.cardemulation.action.ACTION_CHANGE_DEFAULT"; field public static final java.lang.String ACTION_REQUEST_SERVICE_RESOURCES = "android.nfc.cardemulation.action.REQUEST_SERVICE_RESOURCES"; field public static final java.lang.String CATEGORY_OTHER = "other"; field public static final java.lang.String CATEGORY_PAYMENT = "payment"; field public static final java.lang.String EXTRA_BANNER_RES_ID = "android.nfc.cardemulation.extra.BANNER_RES_ID"; field public static final java.lang.String EXTRA_CATEGORY = "category"; field public static final java.lang.String EXTRA_DESCRIPTION = "android.nfc.cardemulation.extra.DESCRIPTION"; field public static final java.lang.String EXTRA_SERVICE_COMPONENT = "component"; field public static final int SELECTION_MODE_ALWAYS_ASK = 1; // 0x1 field public static final int SELECTION_MODE_ASK_IF_CONFLICT = 2; // 0x2
api/system-current.txt +4 −0 Original line number Diff line number Diff line Loading @@ -578,6 +578,7 @@ package android { field public static final int duplicateParentState = 16842985; // 0x10100e9 field public static final int duration = 16843160; // 0x1010198 field public static final int durationScaleHint = 16844014; // 0x10104ee field public static final int dynamicResources = 16844019; // 0x10104f3 field public static final int editTextBackground = 16843602; // 0x1010352 field public static final int editTextColor = 16843601; // 0x1010351 field public static final int editTextPreferenceStyle = 16842898; // 0x1010092 Loading Loading @@ -21640,9 +21641,12 @@ package android.nfc.cardemulation { method public boolean supportsAidPrefixRegistration(); method public boolean unsetPreferredService(android.app.Activity); field public static final java.lang.String ACTION_CHANGE_DEFAULT = "android.nfc.cardemulation.action.ACTION_CHANGE_DEFAULT"; field public static final java.lang.String ACTION_REQUEST_SERVICE_RESOURCES = "android.nfc.cardemulation.action.REQUEST_SERVICE_RESOURCES"; field public static final java.lang.String CATEGORY_OTHER = "other"; field public static final java.lang.String CATEGORY_PAYMENT = "payment"; field public static final java.lang.String EXTRA_BANNER_RES_ID = "android.nfc.cardemulation.extra.BANNER_RES_ID"; field public static final java.lang.String EXTRA_CATEGORY = "category"; field public static final java.lang.String EXTRA_DESCRIPTION = "android.nfc.cardemulation.extra.DESCRIPTION"; field public static final java.lang.String EXTRA_SERVICE_COMPONENT = "component"; field public static final int SELECTION_MODE_ALWAYS_ASK = 1; // 0x1 field public static final int SELECTION_MODE_ASK_IF_CONFLICT = 2; // 0x2
core/java/android/nfc/cardemulation/ApduServiceInfo.java +46 −2 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ package android.nfc.cardemulation; import android.content.ComponentName; import android.content.Context; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.content.pm.ServiceInfo; Loading @@ -28,6 +29,7 @@ import android.content.res.XmlResourceParser; import android.graphics.drawable.Drawable; import android.os.Parcel; import android.os.Parcelable; import android.os.ResultReceiver; import android.util.AttributeSet; import android.util.Log; import android.util.Xml; Loading Loading @@ -88,12 +90,24 @@ public final class ApduServiceInfo implements Parcelable { * The uid of the package the service belongs to */ final int mUid; /** * Whether this service has dynamic resources */ final boolean mHasDynamicResources; /** * Settings Activity for this service */ final String mSettingsActivityName; /** * @hide */ public ApduServiceInfo(ResolveInfo info, boolean onHost, String description, ArrayList<AidGroup> staticAidGroups, ArrayList<AidGroup> dynamicAidGroups, boolean requiresUnlock, int bannerResource, int uid) { boolean requiresUnlock, int bannerResource, int uid, boolean hasDynamicResources, String settingsActivityName) { this.mService = info; this.mDescription = description; this.mStaticAidGroups = new HashMap<String, AidGroup>(); Loading @@ -108,6 +122,8 @@ public final class ApduServiceInfo implements Parcelable { } this.mBannerResourceId = bannerResource; this.mUid = uid; this.mHasDynamicResources = hasDynamicResources; this.mSettingsActivityName = settingsActivityName; } public ApduServiceInfo(PackageManager pm, ResolveInfo info, boolean onHost) throws Loading Loading @@ -156,6 +172,10 @@ public final class ApduServiceInfo implements Parcelable { false); mBannerResourceId = sa.getResourceId( com.android.internal.R.styleable.HostApduService_apduServiceBanner, -1); mHasDynamicResources = sa.getBoolean( com.android.internal.R.styleable.HostApduService_dynamicResources, false); mSettingsActivityName = sa.getString( com.android.internal.R.styleable.HostApduService_settingsActivity); sa.recycle(); } else { TypedArray sa = res.obtainAttributes(attrs, Loading @@ -166,6 +186,10 @@ public final class ApduServiceInfo implements Parcelable { mRequiresDeviceUnlock = false; mBannerResourceId = sa.getResourceId( com.android.internal.R.styleable.OffHostApduService_apduServiceBanner, -1); mHasDynamicResources = sa.getBoolean( com.android.internal.R.styleable.OffHostApduService_dynamicResources, false); mSettingsActivityName = sa.getString( com.android.internal.R.styleable.HostApduService_settingsActivity); sa.recycle(); } Loading Loading @@ -359,6 +383,15 @@ public final class ApduServiceInfo implements Parcelable { return mService.loadLabel(pm); } public CharSequence loadAppLabel(PackageManager pm) { try { return pm.getApplicationLabel(pm.getApplicationInfo( mService.resolvePackageName, PackageManager.GET_META_DATA)); } catch (PackageManager.NameNotFoundException e) { return null; } } public Drawable loadIcon(PackageManager pm) { return mService.loadIcon(pm); } Loading @@ -377,6 +410,11 @@ public final class ApduServiceInfo implements Parcelable { return null; } } public boolean hasDynamicResources() { return mHasDynamicResources; } public String getSettingsActivityName() { return mSettingsActivityName; } @Override public String toString() { Loading Loading @@ -430,6 +468,8 @@ public final class ApduServiceInfo implements Parcelable { dest.writeInt(mRequiresDeviceUnlock ? 1 : 0); dest.writeInt(mBannerResourceId); dest.writeInt(mUid); dest.writeInt(mHasDynamicResources ? 1 : 0); dest.writeString(mSettingsActivityName); }; public static final Parcelable.Creator<ApduServiceInfo> CREATOR = Loading @@ -452,8 +492,11 @@ public final class ApduServiceInfo implements Parcelable { boolean requiresUnlock = source.readInt() != 0; int bannerResource = source.readInt(); int uid = source.readInt(); boolean dynamicResources = source.readInt() != 0; String settingsActivityName = source.readString(); return new ApduServiceInfo(info, onHost, description, staticAidGroups, dynamicAidGroups, requiresUnlock, bannerResource, uid); dynamicAidGroups, requiresUnlock, bannerResource, uid, dynamicResources, settingsActivityName); } @Override Loading @@ -479,5 +522,6 @@ public final class ApduServiceInfo implements Parcelable { pw.println(" AID: " + aid); } } pw.println(" Settings Activity: " + mSettingsActivityName); } }
core/java/android/nfc/cardemulation/CardEmulation.java +31 −0 Original line number Diff line number Diff line Loading @@ -89,6 +89,37 @@ public final class CardEmulation { */ public static final String CATEGORY_OTHER = "other"; /** * Ordered broadcast that can be sent to your app to * request a description and banner to be shown in * Android Settings UI. * When sent to you, this broadcast will contain the * {@link #EXTRA_SERVICE_COMPONENT} extra to identify * the service. * * Note that this broadcast will only be sent to your * app, if a card emulation service in your app has requested * its resources to be loaded dynamically. */ @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION) public static final String ACTION_REQUEST_SERVICE_RESOURCES = "android.nfc.cardemulation.action.REQUEST_SERVICE_RESOURCES"; /** * The description of the service. Note that this must * be localized by your app, as the String will be shown * as is. */ public static final String EXTRA_DESCRIPTION = "android.nfc.cardemulation.extra.DESCRIPTION"; /** * The resource ID of the service banner to be shown * for this service. */ public static final String EXTRA_BANNER_RES_ID = "android.nfc.cardemulation.extra.BANNER_RES_ID"; /** * Return value for {@link #getSelectionModeForCategory(String)}. * Loading
core/res/AndroidManifest.xml +2 −0 Original line number Diff line number Diff line Loading @@ -227,6 +227,8 @@ <protected-broadcast android:name="com.android.nfc_extras.action.AID_SELECTED" /> <protected-broadcast android:name="android.nfc.action.TRANSACTION_DETECTED" /> <protected-broadcast android:name="android.nfc.cardemulation.action.REQUEST_SERVICE_RESOURCES" /> <protected-broadcast android:name="android.intent.action.CLEAR_DNS_CACHE" /> <protected-broadcast android:name="android.intent.action.PROXY_CHANGE" /> Loading