summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndres Morales <anmorales@google.com>2014-11-12 09:06:35 -0800
committerAndres Morales <anmorales@google.com>2014-11-19 09:56:31 -0800
commit31b0f4653686119d74876cae5d637c5baf52b935 (patch)
treec9052eb4a9a9543c9456e6ed06129547bb0c5639
parenteebaf6f543d8b8983b2b0dce29812d2d2329424f (diff)
downloadandroid_packages_apps_Nfc-31b0f4653686119d74876cae5d637c5baf52b935.tar.gz
android_packages_apps_Nfc-31b0f4653686119d74876cae5d637c5baf52b935.tar.bz2
android_packages_apps_Nfc-31b0f4653686119d74876cae5d637c5baf52b935.zip
Prevent Beam at the lockscreen and during provisioning
Since we can poll at the lockscreen not for unlock tags, need to explicitly disable Beam. Also since we allow peripheral handover during provisioning, we started allowing Beam as well. Blocking that. Bug: 18349433 Change-Id: I987f43228d2c003c66201d2e91bd9bdfebd49d78
-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.java8
6 files changed, 56 insertions, 23 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 86531bdf..af4f5433 100755
--- a/src/com/android/nfc/NfcService.java
+++ b/src/com/android/nfc/NfcService.java
@@ -1445,7 +1445,6 @@ public class NfcService implements DeviceHostListener {
// Notify dispatcher it's fine to dispatch to any package now
// and allow handover transfers.
mNfcDispatcher.disableProvisioningMode();
- mHandoverManager.setEnabled(true);
}
}
// Special case: if we're transitioning to unlocked state while
@@ -1501,20 +1500,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();
}
@@ -1951,6 +1955,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);
@@ -1982,6 +1987,7 @@ public class NfcService implements DeviceHostListener {
}
};
+
private final BroadcastReceiver mOwnerReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {