Merge "Fix Screen state change command going two times after reboot"
diff --git a/nci/jni/NativeNfcManager.cpp b/nci/jni/NativeNfcManager.cpp
index e1cd59f..504d836 100755
--- a/nci/jni/NativeNfcManager.cpp
+++ b/nci/jni/NativeNfcManager.cpp
@@ -153,7 +153,6 @@
tNFA_DM_CBACK_DATA* eventData);
static bool isPeerToPeer(tNFA_ACTIVATED& activated);
static bool isListenMode(tNFA_ACTIVATED& activated);
-static void enableDisableLptd(bool enable);
static tNFA_STATUS stopPolling_rfDiscoveryDisabled();
static tNFA_STATUS startPolling_rfDiscoveryDisabled(
tNFA_TECHNOLOGY_MASK tech_mask);
@@ -907,7 +906,13 @@
**
*******************************************************************************/
static jboolean nfcManager_commitRouting(JNIEnv* e, jobject) {
- return RoutingManager::getInstance().commitRouting();
+ if (sRfEnabled) {
+ /*Update routing table only in Idle state.*/
+ startRfDiscovery(false);
+ }
+ jboolean commitStatus = RoutingManager::getInstance().commitRouting();
+ startRfDiscovery(true);
+ return commitStatus;
}
/*******************************************************************************
@@ -1169,7 +1174,6 @@
// Check polling configuration
if (tech_mask != 0) {
stopPolling_rfDiscoveryDisabled();
- enableDisableLptd(enable_lptd);
startPolling_rfDiscoveryDisabled(tech_mask);
// Start P2P listening if tag polling was enabled
@@ -1257,52 +1261,6 @@
DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("%s: exit", __func__);
}
-void enableDisableLptd(bool enable) {
- // This method is *NOT* thread-safe. Right now
- // it is only called from the same thread so it's
- // not an issue.
- static bool sCheckedLptd = false;
- static bool sHasLptd = false;
-
- tNFA_STATUS stat = NFA_STATUS_OK;
- if (!sCheckedLptd) {
- sCheckedLptd = true;
- SyncEventGuard guard(sNfaGetConfigEvent);
- tNFA_PMID configParam[1] = {NCI_PARAM_ID_TAGSNIFF_CFG};
- stat = NFA_GetConfig(1, configParam);
- if (stat != NFA_STATUS_OK) {
- LOG(ERROR) << StringPrintf("%s: NFA_GetConfig failed", __func__);
- return;
- }
- sNfaGetConfigEvent.wait();
- if (sCurrentConfigLen < 4 || sConfig[1] != NCI_PARAM_ID_TAGSNIFF_CFG) {
- LOG(ERROR) << StringPrintf(
- "%s: Config TLV length %d returned is too short", __func__,
- sCurrentConfigLen);
- return;
- }
- if (sConfig[3] == 0) {
- LOG(ERROR) << StringPrintf(
- "%s: LPTD is disabled, not enabling in current config", __func__);
- return;
- }
- sHasLptd = true;
- }
- // Bail if we checked and didn't find any LPTD config before
- if (!sHasLptd) return;
- uint8_t enable_byte = enable ? 0x01 : 0x00;
-
- SyncEventGuard guard(sNfaSetConfigEvent);
-
- stat = NFA_SetConfig(NCI_PARAM_ID_TAGSNIFF_CFG, 1, &enable_byte);
- if (stat == NFA_STATUS_OK)
- sNfaSetConfigEvent.wait();
- else
- LOG(ERROR) << StringPrintf("%s: Could not configure LPTD feature",
- __func__);
- return;
-}
-
/*******************************************************************************
**
** Function: nfcManager_doCreateLlcpServiceSocket
@@ -1578,20 +1536,22 @@
**
*******************************************************************************/
static bool isListenMode(tNFA_ACTIVATED& activated) {
- return ((NFC_DISCOVERY_TYPE_LISTEN_A ==
- activated.activate_ntf.rf_tech_param.mode) ||
- (NFC_DISCOVERY_TYPE_LISTEN_B ==
- activated.activate_ntf.rf_tech_param.mode) ||
- (NFC_DISCOVERY_TYPE_LISTEN_F ==
- activated.activate_ntf.rf_tech_param.mode) ||
- (NFC_DISCOVERY_TYPE_LISTEN_A_ACTIVE ==
- activated.activate_ntf.rf_tech_param.mode) ||
- (NFC_DISCOVERY_TYPE_LISTEN_F_ACTIVE ==
- activated.activate_ntf.rf_tech_param.mode) ||
- (NFC_DISCOVERY_TYPE_LISTEN_ISO15693 ==
- activated.activate_ntf.rf_tech_param.mode) ||
- (NFC_DISCOVERY_TYPE_LISTEN_B_PRIME ==
- activated.activate_ntf.rf_tech_param.mode));
+ return (
+ (NFC_DISCOVERY_TYPE_LISTEN_A ==
+ activated.activate_ntf.rf_tech_param.mode) ||
+ (NFC_DISCOVERY_TYPE_LISTEN_B ==
+ activated.activate_ntf.rf_tech_param.mode) ||
+ (NFC_DISCOVERY_TYPE_LISTEN_F ==
+ activated.activate_ntf.rf_tech_param.mode) ||
+ (NFC_DISCOVERY_TYPE_LISTEN_A_ACTIVE ==
+ activated.activate_ntf.rf_tech_param.mode) ||
+ (NFC_DISCOVERY_TYPE_LISTEN_F_ACTIVE ==
+ activated.activate_ntf.rf_tech_param.mode) ||
+ (NFC_DISCOVERY_TYPE_LISTEN_ISO15693 ==
+ activated.activate_ntf.rf_tech_param.mode) ||
+ (NFC_DISCOVERY_TYPE_LISTEN_B_PRIME ==
+ activated.activate_ntf.rf_tech_param.mode) ||
+ (NFC_INTERFACE_EE_DIRECT_RF == activated.activate_ntf.intf_param.type));
}
/*******************************************************************************
@@ -1816,7 +1776,8 @@
}
if ((state == NFA_SCREEN_STATE_OFF_LOCKED ||
state == NFA_SCREEN_STATE_OFF_UNLOCKED) &&
- prevScreenState == NFA_SCREEN_STATE_ON_UNLOCKED) {
+ prevScreenState == NFA_SCREEN_STATE_ON_UNLOCKED && (!sP2pActive) &&
+ (!sSeRfActive)) {
// screen turns off, disconnect tag if connected
nativeNfcTag_doDisconnect(NULL, NULL);
}
@@ -2062,20 +2023,6 @@
**
*******************************************************************************/
void doStartupConfig() {
- struct nfc_jni_native_data* nat = getNative(0, 0);
- tNFA_STATUS stat = NFA_STATUS_FAILED;
-
- // If polling for Active mode, set the ordering so that we choose Active over
- // Passive mode first.
- if (nat && (nat->tech_mask &
- (NFA_TECHNOLOGY_MASK_A_ACTIVE | NFA_TECHNOLOGY_MASK_F_ACTIVE))) {
- uint8_t act_mode_order_param[] = {0x01};
- SyncEventGuard guard(sNfaSetConfigEvent);
- stat = NFA_SetConfig(NCI_PARAM_ID_ACT_ORDER, sizeof(act_mode_order_param),
- &act_mode_order_param[0]);
- if (stat == NFA_STATUS_OK) sNfaSetConfigEvent.wait();
- }
-
// configure RF polling frequency for each technology
static tNFA_DM_DISC_FREQ_CFG nfa_dm_disc_freq_cfg;
// values in the polling_frequency[] map to members of nfa_dm_disc_freq_cfg
diff --git a/nci/jni/RoutingManager.cpp b/nci/jni/RoutingManager.cpp
index cc37431..ba2e3ab 100755
--- a/nci/jni/RoutingManager.cpp
+++ b/nci/jni/RoutingManager.cpp
@@ -84,6 +84,9 @@
}
}
+ mOffHostAidRoutingPowerState =
+ NfcConfig::getUnsigned(NAME_OFFHOST_AID_ROUTE_PWR_STATE, 0x01);
+
memset(&mEeInfo, 0, sizeof(mEeInfo));
mReceivedEeInfo = false;
mSeTechMask = 0x00;
@@ -143,6 +146,8 @@
(eeHandle == (mDefaultOffHostRoute | NFA_HANDLE_GROUP_EE))) {
if (mEeInfo.ee_disc_info[i].la_protocol != 0)
seTechMask |= NFA_TECHNOLOGY_MASK_A;
+ if (mEeInfo.ee_disc_info[i].lb_protocol != 0)
+ seTechMask |= NFA_TECHNOLOGY_MASK_B;
}
if ((mDefaultFelicaRoute != 0) &&
(eeHandle == (mDefaultFelicaRoute | NFA_HANDLE_GROUP_EE))) {
@@ -359,8 +364,10 @@
int route, int aidInfo) {
static const char fn[] = "RoutingManager::addAidRouting";
DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("%s: enter", fn);
+ uint8_t powerState =
+ (route == mDefaultOffHostRoute) ? mOffHostAidRoutingPowerState : 0x01;
tNFA_STATUS nfaStat =
- NFA_EeAddAidRouting(route, aidLen, (uint8_t*)aid, 0x01, aidInfo);
+ NFA_EeAddAidRouting(route, aidLen, (uint8_t*)aid, powerState, aidInfo);
if (nfaStat == NFA_STATUS_OK) {
DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("%s: routed AID", fn);
return true;
diff --git a/nci/jni/RoutingManager.h b/nci/jni/RoutingManager.h
index 843d490..2d3f315 100755
--- a/nci/jni/RoutingManager.h
+++ b/nci/jni/RoutingManager.h
@@ -89,6 +89,7 @@
uint16_t mDefaultSysCode;
uint16_t mDefaultSysCodeRoute;
uint8_t mDefaultSysCodePowerstate;
+ uint8_t mOffHostAidRoutingPowerState;
bool mReceivedEeInfo;
tNFA_EE_CBACK_DATA mCbEventData;
tNFA_EE_DISCOVER_REQ mEeInfo;
diff --git a/nci/jni/extns/pn54x/src/utils/phNxpConfig.h b/nci/jni/extns/pn54x/src/utils/phNxpConfig.h
index 8040c24..abda625 100644
--- a/nci/jni/extns/pn54x/src/utils/phNxpConfig.h
+++ b/nci/jni/extns/pn54x/src/utils/phNxpConfig.h
@@ -40,20 +40,6 @@
#define NAME_NXP_RF_CONF_BLK_4 "NXP_RF_CONF_BLK_4"
#define NAME_NXP_CORE_CONF_EXTN "NXP_CORE_CONF_EXTN"
#define NAME_NXP_CORE_CONF "NXP_CORE_CONF"
-#define NAME_NXP_CORE_MFCKEY_SETTING "NXP_CORE_MFCKEY_SETTING"
-#define NAME_NXP_CORE_STANDBY "NXP_CORE_STANDBY"
-#define NAME_NXP_DEFAULT_SE "NXP_DEFAULT_SE"
-#define NAME_NXP_NFC_CHIP "NXP_NFC_CHIP"
-#define NAME_NXP_SWP_RD_START_TIMEOUT "NXP_SWP_RD_START_TIMEOUT"
-#define NAME_NXP_SWP_RD_TAG_OP_TIMEOUT "NXP_SWP_RD_TAG_OP_TIMEOUT"
-#define NAME_NXP_DEFAULT_NFCEE_TIMEOUT "NXP_DEFAULT_NFCEE_TIMEOUT"
-#define NAME_NXP_DEFAULT_NFCEE_DISC_TIMEOUT "NXP_DEFAULT_NFCEE_DISC_TIMEOUT"
-#define NAME_NXP_CE_ROUTE_STRICT_DISABLE "NXP_CE_ROUTE_STRICT_DISABLE"
-#define NAME_NXP_P61_LS_DEFAULT_INTERFACE "NXP_P61_LS_DEFAULT_INTERFACE"
-#define NAME_NXP_P61_JCOP_DEFAULT_INTERFACE "NXP_P61_JCOP_DEFAULT_INTERFACE"
-#define NAME_NXP_JCOPDL_AT_BOOT_ENABLE "NXP_JCOPDL_AT_BOOT_ENABLE"
-#define NAME_NXP_P61_LTSM_DEFAULT_INTERFACE "NXP_P61_LTSM_DEFAULT_INTERFACE"
-#define NAME_NXP_LOADER_SERICE_VERSION "NXP_LOADER_SERVICE_VERSION"
/* default configuration */
#define default_storage_location "/data/nfc"
diff --git a/src/com/android/nfc/ConfirmConnectToWifiNetworkActivity.java b/src/com/android/nfc/ConfirmConnectToWifiNetworkActivity.java
index b1b2542..9316993 100644
--- a/src/com/android/nfc/ConfirmConnectToWifiNetworkActivity.java
+++ b/src/com/android/nfc/ConfirmConnectToWifiNetworkActivity.java
@@ -114,7 +114,7 @@
@Override
public void onDismiss(DialogInterface dialog) {
- if (!mEnableWifiInProgress) {
+ if (!mEnableWifiInProgress && !isChangingConfigurations()) {
finish();
}
}
diff --git a/src/com/android/nfc/NfcDispatcher.java b/src/com/android/nfc/NfcDispatcher.java
index 23a3d51..f9ab131 100644
--- a/src/com/android/nfc/NfcDispatcher.java
+++ b/src/com/android/nfc/NfcDispatcher.java
@@ -224,7 +224,8 @@
}
public boolean isWebIntent() {
- return ndefUri != null && ndefUri.normalizeScheme().getScheme().startsWith("http");
+ return ndefUri != null && ndefUri.normalizeScheme().getScheme() != null &&
+ ndefUri.normalizeScheme().getScheme().startsWith("http");
}
public String getUri() {
@@ -555,9 +556,13 @@
return false;
}
Intent appLaunchIntent = pm.getLaunchIntentForPackage(firstPackage);
- if (appLaunchIntent != null && dispatch.tryStartActivity(appLaunchIntent)) {
- if (DBG) Log.i(TAG, "matched AAR to application launch");
- return true;
+ if (appLaunchIntent != null) {
+ ResolveInfo ri = pm.resolveActivity(appLaunchIntent, 0);
+ if (ri != null && ri.activityInfo != null && ri.activityInfo.exported &&
+ dispatch.tryStartActivity(appLaunchIntent)) {
+ if (DBG) Log.i(TAG, "matched AAR to application launch");
+ return true;
+ }
}
// Find the package in Market:
Intent marketIntent = getAppSearchIntent(firstPackage);
@@ -576,9 +581,18 @@
return true;
}
- if (dispatch.tryStartActivity()) {
- if (DBG) Log.i(TAG, "matched NDEF");
- return true;
+ try {
+ UserHandle currentUser = new UserHandle(ActivityManager.getCurrentUser());
+ PackageManager pm = mContext.createPackageContextAsUser("android", 0,
+ currentUser).getPackageManager();
+ ResolveInfo ri = pm.resolveActivity(intent, 0);
+
+ if (ri != null && ri.activityInfo != null && ri.activityInfo.exported && dispatch.tryStartActivity()) {
+ if (DBG) Log.i(TAG, "matched NDEF");
+ return true;
+ }
+ } catch (NameNotFoundException ignore) {
+ Log.e(TAG, "Could not create user package context");
}
return false;
@@ -620,7 +634,9 @@
if (filterMatch(tagTechs, info.techs) &&
isComponentEnabled(pm, info.resolveInfo)) {
// Add the activity as a match if it's not already in the list
- if (!matches.contains(info.resolveInfo)) {
+ // Check if exported flag is not explicitly set to false to prevent
+ // SecurityExceptions.
+ if (!matches.contains(info.resolveInfo) && info.resolveInfo.activityInfo.exported) {
matches.add(info.resolveInfo);
}
}
diff --git a/src/com/android/nfc/NfcService.java b/src/com/android/nfc/NfcService.java
old mode 100755
new mode 100644
index 18589d8..d6d4fd1
--- a/src/com/android/nfc/NfcService.java
+++ b/src/com/android/nfc/NfcService.java
@@ -514,6 +514,14 @@
Context.SECURE_ELEMENT_SERVICE));
}
+ private boolean isSEServiceAvailable() {
+ if (mSEService == null) {
+ mSEService = ISecureElementService.Stub.asInterface(ServiceManager.getService(
+ Context.SECURE_ELEMENT_SERVICE));
+ }
+ return (mSEService != null);
+ }
+
void initSoundPool() {
synchronized (this) {
if (mSoundPool == null) {
@@ -2241,7 +2249,7 @@
}
private void sendOffHostTransactionEvent(byte[] aid, byte[] data, byte[] readerByteArray) {
- if (mSEService == null || mNfcEventInstalledPackages.isEmpty()) {
+ if (!isSEServiceAvailable() || mNfcEventInstalledPackages.isEmpty()) {
return;
}
@@ -2281,7 +2289,7 @@
/* Returns the list of packages that have access to NFC Events on any SE */
private ArrayList<String> getSEAccessAllowedPackages() {
- if (mSEService == null || mNfcEventInstalledPackages.isEmpty()) {
+ if (!isSEServiceAvailable() || mNfcEventInstalledPackages.isEmpty()) {
return null;
}
String[] readers = null;