summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndres Morales <anmorales@google.com>2014-11-20 18:19:19 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2014-11-20 18:19:19 +0000
commit8a80bc7b9b873290a57b938eaa01a3156d0de861 (patch)
tree461f99c0161f926c9c01f1f5ca771261dab1eb9d
parent14ca22641d7fa624eebdc68554bf2612f2682791 (diff)
parent31b0f4653686119d74876cae5d637c5baf52b935 (diff)
downloadandroid_packages_apps_Nfc-8a80bc7b9b873290a57b938eaa01a3156d0de861.tar.gz
android_packages_apps_Nfc-8a80bc7b9b873290a57b938eaa01a3156d0de861.tar.bz2
android_packages_apps_Nfc-8a80bc7b9b873290a57b938eaa01a3156d0de861.zip
Merge "Prevent Beam at the lockscreen and during provisioning" into lmp-mr1-dev
-rwxr-xr-xnci/jni/NativeNfcManager.cpp20
-rwxr-xr-xnci/src/com/android/nfc/dhimpl/NativeNfcManager.java4
-rw-r--r--nxp/jni/com_android_nfc_NativeNfcManager.cpp21
-rwxr-xr-xnxp/src/com/android/nfc/dhimpl/NativeNfcManager.java3
-rw-r--r--src/com/android/nfc/NfcDiscoveryParameters.java23
-rwxr-xr-xsrc/com/android/nfc/NfcService.java7
6 files changed, 56 insertions, 22 deletions
diff --git a/nci/jni/NativeNfcManager.cpp b/nci/jni/NativeNfcManager.cpp
index 5001ee7e..98e243a1 100755
--- a/nci/jni/NativeNfcManager.cpp
+++ b/nci/jni/NativeNfcManager.cpp
@@ -122,6 +122,7 @@ static bool sIsDisabling = false;
static bool sRfEnabled = false; // whether RF discovery is enabled
static bool sSeRfActive = false; // whether RF with SE is likely active
static bool sReaderModeEnabled = false; // whether we're only reading tags, not allowing P2p/card emu
+static bool sP2pEnabled = false;
static bool sP2pActive = false; // whether p2p was last active
static bool sAbortConnlessWait = false;
#define CONFIG_UPDATE_TECH_MASK (1 << 1)
@@ -930,7 +931,7 @@ TheEnd:
**
*******************************************************************************/
static void nfcManager_enableDiscovery (JNIEnv* e, jobject o, jint technologies_mask, \
- jboolean enable_lptd, jboolean reader_mode, jboolean enable_host_routing,
+ jboolean enable_lptd, jboolean reader_mode, jboolean enable_host_routing, jboolean enable_p2p,
jboolean restart)
{
tNFA_TECHNOLOGY_MASK tech_mask = DEFAULT_TECH_MASK;
@@ -968,20 +969,27 @@ static void nfcManager_enableDiscovery (JNIEnv* e, jobject o, jint technologies_
if (sPollingEnabled)
{
ALOGD ("%s: Enable p2pListening", __FUNCTION__);
- PeerToPeer::getInstance().enableP2pListening (!reader_mode);
+
+ if (enable_p2p && !sP2pEnabled) {
+ sP2pEnabled = true;
+ PeerToPeer::getInstance().enableP2pListening (true);
+ NFA_ResumeP2p();
+ } else if (!enable_p2p && sP2pEnabled) {
+ sP2pEnabled = false;
+ PeerToPeer::getInstance().enableP2pListening (false);
+ NFA_PauseP2p();
+ }
if (reader_mode && !sReaderModeEnabled)
{
sReaderModeEnabled = true;
- NFA_PauseP2p();
NFA_DisableListening();
NFA_SetRfDiscoveryDuration(READER_MODE_DISCOVERY_DURATION);
}
- else if (sReaderModeEnabled)
+ else if (!reader_mode && sReaderModeEnabled)
{
struct nfc_jni_native_data *nat = getNative(e, o);
sReaderModeEnabled = false;
- NFA_ResumeP2p();
NFA_EnableListening();
NFA_SetRfDiscoveryDuration(nat->discovery_duration);
}
@@ -1616,7 +1624,7 @@ static JNINativeMethod gMethods[] =
{"commitRouting", "()Z",
(void*) nfcManager_commitRouting},
- {"doEnableDiscovery", "(IZZZZ)V",
+ {"doEnableDiscovery", "(IZZZZZ)V",
(void*) nfcManager_enableDiscovery},
{"doCheckLlcp", "()Z",
diff --git a/nci/src/com/android/nfc/dhimpl/NativeNfcManager.java b/nci/src/com/android/nfc/dhimpl/NativeNfcManager.java
index d327f62a..99ee5d52 100755
--- a/nci/src/com/android/nfc/dhimpl/NativeNfcManager.java
+++ b/nci/src/com/android/nfc/dhimpl/NativeNfcManager.java
@@ -102,11 +102,13 @@ public class NativeNfcManager implements DeviceHost {
boolean enableLowPowerPolling,
boolean enableReaderMode,
boolean enableHostRouting,
+ boolean enableP2p,
boolean restart);
@Override
public void enableDiscovery(NfcDiscoveryParameters params, boolean restart) {
doEnableDiscovery(params.getTechMask(), params.shouldEnableLowPowerDiscovery(),
- params.shouldEnableReaderMode(), params.shouldEnableHostRouting(), restart);
+ params.shouldEnableReaderMode(), params.shouldEnableHostRouting(),
+ params.shouldEnableP2p(), restart);
}
@Override
diff --git a/nxp/jni/com_android_nfc_NativeNfcManager.cpp b/nxp/jni/com_android_nfc_NativeNfcManager.cpp
index c80141e6..6779b7f6 100644
--- a/nxp/jni/com_android_nfc_NativeNfcManager.cpp
+++ b/nxp/jni/com_android_nfc_NativeNfcManager.cpp
@@ -1360,7 +1360,7 @@ static void com_android_nfc_NfcManager_disableDiscovery(JNIEnv *e, jobject o)
// TODO: use enable_lptd
static void com_android_nfc_NfcManager_enableDiscovery(JNIEnv *e, jobject o, jint modes,
- jboolean, jboolean reader_mode, jboolean restart)
+ jboolean, jboolean reader_mode, jboolean enable_p2p, jboolean restart)
{
NFCSTATUS ret;
struct nfc_jni_native_data *nat;
@@ -1393,17 +1393,28 @@ static void com_android_nfc_NfcManager_enableDiscovery(JNIEnv *e, jobject o, jin
if (modes != 0)
{
- if (reader_mode)
+
+ if (enable_p2p)
+ {
+ nat->p2p_initiator_modes = phNfc_eP2P_ALL;
+ nat->p2p_target_modes = 0x0E; // All passive except 106, active
+ nat->discovery_cfg.Duration = 300000; /* in ms */
+ }
+ else
{
nat->p2p_initiator_modes = 0;
nat->p2p_target_modes = 0;
+ nat->discovery_cfg.Duration = 200000; /* in ms */
+
+ }
+
+ if (reader_mode)
+ {
nat->discovery_cfg.PollDevInfo.PollCfgInfo.DisableCardEmulation = TRUE;
nat->discovery_cfg.Duration = 200000; /* in ms */
}
else
{
- nat->p2p_initiator_modes = phNfc_eP2P_ALL;
- nat->p2p_target_modes = 0x0E; // All passive except 106, active
nat->discovery_cfg.PollDevInfo.PollCfgInfo.DisableCardEmulation = FALSE;
nat->discovery_cfg.Duration = 300000; /* in ms */
}
@@ -2369,7 +2380,7 @@ static JNINativeMethod gMethods[] =
{"doDeinitialize", "()Z",
(void *)com_android_nfc_NfcManager_deinitialize},
- {"doEnableDiscovery", "(IZZZ)V",
+ {"doEnableDiscovery", "(IZZZZ)V",
(void *)com_android_nfc_NfcManager_enableDiscovery},
{"doCheckLlcp", "()Z",
diff --git a/nxp/src/com/android/nfc/dhimpl/NativeNfcManager.java b/nxp/src/com/android/nfc/dhimpl/NativeNfcManager.java
index cc73db3b..805e1eac 100755
--- a/nxp/src/com/android/nfc/dhimpl/NativeNfcManager.java
+++ b/nxp/src/com/android/nfc/dhimpl/NativeNfcManager.java
@@ -161,11 +161,12 @@ public class NativeNfcManager implements DeviceHost {
private native void doEnableDiscovery(int techMask,
boolean enableLowPowerPolling,
boolean enableReaderMode,
+ boolean enableP2p,
boolean restart);
@Override
public void enableDiscovery(NfcDiscoveryParameters params, boolean restart) {
doEnableDiscovery(params.getTechMask(), params.shouldEnableLowPowerDiscovery(),
- params.shouldEnableReaderMode(), restart);
+ params.shouldEnableReaderMode(), params.shouldEnableP2p(), restart);
}
@Override
diff --git a/src/com/android/nfc/NfcDiscoveryParameters.java b/src/com/android/nfc/NfcDiscoveryParameters.java
index 5a49ef33..a71ad949 100644
--- a/src/com/android/nfc/NfcDiscoveryParameters.java
+++ b/src/com/android/nfc/NfcDiscoveryParameters.java
@@ -55,27 +55,28 @@ public final class NfcDiscoveryParameters {
return this;
}
+ public NfcDiscoveryParameters.Builder setEnableP2p(boolean enable) {
+ mParameters.mEnableP2p = enable;
+ return this;
+ }
+
public NfcDiscoveryParameters build() {
- if (mParameters.mEnableReaderMode && mParameters.mEnableLowPowerDiscovery) {
- throw new IllegalStateException("Can't enable LPTD and reader mode simultaneously");
+ if (mParameters.mEnableReaderMode &&
+ (mParameters.mEnableLowPowerDiscovery || mParameters.mEnableP2p)) {
+ throw new IllegalStateException("Can't enable LPTD/P2P and reader mode " +
+ "simultaneously");
}
return mParameters;
}
}
- // Polling technology masks
static final int NFC_POLL_DEFAULT = -1;
- static final int NFC_POLL_A = 0x01;
- static final int NFC_POLL_B = 0x02;
- static final int NFC_POLL_F = 0x04;
- static final int NFC_POLL_ISO15693 = 0x08;
- static final int NFC_POLL_B_PRIME = 0x10;
- static final int NFC_POLL_KOVIO = 0x20;
private int mTechMask = 0;
private boolean mEnableLowPowerDiscovery = true;
private boolean mEnableReaderMode = false;
private boolean mEnableHostRouting = false;
+ private boolean mEnableP2p = false;
public NfcDiscoveryParameters() {}
@@ -99,6 +100,10 @@ public final class NfcDiscoveryParameters {
return mTechMask != 0 || mEnableHostRouting;
}
+ public boolean shouldEnableP2p() {
+ return mEnableP2p;
+ }
+
@Override
public boolean equals(Object obj) {
if (obj == this) {
diff --git a/src/com/android/nfc/NfcService.java b/src/com/android/nfc/NfcService.java
index 262d2c1b..fd51c41d 100755
--- a/src/com/android/nfc/NfcService.java
+++ b/src/com/android/nfc/NfcService.java
@@ -1507,20 +1507,25 @@ public class NfcService implements DeviceHostListener {
paramsBuilder.setEnableReaderMode(true);
} else {
paramsBuilder.setTechMask(NfcDiscoveryParameters.NFC_POLL_DEFAULT);
+ paramsBuilder.setEnableP2p(mIsNdefPushEnabled);
}
} else if (screenState == ScreenStateHelper.SCREEN_STATE_ON_LOCKED && mInProvisionMode) {
paramsBuilder.setTechMask(NfcDiscoveryParameters.NFC_POLL_DEFAULT);
+ // enable P2P for MFM/EDU/Corp provisioning
+ paramsBuilder.setEnableP2p(true);
} else if (screenState == ScreenStateHelper.SCREEN_STATE_ON_LOCKED &&
mNfcUnlockManager.isLockscreenPollingEnabled()) {
// For lock-screen tags, no low-power polling
paramsBuilder.setTechMask(mNfcUnlockManager.getLockscreenPollMask());
paramsBuilder.setEnableLowPowerDiscovery(false);
+ paramsBuilder.setEnableP2p(false);
}
if (mIsHceCapable && mScreenState >= ScreenStateHelper.SCREEN_STATE_ON_LOCKED) {
// Host routing is always enabled at lock screen or later
paramsBuilder.setEnableHostRouting(true);
}
+
return paramsBuilder.build();
}
@@ -1975,6 +1980,7 @@ public class NfcService implements DeviceHostListener {
} else if (action.equals(Intent.ACTION_USER_PRESENT)) {
screenState = ScreenStateHelper.SCREEN_STATE_ON_UNLOCKED;
}
+
new ApplyRoutingTask().execute(Integer.valueOf(screenState));
} else if (action.equals(Intent.ACTION_AIRPLANE_MODE_CHANGED)) {
boolean isAirplaneModeOn = intent.getBooleanExtra("state", false);
@@ -2006,6 +2012,7 @@ public class NfcService implements DeviceHostListener {
}
};
+
private final BroadcastReceiver mOwnerReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {