diff options
author | Andres Morales <anmorales@google.com> | 2014-11-12 09:06:35 -0800 |
---|---|---|
committer | Andres Morales <anmorales@google.com> | 2014-11-19 09:56:31 -0800 |
commit | 31b0f4653686119d74876cae5d637c5baf52b935 (patch) | |
tree | c9052eb4a9a9543c9456e6ed06129547bb0c5639 | |
parent | eebaf6f543d8b8983b2b0dce29812d2d2329424f (diff) | |
download | android_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-x | nci/jni/NativeNfcManager.cpp | 20 | ||||
-rwxr-xr-x | nci/src/com/android/nfc/dhimpl/NativeNfcManager.java | 4 | ||||
-rw-r--r-- | nxp/jni/com_android_nfc_NativeNfcManager.cpp | 21 | ||||
-rwxr-xr-x | nxp/src/com/android/nfc/dhimpl/NativeNfcManager.java | 3 | ||||
-rw-r--r-- | src/com/android/nfc/NfcDiscoveryParameters.java | 23 | ||||
-rwxr-xr-x | src/com/android/nfc/NfcService.java | 8 |
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) { |