diff options
author | Andres Morales <anmorales@google.com> | 2014-11-20 18:19:19 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2014-11-20 18:19:19 +0000 |
commit | 8a80bc7b9b873290a57b938eaa01a3156d0de861 (patch) | |
tree | 461f99c0161f926c9c01f1f5ca771261dab1eb9d | |
parent | 14ca22641d7fa624eebdc68554bf2612f2682791 (diff) | |
parent | 31b0f4653686119d74876cae5d637c5baf52b935 (diff) | |
download | android_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-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 | 7 |
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) { |