Snap for 4448085 from cdf70685d7796990df03b765c012174a86814bf5 to oc-m3-release

Change-Id: I5d10d1775e8321b522b636da1a71d3fd691fef87
diff --git a/nci/jni/NativeNfcManager.cpp b/nci/jni/NativeNfcManager.cpp
index 6d35982..0f16572 100755
--- a/nci/jni/NativeNfcManager.cpp
+++ b/nci/jni/NativeNfcManager.cpp
@@ -64,6 +64,8 @@
     extern void nativeNfcTag_abortWaits ();
     extern void nativeLlcpConnectionlessSocket_abortWait ();
     extern void nativeNfcTag_registerNdefTypeHandler ();
+    extern void nativeNfcTag_acquireRfInterfaceMutexLock();
+    extern void nativeNfcTag_releaseRfInterfaceMutexLock();
     extern void nativeLlcpConnectionlessSocket_receiveData (uint8_t* data, uint32_t len, uint32_t remote_sap);
 }
 
@@ -1955,6 +1957,7 @@
     tNFA_STATUS status = NFA_STATUS_FAILED;
 
     ALOGV("%s: is start=%d", __func__, isStart);
+    nativeNfcTag_acquireRfInterfaceMutexLock();
     SyncEventGuard guard (sNfaEnableDisablePollingEvent);
     status  = isStart ? NFA_StartRfDiscovery () : NFA_StopRfDiscovery ();
     if (status == NFA_STATUS_OK)
@@ -1966,6 +1969,7 @@
     {
         ALOGE("%s: Failed to start/stop RF discovery; error=0x%X", __func__, status);
     }
+    nativeNfcTag_releaseRfInterfaceMutexLock();
 }
 
 
@@ -2077,6 +2081,7 @@
         tech_mask = num;
     else if (tech_mask == 0) tech_mask = DEFAULT_TECH_MASK;
 
+    nativeNfcTag_acquireRfInterfaceMutexLock();
     SyncEventGuard guard (sNfaEnableDisablePollingEvent);
     ALOGV("%s: enable polling", __func__);
     stat = NFA_EnablePolling (tech_mask);
@@ -2090,6 +2095,7 @@
     {
         ALOGE("%s: fail enable polling; error=0x%X", __func__, stat);
     }
+    nativeNfcTag_releaseRfInterfaceMutexLock();
 
     return stat;
 }
@@ -2097,6 +2103,7 @@
 static tNFA_STATUS stopPolling_rfDiscoveryDisabled() {
     tNFA_STATUS stat = NFA_STATUS_FAILED;
 
+    nativeNfcTag_acquireRfInterfaceMutexLock();
     SyncEventGuard guard (sNfaEnableDisablePollingEvent);
     ALOGV("%s: disable polling", __func__);
     stat = NFA_DisablePolling ();
@@ -2106,6 +2113,7 @@
     } else {
         ALOGE("%s: fail disable polling; error=0x%X", __func__, stat);
     }
+    nativeNfcTag_releaseRfInterfaceMutexLock();
 
     return stat;
 }
diff --git a/nci/jni/NativeNfcTag.cpp b/nci/jni/NativeNfcTag.cpp
index ece0ce5..96faa62 100644
--- a/nci/jni/NativeNfcTag.cpp
+++ b/nci/jni/NativeNfcTag.cpp
@@ -1844,6 +1844,36 @@
     sNdefTypeHandlerHandle = NFA_HANDLE_INVALID;
 }
 
+/*******************************************************************************
+**
+** Function:        nativeNfcTag_acquireRfInterfaceMutexLock
+**
+** Description:     acquire sRfInterfaceMutex
+**
+** Returns:         None
+**
+*******************************************************************************/
+void nativeNfcTag_acquireRfInterfaceMutexLock()
+{
+    ALOGD("%s: try to acquire lock", __func__);
+    sRfInterfaceMutex.lock();
+    ALOGD("%s: sRfInterfaceMutex lock", __func__);
+}
+
+/*******************************************************************************
+**
+** Function:       nativeNfcTag_releaseRfInterfaceMutexLock
+**
+** Description:    release the sRfInterfaceMutex
+**
+** Returns:        None
+**
+*******************************************************************************/
+void nativeNfcTag_releaseRfInterfaceMutexLock()
+{
+    sRfInterfaceMutex.unlock();
+    ALOGD("%s: sRfInterfaceMutex unlock", __func__);
+}
 
 /*****************************************************************************
 **
diff --git a/res/drawable/ic_weblink_nfc.xml b/res/drawable/ic_weblink_nfc.xml
new file mode 100644
index 0000000..60f83c7
--- /dev/null
+++ b/res/drawable/ic_weblink_nfc.xml
@@ -0,0 +1,19 @@
+<vector android:height="180dp" android:viewportHeight="180.0"
+        android:viewportWidth="180.0" android:width="180dp" xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="#F1F3F4" android:pathData="M90,90m-90,0a90,90 0,1 1,180 0a90,90 0,1 1,-180 0"/>
+    <path android:fillColor="#E0E0E0" android:pathData="M64.2,107.5m-28,0a28,28 0,1 1,56 0a28,28 0,1 1,-56 0"/>
+    <path android:fillColor="#2196F3" android:pathData="M64.2,105.5m-28,0a28,28 0,1 1,56 0a28,28 0,1 1,-56 0"/>
+    <path android:fillColor="#FFFFFF" android:pathData="M74.3,92.4h-21.2c-1.5,0 -2.7,1.2 -2.7,2.6v21.2c0,1.5 1.2,2.7 2.6,2.7h21.2c1.5,0 2.7,-1.2 2.7,-2.6l0.1,-21.3C77,93.6 75.8,92.4 74.3,92.4zM74.3,116.2h-21.2L53.1,95h21.2L74.3,116.2zM71.7,97.7h-6.6c-1.5,0 -2.7,1.2 -2.7,2.6v3c-0.8,0.5 -1.3,1.3 -1.3,2.3c0,1.5 1.2,2.7 2.6,2.7s2.7,-1.2 2.7,-2.6c0,-1 -0.5,-1.8 -1.3,-2.3v-3h4L69.1,111h-10.6v-10.6h2.7v-2.7h-5.3v15.9h15.9L71.7,97.7z"/>
+    <path android:fillColor="#FAC88B" android:pathData="M166.7,137.1c-6.6,-5.9 -13.7,-12.7 -18.6,-18.5c-4.5,-5.4 -6.1,-30.2 -6.1,-30.2c0,-1.8 -0.9,-5.5 -1.4,-5.8c-1.6,-0.9 -3,-0.1 -3.1,1.7l-0.1,0.8c0,0 0.1,2.9 -4.9,0.9l0,0c-0.2,-0.1 -6.3,-3.7 -10.5,-7.7l0,0l-10.9,-10.3l-0.4,-0.4l-26.5,-24.1c-1.9,-1.6 -4,-3 -6,-3.3c-1,-0.1 -2,-0.2 -2.9,0.7l0,0c-0.7,0.7 -0.7,1.4 -0.8,2.1c-0.2,2.2 1.5,4.6 3.2,6.9l23.4,26.9l0.5,0.6l3.2,3.4c0.2,0.2 0.3,0.5 0.2,0.8l-15.4,27c-0.4,0.7 -0.6,1.1 -0.1,1.8c0.6,0.8 2.2,2.9 2.3,3c1.5,1.7 13.2,10.3 34.9,22.1c0.1,0.1 2.8,2.8 2.9,2.9c0,0 0.1,0.1 0.1,0.2c0,0 0,0 -0.1,-0.1c1.2,1.3 6,6.5 12.5,13.3c0.2,0.2 0.4,0.4 0.6,0.7c0.1,0.1 0.1,0.1 0.2,0.2c1.8,1.8 3.7,3.8 5.6,5.8C155.6,152.3 161.8,145.1 166.7,137.1z"/>
+    <path android:fillColor="#FF000000" android:pathData="M86.9,122.3c-2.3,0 -6.1,-0.7 -6.8,-4.9l0,0c0,-0.2 -0.1,-0.4 -0.1,-0.7l0,0c0,-0.4 0,-0.7 0,-1.1l0.6,-77.4c0,-2.1 0.6,-3.7 1.8,-4.9c1.2,-1.1 2.9,-1.7 5.1,-1.7l0,0h0.1l0,0l32.3,0.2c2.2,0 4,0.6 5.1,1.8c1.2,1.1 1.8,2.8 1.7,4.9l-0.6,77.4c0,0.3 0,0.7 0,1.1l0,0c0,0.2 0,0.5 -0.1,0.7l0,0l0,0c-0.7,4.2 -4.6,4.8 -6.9,4.8L86.9,122.3z"/>
+    <path android:fillColor="#FFFFFF" android:pathData="M123.6,114.2l-41.8,-0.6c-0.4,0 -0.8,-0.4 -0.8,-0.8l1,-70.5c0,-0.4 0.4,-0.8 0.8,-0.8l41.9,0.5c0.4,0 0.8,0.4 0.8,0.8l-1,70.5C124.4,113.9 124.1,114.2 123.6,114.2z"/>
+    <path android:fillColor="#939393" android:pathData="M87.6,31.9L87.6,31.9h0.8l0,0l30.7,0.2h0.7h0.1c2.1,0 3.8,0.6 4.9,1.7c1.1,1.1 1.7,2.7 1.7,4.7v0.1v0.6l-0.6,76.7c0,0.4 0,0.7 0,1.1l0,0l0,0c0,0.2 0,0.5 -0.1,0.7l0,0c-0.7,4 -4.4,4.6 -6.6,4.6h-0.1h-0.7l-30.7,-0.3h-0.7h-0.1c-2.2,0 -5.9,-0.6 -6.5,-4.7l0,0c0,-0.2 -0.1,-0.4 -0.1,-0.7l0,0l0,0c0,-0.4 0,-0.7 0,-1.1l0.6,-76.7v-0.6v-0.1c0,-2 0.6,-3.6 1.7,-4.7C83.7,32.4 85.4,31.9 87.6,31.9C87.5,31.9 87.5,31.9 87.6,31.9C87.5,31.9 87.6,31.9 87.6,31.9L87.6,31.9M87.7,31.4L87.7,31.4L87.7,31.4h-0.2l0,0c-2.3,0 -4,0.6 -5.3,1.8c-1.2,1.2 -1.9,2.9 -1.9,5.1v0.1v0.6l-0.6,76.7c0,0.4 0,0.7 0,1.1l0,0l0,0c0,0.2 0,0.5 0.1,0.7l0,0l0,0l0,0l0,0c0.3,1.9 1.3,3.4 3,4.2c1.4,0.7 3,0.9 4.1,0.9h0.1h0.7l30.7,0.2h0.7h0.1c1.1,0 2.7,-0.1 4.1,-0.8c1.7,-0.8 2.7,-2.2 3,-4.2l0,0l0,0l0,0l0,0c0,-0.2 0.1,-0.4 0.1,-0.7l0,0l0,0c0,-0.4 0,-0.7 0,-1.1l0.6,-76.7v-0.6v-0.1c0,-2.2 -0.6,-3.9 -1.8,-5.1c-1.2,-1.2 -3,-1.8 -5.3,-1.8h-0.1h-0.7l-30.7,-0.2l0,0L87.7,31.4L87.7,31.4L87.7,31.4z"/>
+    <path android:fillColor="#2196F3" android:pathData="M111.7,63.9l-16.9,-0.1c-1.2,0 -2.1,0.9 -2.1,2.1l-0.1,16.9c0,1.2 0.9,2.1 2.1,2.1l16.9,0.1c1.2,0 2.1,-0.9 2.1,-2.1l0.1,-16.9C113.8,64.9 112.9,63.9 111.7,63.9zM111.6,83l-16.9,-0.1l0.1,-16.9l16.9,0.1L111.6,83zM109.6,68.1h-5.3c-1.2,0 -2.1,0.9 -2.1,2.1v2.4c-0.6,0.4 -1.1,1 -1.1,1.8c0,1.2 0.9,2.1 2.1,2.1s2.1,-0.9 2.1,-2.1c0,-0.8 -0.4,-1.5 -1,-1.8v-2.4h3.2v8.5h-8.5v-8.5h2.1v-2.1h-4.2l-0.1,12.7l12.7,0.1L109.6,68.1z"/>
+    <path android:fillColor="#E0E0E0" android:pathData="M96.4,91.7c0.6,-0.1 2.3,-0.3 2.7,-3.1c0.4,-2.7 -3.1,-6.4 -4.4,-7.6l-10.9,-10.7c-2.3,-2.1 -7.1,5.9 -4.8,8l13.4,12C93.5,91.4 95,91.8 96.4,91.7z"/>
+    <path android:fillColor="#E0E0E0" android:pathData="M95.3,101.7c0.6,-0.1 2.3,-0.3 2.7,-3.1c0.4,-2.7 -3.1,-6.4 -4.4,-7.6l-10.9,-10.7c-2.3,-2.1 -6.7,5.5 -4.4,7.6l13,12.4C92.5,101.4 93.9,101.8 95.3,101.7z"/>
+    <path android:fillColor="#E0E0E0" android:pathData="M76.1,87.2c-0.4,0 2.1,8.2 3.5,12.7c0.4,1.3 1.1,4.4 1.1,4.4c2,2.5 6,5.4 8.3,3.2s1.2,-5.6 -0.8,-8l-7.5,-10.2C79.7,88 77.5,87.3 76.1,87.2z"/>
+    <path android:fillColor="#FAC88B" android:pathData="M136.6,114.6l4.4,-23.2c0,0 3,-6.7 -0.9,-10.3c-3.9,-3.6 -14.4,-18.2 -14.4,-18.2s-6.7,-9.6 -11.5,-4.1c-2.9,3.3 3.1,11.1 3.1,11.1l8.5,14.4c-6.1,14.2 -5.7,26 1.5,36.1C127.4,120.4 132.6,125.3 136.6,114.6z"/>
+    <path android:fillColor="#FFCC80" android:pathData="M96.5,91c0.6,-0.1 2.3,-0.3 2.7,-3.1c0.4,-2.7 -3.1,-6.4 -4.4,-7.6l-10.8,-10.7c-2.3,-2.1 -6.7,-4.3 -8.6,-1.8c-2,2.5 -0.4,5.7 1.9,7.8l15.3,14.1C93.7,90.7 95.1,91.2 96.5,91z"/>
+    <path android:fillColor="#FFCC80" android:pathData="M95.3,100.9c0.6,-0.1 2.3,-0.3 2.7,-3.1c0.4,-2.7 -3.1,-6.4 -4.4,-7.6l-10.8,-10.7c-2.3,-2.1 -6.7,-4.3 -8.6,-1.8c-2,2.5 -0.4,5.7 1.9,7.8l15.3,14.1C92.5,100.6 93.9,101 95.3,100.9z"/>
+    <path android:fillColor="#FFCC80" android:pathData="M76.1,86.4c-0.6,0 -2.3,0 -3.1,2.7c-0.8,2.6 2.1,6.8 3.3,8.3l4.4,6.2c2,2.5 6,5.4 8.3,3.2c2.3,-2.2 1.2,-5.6 -0.8,-8l-7.5,-10.2C79.8,87.3 77.5,86.5 76.1,86.4z"/>
+</vector>
diff --git a/res/layout/url_open_confirmation.xml b/res/layout/url_open_confirmation.xml
new file mode 100644
index 0000000..98ff5d2
--- /dev/null
+++ b/res/layout/url_open_confirmation.xml
@@ -0,0 +1,35 @@
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:gravity="start"
+    android:layout_width="wrap_content"
+    android:layout_height="400dp"
+    android:orientation="vertical"
+    android:paddingTop="24dp"
+    android:paddingStart="24dp"
+    android:paddingEnd="24dp">
+    <TextView
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:textAlignment="viewStart"
+        android:paddingBottom="24dp"
+        android:text="@string/summary_confirm_url_open"
+        android:textColor="?android:attr/textColorPrimaryInverse"/>
+    <TextView
+        android:id="@+id/url_open_confirmation_link"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:textAlignment="viewStart"
+        android:textColor="?android:attr/colorAccent"/>
+    <FrameLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:paddingTop="24dp"
+        android:paddingBottom="24dp">
+        <ImageView
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_gravity="center"
+            android:src="@drawable/ic_weblink_nfc"/>
+    </FrameLayout>
+
+</LinearLayout>
diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml
index df05221..eb0aa82 100644
--- a/res/values-hi/strings.xml
+++ b/res/values-hi/strings.xml
@@ -14,7 +14,7 @@
     <string name="beam_tap_to_view" msgid="7430394753262448349">"देखने के लिए टैप करें"</string>
     <string name="beam_handover_not_supported" msgid="4083165921751489015">"प्राप्तकर्ता का डिवाइस, बीम द्वारा बड़ी फ़ाइल के स्थानांतरण का समर्थन नहीं करता."</string>
     <string name="beam_try_again" msgid="3364677301009783455">"डिवाइस को पुन: एक साथ लाएं"</string>
-    <string name="beam_busy" msgid="5253335587620612576">"Beam वर्तमान में व्‍यस्‍त है. पिछला ट्रांसफर पूर्ण हो जाने पर पुन: प्रयास करें."</string>
+    <string name="beam_busy" msgid="5253335587620612576">"बीम अभी व्‍यस्‍त है. पिछला ट्रांसफर पूरा हो जाने पर फिर से कोशिश करें."</string>
     <string name="device" msgid="4459621591392478151">"डिवाइस"</string>
     <string name="connecting_peripheral" msgid="1296182660525660935">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> को कनेक्‍ट किया जा रहा है"</string>
     <string name="connected_peripheral" msgid="20748648543160091">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> को कनेक्‍ट किया गया"</string>
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
index 0f7e5a2..70bc08e 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -24,7 +24,7 @@
     <string name="pairing_peripheral" msgid="6983626861540899365">"מבצע התאמה עם <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
     <string name="pairing_peripheral_failed" msgid="6087643307743264679">"לא ניתן לבצע התאמה עם <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
     <string name="failed_to_enable_bt" msgid="7229153323594758077">"‏לא ניתן להפעיל Bluetooth"</string>
-    <string name="confirm_pairing" msgid="4112568077038265363">"‏האם אתה בטוח שברצונך להתאים את מכשיר ה-Bluetooth <xliff:g id="DEVICE_NAME">%1$s</xliff:g>?"</string>
+    <string name="confirm_pairing" msgid="4112568077038265363">"‏בטוח שברצונך להתאים את מכשיר ה-Bluetooth <xliff:g id="DEVICE_NAME">%1$s</xliff:g>?"</string>
     <string name="pair_yes" msgid="3525614878559994448">"כן"</string>
     <string name="pair_no" msgid="5022308368904055020">"לא"</string>
     <string name="tap_again_to_pay" msgid="5754988005412859897">"הקש שוב כדי לשלם באמצעות <xliff:g id="APP">%1$s</xliff:g>"</string>
diff --git a/res/values-ml/strings.xml b/res/values-ml/strings.xml
index 6b1e4da..83ff3d7 100644
--- a/res/values-ml/strings.xml
+++ b/res/values-ml/strings.xml
@@ -35,7 +35,7 @@
     <string name="complete_with" msgid="6797459104103012992">"ഇതുപയോഗിച്ച് പൂർത്തിയാക്കുക"</string>
     <string name="default_pay_app_removed" msgid="4108250545457437360">"\'ടാപ്പുചെയ്‌ത് പണമടയ്‌ക്കുക\' എന്നതിനായി നിങ്ങൾ തിരഞ്ഞെടുത്ത സേവനം നീക്കംചെയ്‌തു. മറ്റൊന്ന് തിരഞ്ഞെടുക്കണോ?"</string>
     <string name="ask_nfc_tap" msgid="2925239870458286340">"പൂർത്തിയാക്കുന്നതിന് മറ്റൊരു ഉപകരണം ടാപ്പുചെയ്യുക"</string>
-    <string name="wifi_connect" msgid="6250727951843550671">"കണക്റ്റുചെയ്യുക"</string>
+    <string name="wifi_connect" msgid="6250727951843550671">"കണക്റ്റ് ചെയ്യുക"</string>
     <string name="status_unable_to_connect" msgid="9183908200295307657">"നെറ്റ്‌വർക്കിലേക്ക് കണക്റ്റുചെയ്യാനായില്ല"</string>
     <string name="status_wifi_connected" msgid="5893022897732105739">"കണക്റ്റുചെയ്‌തു"</string>
     <string name="title_connect_to_network" msgid="2474034615817280146">"നെ‌റ്റ്‌വർക്കിൽ കണക്‌റ്റുചെയ്യുക"</string>
diff --git a/res/values-mr/strings.xml b/res/values-mr/strings.xml
index 0d69e30..9c71c9d 100644
--- a/res/values-mr/strings.xml
+++ b/res/values-mr/strings.xml
@@ -12,10 +12,10 @@
     <string name="beam_canceled" msgid="5425192751826544741">"बीम रद्द"</string>
     <string name="cancel" msgid="61873902552555096">"रद्द करा"</string>
     <string name="beam_tap_to_view" msgid="7430394753262448349">"पाहण्यासाठी टॅप करा"</string>
-    <string name="beam_handover_not_supported" msgid="4083165921751489015">"प्राप्तकर्त्याचे डीव्हाइस बीमद्वारे मोठी फाईल स्थानांतरीत करण्यास सपोर्ट करत नाही."</string>
+    <string name="beam_handover_not_supported" msgid="4083165921751489015">"प्राप्तकर्त्याचे डिव्हाइस बीमद्वारे मोठी फाईल स्थानांतरीत करण्यास सपोर्ट करत नाही."</string>
     <string name="beam_try_again" msgid="3364677301009783455">"डिव्हाइसेस पुन्हा एकत्र आणा"</string>
     <string name="beam_busy" msgid="5253335587620612576">"बीम करणे सध्या व्यस्त आहे. मागील स्थानांतरीत करणे पूर्ण झाल्यानंतर पुन्हा प्रयत्न करा."</string>
-    <string name="device" msgid="4459621591392478151">"डीव्हाइस"</string>
+    <string name="device" msgid="4459621591392478151">"डिव्हाइस"</string>
     <string name="connecting_peripheral" msgid="1296182660525660935">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> कनेक्‍ट करीत आहे"</string>
     <string name="connected_peripheral" msgid="20748648543160091">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> कनेक्‍ट केले"</string>
     <string name="connect_peripheral_failed" msgid="7925702596242839275">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> कनेक्‍ट करणे शक्य झाले नाही"</string>
@@ -24,7 +24,7 @@
     <string name="pairing_peripheral" msgid="6983626861540899365">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> पेअर करत आहे"</string>
     <string name="pairing_peripheral_failed" msgid="6087643307743264679">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> जोडणे शक्य झाले नाही"</string>
     <string name="failed_to_enable_bt" msgid="7229153323594758077">"ब्लूटूथ सक्षम करू शकलो नाही"</string>
-    <string name="confirm_pairing" msgid="4112568077038265363">"तुम्ही <xliff:g id="DEVICE_NAME">%1$s</xliff:g> ब्लूटूथ डीव्हाइस जोडू इच्छिता याची तुम्हाला खात्री आहे?"</string>
+    <string name="confirm_pairing" msgid="4112568077038265363">"तुम्ही <xliff:g id="DEVICE_NAME">%1$s</xliff:g> ब्लूटूथ डिव्हाइस जोडू इच्छिता याची तुम्हाला खात्री आहे?"</string>
     <string name="pair_yes" msgid="3525614878559994448">"होय"</string>
     <string name="pair_no" msgid="5022308368904055020">"नाही"</string>
     <string name="tap_again_to_pay" msgid="5754988005412859897">"<xliff:g id="APP">%1$s</xliff:g> सह देय देण्यासाठी पुन्हा टॅप करा"</string>
@@ -34,7 +34,7 @@
     <string name="pay_with" msgid="5531545488795798945">"यासह देय द्या"</string>
     <string name="complete_with" msgid="6797459104103012992">"यासह पूर्ण करा"</string>
     <string name="default_pay_app_removed" msgid="4108250545457437360">"टॅप आणि पे साठीची आपली अग्रमानांकित सेवा काढली. दुसरी निवडायची?"</string>
-    <string name="ask_nfc_tap" msgid="2925239870458286340">"पूर्ण करण्यासाठी दुसरे डीव्हाइस टॅप करा"</string>
+    <string name="ask_nfc_tap" msgid="2925239870458286340">"पूर्ण करण्यासाठी दुसरे डिव्हाइस टॅप करा"</string>
     <string name="wifi_connect" msgid="6250727951843550671">"कनेक्ट करा"</string>
     <string name="status_unable_to_connect" msgid="9183908200295307657">"नेटवर्कशी कनेक्‍ट करण्‍यात अक्षम"</string>
     <string name="status_wifi_connected" msgid="5893022897732105739">"कनेक्ट केले"</string>
diff --git a/res/values-pa/strings.xml b/res/values-pa/strings.xml
index db1a5fd..a0e61e3 100644
--- a/res/values-pa/strings.xml
+++ b/res/values-pa/strings.xml
@@ -11,7 +11,7 @@
     <string name="beam_failed" msgid="5116241718189888630">"ਬੀਮ ਪੂਰਾ ਨਹੀਂ ਕੀਤਾ"</string>
     <string name="beam_canceled" msgid="5425192751826544741">"ਬੀਮ ਰੱਦ ਕੀਤਾ"</string>
     <string name="cancel" msgid="61873902552555096">"ਰੱਦ ਕਰੋ"</string>
-    <string name="beam_tap_to_view" msgid="7430394753262448349">"ਵੇਖਣ ਲਈ ਟੈਪ ਕਰੋ"</string>
+    <string name="beam_tap_to_view" msgid="7430394753262448349">"ਦੇਖਣ ਲਈ ਟੈਪ ਕਰੋ"</string>
     <string name="beam_handover_not_supported" msgid="4083165921751489015">"ਪ੍ਰਾਪਤਕਰਤਾ ਦਾ ਡੀਵਾਈਸ ਬੀਮ ਰਾਹੀਂ ਵੱਡੀ ਫ਼ਾਈਲ ਟ੍ਰਾਂਸਫਰ ਦਾ ਸਮਰਥਨ ਨਹੀਂ ਕਰਦਾ।"</string>
     <string name="beam_try_again" msgid="3364677301009783455">"ਡਿਵਾਈਸਾਂ ਨੂੰ ਦੁਬਾਰਾ ਇਕੱਠੇ ਨਾਲ ਲਿਆਓ"</string>
     <string name="beam_busy" msgid="5253335587620612576">"ਬੀਮ ਇਸ ਵੇਲੇ ਰੁੱਝਾ ਹੋਇਆ ਹੈ। ਜਦੋਂ ਪਿਛਲਾ ਟ੍ਰਾਂਸਫਰ ਪੂਰਾ ਹੋ ਜਾਏ ਤਾਂ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।"</string>
diff --git a/res/values/config.xml b/res/values/config.xml
index 7a4803e..c6654dd 100644
--- a/res/values/config.xml
+++ b/res/values/config.xml
@@ -1,4 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
     <string name="bluetooth_package" translatable="false">com.android.bluetooth</string>
+    <bool name="enable_nfc_url_open_dialog">false</bool>
 </resources>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 34faf5b..9d812d9 100755
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -84,4 +84,13 @@
     <!-- Message shown in a toast when user wants to Beam a file, but application doesn't have required permission -->
     <string name="beam_requires_external_storage_permission">Application does not have External Storage Permission. This is required to Beam this file</string>
 
+    <!-- Strings for a dialog informing the user a URL was read from an NFC tag, and allowing confirmation that they want to open it -->
+    <!-- Title of the dialog -->
+    <string name="title_confirm_url_open">Open link?</string>
+    <!-- Summary text appearing before the URL -->
+    <string name="summary_confirm_url_open" product="tablet">Your tablet received a link through NFC:</string>
+    <string name="summary_confirm_url_open" product="default">Your phone received a link through NFC:</string>
+    <!-- Label for the button which causes the URL to be opened -->
+    <string name="action_confirm_url_open">Open link</string>
+
 </resources>
diff --git a/src/com/android/nfc/NfcDispatcher.java b/src/com/android/nfc/NfcDispatcher.java
index 0f921f1..934baf7 100644
--- a/src/com/android/nfc/NfcDispatcher.java
+++ b/src/com/android/nfc/NfcDispatcher.java
@@ -16,6 +16,7 @@
 
 package com.android.nfc;
 
+import android.Manifest;
 import android.app.ActivityManager;
 import android.bluetooth.BluetoothAdapter;
 import android.os.UserManager;
@@ -26,12 +27,14 @@
 
 import android.app.Activity;
 import android.app.ActivityManager;
+import android.app.AlertDialog;
 import android.app.IActivityManager;
 import android.app.PendingIntent;
 import android.app.PendingIntent.CanceledException;
 import android.content.ComponentName;
 import android.content.ContentResolver;
 import android.content.Context;
+import android.content.DialogInterface;
 import android.content.Intent;
 import android.content.IntentFilter;
 import android.content.pm.PackageManager;
@@ -48,6 +51,10 @@
 import android.os.RemoteException;
 import android.os.UserHandle;
 import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.WindowManager;
+import android.widget.TextView;
 
 import java.io.FileDescriptor;
 import java.io.PrintWriter;
@@ -56,6 +63,7 @@
 import java.util.Arrays;
 import java.util.LinkedList;
 import java.util.List;
+import java.util.Locale;
 
 /**
  * Dispatch of NFC events to start activities
@@ -198,6 +206,14 @@
             return intent;
         }
 
+        public boolean isWebIntent() {
+            return ndefUri != null && ndefUri.normalizeScheme().getScheme().startsWith("http");
+        }
+
+        public String getUri() {
+            return ndefUri.toString();
+        }
+
         /**
          * Launch the activity via a (single) NFC root task, so that it
          * creates a new task stack instead of interfering with any existing
@@ -536,6 +552,13 @@
 
         // regular launch
         dispatch.intent.setPackage(null);
+
+        if (dispatch.isWebIntent()) {
+            if (DBG) Log.i(TAG, "matched Web link - prompting user");
+            showWebLinkConfirmation(dispatch);
+            return true;
+        }
+
         if (dispatch.tryStartActivity()) {
             if (DBG) Log.i(TAG, "matched NDEF");
             return true;
@@ -706,6 +729,33 @@
         return enabled;
     }
 
+    void showWebLinkConfirmation(DispatchInfo dispatch) {
+        if (!mContext.getResources().getBoolean(R.bool.enable_nfc_url_open_dialog)) {
+            dispatch.tryStartActivity();
+            return;
+        }
+        AlertDialog.Builder builder = new AlertDialog.Builder(
+                mContext.getApplicationContext(),
+                android.R.style.Theme_DeviceDefault_Light_Dialog_Alert);
+        builder.setTitle(R.string.title_confirm_url_open);
+        LayoutInflater inflater = LayoutInflater.from(mContext);
+        View view = inflater.inflate(R.layout.url_open_confirmation, null);
+        if (view != null) {
+            TextView url = view.findViewById(R.id.url_open_confirmation_link);
+            if (url != null) {
+                url.setText(dispatch.getUri());
+            }
+            builder.setView(view);
+        }
+        builder.setNegativeButton(R.string.cancel, (dialog, which) -> {});
+        builder.setPositiveButton(R.string.action_confirm_url_open, (dialog, which) -> {
+            dispatch.tryStartActivity();
+        });
+        AlertDialog dialog = builder.create();
+        dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
+        dialog.show();
+    }
+
     void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
         synchronized (this) {
             pw.println("mOverrideIntent=" + mOverrideIntent);