m_is_ndef_listener_set(false),
m_se_handle(nullptr),
m_is_hce_listener_set(false),
+ m_is_preferred_app_set(false),
responder_(nullptr)
{
LoggerD("Entered");
if (m_is_hce_listener_set) {
nfc_manager_unset_hce_event_cb();
}
+ if (m_is_preferred_app_set) {
+ nfc_se_unset_preferred_handler();
+ }
// NFC library deinitialization
int ret = nfc_manager_deinitialize();
success_cb(aids);
}
+PlatformResult NFCAdapter::SetPreferredApp() {
+ LoggerD("Entered");
+
+ if (m_is_preferred_app_set) {
+ return PlatformResult(ErrorCode::NO_ERROR);
+ }
+
+ int ret = nfc_se_set_preferred_handler();
+ if (ret != NFC_ERROR_NONE) {
+ LoggerE("SetPreferredApp failed: %d", ret);
+ return NFCUtil::CodeToResult(ret,
+ NFCUtil::getNFCErrorMessage(ret).c_str(),
+ true);
+ }
+ m_is_preferred_app_set = true;
+
+ return PlatformResult(ErrorCode::NO_ERROR);
+}
+
+PlatformResult NFCAdapter::UnsetPreferredApp() {
+ LoggerD("Entered");
+
+ if (!m_is_preferred_app_set) {
+ return PlatformResult(ErrorCode::NO_ERROR);
+ }
+
+ int ret = nfc_se_unset_preferred_handler();
+ if (ret != NFC_ERROR_NONE) {
+ LoggerE("SetPreferredApp failed: %d", ret);
+ return NFCUtil::CodeToResult(ret,
+ NFCUtil::getNFCErrorMessage(ret).c_str(),
+ true);
+ }
+
+ m_is_preferred_app_set = false;
+
+ return PlatformResult(ErrorCode::NO_ERROR);
+}
+
}// nfc
}// extension
nfc_card_emulation_category_type_e category,
const std::function<void(const AIDDataVector&)>& success_cb,
const std::function<void(const common::PlatformResult&)>& error_cb);
+ common::PlatformResult SetPreferredApp();
+ common::PlatformResult UnsetPreferredApp();
private:
bool m_is_ndef_listener_set;
nfc_se_h m_se_handle;
bool m_is_hce_listener_set;
+ bool m_is_preferred_app_set;
IResponder* responder_;
};
var transactionEventListenerEse = new ListenerManager(native_, TRANSACTION_EVENT_ESE_LISTENER);
var transactionEventListenerUicc = new ListenerManager(native_, TRANSACTION_EVENT_UICC_LISTENER);
var HCEEventListener = new ListenerManager(native_, HCE_EVENT_LISTENER);
-
+var isWebkitVisibilityChangeListenerSet = false;
//////////////////NFCManager /////////////////
}
};
+function WebkitVisibilityChangeListener() {
+ var result;
+ if (true === privUtils_.global.document.hidden) {
+ result = native_.call('NFCAdapter_unsetPreferredApp');
+ } else if (false === privUtils_.global.document.hidden) {
+ result = native_.call('NFCAdapter_setPreferredApp');
+ }
+
+ if (native_.isFailure(result)) {
+ privUtils_.log('Failed to (un)set: ' + result.error.message);
+ }
+}
+
+NFCAdapter.prototype.setPreferredApp = function() {
+ var result = native_.call('NFCAdapter_setPreferredApp');
+
+ if (native_.isFailure(result)) {
+ throw native_.getErrorObject(result);
+ } else {
+ if (false === isWebkitVisibilityChangeListenerSet) {
+ privUtils_.global.document.addEventListener("webkitvisibilitychange", WebkitVisibilityChangeListener);
+ isWebkitVisibilityChangeListenerSet = true;
+ }
+ }
+};
+
+NFCAdapter.prototype.unsetPreferredApp = function() {
+ var result = native_.call('NFCAdapter_unsetPreferredApp');
+
+ if (native_.isFailure(result)) {
+ throw native_.getErrorObject(result);
+ } else {
+ if (true === isWebkitVisibilityChangeListenerSet) {
+ privUtils_.global.document.removeEventListener("webkitvisibilitychange", WebkitVisibilityChangeListener);
+ isWebkitVisibilityChangeListenerSet = false;
+ }
+ }
+};
+
function InternalRecordData(tnf, type, payload, id) {
this.tnf = tnf;
this.type = type;
REGISTER_SYNC("NFCAdapter_registerAID", RegisterAID);
REGISTER_SYNC("NFCAdapter_unregisterAID", UnregisterAID);
REGISTER_ASYNC("NFCAdapter_getAIDsForCategory", GetAIDsForCategory);
+ REGISTER_SYNC("NFCAdapter_setPreferredApp", SetPreferredApp);
+ REGISTER_SYNC("NFCAdapter_unsetPreferredApp", UnsetPreferredApp);
REGISTER_SYNC("NFCPeer_setReceiveNDEFListener", SetReceiveNDEFListener);
REGISTER_SYNC("NFCPeer_unsetReceiveNDEFListener", UnsetReceiveNDEFListener);
type, required_category, success_cb, error_cb));
}
+void NFCInstance::SetPreferredApp(const picojson::value& args, picojson::object& out) {
+ LoggerD("Entered");
+ CHECK_PRIVILEGE_ACCESS(kPrivilegeNfcCardEmulation, &out);
+
+ PlatformResult result = NFCAdapter::GetInstance()->SetPreferredApp();
+ if (result.IsSuccess()) {
+ ReportSuccess(out);
+ } else {
+ LogAndReportError(result, &out);
+ }
+}
+
+void NFCInstance::UnsetPreferredApp(const picojson::value& args, picojson::object& out) {
+ LoggerD("Entered");
+ CHECK_PRIVILEGE_ACCESS(kPrivilegeNfcCardEmulation, &out);
+
+ PlatformResult result = NFCAdapter::GetInstance()->UnsetPreferredApp();
+ if (result.IsSuccess()) {
+ ReportSuccess(out);
+ } else {
+ LogAndReportError(result, &out);
+ }
+}
+
} // namespace nfc
} // namespace extension
void RegisterAID(const picojson::value& args, picojson::object& out);
void UnregisterAID(const picojson::value& args, picojson::object& out);
void GetAIDsForCategory(const picojson::value& args, picojson::object& out);
+ void SetPreferredApp(const picojson::value& args, picojson::object& out);
+ void UnsetPreferredApp(const picojson::value& args, picojson::object& out);
};
} // namespace nfc
}
PlatformResult NFCUtil::CodeToResult(const int errorCode,
- const std::string& message) {
+ const std::string& message,
+ const bool newAPIVersion) {
LoggerD("Entered");
switch(errorCode) {
case NFC_ERROR_INVALID_PARAMETER:
case NFC_ERROR_OUT_OF_MEMORY:
case NFC_ERROR_NOT_INITIALIZED:
default:
- return LogAndCreateResult(ErrorCode::UNKNOWN_ERR, message);
+ if (newAPIVersion) {
+ return LogAndCreateResult(ErrorCode::ABORT_ERR, message);
+ } else {
+ return LogAndCreateResult(ErrorCode::UNKNOWN_ERR, message);
+ }
}
}
public:
static UCharVector ToVector(const unsigned char* ch, const int size);
static common::PlatformResult CodeToResult(const int errorCode,
- const std::string& message);
+ const std::string& message,
+ const bool newAPIVersion = false);
static std::string getNFCErrorString(const int error_code);
static const std::string getNFCErrorMessage(const int error_code);
static std::string ToStringNFCTag(const nfc_tag_type_e tag_type);
Utils.prototype.warn = console.warn.bind(console);
Utils.prototype.log = _enableJsLogs ? console.log.bind(console) : function(){};
+Utils.prototype.global = _global;
+
Utils.prototype.repackFilter = function(filter) {
if (filter instanceof tizen.AttributeFilter) {
return {