package com.mobilesorcery.sdk.builder.android; import java.text.MessageFormat; import org.eclipse.core.runtime.CoreException; import com.mobilesorcery.sdk.core.DefaultPackager; import com.mobilesorcery.sdk.core.MoSyncProject; import com.mobilesorcery.sdk.core.apisupport.nfc.INFCEnablement; import com.mobilesorcery.sdk.core.apisupport.nfc.NFCSupport; import com.mobilesorcery.sdk.core.apisupport.nfc.TagTechNFCEnablement; public class NFCAndroidSupport { private final static String NDEF_DISC_ACTION = "android.nfc.action.NDEF_DISCOVERED"; private final static String TECH_DISC_ACTION = "android.nfc.action.TECH_DISCOVERED"; private final static String TAG_DISC_ACTION = "android.nfc.action.TAG_DISCOVERED"; private static final Object INTENT_FILTER_START_XML = "<intent-filter>"; private static final Object INTENT_FILTER_END_XML = "</intent-filter>"; private final NFCSupport nfcSupport; private final MoSyncProject project; public NFCAndroidSupport(NFCSupport nfc) { this.nfcSupport = nfc; this.project = nfc.getProject(); } public String createIntentFilterXML() { StringBuffer result = new StringBuffer(); boolean wroteTechDiscoveryIntentFilter = false; for (INFCEnablement enablement : nfcSupport.getEnablements()) { if (enablement instanceof TagTechNFCEnablement && !wroteTechDiscoveryIntentFilter) { result.append(INTENT_FILTER_START_XML); result.append(createActionXML(TECH_DISC_ACTION)); result.append(INTENT_FILTER_END_XML); result.append("<meta-data android:name=\"" + TECH_DISC_ACTION +"\" " + "android:resource=\"@xml/nfc\"/>"); wroteTechDiscoveryIntentFilter = true; } result.append("\n"); } return result.toString(); } private String createActionXML(String action) { return "<action android:name=\"" + action + "\"/>"; } public String createNFCFilterXML() throws CoreException { StringBuffer result = new StringBuffer(); if (nfcSupport.getEnablements().size() > 0) { result.append("<resources xmlns:xliff=\"urn:oasis:names:tc:xliff:document:1.2\">\n"); NFCSupport nfcSupport = NFCSupport.create(project); for (INFCEnablement enablement : nfcSupport.getEnablements()) { if (enablement instanceof TagTechNFCEnablement) { createNFCFilterXML(result, (TagTechNFCEnablement) enablement); } result.append("\n"); } result.append("</resources>"); } return result.toString(); } private void createNFCFilterXML(StringBuffer result, TagTechNFCEnablement enablement) { result.append("<tech-list>\n"); for (String tech : enablement.getTechList()) { result.append("<tech>"); result.append(toAndroidTech(tech)); result.append("</tech>"); } result.append("</tech-list>"); } private String toAndroidTech(String tech) { // Simple for now :) return "android.nfc.tech." + tech; } }