summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRicardo Cerqueira <ricardo@cyngn.com>2015-03-10 12:20:15 +0000
committerRicardo Cerqueira <ricardo@cyngn.com>2015-03-10 12:20:15 +0000
commitc4f4ca2498de5a34f52cbfd0f96b8e52206eb17b (patch)
tree37ae895528465967b3e1c182878b5ca6002284fc
parentc6f7234af774578fc567f3bf6699fac463f26243 (diff)
parent15d2dfc3d29674835402d67f34b99de79e57e900 (diff)
downloadandroid_packages_apps_Nfc-c4f4ca2498de5a34f52cbfd0f96b8e52206eb17b.tar.gz
android_packages_apps_Nfc-c4f4ca2498de5a34f52cbfd0f96b8e52206eb17b.tar.bz2
android_packages_apps_Nfc-c4f4ca2498de5a34f52cbfd0f96b8e52206eb17b.zip
Merge tag 'android-5.1.0_r1' into HEADstaging/cm-12.1stable/cm-12.1-YOG3C
Android 5.1.0 release 1
-rwxr-xr-xAndroidManifest.xml10
-rwxr-xr-xnci/jni/NativeNfcManager.cpp22
-rwxr-xr-xnci/src/com/android/nfc/dhimpl/NativeNfcManager.java4
-rw-r--r--nxp/jni/com_android_nfc_NativeNfcManager.cpp23
-rwxr-xr-xnxp/src/com/android/nfc/dhimpl/NativeNfcManager.java3
-rw-r--r--res/drawable-hdpi/icon.pngbin9793 -> 3100 bytes
-rw-r--r--res/drawable-mdpi/icon.pngbin7013 -> 1794 bytes
-rw-r--r--res/drawable-xhdpi/icon.pngbin12960 -> 4076 bytes
-rw-r--r--res/drawable-xxhdpi/icon.pngbin20045 -> 6649 bytes
-rw-r--r--res/drawable-xxxhdpi/icon.pngbin0 -> 9803 bytes
-rw-r--r--res/values-af/strings.xml16
-rw-r--r--res/values-am/strings.xml16
-rw-r--r--res/values-ar/strings.xml16
-rw-r--r--res/values-bg/strings.xml16
-rw-r--r--res/values-bn-rBD/strings.xml16
-rw-r--r--res/values-ca/strings.xml16
-rw-r--r--res/values-cs/strings.xml16
-rw-r--r--res/values-da/strings.xml16
-rw-r--r--res/values-de/strings.xml16
-rw-r--r--res/values-el/strings.xml16
-rw-r--r--res/values-en-rGB/strings.xml16
-rw-r--r--res/values-en-rIN/strings.xml16
-rw-r--r--res/values-es-rUS/strings.xml16
-rw-r--r--res/values-es/strings.xml16
-rw-r--r--res/values-et-rEE/strings.xml16
-rw-r--r--res/values-eu-rES/strings.xml16
-rw-r--r--res/values-fa/strings.xml16
-rw-r--r--res/values-fi/strings.xml16
-rw-r--r--res/values-fr-rCA/strings.xml16
-rw-r--r--res/values-fr/strings.xml16
-rw-r--r--res/values-gl-rES/strings.xml16
-rw-r--r--res/values-hi/strings.xml16
-rw-r--r--res/values-hr/strings.xml16
-rw-r--r--res/values-hu/strings.xml16
-rw-r--r--res/values-hy-rAM/strings.xml16
-rw-r--r--res/values-in/strings.xml16
-rw-r--r--res/values-is-rIS/strings.xml16
-rw-r--r--res/values-it/strings.xml16
-rw-r--r--res/values-iw/strings.xml16
-rw-r--r--res/values-ja/strings.xml16
-rw-r--r--res/values-ka-rGE/strings.xml16
-rw-r--r--res/values-kk-rKZ/strings.xml16
-rw-r--r--res/values-km-rKH/strings.xml16
-rw-r--r--res/values-kn-rIN/strings.xml16
-rw-r--r--res/values-ko/strings.xml16
-rw-r--r--res/values-ky-rKG/strings.xml16
-rw-r--r--res/values-lo-rLA/strings.xml16
-rw-r--r--res/values-lt/strings.xml16
-rw-r--r--res/values-lv/strings.xml16
-rw-r--r--res/values-mk-rMK/strings.xml16
-rw-r--r--res/values-ml-rIN/strings.xml16
-rw-r--r--res/values-mn-rMN/strings.xml16
-rw-r--r--res/values-mr-rIN/strings.xml16
-rw-r--r--res/values-ms-rMY/strings.xml16
-rw-r--r--res/values-my-rMM/strings.xml16
-rw-r--r--res/values-nb/strings.xml16
-rw-r--r--res/values-ne-rNP/strings.xml16
-rw-r--r--res/values-nl/strings.xml16
-rw-r--r--res/values-pl/strings.xml16
-rw-r--r--res/values-pt-rPT/strings.xml16
-rw-r--r--res/values-pt/strings.xml16
-rw-r--r--res/values-ro/strings.xml16
-rw-r--r--res/values-ru/strings.xml16
-rw-r--r--res/values-si-rLK/strings.xml16
-rw-r--r--res/values-sk/strings.xml16
-rw-r--r--res/values-sl/strings.xml16
-rw-r--r--res/values-sr/strings.xml16
-rw-r--r--res/values-sv/strings.xml16
-rw-r--r--res/values-sw/strings.xml16
-rw-r--r--res/values-ta-rIN/strings.xml16
-rw-r--r--res/values-te-rIN/strings.xml16
-rw-r--r--res/values-th/strings.xml16
-rw-r--r--res/values-tl/strings.xml16
-rw-r--r--res/values-tr/strings.xml16
-rw-r--r--res/values-uk/strings.xml16
-rw-r--r--res/values-ur-rPK/strings.xml16
-rw-r--r--res/values-uz-rUZ/strings.xml16
-rw-r--r--res/values-vi/strings.xml16
-rw-r--r--res/values-zh-rCN/strings.xml16
-rw-r--r--res/values-zh-rHK/strings.xml16
-rw-r--r--res/values-zh-rTW/strings.xml16
-rw-r--r--res/values-zu/strings.xml16
-rwxr-xr-xres/values/strings.xml26
-rw-r--r--src/com/android/nfc/BeamShareActivity.java11
-rw-r--r--src/com/android/nfc/NfcDiscoveryParameters.java30
-rw-r--r--src/com/android/nfc/NfcDispatcher.java35
-rwxr-xr-xsrc/com/android/nfc/NfcService.java109
-rw-r--r--src/com/android/nfc/NfcWifiProtectedSetup.java163
-rw-r--r--src/com/android/nfc/P2pEventManager.java11
-rwxr-xr-xsrc/com/android/nfc/P2pLinkManager.java87
-rw-r--r--src/com/android/nfc/beam/BeamManager.java133
-rw-r--r--src/com/android/nfc/beam/BeamReceiveService.java175
-rw-r--r--src/com/android/nfc/beam/BeamSendService.java206
-rw-r--r--src/com/android/nfc/beam/BeamStatusReceiver.java155
-rw-r--r--src/com/android/nfc/beam/BeamTransferManager.java (renamed from src/com/android/nfc/handover/HandoverTransfer.java)126
-rw-r--r--src/com/android/nfc/beam/BeamTransferRecord.aidl19
-rw-r--r--src/com/android/nfc/beam/BeamTransferRecord.java98
-rw-r--r--src/com/android/nfc/beam/BluetoothOppHandover.java (renamed from src/com/android/nfc/handover/BluetoothOppHandover.java)22
-rw-r--r--src/com/android/nfc/beam/FireflyRenderer.java (renamed from src/com/android/nfc/FireflyRenderer.java)2
-rw-r--r--src/com/android/nfc/beam/MimeTypeUtil.java (renamed from src/com/android/nfc/handover/MimeTypeUtil.java)4
-rw-r--r--src/com/android/nfc/beam/SendUi.java (renamed from src/com/android/nfc/SendUi.java)10
-rw-r--r--src/com/android/nfc/cardemulation/AidRoutingManager.java18
-rw-r--r--src/com/android/nfc/cardemulation/CardEmulationManager.java9
-rw-r--r--src/com/android/nfc/cardemulation/PreferredServices.java14
-rw-r--r--src/com/android/nfc/handover/BluetoothPeripheralHandover.java38
-rw-r--r--src/com/android/nfc/handover/HandoverDataParser.java (renamed from src/com/android/nfc/handover/HandoverManager.java)337
-rw-r--r--src/com/android/nfc/handover/HandoverServer.java53
-rw-r--r--src/com/android/nfc/handover/HandoverService.java568
-rw-r--r--src/com/android/nfc/handover/PendingHandoverTransfer.java122
-rw-r--r--src/com/android/nfc/handover/PeripheralHandoverService.java250
110 files changed, 2272 insertions, 1773 deletions
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 56ef3d41..690a4f59 100755
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -125,8 +125,14 @@
android:noHistory="true"
/>
- <service android:name=".handover.HandoverService"
- android:process=":handover"
+ <service android:name=".beam.BeamSendService"
+ android:process=":beam"
+ />
+ <service android:name=".beam.BeamReceiveService"
+ android:process=":beam"
+ />
+
+ <service android:name=".handover.PeripheralHandoverService"
/>
</application>
</manifest>
diff --git a/nci/jni/NativeNfcManager.cpp b/nci/jni/NativeNfcManager.cpp
index 5001ee7e..36e89c00 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);
}
@@ -1044,7 +1052,7 @@ void nfcManager_disableDiscovery (JNIEnv* e, jobject o)
status = stopPolling_rfDiscoveryDisabled();
PeerToPeer::getInstance().enableP2pListening (false);
-
+ sP2pEnabled = false;
sDiscoveryEnabled = false;
//if nothing is active after this, then tell the controller to power down
if (! PowerSwitch::getInstance ().setModeOff (PowerSwitch::DISCOVERY))
@@ -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..cfbab9bd 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 */
}
@@ -1414,7 +1425,7 @@ static void com_android_nfc_NfcManager_enableDiscovery(JNIEnv *e, jobject o, jin
nat->discovery_cfg.PollDevInfo.PollCfgInfo.EnableIso15693 = (modes & 0x08) != 0;
}
- nfc_jni_start_discovery_locked(nat, restart);
+ nfc_jni_start_discovery_locked(nat, false);
clean_and_return:
CONCURRENCY_UNLOCK();
}
@@ -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/res/drawable-hdpi/icon.png b/res/drawable-hdpi/icon.png
index 07c6f3af..f732349e 100644
--- a/res/drawable-hdpi/icon.png
+++ b/res/drawable-hdpi/icon.png
Binary files differ
diff --git a/res/drawable-mdpi/icon.png b/res/drawable-mdpi/icon.png
index 66c648dd..a27df56f 100644
--- a/res/drawable-mdpi/icon.png
+++ b/res/drawable-mdpi/icon.png
Binary files differ
diff --git a/res/drawable-xhdpi/icon.png b/res/drawable-xhdpi/icon.png
index c1dd26ca..3bfed643 100644
--- a/res/drawable-xhdpi/icon.png
+++ b/res/drawable-xhdpi/icon.png
Binary files differ
diff --git a/res/drawable-xxhdpi/icon.png b/res/drawable-xxhdpi/icon.png
index 6a7fed72..ca1bce36 100644
--- a/res/drawable-xxhdpi/icon.png
+++ b/res/drawable-xxhdpi/icon.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/icon.png b/res/drawable-xxxhdpi/icon.png
new file mode 100644
index 00000000..9b0c96b9
--- /dev/null
+++ b/res/drawable-xxxhdpi/icon.png
Binary files differ
diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml
index bb42ce4a..12139c77 100644
--- a/res/values-af/strings.xml
+++ b/res/values-af/strings.xml
@@ -18,13 +18,15 @@
<string name="beam_touch_to_view" msgid="7853129156831642630">"Raak om te bekyk"</string>
<string name="beam_handover_not_supported" msgid="4083165921751489015">"Die ontvanger se toestel ondersteun nie groot lêeroordrag via \'n straal nie."</string>
<string name="beam_try_again" msgid="3364677301009783455">"Bring toestelle weer bymekaar"</string>
- <string name="connecting_peripheral" msgid="3957490448472434505">"Koppel tans"</string>
- <string name="connected_peripheral" msgid="5777997713940423952">"Gekoppel"</string>
- <string name="connect_peripheral_failed" msgid="7173159351147270788">"Kon nie koppel nie"</string>
- <string name="disconnecting_peripheral" msgid="5320432304947519207">"Ontkoppel tans"</string>
- <string name="disconnected_peripheral" msgid="2768150931245385916">"Ontkoppel"</string>
- <string name="pairing_peripheral" msgid="5618129595426303236">"Bind tans saam"</string>
- <string name="pairing_peripheral_failed" msgid="976004756112808526">"Kon nie saambind nie"</string>
+ <string name="beam_busy" msgid="5253335587620612576">"Straal is tans besig. Probeer weer wanneer die vorige oordrag voltooid is."</string>
+ <string name="device" msgid="4459621591392478151">"toestel"</string>
+ <string name="connecting_peripheral" msgid="1296182660525660935">"Koppel tans <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="connected_peripheral" msgid="20748648543160091">"Het <xliff:g id="DEVICE_NAME">%1$s</xliff:g> gekoppel"</string>
+ <string name="connect_peripheral_failed" msgid="7925702596242839275">"Kon nie <xliff:g id="DEVICE_NAME">%1$s</xliff:g> koppel nie"</string>
+ <string name="disconnecting_peripheral" msgid="1443699384809097200">"Ontkoppel tans <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="disconnected_peripheral" msgid="4470578100296504366">"Het <xliff:g id="DEVICE_NAME">%1$s</xliff:g> ontkoppel"</string>
+ <string name="pairing_peripheral" msgid="6983626861540899365">"Bind tans <xliff:g id="DEVICE_NAME">%1$s</xliff:g> saam"</string>
+ <string name="pairing_peripheral_failed" msgid="6087643307743264679">"Kon nie <xliff:g id="DEVICE_NAME">%1$s</xliff:g> saambind nie"</string>
<string name="failed_to_enable_bt" msgid="7229153323594758077">"Kon nie Bluetooth aktiveer nie"</string>
<string name="confirm_pairing" msgid="4112568077038265363">"Is jy seker jy wil die Bluetooth-toestel, <xliff:g id="DEVICE_NAME">%1$s</xliff:g>, saambind?"</string>
<string name="pair_yes" msgid="3525614878559994448">"Ja"</string>
diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml
index 6d516f06..49cd2af4 100644
--- a/res/values-am/strings.xml
+++ b/res/values-am/strings.xml
@@ -18,13 +18,15 @@
<string name="beam_touch_to_view" msgid="7853129156831642630">"ለማየት ንካ"</string>
<string name="beam_handover_not_supported" msgid="4083165921751489015">"የተቀባዩ መሣሪያ ትልቅ ፋይል በሞገድ በኩል ማስተላለፍ አይደግፍም።"</string>
<string name="beam_try_again" msgid="3364677301009783455">"መሣሪያዎችን ዳግም አንድ ላይ አሰባስብ"</string>
- <string name="connecting_peripheral" msgid="3957490448472434505">"በመገናኘት ላይ"</string>
- <string name="connected_peripheral" msgid="5777997713940423952">"ተገናኝቷል"</string>
- <string name="connect_peripheral_failed" msgid="7173159351147270788">"ማገናኘት አልተቻለም"</string>
- <string name="disconnecting_peripheral" msgid="5320432304947519207">"ግንኙነት በማቋረጥ ላይ"</string>
- <string name="disconnected_peripheral" msgid="2768150931245385916">"ግንኙነት ተቋርጧል"</string>
- <string name="pairing_peripheral" msgid="5618129595426303236">"በማገናኘት ላይ"</string>
- <string name="pairing_peripheral_failed" msgid="976004756112808526">"ማጣመር አልተቻለም"</string>
+ <string name="beam_busy" msgid="5253335587620612576">"Beam አሁን ላይ ባተሌ ነው። ቀዳሚው ዝውውር ሲጠናቀቅ እንደገና ይሞክሩ።"</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>
+ <string name="disconnecting_peripheral" msgid="1443699384809097200">"የ<xliff:g id="DEVICE_NAME">%1$s</xliff:g>ን ግንኙነት በማቋረጥ ላይ"</string>
+ <string name="disconnected_peripheral" msgid="4470578100296504366">"የ<xliff:g id="DEVICE_NAME">%1$s</xliff:g> ግንኙነት ተቋርጧል"</string>
+ <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="pair_yes" msgid="3525614878559994448">"አዎ"</string>
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
index 26966ff1..1e5db50c 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -18,13 +18,15 @@
<string name="beam_touch_to_view" msgid="7853129156831642630">"المس ليتم العرض"</string>
<string name="beam_handover_not_supported" msgid="4083165921751489015">"جهاز المستلم لا يوفر نقل ملفات كبيرة عبر تبادل البيانات."</string>
<string name="beam_try_again" msgid="3364677301009783455">"تجميع الأجهزة معًا من جديد"</string>
- <string name="connecting_peripheral" msgid="3957490448472434505">"جارٍ الاتصال"</string>
- <string name="connected_peripheral" msgid="5777997713940423952">"متصل"</string>
- <string name="connect_peripheral_failed" msgid="7173159351147270788">"تعذر الاتصال"</string>
- <string name="disconnecting_peripheral" msgid="5320432304947519207">"جارٍ قطع الاتصال"</string>
- <string name="disconnected_peripheral" msgid="2768150931245385916">"تم قطع الاتصال"</string>
- <string name="pairing_peripheral" msgid="5618129595426303236">"الإقران"</string>
- <string name="pairing_peripheral_failed" msgid="976004756112808526">"تعذر الإقران"</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>
+ <string name="connect_peripheral_failed" msgid="7925702596242839275">"تعذر الاتصال بـ <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="disconnecting_peripheral" msgid="1443699384809097200">"جارٍ إلغاء الاتصال بـ <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="disconnected_peripheral" msgid="4470578100296504366">"تم إلغاء الاتصال بـ <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <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="pair_yes" msgid="3525614878559994448">"نعم"</string>
diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml
index e6478184..1b4cd272 100644
--- a/res/values-bg/strings.xml
+++ b/res/values-bg/strings.xml
@@ -18,13 +18,15 @@
<string name="beam_touch_to_view" msgid="7853129156831642630">"Докоснете, за да видите"</string>
<string name="beam_handover_not_supported" msgid="4083165921751489015">"Устройството на получателя не поддържа прехвърляне на големи файлове чрез излъчване."</string>
<string name="beam_try_again" msgid="3364677301009783455">"Приближете отново устройствата едно до друго"</string>
- <string name="connecting_peripheral" msgid="3957490448472434505">"Установява се връзка"</string>
- <string name="connected_peripheral" msgid="5777997713940423952">"Установена е връзка"</string>
- <string name="connect_peripheral_failed" msgid="7173159351147270788">"Не можа да се установи връзка"</string>
- <string name="disconnecting_peripheral" msgid="5320432304947519207">"Връзката се прекратява"</string>
- <string name="disconnected_peripheral" msgid="2768150931245385916">"Връзката е прекратена"</string>
- <string name="pairing_peripheral" msgid="5618129595426303236">"Извършва се сдвояване"</string>
- <string name="pairing_peripheral_failed" msgid="976004756112808526">"Не можа да се сдвои"</string>
+ <string name="beam_busy" msgid="5253335587620612576">"Понастоящем Android Лъч работи. Опитайте отново, когато предишното прехвърляне завърши."</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>
+ <string name="disconnecting_peripheral" msgid="1443699384809097200">"Връзката с/ъс <xliff:g id="DEVICE_NAME">%1$s</xliff:g> се прекратява"</string>
+ <string name="disconnected_peripheral" msgid="4470578100296504366">"Връзката с/ъс <xliff:g id="DEVICE_NAME">%1$s</xliff:g> е прекратена"</string>
+ <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="pair_yes" msgid="3525614878559994448">"Да"</string>
diff --git a/res/values-bn-rBD/strings.xml b/res/values-bn-rBD/strings.xml
index edbb8b65..9b5a7f5f 100644
--- a/res/values-bn-rBD/strings.xml
+++ b/res/values-bn-rBD/strings.xml
@@ -18,13 +18,15 @@
<string name="beam_touch_to_view" msgid="7853129156831642630">"দেখতে স্পর্শ করুন"</string>
<string name="beam_handover_not_supported" msgid="4083165921751489015">"রিসিভার এর ডিভাইস বীমের মাধ্যমে বড় ফাইল স্থানান্তর সমর্থন করে না।"</string>
<string name="beam_try_again" msgid="3364677301009783455">"ডিভাইসগুলিকে আবার একত্র করুন"</string>
- <string name="connecting_peripheral" msgid="3957490448472434505">"সংযুক্ত হচ্ছে"</string>
- <string name="connected_peripheral" msgid="5777997713940423952">"সংযুক্ত হয়েছে"</string>
- <string name="connect_peripheral_failed" msgid="7173159351147270788">"সংযুক্ত করা যায়নি"</string>
- <string name="disconnecting_peripheral" msgid="5320432304947519207">"সংযোগ বিচ্ছিন্ন হচ্ছে"</string>
- <string name="disconnected_peripheral" msgid="2768150931245385916">"সংযোগ বিচ্ছিন্ন হয়েছে"</string>
- <string name="pairing_peripheral" msgid="5618129595426303236">"যুক্ত করা হচ্ছে"</string>
- <string name="pairing_peripheral_failed" msgid="976004756112808526">"যুক্ত করা যায়নি"</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>
+ <string name="connect_peripheral_failed" msgid="7925702596242839275">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> সংযোগ করা যায়নি"</string>
+ <string name="disconnecting_peripheral" msgid="1443699384809097200">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> থেকে সংযোগ বিচ্ছিন্ন করা হচ্ছে"</string>
+ <string name="disconnected_peripheral" msgid="4470578100296504366">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> থেকে সংযোগ বিচ্ছিন্ন হয়েছে"</string>
+ <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">"আপনি কি <xliff:g id="DEVICE_NAME">%1$s</xliff:g> Bluetooth ডিভাইসটি যুক্ত করার ব্যাপারে নিশ্চিত?"</string>
<string name="pair_yes" msgid="3525614878559994448">"হ্যাঁ"</string>
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
index 4d18a65f..2a58467b 100644
--- a/res/values-ca/strings.xml
+++ b/res/values-ca/strings.xml
@@ -18,13 +18,15 @@
<string name="beam_touch_to_view" msgid="7853129156831642630">"Toca per visualitzar"</string>
<string name="beam_handover_not_supported" msgid="4083165921751489015">"El dispositiu del receptor no és compatible amb la transferència de fitxers grans mitjançant sensors."</string>
<string name="beam_try_again" msgid="3364677301009783455">"Torna a apropar els dispositius"</string>
- <string name="connecting_peripheral" msgid="3957490448472434505">"S\'està connectant."</string>
- <string name="connected_peripheral" msgid="5777997713940423952">"S\'ha connectat."</string>
- <string name="connect_peripheral_failed" msgid="7173159351147270788">"No s\'ha pogut connectar."</string>
- <string name="disconnecting_peripheral" msgid="5320432304947519207">"S\'està desconnectant."</string>
- <string name="disconnected_peripheral" msgid="2768150931245385916">"S\'ha desconnectat."</string>
- <string name="pairing_peripheral" msgid="5618129595426303236">"S\'està emparellant."</string>
- <string name="pairing_peripheral_failed" msgid="976004756112808526">"No s\'ha pogut emparellar."</string>
+ <string name="beam_busy" msgid="5253335587620612576">"En aquest moment Beam està ocupat. Prova-ho de nou quan acabi la transferència anterior."</string>
+ <string name="device" msgid="4459621591392478151">"dispositiu"</string>
+ <string name="connecting_peripheral" msgid="1296182660525660935">"S\'està connectant <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
+ <string name="connected_peripheral" msgid="20748648543160091">"S\'ha connectat <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
+ <string name="connect_peripheral_failed" msgid="7925702596242839275">"No s\'ha pogut connectar <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
+ <string name="disconnecting_peripheral" msgid="1443699384809097200">"S\'està desconnectant <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
+ <string name="disconnected_peripheral" msgid="4470578100296504366">"S\'ha desconnectat <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
+ <string name="pairing_peripheral" msgid="6983626861540899365">"S\'està emparellant <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
+ <string name="pairing_peripheral_failed" msgid="6087643307743264679">"No s\'ha pogut emparellar <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
<string name="failed_to_enable_bt" msgid="7229153323594758077">"No es pot activar el Bluetooth"</string>
<string name="confirm_pairing" msgid="4112568077038265363">"Estàs segur que vols emparellar el dispositiu Bluetooth <xliff:g id="DEVICE_NAME">%1$s</xliff:g>?"</string>
<string name="pair_yes" msgid="3525614878559994448">"Sí"</string>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index 46bbbcc5..3a93b08e 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -18,13 +18,15 @@
<string name="beam_touch_to_view" msgid="7853129156831642630">"Zobrazte dotykem"</string>
<string name="beam_handover_not_supported" msgid="4083165921751489015">"Zařízení příjemce nepodporuje přenos velkých souborů prostřednictvím funkce Beam."</string>
<string name="beam_try_again" msgid="3364677301009783455">"Znovu přibližte zařízení"</string>
- <string name="connecting_peripheral" msgid="3957490448472434505">"Připojování"</string>
- <string name="connected_peripheral" msgid="5777997713940423952">"Připojeno"</string>
- <string name="connect_peripheral_failed" msgid="7173159351147270788">"Nelze připojit"</string>
- <string name="disconnecting_peripheral" msgid="5320432304947519207">"Odpojování"</string>
- <string name="disconnected_peripheral" msgid="2768150931245385916">"Odpojeno"</string>
- <string name="pairing_peripheral" msgid="5618129595426303236">"Párování"</string>
- <string name="pairing_peripheral_failed" msgid="976004756112808526">"Nelze spárovat"</string>
+ <string name="beam_busy" msgid="5253335587620612576">"Aplikace Beam je momentálně zaneprázdněná. Opakujte akci po dokončení předchozího přenosu."</string>
+ <string name="device" msgid="4459621591392478151">"zařízení"</string>
+ <string name="connecting_peripheral" msgid="1296182660525660935">"Připojování k zařízení <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="connected_peripheral" msgid="20748648543160091">"Připojeno k zařízení <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="connect_peripheral_failed" msgid="7925702596242839275">"Zařízení <xliff:g id="DEVICE_NAME">%1$s</xliff:g> se nepodařilo připojit"</string>
+ <string name="disconnecting_peripheral" msgid="1443699384809097200">"Odpojování od zařízení <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="disconnected_peripheral" msgid="4470578100296504366">"Odpojeno od zařízení <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="pairing_peripheral" msgid="6983626861540899365">"Párování se zařízením <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="pairing_peripheral_failed" msgid="6087643307743264679">"Zařízení <xliff:g id="DEVICE_NAME">%1$s</xliff:g> nelze spárovat"</string>
<string name="failed_to_enable_bt" msgid="7229153323594758077">"Bluetooth nelze povolit."</string>
<string name="confirm_pairing" msgid="4112568077038265363">"Opravdu chcete spárovat zařízení Bluetooth <xliff:g id="DEVICE_NAME">%1$s</xliff:g>?"</string>
<string name="pair_yes" msgid="3525614878559994448">"Ano"</string>
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index 42b34c09..5b811b78 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -18,13 +18,15 @@
<string name="beam_touch_to_view" msgid="7853129156831642630">"Tryk for at se"</string>
<string name="beam_handover_not_supported" msgid="4083165921751489015">"Modtagerens enhed understøtter ikke overførsel af store filer via Beam."</string>
<string name="beam_try_again" msgid="3364677301009783455">"Før enhederne sammen igen"</string>
- <string name="connecting_peripheral" msgid="3957490448472434505">"Opretter forbindelse"</string>
- <string name="connected_peripheral" msgid="5777997713940423952">"Tilsluttet"</string>
- <string name="connect_peripheral_failed" msgid="7173159351147270788">"Der kunne ikke oprettes forbindelse"</string>
- <string name="disconnecting_peripheral" msgid="5320432304947519207">"Afbryder forbindelse"</string>
- <string name="disconnected_peripheral" msgid="2768150931245385916">"Afbrudt"</string>
- <string name="pairing_peripheral" msgid="5618129595426303236">"Parrer"</string>
- <string name="pairing_peripheral_failed" msgid="976004756112808526">"Kunne ikke parres"</string>
+ <string name="beam_busy" msgid="5253335587620612576">"Beam er optaget i øjeblikket. Prøv igen, når den forrige overførsel er gennemført."</string>
+ <string name="device" msgid="4459621591392478151">"enhed"</string>
+ <string name="connecting_peripheral" msgid="1296182660525660935">"Opretter forbindelse til <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="connected_peripheral" msgid="20748648543160091">"Forbundet med <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="connect_peripheral_failed" msgid="7925702596242839275">"Kunne ikke oprette forbindelse til <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="disconnecting_peripheral" msgid="1443699384809097200">"Forbindelsen til <xliff:g id="DEVICE_NAME">%1$s</xliff:g> afbrydes"</string>
+ <string name="disconnected_peripheral" msgid="4470578100296504366">"Forbindelsen til <xliff:g id="DEVICE_NAME">%1$s</xliff:g> er afbrudt"</string>
+ <string name="pairing_peripheral" msgid="6983626861540899365">"Parrer med <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="pairing_peripheral_failed" msgid="6087643307743264679">"Parring med <xliff:g id="DEVICE_NAME">%1$s</xliff:g> mislykkedes"</string>
<string name="failed_to_enable_bt" msgid="7229153323594758077">"Bluetooth kunne ikke aktiveres"</string>
<string name="confirm_pairing" msgid="4112568077038265363">"Er du sikker på du vil parre Bluetooth-enheden <xliff:g id="DEVICE_NAME">%1$s</xliff:g>?"</string>
<string name="pair_yes" msgid="3525614878559994448">"Ja"</string>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index 15149a88..beb17b7b 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -18,13 +18,15 @@
<string name="beam_touch_to_view" msgid="7853129156831642630">"Zum Anzeigen berühren"</string>
<string name="beam_handover_not_supported" msgid="4083165921751489015">"Das Gerät des Empfängers unterstützt die Übertragung großer Dateien durch Beamen nicht."</string>
<string name="beam_try_again" msgid="3364677301009783455">"Geräte erneut nebeneinander platzieren"</string>
- <string name="connecting_peripheral" msgid="3957490448472434505">"Verbindung wird hergestellt."</string>
- <string name="connected_peripheral" msgid="5777997713940423952">"Verbunden"</string>
- <string name="connect_peripheral_failed" msgid="7173159351147270788">"Verbindung nicht möglich"</string>
- <string name="disconnecting_peripheral" msgid="5320432304947519207">"Verbindung wird getrennt."</string>
- <string name="disconnected_peripheral" msgid="2768150931245385916">"Getrennt"</string>
- <string name="pairing_peripheral" msgid="5618129595426303236">"Pairing erfolgt"</string>
- <string name="pairing_peripheral_failed" msgid="976004756112808526">"Pairing nicht möglich"</string>
+ <string name="beam_busy" msgid="5253335587620612576">"Android Beam ist momentan ausgelastet. Bitte versuchen Sie es erneut, wenn die vorherige Übertragung abgeschlossen ist."</string>
+ <string name="device" msgid="4459621591392478151">"Gerät"</string>
+ <string name="connecting_peripheral" msgid="1296182660525660935">"Verbindung zu <xliff:g id="DEVICE_NAME">%1$s</xliff:g> wird hergestellt"</string>
+ <string name="connected_peripheral" msgid="20748648543160091">"Mit <xliff:g id="DEVICE_NAME">%1$s</xliff:g> verbunden"</string>
+ <string name="connect_peripheral_failed" msgid="7925702596242839275">"Verbindung zu <xliff:g id="DEVICE_NAME">%1$s</xliff:g> nicht möglich"</string>
+ <string name="disconnecting_peripheral" msgid="1443699384809097200">"Verbindung zu <xliff:g id="DEVICE_NAME">%1$s</xliff:g> wird getrennt"</string>
+ <string name="disconnected_peripheral" msgid="4470578100296504366">"Verbindung zu <xliff:g id="DEVICE_NAME">%1$s</xliff:g> ist getrennt"</string>
+ <string name="pairing_peripheral" msgid="6983626861540899365">"Pairing mit <xliff:g id="DEVICE_NAME">%1$s</xliff:g> wird durchgeführt"</string>
+ <string name="pairing_peripheral_failed" msgid="6087643307743264679">"Pairing mit <xliff:g id="DEVICE_NAME">%1$s</xliff:g> nicht möglich"</string>
<string name="failed_to_enable_bt" msgid="7229153323594758077">"Bluetooth konnte nicht aktiviert werden."</string>
<string name="confirm_pairing" msgid="4112568077038265363">"Möchten Sie das Bluetooth-Gerät <xliff:g id="DEVICE_NAME">%1$s</xliff:g> wirklich koppeln?"</string>
<string name="pair_yes" msgid="3525614878559994448">"Ja"</string>
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index 8897f1d6..ce1fc72c 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -18,13 +18,15 @@
<string name="beam_touch_to_view" msgid="7853129156831642630">"Αγγίξτε για προβολή"</string>
<string name="beam_handover_not_supported" msgid="4083165921751489015">"Η συσκευή του παραλήπτη δεν υποστηρίζει τη μεταφορά μεγάλων αρχείων μέσω ζεύξης."</string>
<string name="beam_try_again" msgid="3364677301009783455">"Φέρτε ξανά τις συσκευές σας σε επαφή"</string>
- <string name="connecting_peripheral" msgid="3957490448472434505">"Σύνδεση"</string>
- <string name="connected_peripheral" msgid="5777997713940423952">"Συνδέθηκε"</string>
- <string name="connect_peripheral_failed" msgid="7173159351147270788">"Δεν ήταν δυνατή η σύνδεση"</string>
- <string name="disconnecting_peripheral" msgid="5320432304947519207">"Αποσύνδεση"</string>
- <string name="disconnected_peripheral" msgid="2768150931245385916">"Αποσυνδέθηκε"</string>
- <string name="pairing_peripheral" msgid="5618129595426303236">"Σύζευξη"</string>
- <string name="pairing_peripheral_failed" msgid="976004756112808526">"Δεν ήταν δυνατή η σύζευξη"</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>
+ <string name="connect_peripheral_failed" msgid="7925702596242839275">"Δεν ήταν δυνατή η σύνδεση σε <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="disconnecting_peripheral" msgid="1443699384809097200">"Αποσύνδεση <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="disconnected_peripheral" msgid="4470578100296504366">"Αποσυνδέθηκε <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <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="pair_yes" msgid="3525614878559994448">"Ναι"</string>
diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml
index 451b6abe..307e92c7 100644
--- a/res/values-en-rGB/strings.xml
+++ b/res/values-en-rGB/strings.xml
@@ -18,13 +18,15 @@
<string name="beam_touch_to_view" msgid="7853129156831642630">"Touch to view"</string>
<string name="beam_handover_not_supported" msgid="4083165921751489015">"The receiver\'s device doesn\'t support large file transfer via beam."</string>
<string name="beam_try_again" msgid="3364677301009783455">"Bring devices together again"</string>
- <string name="connecting_peripheral" msgid="3957490448472434505">"Connecting"</string>
- <string name="connected_peripheral" msgid="5777997713940423952">"Connected"</string>
- <string name="connect_peripheral_failed" msgid="7173159351147270788">"Could not connect"</string>
- <string name="disconnecting_peripheral" msgid="5320432304947519207">"Disconnecting"</string>
- <string name="disconnected_peripheral" msgid="2768150931245385916">"Disconnected"</string>
- <string name="pairing_peripheral" msgid="5618129595426303236">"Pairing"</string>
- <string name="pairing_peripheral_failed" msgid="976004756112808526">"Could not pair"</string>
+ <string name="beam_busy" msgid="5253335587620612576">"Beam is currently busy. Try again when the previous transfer completes."</string>
+ <string name="device" msgid="4459621591392478151">"device"</string>
+ <string name="connecting_peripheral" msgid="1296182660525660935">"Connecting <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="connected_peripheral" msgid="20748648543160091">"Connected <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="connect_peripheral_failed" msgid="7925702596242839275">"Could not connect <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="disconnecting_peripheral" msgid="1443699384809097200">"Disconnecting <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="disconnected_peripheral" msgid="4470578100296504366">"Disconnected <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="pairing_peripheral" msgid="6983626861540899365">"Pairing <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="pairing_peripheral_failed" msgid="6087643307743264679">"Could not pair <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
<string name="failed_to_enable_bt" msgid="7229153323594758077">"Could not enable Bluetooth"</string>
<string name="confirm_pairing" msgid="4112568077038265363">"Are you sure you want to pair the Bluetooth device <xliff:g id="DEVICE_NAME">%1$s</xliff:g>?"</string>
<string name="pair_yes" msgid="3525614878559994448">"Yes"</string>
diff --git a/res/values-en-rIN/strings.xml b/res/values-en-rIN/strings.xml
index 451b6abe..307e92c7 100644
--- a/res/values-en-rIN/strings.xml
+++ b/res/values-en-rIN/strings.xml
@@ -18,13 +18,15 @@
<string name="beam_touch_to_view" msgid="7853129156831642630">"Touch to view"</string>
<string name="beam_handover_not_supported" msgid="4083165921751489015">"The receiver\'s device doesn\'t support large file transfer via beam."</string>
<string name="beam_try_again" msgid="3364677301009783455">"Bring devices together again"</string>
- <string name="connecting_peripheral" msgid="3957490448472434505">"Connecting"</string>
- <string name="connected_peripheral" msgid="5777997713940423952">"Connected"</string>
- <string name="connect_peripheral_failed" msgid="7173159351147270788">"Could not connect"</string>
- <string name="disconnecting_peripheral" msgid="5320432304947519207">"Disconnecting"</string>
- <string name="disconnected_peripheral" msgid="2768150931245385916">"Disconnected"</string>
- <string name="pairing_peripheral" msgid="5618129595426303236">"Pairing"</string>
- <string name="pairing_peripheral_failed" msgid="976004756112808526">"Could not pair"</string>
+ <string name="beam_busy" msgid="5253335587620612576">"Beam is currently busy. Try again when the previous transfer completes."</string>
+ <string name="device" msgid="4459621591392478151">"device"</string>
+ <string name="connecting_peripheral" msgid="1296182660525660935">"Connecting <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="connected_peripheral" msgid="20748648543160091">"Connected <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="connect_peripheral_failed" msgid="7925702596242839275">"Could not connect <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="disconnecting_peripheral" msgid="1443699384809097200">"Disconnecting <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="disconnected_peripheral" msgid="4470578100296504366">"Disconnected <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="pairing_peripheral" msgid="6983626861540899365">"Pairing <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="pairing_peripheral_failed" msgid="6087643307743264679">"Could not pair <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
<string name="failed_to_enable_bt" msgid="7229153323594758077">"Could not enable Bluetooth"</string>
<string name="confirm_pairing" msgid="4112568077038265363">"Are you sure you want to pair the Bluetooth device <xliff:g id="DEVICE_NAME">%1$s</xliff:g>?"</string>
<string name="pair_yes" msgid="3525614878559994448">"Yes"</string>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index 86ea7469..aa564b0d 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -18,13 +18,15 @@
<string name="beam_touch_to_view" msgid="7853129156831642630">"Toca para ver"</string>
<string name="beam_handover_not_supported" msgid="4083165921751489015">"El dispositivo del receptor no admite la transferencia de archivos de gran tamaño."</string>
<string name="beam_try_again" msgid="3364677301009783455">"Volver a unir los dispositivos"</string>
- <string name="connecting_peripheral" msgid="3957490448472434505">"Conectando"</string>
- <string name="connected_peripheral" msgid="5777997713940423952">"Conectado"</string>
- <string name="connect_peripheral_failed" msgid="7173159351147270788">"No se pudo establecer conexión."</string>
- <string name="disconnecting_peripheral" msgid="5320432304947519207">"Desconectando…"</string>
- <string name="disconnected_peripheral" msgid="2768150931245385916">"Desconectado"</string>
- <string name="pairing_peripheral" msgid="5618129595426303236">"Sincronizando…"</string>
- <string name="pairing_peripheral_failed" msgid="976004756112808526">"No se pudo sincronizar."</string>
+ <string name="beam_busy" msgid="5253335587620612576">"Beam está ocupado en este momento. Vuelve a intentarlo cuando finalice la transferencia anterior."</string>
+ <string name="device" msgid="4459621591392478151">"dispositivo"</string>
+ <string name="connecting_peripheral" msgid="1296182660525660935">"Conectando <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> con conexión"</string>
+ <string name="connect_peripheral_failed" msgid="7925702596242839275">"Error al conectar <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="disconnecting_peripheral" msgid="1443699384809097200">"Desconectando <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="disconnected_peripheral" msgid="4470578100296504366">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> sin conexión"</string>
+ <string name="pairing_peripheral" msgid="6983626861540899365">"Sincronizando <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="pairing_peripheral_failed" msgid="6087643307743264679">"Error al sincronizar <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
<string name="failed_to_enable_bt" msgid="7229153323594758077">"Error al activar Bluetooth"</string>
<string name="confirm_pairing" msgid="4112568077038265363">"¿Realmente deseas sincronizar el dispositivo Bluetooth <xliff:g id="DEVICE_NAME">%1$s</xliff:g>?"</string>
<string name="pair_yes" msgid="3525614878559994448">"Sí"</string>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index 8ec045cf..b05c6cbf 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -18,13 +18,15 @@
<string name="beam_touch_to_view" msgid="7853129156831642630">"Tocar para ver"</string>
<string name="beam_handover_not_supported" msgid="4083165921751489015">"El dispositivo del receptor no admite la transferencia de archivos de gran tamaño."</string>
<string name="beam_try_again" msgid="3364677301009783455">"Vuelve a juntar los dispositivos"</string>
- <string name="connecting_peripheral" msgid="3957490448472434505">"Conectando"</string>
- <string name="connected_peripheral" msgid="5777997713940423952">"Conectado"</string>
- <string name="connect_peripheral_failed" msgid="7173159351147270788">"Error al establecer conexión"</string>
- <string name="disconnecting_peripheral" msgid="5320432304947519207">"Desconectando"</string>
- <string name="disconnected_peripheral" msgid="2768150931245385916">"Desconectado"</string>
- <string name="pairing_peripheral" msgid="5618129595426303236">"Vinculando"</string>
- <string name="pairing_peripheral_failed" msgid="976004756112808526">"Error al vincular"</string>
+ <string name="beam_busy" msgid="5253335587620612576">"Android Beam está ocupado en este momento. Vuelve a intentarlo cuando se complete la transferencia anterior."</string>
+ <string name="device" msgid="4459621591392478151">"dispositivo"</string>
+ <string name="connecting_peripheral" msgid="1296182660525660935">"Conectando <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> conectado"</string>
+ <string name="connect_peripheral_failed" msgid="7925702596242839275">"No se ha podido conectar <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="disconnecting_peripheral" msgid="1443699384809097200">"Desconectando <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="disconnected_peripheral" msgid="4470578100296504366">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> desconectado"</string>
+ <string name="pairing_peripheral" msgid="6983626861540899365">"Vinculando <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="pairing_peripheral_failed" msgid="6087643307743264679">"No se ha podido vincular <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
<string name="failed_to_enable_bt" msgid="7229153323594758077">"Error al habilitar Bluetooth"</string>
<string name="confirm_pairing" msgid="4112568077038265363">"¿Seguro que quieres vincular el dispositivo Bluetooth <xliff:g id="DEVICE_NAME">%1$s</xliff:g>?"</string>
<string name="pair_yes" msgid="3525614878559994448">"Sí"</string>
diff --git a/res/values-et-rEE/strings.xml b/res/values-et-rEE/strings.xml
index 3431f2ef..f9b8ac89 100644
--- a/res/values-et-rEE/strings.xml
+++ b/res/values-et-rEE/strings.xml
@@ -18,13 +18,15 @@
<string name="beam_touch_to_view" msgid="7853129156831642630">"Puudutage vaatamiseks"</string>
<string name="beam_handover_not_supported" msgid="4083165921751489015">"Vastuvõtja seade ei toeta suurte failide edastamist kiire kaudu."</string>
<string name="beam_try_again" msgid="3364677301009783455">"Ühendage seadmed uuesti"</string>
- <string name="connecting_peripheral" msgid="3957490448472434505">"Ühendamine"</string>
- <string name="connected_peripheral" msgid="5777997713940423952">"Ühendatud"</string>
- <string name="connect_peripheral_failed" msgid="7173159351147270788">"Ühendust ei õnnestunud luua"</string>
- <string name="disconnecting_peripheral" msgid="5320432304947519207">"Ühenduse katkestamine"</string>
- <string name="disconnected_peripheral" msgid="2768150931245385916">"Ühendus on katkestatud"</string>
- <string name="pairing_peripheral" msgid="5618129595426303236">"Sidumine"</string>
- <string name="pairing_peripheral_failed" msgid="976004756112808526">"Ei saanud siduda"</string>
+ <string name="beam_busy" msgid="5253335587620612576">"Kiirega edastamise funktsioon on praegu hõivatud. Proovige uuesti, kui ülekandmine on lõppenud."</string>
+ <string name="device" msgid="4459621591392478151">"seade"</string>
+ <string name="connecting_peripheral" msgid="1296182660525660935">"Ühendamine seadmega <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="connected_peripheral" msgid="20748648543160091">"Ühendatud seadmega <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="connect_peripheral_failed" msgid="7925702596242839275">"Ei õnnestunud ühendada seadmega <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="disconnecting_peripheral" msgid="1443699384809097200">"Ühenduse katkestamine seadmega <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="disconnected_peripheral" msgid="4470578100296504366">"Ühendus seadmega <xliff:g id="DEVICE_NAME">%1$s</xliff:g> on katkestatud"</string>
+ <string name="pairing_peripheral" msgid="6983626861540899365">"Sidumine seadmega <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="pairing_peripheral_failed" msgid="6087643307743264679">"Ei saa siduda seadmega <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
<string name="failed_to_enable_bt" msgid="7229153323594758077">"Bluetoothi ei saanud lubada"</string>
<string name="confirm_pairing" msgid="4112568077038265363">"Kas soovite kindlasti ühildada Bluetoothi seadme <xliff:g id="DEVICE_NAME">%1$s</xliff:g>?"</string>
<string name="pair_yes" msgid="3525614878559994448">"Jah"</string>
diff --git a/res/values-eu-rES/strings.xml b/res/values-eu-rES/strings.xml
index 5a2b40ff..7c3243ad 100644
--- a/res/values-eu-rES/strings.xml
+++ b/res/values-eu-rES/strings.xml
@@ -18,13 +18,15 @@
<string name="beam_touch_to_view" msgid="7853129156831642630">"Ukitu ikusteko"</string>
<string name="beam_handover_not_supported" msgid="4083165921751489015">"Hartzailearen gailuak ez du onartzen fitxategi handiak NFC bidez transferitzea."</string>
<string name="beam_try_again" msgid="3364677301009783455">"Elkartu gailuak berriro"</string>
- <string name="connecting_peripheral" msgid="3957490448472434505">"Konektatzen"</string>
- <string name="connected_peripheral" msgid="5777997713940423952">"Konektatuta"</string>
- <string name="connect_peripheral_failed" msgid="7173159351147270788">"Ezin izan da konektatu"</string>
- <string name="disconnecting_peripheral" msgid="5320432304947519207">"Deskonektatzen"</string>
- <string name="disconnected_peripheral" msgid="2768150931245385916">"Deskonektatuta"</string>
- <string name="pairing_peripheral" msgid="5618129595426303236">"Parekatzen"</string>
- <string name="pairing_peripheral_failed" msgid="976004756112808526">"Ezin izan da parekatu"</string>
+ <string name="beam_busy" msgid="5253335587620612576">"Beam lanpetuta dago. Saiatu berriro abian den transferentzia amaitutakoan."</string>
+ <string name="device" msgid="4459621591392478151">"gailua"</string>
+ <string name="connecting_peripheral" msgid="1296182660525660935">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> konektatzen"</string>
+ <string name="connected_peripheral" msgid="20748648543160091">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> konektatu da"</string>
+ <string name="connect_peripheral_failed" msgid="7925702596242839275">"Ezin izan da <xliff:g id="DEVICE_NAME">%1$s</xliff:g> konektatu"</string>
+ <string name="disconnecting_peripheral" msgid="1443699384809097200">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> deskonektatzen"</string>
+ <string name="disconnected_peripheral" msgid="4470578100296504366">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> deskonektatu da"</string>
+ <string name="pairing_peripheral" msgid="6983626861540899365">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> gailuarekin parekatzen"</string>
+ <string name="pairing_peripheral_failed" msgid="6087643307743264679">"Ezin izan da <xliff:g id="DEVICE_NAME">%1$s</xliff:g> gailuarekin parekatu"</string>
<string name="failed_to_enable_bt" msgid="7229153323594758077">"Ezin izan da Bluetootha gaitu"</string>
<string name="confirm_pairing" msgid="4112568077038265363">"Ziur <xliff:g id="DEVICE_NAME">%1$s</xliff:g> Bluetooth gailuarekin parekatu nahi duzula?"</string>
<string name="pair_yes" msgid="3525614878559994448">"Bai"</string>
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml
index c5a6df56..a3fe0e77 100644
--- a/res/values-fa/strings.xml
+++ b/res/values-fa/strings.xml
@@ -18,13 +18,15 @@
<string name="beam_touch_to_view" msgid="7853129156831642630">"برای مشاهده لمس کنید"</string>
<string name="beam_handover_not_supported" msgid="4083165921751489015">"دستگاه گیرنده انتقال فایل‌های بزرگ از طریق پرتو را پشتیبانی نمی‌کند."</string>
<string name="beam_try_again" msgid="3364677301009783455">"مرتبط‌کردن دوباره دستگاه‌ها"</string>
- <string name="connecting_peripheral" msgid="3957490448472434505">"در حال اتصال"</string>
- <string name="connected_peripheral" msgid="5777997713940423952">"متصل شد"</string>
- <string name="connect_peripheral_failed" msgid="7173159351147270788">"متصل نشد"</string>
- <string name="disconnecting_peripheral" msgid="5320432304947519207">"در حال قطع ارتباط"</string>
- <string name="disconnected_peripheral" msgid="2768150931245385916">"اتصال قطع شد"</string>
- <string name="pairing_peripheral" msgid="5618129595426303236">"در حال مرتبط کردن"</string>
- <string name="pairing_peripheral_failed" msgid="976004756112808526">"مرتبط نشد"</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>
+ <string name="connect_peripheral_failed" msgid="7925702596242839275">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> متصل نشد"</string>
+ <string name="disconnecting_peripheral" msgid="1443699384809097200">"در حال قطع ارتباط <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="disconnected_peripheral" msgid="4470578100296504366">"ارتباط <xliff:g id="DEVICE_NAME">%1$s</xliff:g> قطع شد"</string>
+ <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="pair_yes" msgid="3525614878559994448">"بله"</string>
diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml
index 0672cefd..609c19d0 100644
--- a/res/values-fi/strings.xml
+++ b/res/values-fi/strings.xml
@@ -18,13 +18,15 @@
<string name="beam_touch_to_view" msgid="7853129156831642630">"Kosketa ja näytä"</string>
<string name="beam_handover_not_supported" msgid="4083165921751489015">"Vastaanottajan laite ei tue suurten tiedostojen siirtoa sisällön jakamisen kautta."</string>
<string name="beam_try_again" msgid="3364677301009783455">"Yhdistä laitteet uudelleen"</string>
- <string name="connecting_peripheral" msgid="3957490448472434505">"Muodostetaan yhteyttä"</string>
- <string name="connected_peripheral" msgid="5777997713940423952">"Yhdistetty"</string>
- <string name="connect_peripheral_failed" msgid="7173159351147270788">"Yhteyttä ei voitu muodostaa"</string>
- <string name="disconnecting_peripheral" msgid="5320432304947519207">"Katkaistaan yhteyttä"</string>
- <string name="disconnected_peripheral" msgid="2768150931245385916">"Yhteys katkaistu"</string>
- <string name="pairing_peripheral" msgid="5618129595426303236">"Laiteparia muodostetaan"</string>
- <string name="pairing_peripheral_failed" msgid="976004756112808526">"Laiteparia ei voitu muodostaa"</string>
+ <string name="beam_busy" msgid="5253335587620612576">"Beam on tällä hetkellä varattu. Yritä uudelleen, kun edellinen siirto on valmis."</string>
+ <string name="device" msgid="4459621591392478151">"laite"</string>
+ <string name="connecting_peripheral" msgid="1296182660525660935">"Yhdistetään <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> on yhdistetty"</string>
+ <string name="connect_peripheral_failed" msgid="7925702596242839275">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> ei voinut muodostaa yhteyttä"</string>
+ <string name="disconnecting_peripheral" msgid="1443699384809097200">"Katkaistaan yhteys: <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="disconnected_peripheral" msgid="4470578100296504366">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> ei ole enää yhteydessä"</string>
+ <string name="pairing_peripheral" msgid="6983626861540899365">"Muodostetaan laiteparia: <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="pairing_peripheral_failed" msgid="6087643307743264679">"Laiteparia ei voitu muodostaa: <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
<string name="failed_to_enable_bt" msgid="7229153323594758077">"Bluetooth-yhteyttä ei voi ottaa käyttöön"</string>
<string name="confirm_pairing" msgid="4112568077038265363">"Oletko varma, että haluat muodostaa laiteparin Bluetooth-laitteeseen <xliff:g id="DEVICE_NAME">%1$s</xliff:g>?"</string>
<string name="pair_yes" msgid="3525614878559994448">"Kyllä"</string>
diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml
index 0e0901a4..6d29ed9d 100644
--- a/res/values-fr-rCA/strings.xml
+++ b/res/values-fr-rCA/strings.xml
@@ -18,13 +18,15 @@
<string name="beam_touch_to_view" msgid="7853129156831642630">"Appuyer pour afficher"</string>
<string name="beam_handover_not_supported" msgid="4083165921751489015">"Le récepteur n\'est pas compatible avec le transfert de fichiers volumineux via le partage."</string>
<string name="beam_try_again" msgid="3364677301009783455">"Mettre de nouveau les appareils côte à côte"</string>
- <string name="connecting_peripheral" msgid="3957490448472434505">"Connexion en cours…"</string>
- <string name="connected_peripheral" msgid="5777997713940423952">"Connecté"</string>
- <string name="connect_peripheral_failed" msgid="7173159351147270788">"Impossible d’établir la connexion"</string>
- <string name="disconnecting_peripheral" msgid="5320432304947519207">"Dissociation en cours…"</string>
- <string name="disconnected_peripheral" msgid="2768150931245385916">"Déconnecté"</string>
- <string name="pairing_peripheral" msgid="5618129595426303236">"Association en cours"</string>
- <string name="pairing_peripheral_failed" msgid="976004756112808526">"Impossible d\'associer les appareils"</string>
+ <string name="beam_busy" msgid="5253335587620612576">"Beam est actuellement occupé. Essayez de nouveau lorsque le transfert précédent sera terminé."</string>
+ <string name="device" msgid="4459621591392478151">"appareil"</string>
+ <string name="connecting_peripheral" msgid="1296182660525660935">"Connexion de « <xliff:g id="DEVICE_NAME">%1$s</xliff:g> » en cours"</string>
+ <string name="connected_peripheral" msgid="20748648543160091">"Connecté à « <xliff:g id="DEVICE_NAME">%1$s</xliff:g> »"</string>
+ <string name="connect_peripheral_failed" msgid="7925702596242839275">"Impossible de connecter « <xliff:g id="DEVICE_NAME">%1$s</xliff:g> »"</string>
+ <string name="disconnecting_peripheral" msgid="1443699384809097200">"Déconnexion de « <xliff:g id="DEVICE_NAME">%1$s</xliff:g> » en cours"</string>
+ <string name="disconnected_peripheral" msgid="4470578100296504366">"Déconnecté de « <xliff:g id="DEVICE_NAME">%1$s</xliff:g> »"</string>
+ <string name="pairing_peripheral" msgid="6983626861540899365">"Association de « <xliff:g id="DEVICE_NAME">%1$s</xliff:g> » en cours"</string>
+ <string name="pairing_peripheral_failed" msgid="6087643307743264679">"Impossible d\'associer « <xliff:g id="DEVICE_NAME">%1$s</xliff:g> »"</string>
<string name="failed_to_enable_bt" msgid="7229153323594758077">"Impossible d\'activer le Bluetooth."</string>
<string name="confirm_pairing" msgid="4112568077038265363">"Voulez-vous vraiment associer l\'appareil Bluetooth <xliff:g id="DEVICE_NAME">%1$s</xliff:g>?"</string>
<string name="pair_yes" msgid="3525614878559994448">"Oui"</string>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index 4a10b039..5f2de3d6 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -18,13 +18,15 @@
<string name="beam_touch_to_view" msgid="7853129156831642630">"Appuyer pour afficher"</string>
<string name="beam_handover_not_supported" msgid="4083165921751489015">"Le récepteur n\'est pas compatible avec le transfert de fichiers volumineux via le partage."</string>
<string name="beam_try_again" msgid="3364677301009783455">"Mettre de nouveau les appareils côte à côte"</string>
- <string name="connecting_peripheral" msgid="3957490448472434505">"Connexion en cours…"</string>
- <string name="connected_peripheral" msgid="5777997713940423952">"Connecté"</string>
- <string name="connect_peripheral_failed" msgid="7173159351147270788">"Impossible d’établir la connexion."</string>
- <string name="disconnecting_peripheral" msgid="5320432304947519207">"Déconnexion en cours…"</string>
- <string name="disconnected_peripheral" msgid="2768150931245385916">"Déconnecté"</string>
- <string name="pairing_peripheral" msgid="5618129595426303236">"Association en cours…"</string>
- <string name="pairing_peripheral_failed" msgid="976004756112808526">"Impossible d\'effectuer l\'association."</string>
+ <string name="beam_busy" msgid="5253335587620612576">"Android Beam est actuellement occupé. Veuillez réessayer une fois le transfert précédent terminé."</string>
+ <string name="device" msgid="4459621591392478151">"appareil"</string>
+ <string name="connecting_peripheral" msgid="1296182660525660935">"Connexion de l\'appareil <xliff:g id="DEVICE_NAME">%1$s</xliff:g> en cours…"</string>
+ <string name="connected_peripheral" msgid="20748648543160091">"L\'appareil <xliff:g id="DEVICE_NAME">%1$s</xliff:g> a bien été connecté."</string>
+ <string name="connect_peripheral_failed" msgid="7925702596242839275">"Impossible de connecter <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
+ <string name="disconnecting_peripheral" msgid="1443699384809097200">"Déconnexion de l\'appareil <xliff:g id="DEVICE_NAME">%1$s</xliff:g> en cours…"</string>
+ <string name="disconnected_peripheral" msgid="4470578100296504366">"L\'appareil <xliff:g id="DEVICE_NAME">%1$s</xliff:g> a bien été déconnecté."</string>
+ <string name="pairing_peripheral" msgid="6983626861540899365">"Association de l\'appareil <xliff:g id="DEVICE_NAME">%1$s</xliff:g> en cours…"</string>
+ <string name="pairing_peripheral_failed" msgid="6087643307743264679">"Impossible d\'associer l\'appareil <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
<string name="failed_to_enable_bt" msgid="7229153323594758077">"Impossible d\'activer le Bluetooth."</string>
<string name="confirm_pairing" msgid="4112568077038265363">"Voulez-vous vraiment associer l\'appareil Bluetooth <xliff:g id="DEVICE_NAME">%1$s</xliff:g> ?"</string>
<string name="pair_yes" msgid="3525614878559994448">"Oui"</string>
diff --git a/res/values-gl-rES/strings.xml b/res/values-gl-rES/strings.xml
index b42db1f1..845ee425 100644
--- a/res/values-gl-rES/strings.xml
+++ b/res/values-gl-rES/strings.xml
@@ -18,13 +18,15 @@
<string name="beam_touch_to_view" msgid="7853129156831642630">"Toca para ver"</string>
<string name="beam_handover_not_supported" msgid="4083165921751489015">"O dispositivo do destinatario non é compatible coa transferencia de ficheiros grandes."</string>
<string name="beam_try_again" msgid="3364677301009783455">"Achega os dispositivos de novo"</string>
- <string name="connecting_peripheral" msgid="3957490448472434505">"Conectando"</string>
- <string name="connected_peripheral" msgid="5777997713940423952">"Conectado"</string>
- <string name="connect_peripheral_failed" msgid="7173159351147270788">"Non se puido conectar"</string>
- <string name="disconnecting_peripheral" msgid="5320432304947519207">"Desconectando"</string>
- <string name="disconnected_peripheral" msgid="2768150931245385916">"Desconectado"</string>
- <string name="pairing_peripheral" msgid="5618129595426303236">"Sincronizando"</string>
- <string name="pairing_peripheral_failed" msgid="976004756112808526">"Non se puido sincronizar"</string>
+ <string name="beam_busy" msgid="5253335587620612576">"Beam está ocupado neste momento. Téntao de novo cando se complete a transferencia anterior."</string>
+ <string name="device" msgid="4459621591392478151">"dispositivo"</string>
+ <string name="connecting_peripheral" msgid="1296182660525660935">"Conectando <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> conectado"</string>
+ <string name="connect_peripheral_failed" msgid="7925702596242839275">"Non se puido conectar <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="disconnecting_peripheral" msgid="1443699384809097200">"Desconectando <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="disconnected_peripheral" msgid="4470578100296504366">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> desconectado"</string>
+ <string name="pairing_peripheral" msgid="6983626861540899365">"Sincronizando <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="pairing_peripheral_failed" msgid="6087643307743264679">"Non se puido sincronizar <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
<string name="failed_to_enable_bt" msgid="7229153323594758077">"Non se puido activar o Bluetooth"</string>
<string name="confirm_pairing" msgid="4112568077038265363">"Seguro que queres sincronizar o dispositivo Bluetooth <xliff:g id="DEVICE_NAME">%1$s</xliff:g>?"</string>
<string name="pair_yes" msgid="3525614878559994448">"Si"</string>
diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml
index f7f57605..b744006f 100644
--- a/res/values-hi/strings.xml
+++ b/res/values-hi/strings.xml
@@ -18,13 +18,15 @@
<string name="beam_touch_to_view" msgid="7853129156831642630">"देखने के लिए स्‍पर्श करें"</string>
<string name="beam_handover_not_supported" msgid="4083165921751489015">"प्राप्तकर्ता का डिवाइस, बीम द्वारा बड़ी फ़ाइल के स्थानांतरण का समर्थन नहीं करता."</string>
<string name="beam_try_again" msgid="3364677301009783455">"डिवाइस को पुन: एक साथ लाएं"</string>
- <string name="connecting_peripheral" msgid="3957490448472434505">"कनेक्ट हो रहा है"</string>
- <string name="connected_peripheral" msgid="5777997713940423952">"कनेक्ट है"</string>
- <string name="connect_peripheral_failed" msgid="7173159351147270788">"कनेक्‍ट नहीं किया जा सका"</string>
- <string name="disconnecting_peripheral" msgid="5320432304947519207">"डिस्कनेक्ट हो रहा है"</string>
- <string name="disconnected_peripheral" msgid="2768150931245385916">"डिस्कनेक्ट हो गया"</string>
- <string name="pairing_peripheral" msgid="5618129595426303236">"युग्मन"</string>
- <string name="pairing_peripheral_failed" msgid="976004756112808526">"युग्‍मित नहीं किया जा सका"</string>
+ <string name="beam_busy" msgid="5253335587620612576">"Beam वर्तमान में व्‍यस्‍त है. पिछला ट्रांसफर पूर्ण हो जाने पर पुन: प्रयास करें."</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>
+ <string name="disconnecting_peripheral" msgid="1443699384809097200">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> को डिस्‍कनेक्‍ट किया जा रहा है"</string>
+ <string name="disconnected_peripheral" msgid="4470578100296504366">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> को डिस्‍कनेक्‍ट किया गया"</string>
+ <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="pair_yes" msgid="3525614878559994448">"हां"</string>
diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml
index 9f0ed854..863d4b1a 100644
--- a/res/values-hr/strings.xml
+++ b/res/values-hr/strings.xml
@@ -18,13 +18,15 @@
<string name="beam_touch_to_view" msgid="7853129156831642630">"Dodirnite za prikaz"</string>
<string name="beam_handover_not_supported" msgid="4083165921751489015">"Uređaj prijamnika ne podržava prijenos velikih datoteka emitiranjem."</string>
<string name="beam_try_again" msgid="3364677301009783455">"Opet povežite uređaje"</string>
- <string name="connecting_peripheral" msgid="3957490448472434505">"Povezivanje"</string>
- <string name="connected_peripheral" msgid="5777997713940423952">"Povezano"</string>
- <string name="connect_peripheral_failed" msgid="7173159351147270788">"Spajanje nije moguće"</string>
- <string name="disconnecting_peripheral" msgid="5320432304947519207">"Prekid veze"</string>
- <string name="disconnected_peripheral" msgid="2768150931245385916">"Nije povezano"</string>
- <string name="pairing_peripheral" msgid="5618129595426303236">"Uparivanje"</string>
- <string name="pairing_peripheral_failed" msgid="976004756112808526">"Uparivanje nije moguće"</string>
+ <string name="beam_busy" msgid="5253335587620612576">"Beam je trenutačno zauzet. Pokušajte ponovo po dovršetku prethodnog prijenosa."</string>
+ <string name="device" msgid="4459621591392478151">"uređaj"</string>
+ <string name="connecting_peripheral" msgid="1296182660525660935">"Povezivanje s uređajem <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="connected_peripheral" msgid="20748648543160091">"Uređaj <xliff:g id="DEVICE_NAME">%1$s</xliff:g> povezan je"</string>
+ <string name="connect_peripheral_failed" msgid="7925702596242839275">"Uređaj <xliff:g id="DEVICE_NAME">%1$s</xliff:g> nije povezan"</string>
+ <string name="disconnecting_peripheral" msgid="1443699384809097200">"Prekidanje veze s uređajem <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="disconnected_peripheral" msgid="4470578100296504366">"Prekinuta je veza s uređajem <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="pairing_peripheral" msgid="6983626861540899365">"Uparivanje uređaja <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="pairing_peripheral_failed" msgid="6087643307743264679">"Uređaj <xliff:g id="DEVICE_NAME">%1$s</xliff:g> nije uparen"</string>
<string name="failed_to_enable_bt" msgid="7229153323594758077">"Omogućavanje Bluetootha nije bilo moguće"</string>
<string name="confirm_pairing" msgid="4112568077038265363">"Jeste li sigurni da želite upariti Bluetooth uređaj <xliff:g id="DEVICE_NAME">%1$s</xliff:g>?"</string>
<string name="pair_yes" msgid="3525614878559994448">"Da"</string>
diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml
index 53ae196e..28b02f52 100644
--- a/res/values-hu/strings.xml
+++ b/res/values-hu/strings.xml
@@ -18,13 +18,15 @@
<string name="beam_touch_to_view" msgid="7853129156831642630">"A megtekintéshez érintse meg."</string>
<string name="beam_handover_not_supported" msgid="4083165921751489015">"A fogadó eszköz nem támogatja a nagyméretű fájlok átvitelét adatsugárzás útján."</string>
<string name="beam_try_again" msgid="3364677301009783455">"Eszközök újbóli összekapcsolása"</string>
- <string name="connecting_peripheral" msgid="3957490448472434505">"Kapcsolódás"</string>
- <string name="connected_peripheral" msgid="5777997713940423952">"Csatlakoztatva"</string>
- <string name="connect_peripheral_failed" msgid="7173159351147270788">"A kapcsolódás sikertelen"</string>
- <string name="disconnecting_peripheral" msgid="5320432304947519207">"Leválasztás"</string>
- <string name="disconnected_peripheral" msgid="2768150931245385916">"Leválasztva"</string>
- <string name="pairing_peripheral" msgid="5618129595426303236">"Párosítás"</string>
- <string name="pairing_peripheral_failed" msgid="976004756112808526">"Nem sikerült a párosítás"</string>
+ <string name="beam_busy" msgid="5253335587620612576">"A Beam jelenleg elfoglalt. Próbálja újra, ha az előző átvitel már befejeződött."</string>
+ <string name="device" msgid="4459621591392478151">"eszköz"</string>
+ <string name="connecting_peripheral" msgid="1296182660525660935">"Csatlakozás a következőhöz: <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="connected_peripheral" msgid="20748648543160091">"Csatlakozva a következőhöz: <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="connect_peripheral_failed" msgid="7925702596242839275">"Nem sikerült csatlakozni ehhez: <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="disconnecting_peripheral" msgid="1443699384809097200">"Leválasztás a következőről: <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="disconnected_peripheral" msgid="4470578100296504366">"Leválasztva a következőről: <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="pairing_peripheral" msgid="6983626861540899365">"Párosítás a következővel: <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="pairing_peripheral_failed" msgid="6087643307743264679">"Nem sikerült a párosítás ezzel: <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
<string name="failed_to_enable_bt" msgid="7229153323594758077">"Nem lehet aktiválni a Bluetootht"</string>
<string name="confirm_pairing" msgid="4112568077038265363">"Biztosan párosítani szeretné a(z) <xliff:g id="DEVICE_NAME">%1$s</xliff:g> Bluetooth-eszközt?"</string>
<string name="pair_yes" msgid="3525614878559994448">"Igen"</string>
diff --git a/res/values-hy-rAM/strings.xml b/res/values-hy-rAM/strings.xml
index 3b010393..2b32b458 100644
--- a/res/values-hy-rAM/strings.xml
+++ b/res/values-hy-rAM/strings.xml
@@ -18,13 +18,15 @@
<string name="beam_touch_to_view" msgid="7853129156831642630">"Հպեք՝ դիտելու համար"</string>
<string name="beam_handover_not_supported" msgid="4083165921751489015">"Ընդունողի սարքը չի աջակցում ռադիոհաղորդմամբ մեծ ֆայլերի փոխանցումը:"</string>
<string name="beam_try_again" msgid="3364677301009783455">"Սարքերը կրկին միմյանց հետ կցել"</string>
- <string name="connecting_peripheral" msgid="3957490448472434505">"Միացում"</string>
- <string name="connected_peripheral" msgid="5777997713940423952">"Կապակցված է"</string>
- <string name="connect_peripheral_failed" msgid="7173159351147270788">"Չհաջողվեց միանալ"</string>
- <string name="disconnecting_peripheral" msgid="5320432304947519207">"Անջատվում է"</string>
- <string name="disconnected_peripheral" msgid="2768150931245385916">"Անջատված է"</string>
- <string name="pairing_peripheral" msgid="5618129595426303236">"Զուգավորում"</string>
- <string name="pairing_peripheral_failed" msgid="976004756112808526">"Չհաջողվեց զուգավորել"</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>
+ <string name="connect_peripheral_failed" msgid="7925702596242839275">"Չհաջողվեց կապակցել <xliff:g id="DEVICE_NAME">%1$s</xliff:g> սարքը"</string>
+ <string name="disconnecting_peripheral" msgid="1443699384809097200">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>-ի կապախզում"</string>
+ <string name="disconnected_peripheral" msgid="4470578100296504366">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> սարքը կապախզված է"</string>
+ <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">"Վստա՞հ եք, որ ցանկանում եք զուգավորել <xliff:g id="DEVICE_NAME">%1$s</xliff:g> Bluetooth սարքը:"</string>
<string name="pair_yes" msgid="3525614878559994448">"Այո"</string>
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
index b2ff88ae..f1cf98c2 100644
--- a/res/values-in/strings.xml
+++ b/res/values-in/strings.xml
@@ -18,13 +18,15 @@
<string name="beam_touch_to_view" msgid="7853129156831642630">"Sentuh untuk melihat"</string>
<string name="beam_handover_not_supported" msgid="4083165921751489015">"Perangkat penerima tidak mendukung transfer file besar melalui beam."</string>
<string name="beam_try_again" msgid="3364677301009783455">"Kumpulkan lagi perangkatnya"</string>
- <string name="connecting_peripheral" msgid="3957490448472434505">"Menyambungkan"</string>
- <string name="connected_peripheral" msgid="5777997713940423952">"Tersambung"</string>
- <string name="connect_peripheral_failed" msgid="7173159351147270788">"Tidak dapat menyambung"</string>
- <string name="disconnecting_peripheral" msgid="5320432304947519207">"Memutuskan sambungan"</string>
- <string name="disconnected_peripheral" msgid="2768150931245385916">"Sambungan terputus"</string>
- <string name="pairing_peripheral" msgid="5618129595426303236">"Menyandingkan"</string>
- <string name="pairing_peripheral_failed" msgid="976004756112808526">"Tidak dapat menyandingkan"</string>
+ <string name="beam_busy" msgid="5253335587620612576">"Beam sedang sibuk. Coba lagi jika transfer sebelumnya telah selesai."</string>
+ <string name="device" msgid="4459621591392478151">"perangkat"</string>
+ <string name="connecting_peripheral" msgid="1296182660525660935">"Menghubungkan <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> terhubung"</string>
+ <string name="connect_peripheral_failed" msgid="7925702596242839275">"Tidak dapat menghubungkan <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="disconnecting_peripheral" msgid="1443699384809097200">"Memutuskan hubungan dengan <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="disconnected_peripheral" msgid="4470578100296504366">"Hubungan dengan <xliff:g id="DEVICE_NAME">%1$s</xliff:g> terputus"</string>
+ <string name="pairing_peripheral" msgid="6983626861540899365">"Menyandingkan <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="pairing_peripheral_failed" msgid="6087643307743264679">"Tidak dapat menyandingkan <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
<string name="failed_to_enable_bt" msgid="7229153323594758077">"Tidak dapat mengaktifkan Bluetooth"</string>
<string name="confirm_pairing" msgid="4112568077038265363">"Yakin ingin menyandingkan perangkat Bluetooth <xliff:g id="DEVICE_NAME">%1$s</xliff:g>?"</string>
<string name="pair_yes" msgid="3525614878559994448">"Ya"</string>
diff --git a/res/values-is-rIS/strings.xml b/res/values-is-rIS/strings.xml
index 687c4946..96eb6d7a 100644
--- a/res/values-is-rIS/strings.xml
+++ b/res/values-is-rIS/strings.xml
@@ -18,13 +18,15 @@
<string name="beam_touch_to_view" msgid="7853129156831642630">"Snertu til að skoða"</string>
<string name="beam_handover_not_supported" msgid="4083165921751489015">"Tæki viðtakandans styður ekki flutning stórra skráa með NFC."</string>
<string name="beam_try_again" msgid="3364677301009783455">"Settu tækin hvort upp að öðru aftur"</string>
- <string name="connecting_peripheral" msgid="3957490448472434505">"Tengist"</string>
- <string name="connected_peripheral" msgid="5777997713940423952">"Tengt"</string>
- <string name="connect_peripheral_failed" msgid="7173159351147270788">"Tenging mistókst"</string>
- <string name="disconnecting_peripheral" msgid="5320432304947519207">"Aftengist"</string>
- <string name="disconnected_peripheral" msgid="2768150931245385916">"Aftengt"</string>
- <string name="pairing_peripheral" msgid="5618129595426303236">"Parar"</string>
- <string name="pairing_peripheral_failed" msgid="976004756112808526">"Ekki var hægt að para"</string>
+ <string name="beam_busy" msgid="5253335587620612576">"Beam er upptekið. Reyndu aftur þegar fyrri flutningi er lokið."</string>
+ <string name="device" msgid="4459621591392478151">"tæki"</string>
+ <string name="connecting_peripheral" msgid="1296182660525660935">"Tengist <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="connected_peripheral" msgid="20748648543160091">"Tengt við <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="connect_peripheral_failed" msgid="7925702596242839275">"Ekki var hægt að tengjast <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="disconnecting_peripheral" msgid="1443699384809097200">"Aftengist frá <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="disconnected_peripheral" msgid="4470578100296504366">"Aftengt frá <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="pairing_peripheral" msgid="6983626861540899365">"Parast við <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="pairing_peripheral_failed" msgid="6087643307743264679">"Ekki var hægt að parast við <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
<string name="failed_to_enable_bt" msgid="7229153323594758077">"Ekki var hægt að kveikja á Bluetooth"</string>
<string name="confirm_pairing" msgid="4112568077038265363">"Ertu viss um að þú viljir para Bluetooth-tækið <xliff:g id="DEVICE_NAME">%1$s</xliff:g>?"</string>
<string name="pair_yes" msgid="3525614878559994448">"Já"</string>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index 5f0bd87f..161cfa6d 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -18,13 +18,15 @@
<string name="beam_touch_to_view" msgid="7853129156831642630">"Tocca per visualizzare"</string>
<string name="beam_handover_not_supported" msgid="4083165921751489015">"Il dispositivo del destinatario non supporta il trasferimento di file di grandi dimensioni tramite Android Beam."</string>
<string name="beam_try_again" msgid="3364677301009783455">"Avvicina di nuovo i dispositivi"</string>
- <string name="connecting_peripheral" msgid="3957490448472434505">"Connessione in corso"</string>
- <string name="connected_peripheral" msgid="5777997713940423952">"Connesso"</string>
- <string name="connect_peripheral_failed" msgid="7173159351147270788">"Impossibile connettersi"</string>
- <string name="disconnecting_peripheral" msgid="5320432304947519207">"Scollegamento in corso"</string>
- <string name="disconnected_peripheral" msgid="2768150931245385916">"Disconnesso"</string>
- <string name="pairing_peripheral" msgid="5618129595426303236">"Accoppiamento"</string>
- <string name="pairing_peripheral_failed" msgid="976004756112808526">"Impossibile accoppiare"</string>
+ <string name="beam_busy" msgid="5253335587620612576">"Beam è occupato al momento. Riprova al termine del trasferimento precedente."</string>
+ <string name="device" msgid="4459621591392478151">"dispositivo"</string>
+ <string name="connecting_peripheral" msgid="1296182660525660935">"Collegamento di <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> collegato"</string>
+ <string name="connect_peripheral_failed" msgid="7925702596242839275">"Impossibile collegare <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="disconnecting_peripheral" msgid="1443699384809097200">"Scollegamento di <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="disconnected_peripheral" msgid="4470578100296504366">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> scollegato"</string>
+ <string name="pairing_peripheral" msgid="6983626861540899365">"Accoppiamento di <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="pairing_peripheral_failed" msgid="6087643307743264679">"Impossibile accoppiare <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
<string name="failed_to_enable_bt" msgid="7229153323594758077">"Impossibile attivare il Bluetooth"</string>
<string name="confirm_pairing" msgid="4112568077038265363">"Vuoi accoppiare il dispositivo Bluetooth <xliff:g id="DEVICE_NAME">%1$s</xliff:g>?"</string>
<string name="pair_yes" msgid="3525614878559994448">"Sì"</string>
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
index 1e054022..936d1b09 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -18,13 +18,15 @@
<string name="beam_touch_to_view" msgid="7853129156831642630">"גע כדי להציג"</string>
<string name="beam_handover_not_supported" msgid="4083165921751489015">"המכשיר המקבל אינו תומך בהעברת קובץ גדול באמצעות קרן."</string>
<string name="beam_try_again" msgid="3364677301009783455">"קרב שוב את המכשירים"</string>
- <string name="connecting_peripheral" msgid="3957490448472434505">"מתחבר"</string>
- <string name="connected_peripheral" msgid="5777997713940423952">"מחובר"</string>
- <string name="connect_peripheral_failed" msgid="7173159351147270788">"לא ניתן להתחבר."</string>
- <string name="disconnecting_peripheral" msgid="5320432304947519207">"מתנתק"</string>
- <string name="disconnected_peripheral" msgid="2768150931245385916">"מנותק"</string>
- <string name="pairing_peripheral" msgid="5618129595426303236">"התאמה"</string>
- <string name="pairing_peripheral_failed" msgid="976004756112808526">"לא ניתן לבצע התאמה"</string>
+ <string name="beam_busy" msgid="5253335587620612576">"‏Beam אינו פנוי כעת. נסה שוב לאחר השלמת ההעברה הקודמת."</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>
+ <string name="disconnecting_peripheral" msgid="1443699384809097200">"מתנתק מ-<xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="disconnected_peripheral" msgid="4470578100296504366">"מנותק מ-<xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <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="pair_yes" msgid="3525614878559994448">"כן"</string>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index 24d5858a..382cf20f 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -18,13 +18,15 @@
<string name="beam_touch_to_view" msgid="7853129156831642630">"タップして表示"</string>
<string name="beam_handover_not_supported" msgid="4083165921751489015">"受信側の端末は、ビーム経由のサイズの大きなファイルの転送をサポートしていません。"</string>
<string name="beam_try_again" msgid="3364677301009783455">"端末同士をもう一度近づける"</string>
- <string name="connecting_peripheral" msgid="3957490448472434505">"接続しています"</string>
- <string name="connected_peripheral" msgid="5777997713940423952">"接続済み"</string>
- <string name="connect_peripheral_failed" msgid="7173159351147270788">"接続できませんでした"</string>
- <string name="disconnecting_peripheral" msgid="5320432304947519207">"切断しています"</string>
- <string name="disconnected_peripheral" msgid="2768150931245385916">"未接続"</string>
- <string name="pairing_peripheral" msgid="5618129595426303236">"ペア設定しています"</string>
- <string name="pairing_peripheral_failed" msgid="976004756112808526">"ペア設定できませんでした"</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>
+ <string name="connect_peripheral_failed" msgid="7925702596242839275">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>を接続できませんでした"</string>
+ <string name="disconnecting_peripheral" msgid="1443699384809097200">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>を切断しています"</string>
+ <string name="disconnected_peripheral" msgid="4470578100296504366">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>を切断しました"</string>
+ <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="pair_yes" msgid="3525614878559994448">"はい"</string>
diff --git a/res/values-ka-rGE/strings.xml b/res/values-ka-rGE/strings.xml
index 51c634bd..8b06c0dd 100644
--- a/res/values-ka-rGE/strings.xml
+++ b/res/values-ka-rGE/strings.xml
@@ -18,13 +18,15 @@
<string name="beam_touch_to_view" msgid="7853129156831642630">"შეეხეთ სანახავად"</string>
<string name="beam_handover_not_supported" msgid="4083165921751489015">"მიმღების მოწყობილობას დიდი ფაილების სხივით გადაცემის მხარდაჭერა არ გააჩნია."</string>
<string name="beam_try_again" msgid="3364677301009783455">"ისევ მიაახლოვეთ მოწყობილობები ერთმანეთს"</string>
- <string name="connecting_peripheral" msgid="3957490448472434505">"დაკავშირება..."</string>
- <string name="connected_peripheral" msgid="5777997713940423952">"დაკავშირებულია"</string>
- <string name="connect_peripheral_failed" msgid="7173159351147270788">"დაკავშირება ვერ მოხერხდა"</string>
- <string name="disconnecting_peripheral" msgid="5320432304947519207">"მიმდინარეობს გათიშვა"</string>
- <string name="disconnected_peripheral" msgid="2768150931245385916">"კავშირი შეწყვეტილია"</string>
- <string name="pairing_peripheral" msgid="5618129595426303236">"დაწყვილება..."</string>
- <string name="pairing_peripheral_failed" msgid="976004756112808526">"დაწყვილება ვერ მოხერხდა"</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>
+ <string name="connect_peripheral_failed" msgid="7925702596242839275">"ვერ ვუკავშირდებით <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="disconnecting_peripheral" msgid="1443699384809097200">"კავშირი წყდება <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="disconnected_peripheral" msgid="4470578100296504366">"გათიშულია <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <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="pair_yes" msgid="3525614878559994448">"დიახ"</string>
diff --git a/res/values-kk-rKZ/strings.xml b/res/values-kk-rKZ/strings.xml
index 0182af91..e09ae03b 100644
--- a/res/values-kk-rKZ/strings.xml
+++ b/res/values-kk-rKZ/strings.xml
@@ -18,13 +18,15 @@
<string name="beam_touch_to_view" msgid="7853129156831642630">"Көру үшін түрту"</string>
<string name="beam_handover_not_supported" msgid="4083165921751489015">"Хабар алушының құрылғысы бим арқылы үлкен файл жіберуді қолдамайды."</string>
<string name="beam_try_again" msgid="3364677301009783455">"Құрылғыларды қайта біріктіру"</string>
- <string name="connecting_peripheral" msgid="3957490448472434505">"Қосылуда"</string>
- <string name="connected_peripheral" msgid="5777997713940423952">"Қосылды"</string>
- <string name="connect_peripheral_failed" msgid="7173159351147270788">"Қосылу мүмкін болмады"</string>
- <string name="disconnecting_peripheral" msgid="5320432304947519207">"Ажыратылуда"</string>
- <string name="disconnected_peripheral" msgid="2768150931245385916">"Ажыратылған"</string>
- <string name="pairing_peripheral" msgid="5618129595426303236">"Жұпталуда"</string>
- <string name="pairing_peripheral_failed" msgid="976004756112808526">"Жұптау мүмкін болмады"</string>
+ <string name="beam_busy" msgid="5253335587620612576">"Тарату қазіргі уақытта бос емес. Алдыңғы тасымалдау аяқталғанда әрекетті қайталаңыз."</string>
+ <string name="device" msgid="4459621591392478151">"құрылғы"</string>
+ <string name="connecting_peripheral" msgid="1296182660525660935">"Connecting <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="connected_peripheral" msgid="20748648543160091">"Connected <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="connect_peripheral_failed" msgid="7925702596242839275">"Could not connect <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="disconnecting_peripheral" msgid="1443699384809097200">"Disconnecting <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="disconnected_peripheral" msgid="4470578100296504366">"Disconnected <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="pairing_peripheral" msgid="6983626861540899365">"Pairing <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="pairing_peripheral_failed" msgid="6087643307743264679">"Could not pair <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="pair_yes" msgid="3525614878559994448">"Иә"</string>
diff --git a/res/values-km-rKH/strings.xml b/res/values-km-rKH/strings.xml
index bdf1fb4e..f6d46255 100644
--- a/res/values-km-rKH/strings.xml
+++ b/res/values-km-rKH/strings.xml
@@ -18,13 +18,15 @@
<string name="beam_touch_to_view" msgid="7853129156831642630">"ប៉ះ​ដើម្បី​មើល"</string>
<string name="beam_handover_not_supported" msgid="4083165921751489015">"ឧបករណ៍​របស់​អ្នក​ទទួល​មិន​គាំទ្រ​ការ​ផ្ទេរ​ឯកសារ​​ដែល​មាន​ទំហំ​ធំ​តាម​ការ​ផ្ទេរ​ឡើយ។"</string>
<string name="beam_try_again" msgid="3364677301009783455">"នាំ​ឧបករណ៍​ជាមួយគ្នា​ម្ដងទៀត"</string>
- <string name="connecting_peripheral" msgid="3957490448472434505">"ភ្ជាប់"</string>
- <string name="connected_peripheral" msgid="5777997713940423952">"បាន​ភ្ជាប់"</string>
- <string name="connect_peripheral_failed" msgid="7173159351147270788">"មិន​អាច​ភ្ជាប់"</string>
- <string name="disconnecting_peripheral" msgid="5320432304947519207">"ផ្ដាច់"</string>
- <string name="disconnected_peripheral" msgid="2768150931245385916">"បាន​ផ្ដាច់"</string>
- <string name="pairing_peripheral" msgid="5618129595426303236">"ផ្គូផ្គង​"</string>
- <string name="pairing_peripheral_failed" msgid="976004756112808526">"មិន​អាច​ផ្គូផ្គង"</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>
+ <string name="connect_peripheral_failed" msgid="7925702596242839275">"មិនអាចភ្ជាប់ <xliff:g id="DEVICE_NAME">%1$s</xliff:g> បានទេ"</string>
+ <string name="disconnecting_peripheral" msgid="1443699384809097200">"កំពុងផ្តាច់ <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="disconnected_peripheral" msgid="4470578100296504366">"បានផ្តាច់ <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <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="pair_yes" msgid="3525614878559994448">"បាទ/ចាស"</string>
diff --git a/res/values-kn-rIN/strings.xml b/res/values-kn-rIN/strings.xml
index 414040d1..9dfe6d38 100644
--- a/res/values-kn-rIN/strings.xml
+++ b/res/values-kn-rIN/strings.xml
@@ -18,13 +18,15 @@
<string name="beam_touch_to_view" msgid="7853129156831642630">"ವೀಕ್ಷಿಸಲು ಸ್ಪರ್ಶಿಸಿ"</string>
<string name="beam_handover_not_supported" msgid="4083165921751489015">"ಸ್ವೀಕರಿಸುವವರ ಸಾಧನವು ಬೀಮ್ ಮೂಲಕ ಮಾಡಲಾಗುವ ವರ್ಗಾವಣೆಯನ್ನು ಬೆಂಬಲಿಸುವುದಿಲ್ಲ."</string>
<string name="beam_try_again" msgid="3364677301009783455">"ಸಾಧನಗಳನ್ನು ಮತ್ತೆ ಒಟ್ಟಿಗೆ ತನ್ನಿ"</string>
- <string name="connecting_peripheral" msgid="3957490448472434505">"ಸಂಪರ್ಕಿಸಲಾಗುತ್ತಿದೆ"</string>
- <string name="connected_peripheral" msgid="5777997713940423952">"ಸಂಪರ್ಕಗೊಂಡಿದೆ"</string>
- <string name="connect_peripheral_failed" msgid="7173159351147270788">"ಸಂಪರ್ಕಿಸಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ"</string>
- <string name="disconnecting_peripheral" msgid="5320432304947519207">"ಸಂಪರ್ಕ ಕಡಿತಗೊಳಿಸಲಾಗುತ್ತಿದೆ"</string>
- <string name="disconnected_peripheral" msgid="2768150931245385916">"ಸಂಪರ್ಕ ಕಡಿತಗೊಳಿಸಲಾಗಿದೆ"</string>
- <string name="pairing_peripheral" msgid="5618129595426303236">"ಜೋಡಿಸುವಿಕೆ"</string>
- <string name="pairing_peripheral_failed" msgid="976004756112808526">"ಜೋಡಿಸಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ"</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>
+ <string name="connect_peripheral_failed" msgid="7925702596242839275">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> ಸಾಧನವನ್ನು ಸಂಪರ್ಕಿತಗೊಳಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ"</string>
+ <string name="disconnecting_peripheral" msgid="1443699384809097200">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> ಸಾಧನವನ್ನು ಸಂಪರ್ಕ ಕಡಿತಗೊಳಿಸಲಾಗುತ್ತಿದೆ"</string>
+ <string name="disconnected_peripheral" msgid="4470578100296504366">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> ಸಾಧನವನ್ನು ಸಂಪರ್ಕಕಡಿತಗೊಳಿಸಲಾಗಿದೆ"</string>
+ <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="pair_yes" msgid="3525614878559994448">"ಹೌದು"</string>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index 728c9bbf..e495e30e 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -18,13 +18,15 @@
<string name="beam_touch_to_view" msgid="7853129156831642630">"터치하여 보기"</string>
<string name="beam_handover_not_supported" msgid="4083165921751489015">"수신자의 기기는 빔을 통한 대용량 파일 전송을 지원하지 않습니다."</string>
<string name="beam_try_again" msgid="3364677301009783455">"기기 다시 공유"</string>
- <string name="connecting_peripheral" msgid="3957490448472434505">"연결 중"</string>
- <string name="connected_peripheral" msgid="5777997713940423952">"연결됨"</string>
- <string name="connect_peripheral_failed" msgid="7173159351147270788">"연결하지 못함"</string>
- <string name="disconnecting_peripheral" msgid="5320432304947519207">"연결을 끊는 중"</string>
- <string name="disconnected_peripheral" msgid="2768150931245385916">"연결 끊김"</string>
- <string name="pairing_peripheral" msgid="5618129595426303236">"페어링"</string>
- <string name="pairing_peripheral_failed" msgid="976004756112808526">"페어링하지 못함"</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>
+ <string name="connect_peripheral_failed" msgid="7925702596242839275">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>에 연결할 수 없음"</string>
+ <string name="disconnecting_peripheral" msgid="1443699384809097200">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>와(과) 연결 해제하는 중"</string>
+ <string name="disconnected_peripheral" msgid="4470578100296504366">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>와(과) 연결 해제됨"</string>
+ <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="pair_yes" msgid="3525614878559994448">"예"</string>
diff --git a/res/values-ky-rKG/strings.xml b/res/values-ky-rKG/strings.xml
index cfb20595..bb14bcf8 100644
--- a/res/values-ky-rKG/strings.xml
+++ b/res/values-ky-rKG/strings.xml
@@ -18,13 +18,15 @@
<string name="beam_touch_to_view" msgid="7853129156831642630">"Көрүш үчүн тийиңиз"</string>
<string name="beam_handover_not_supported" msgid="4083165921751489015">"Алуучунун түзмөгү beam аркылуу чоң файлдарды кабылдабайт."</string>
<string name="beam_try_again" msgid="3364677301009783455">"Түзмөктөрдү кайрадан бириктириңиз"</string>
- <string name="connecting_peripheral" msgid="3957490448472434505">"Туташууда"</string>
- <string name="connected_peripheral" msgid="5777997713940423952">"Туташты"</string>
- <string name="connect_peripheral_failed" msgid="7173159351147270788">"Туташа алган жок"</string>
- <string name="disconnecting_peripheral" msgid="5320432304947519207">"Ажыратылууда"</string>
- <string name="disconnected_peripheral" msgid="2768150931245385916">"Ажыратылды"</string>
- <string name="pairing_peripheral" msgid="5618129595426303236">"Жупташтыруу"</string>
- <string name="pairing_peripheral_failed" msgid="976004756112808526">"Жупташкан жок"</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>
+ <string name="connect_peripheral_failed" msgid="7925702596242839275">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> менен туташа алган жок"</string>
+ <string name="disconnecting_peripheral" msgid="1443699384809097200">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> ажыратылууда"</string>
+ <string name="disconnected_peripheral" msgid="4470578100296504366">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> ажыратылды"</string>
+ <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">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> Bluetooth түзмөгү менен жупташтырууну каалаганыңыз аныкпы?"</string>
<string name="pair_yes" msgid="3525614878559994448">"Ооба"</string>
diff --git a/res/values-lo-rLA/strings.xml b/res/values-lo-rLA/strings.xml
index fb94126d..5746e9e3 100644
--- a/res/values-lo-rLA/strings.xml
+++ b/res/values-lo-rLA/strings.xml
@@ -18,13 +18,15 @@
<string name="beam_touch_to_view" msgid="7853129156831642630">"ແຕະ​ເພື່ອ​ເບິ່ງ"</string>
<string name="beam_handover_not_supported" msgid="4083165921751489015">"ອຸປະກອນຂອງຜູ່ຮັບບໍ່ສາມາດຮອງຮັບການໂອນໄຟລ໌ຂະຫນາດໃຫຍ່ໂດຍຜ່ານ beam ໄດ້."</string>
<string name="beam_try_again" msgid="3364677301009783455">"ນຳອຸປະກອນເຂົ້າມາຫາກັນໃໝ່ອີກຄັ້ງ"</string>
- <string name="connecting_peripheral" msgid="3957490448472434505">"ກຳລັງເຊື່ອມຕໍ່"</string>
- <string name="connected_peripheral" msgid="5777997713940423952">"ເຊື່ອມ​ຕໍ່ແລ້ວ"</string>
- <string name="connect_peripheral_failed" msgid="7173159351147270788">"ບໍ່ສາມາດເຊື່ອມຕໍ່ໄດ້"</string>
- <string name="disconnecting_peripheral" msgid="5320432304947519207">"ກຳລັງຕັດການເຊື່ອມຕໍ່"</string>
- <string name="disconnected_peripheral" msgid="2768150931245385916">"​ຕັດ​ການ​ເຊື່ອມ​ຕໍ່​ແລ້ວ"</string>
- <string name="pairing_peripheral" msgid="5618129595426303236">"​ກຳ​ລັງ​ຈັບ​ຄູ່"</string>
- <string name="pairing_peripheral_failed" msgid="976004756112808526">"ບໍ່ສາມາດຈັບຄູ່ໄດ້"</string>
+ <string name="beam_busy" msgid="5253335587620612576">"ປະ​ຈຸ​ບັນ Beam ບໍ່​ວ່າງ. ລອງ​ໃໝ່​ອີກ​ເມື່ອ​ການ​ໂອນທີ່​ຜ່ານ​ມາ​ສຳ​ເລັດແລ້ວ."</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>
+ <string name="disconnecting_peripheral" msgid="1443699384809097200">"ກຳ​ລັງ​ຕັດ​ເຊື່ອມ​ຕໍ່ <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="disconnected_peripheral" msgid="4470578100296504366">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> ທີ່​ຕັດ​ເຊື່ອມ​ຕໍ່​ແລ້ວ"</string>
+ <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="pair_yes" msgid="3525614878559994448">"ຕົກລົງ"</string>
diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml
index 4cca11b6..a00419c1 100644
--- a/res/values-lt/strings.xml
+++ b/res/values-lt/strings.xml
@@ -18,13 +18,15 @@
<string name="beam_touch_to_view" msgid="7853129156831642630">"Jei norite peržiūrėti, palieskite"</string>
<string name="beam_handover_not_supported" msgid="4083165921751489015">"Gavėjo įrenginyje nepalaikomas didelio failo perdavimas naudojant perdavimo funkciją."</string>
<string name="beam_try_again" msgid="3364677301009783455">"Vėl susiekite įrenginius"</string>
- <string name="connecting_peripheral" msgid="3957490448472434505">"Jungiamasi"</string>
- <string name="connected_peripheral" msgid="5777997713940423952">"Prijungta"</string>
- <string name="connect_peripheral_failed" msgid="7173159351147270788">"Nepavyko prisijungti"</string>
- <string name="disconnecting_peripheral" msgid="5320432304947519207">"Atsijungiama"</string>
- <string name="disconnected_peripheral" msgid="2768150931245385916">"Atjungta"</string>
- <string name="pairing_peripheral" msgid="5618129595426303236">"Susiejama"</string>
- <string name="pairing_peripheral_failed" msgid="976004756112808526">"Nepavyko susieti"</string>
+ <string name="beam_busy" msgid="5253335587620612576">"Perdavimo paslauga šiuo metu užimta. Bandykite dar kartą, kai bus baigtas ankstesnis perkėlimas."</string>
+ <string name="device" msgid="4459621591392478151">"įrenginys"</string>
+ <string name="connecting_peripheral" msgid="1296182660525660935">"Jungiamasi prie „<xliff:g id="DEVICE_NAME">%1$s</xliff:g>“"</string>
+ <string name="connected_peripheral" msgid="20748648543160091">"Prisijungta prie „<xliff:g id="DEVICE_NAME">%1$s</xliff:g>“"</string>
+ <string name="connect_peripheral_failed" msgid="7925702596242839275">"Nepavyko prisijungti prie „<xliff:g id="DEVICE_NAME">%1$s</xliff:g>“"</string>
+ <string name="disconnecting_peripheral" msgid="1443699384809097200">"Atsijungiama nuo „<xliff:g id="DEVICE_NAME">%1$s</xliff:g>“"</string>
+ <string name="disconnected_peripheral" msgid="4470578100296504366">"Atsijungta nuo „<xliff:g id="DEVICE_NAME">%1$s</xliff:g>“"</string>
+ <string name="pairing_peripheral" msgid="6983626861540899365">"Susiejama su „<xliff:g id="DEVICE_NAME">%1$s</xliff:g>“"</string>
+ <string name="pairing_peripheral_failed" msgid="6087643307743264679">"Nepavyko susieti su „<xliff:g id="DEVICE_NAME">%1$s</xliff:g>“"</string>
<string name="failed_to_enable_bt" msgid="7229153323594758077">"Nepavyko įgalinti „Bluetooth“"</string>
<string name="confirm_pairing" msgid="4112568077038265363">"Ar tikrai norite susieti „Bluetooth“ įrenginį „<xliff:g id="DEVICE_NAME">%1$s</xliff:g>“?"</string>
<string name="pair_yes" msgid="3525614878559994448">"Taip"</string>
diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml
index ee0c1c0a..944757f1 100644
--- a/res/values-lv/strings.xml
+++ b/res/values-lv/strings.xml
@@ -18,13 +18,15 @@
<string name="beam_touch_to_view" msgid="7853129156831642630">"Pieskarieties, lai skatītu."</string>
<string name="beam_handover_not_supported" msgid="4083165921751489015">"Saņēmēja ierīce neatbalsta lielu failu pārsūtīšanu, izmantojot funkciju Beam."</string>
<string name="beam_try_again" msgid="3364677301009783455">"Vēlreiz novietojiet ierīces blakus."</string>
- <string name="connecting_peripheral" msgid="3957490448472434505">"Notiek savienojuma izveide"</string>
- <string name="connected_peripheral" msgid="5777997713940423952">"Savienojums izveidots"</string>
- <string name="connect_peripheral_failed" msgid="7173159351147270788">"Nevarēja izveidot savienojumu"</string>
- <string name="disconnecting_peripheral" msgid="5320432304947519207">"Notiek savienojuma pārtraukšana"</string>
- <string name="disconnected_peripheral" msgid="2768150931245385916">"Savienojums pārtraukts"</string>
- <string name="pairing_peripheral" msgid="5618129595426303236">"Notiek savienošana pārī"</string>
- <string name="pairing_peripheral_failed" msgid="976004756112808526">"Nevarēja savienot pārī"</string>
+ <string name="beam_busy" msgid="5253335587620612576">"Funkcija Beam šobrīd ir noslogota. Mēģiniet vēlreiz, tiklīdz ir pabeigta iepriekšējā pārsūtīšana."</string>
+ <string name="device" msgid="4459621591392478151">"ierīce"</string>
+ <string name="connecting_peripheral" msgid="1296182660525660935">"Notiek savienošana ar ierīci <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
+ <string name="connected_peripheral" msgid="20748648543160091">"Savienots ar ierīci <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
+ <string name="connect_peripheral_failed" msgid="7925702596242839275">"Nevarēja savienot ar ierīci <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
+ <string name="disconnecting_peripheral" msgid="1443699384809097200">"Notiek ierīces <xliff:g id="DEVICE_NAME">%1$s</xliff:g> atvienošana."</string>
+ <string name="disconnected_peripheral" msgid="4470578100296504366">"Ierīce <xliff:g id="DEVICE_NAME">%1$s</xliff:g> tika atvienota."</string>
+ <string name="pairing_peripheral" msgid="6983626861540899365">"Notiek savienošana pārī ar ierīci <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
+ <string name="pairing_peripheral_failed" msgid="6087643307743264679">"Nevarēja savienot pārī ar ierīci <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
<string name="failed_to_enable_bt" msgid="7229153323594758077">"Nevarēja iespējot Bluetooth"</string>
<string name="confirm_pairing" msgid="4112568077038265363">"Vai tiešām vēlaties savienot pārī Bluetooth ierīci <xliff:g id="DEVICE_NAME">%1$s</xliff:g>?"</string>
<string name="pair_yes" msgid="3525614878559994448">"Jā"</string>
diff --git a/res/values-mk-rMK/strings.xml b/res/values-mk-rMK/strings.xml
index 87e12ad4..36c8b9bc 100644
--- a/res/values-mk-rMK/strings.xml
+++ b/res/values-mk-rMK/strings.xml
@@ -18,13 +18,15 @@
<string name="beam_touch_to_view" msgid="7853129156831642630">"Допри за да видиш"</string>
<string name="beam_handover_not_supported" msgid="4083165921751489015">"Уредот на примачот не поддржува пренос на големи датотеки преку зрак."</string>
<string name="beam_try_again" msgid="3364677301009783455">"Повторно спој ги уредите"</string>
- <string name="connecting_peripheral" msgid="3957490448472434505">"Се поврзува"</string>
- <string name="connected_peripheral" msgid="5777997713940423952">"Поврзано"</string>
- <string name="connect_peripheral_failed" msgid="7173159351147270788">"Не можеше да се поврзе"</string>
- <string name="disconnecting_peripheral" msgid="5320432304947519207">"Се исклучува"</string>
- <string name="disconnected_peripheral" msgid="2768150931245385916">"Исклучено"</string>
- <string name="pairing_peripheral" msgid="5618129595426303236">"Се спаруваат"</string>
- <string name="pairing_peripheral_failed" msgid="976004756112808526">"Не можеше да се спарат"</string>
+ <string name="beam_busy" msgid="5253335587620612576">"Beam е моментално зафатен. Обидете се повторно кога ќе заврши претходниот пренос."</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> e поврзан"</string>
+ <string name="connect_peripheral_failed" msgid="7925702596242839275">"Не можеше да се поврзе со <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="disconnecting_peripheral" msgid="1443699384809097200">"Се исклучува <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="disconnected_peripheral" msgid="4470578100296504366">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> е исклучен"</string>
+ <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="pair_yes" msgid="3525614878559994448">"Да"</string>
diff --git a/res/values-ml-rIN/strings.xml b/res/values-ml-rIN/strings.xml
index fc00938a..d9bb0a51 100644
--- a/res/values-ml-rIN/strings.xml
+++ b/res/values-ml-rIN/strings.xml
@@ -18,13 +18,15 @@
<string name="beam_touch_to_view" msgid="7853129156831642630">"കാണാൻ സ്‌പർശിക്കുക"</string>
<string name="beam_handover_not_supported" msgid="4083165921751489015">"ബീം മുഖേന വലിയ ഫയൽ കൈമാറുന്നതിനെ സ്വീകർത്താവിന്റെ ഉപകരണം പിന്തുണയ്ക്കുന്നില്ല."</string>
<string name="beam_try_again" msgid="3364677301009783455">"ഉപകരണങ്ങൾ വീണ്ടും ഒരുമിച്ചുകൊണ്ടുവരുക"</string>
- <string name="connecting_peripheral" msgid="3957490448472434505">"കണക്റ്റുചെയ്യുന്നു"</string>
- <string name="connected_peripheral" msgid="5777997713940423952">"കണക്‌റ്റുചെയ്‌തു"</string>
- <string name="connect_peripheral_failed" msgid="7173159351147270788">"കണക്‌റ്റുചെയ്യാനായില്ല"</string>
- <string name="disconnecting_peripheral" msgid="5320432304947519207">"വിച്‌ഛേദിക്കുന്നു"</string>
- <string name="disconnected_peripheral" msgid="2768150931245385916">"വിച്ഛേദിച്ചു"</string>
- <string name="pairing_peripheral" msgid="5618129595426303236">"ജോടിയാക്കുന്നു"</string>
- <string name="pairing_peripheral_failed" msgid="976004756112808526">"ജോടിയാക്കാനായില്ല"</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>
+ <string name="connect_peripheral_failed" msgid="7925702596242839275">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>, കണക്‌റ്റുചെയ്യാനായില്ല"</string>
+ <string name="disconnecting_peripheral" msgid="1443699384809097200">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>, വിച്‌ഛേദിക്കുന്നു"</string>
+ <string name="disconnected_peripheral" msgid="4470578100296504366">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>, വിച്‌ഛേദിച്ചു"</string>
+ <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="pair_yes" msgid="3525614878559994448">"വേണം"</string>
diff --git a/res/values-mn-rMN/strings.xml b/res/values-mn-rMN/strings.xml
index 451ace66..bb94efbd 100644
--- a/res/values-mn-rMN/strings.xml
+++ b/res/values-mn-rMN/strings.xml
@@ -18,13 +18,15 @@
<string name="beam_touch_to_view" msgid="7853129156831642630">"Харахын тулд хүрнэ үү"</string>
<string name="beam_handover_not_supported" msgid="4083165921751489015">"Хүлээн авагч төхөөрөмж том файлыг бийм-ээр дамжуулахыг дэмждэггүй."</string>
<string name="beam_try_again" msgid="3364677301009783455">"Төхөөрөмжүүдийг дахин хамтад нь байлгах"</string>
- <string name="connecting_peripheral" msgid="3957490448472434505">"Холбогдож байна"</string>
- <string name="connected_peripheral" msgid="5777997713940423952">"Холбогдсон"</string>
- <string name="connect_peripheral_failed" msgid="7173159351147270788">"Холбож чадсангүй"</string>
- <string name="disconnecting_peripheral" msgid="5320432304947519207">"Салгаж байна"</string>
- <string name="disconnected_peripheral" msgid="2768150931245385916">"Салгагдсан"</string>
- <string name="pairing_peripheral" msgid="5618129595426303236">"Хослуулж байна"</string>
- <string name="pairing_peripheral_failed" msgid="976004756112808526">"Хослуулж чадсангүй"</string>
+ <string name="beam_busy" msgid="5253335587620612576">"Beam одоохондоо завгүй байна. Өмнөх шилжүүлэг дууссан үед дахин оролдоно уу."</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>
+ <string name="disconnecting_peripheral" msgid="1443699384809097200">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>-н холбоог салгаж байна"</string>
+ <string name="disconnected_peripheral" msgid="4470578100296504366">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>-н холбоог салгасан байна"</string>
+ <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="pair_yes" msgid="3525614878559994448">"Тийм"</string>
diff --git a/res/values-mr-rIN/strings.xml b/res/values-mr-rIN/strings.xml
index 8503b3a1..f63cf043 100644
--- a/res/values-mr-rIN/strings.xml
+++ b/res/values-mr-rIN/strings.xml
@@ -18,13 +18,15 @@
<string name="beam_touch_to_view" msgid="7853129156831642630">"पाहण्यासाठी स्पर्श करा"</string>
<string name="beam_handover_not_supported" msgid="4083165921751489015">"प्राप्तकर्त्याचे डिव्हाइस बीमद्वारे मोठी फाईल स्थानांतरीत करण्यास समर्थन देत नाही."</string>
<string name="beam_try_again" msgid="3364677301009783455">"डिव्हाइसेस पुन्हा एकत्र आणा"</string>
- <string name="connecting_peripheral" msgid="3957490448472434505">"कनेक्ट करीत आहे"</string>
- <string name="connected_peripheral" msgid="5777997713940423952">"कनेक्ट केलेले"</string>
- <string name="connect_peripheral_failed" msgid="7173159351147270788">"कनेक्ट करू शकलो नाही"</string>
- <string name="disconnecting_peripheral" msgid="5320432304947519207">"डिस्कनेक्ट करत आहे"</string>
- <string name="disconnected_peripheral" msgid="2768150931245385916">"डिस्कनेक्ट केले"</string>
- <string name="pairing_peripheral" msgid="5618129595426303236">"जोडत आहे"</string>
- <string name="pairing_peripheral_failed" msgid="976004756112808526">"जोडू शकलो नाही"</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>
+ <string name="connect_peripheral_failed" msgid="7925702596242839275">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> कनेक्‍ट करणे शक्य झाले नाही"</string>
+ <string name="disconnecting_peripheral" msgid="1443699384809097200">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> डिस्‍कनेक्‍ट करीत आहे"</string>
+ <string name="disconnected_peripheral" msgid="4470578100296504366">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> डिस्‍कनेक्‍ट केले"</string>
+ <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="pair_yes" msgid="3525614878559994448">"होय"</string>
diff --git a/res/values-ms-rMY/strings.xml b/res/values-ms-rMY/strings.xml
index 7c6b6165..caed039f 100644
--- a/res/values-ms-rMY/strings.xml
+++ b/res/values-ms-rMY/strings.xml
@@ -18,13 +18,15 @@
<string name="beam_touch_to_view" msgid="7853129156831642630">"Sentuh untuk melihat"</string>
<string name="beam_handover_not_supported" msgid="4083165921751489015">"Peranti penerima tidak menyokong pemindahan fail besar melalui pancaran."</string>
<string name="beam_try_again" msgid="3364677301009783455">"Dekatkan peranti semula"</string>
- <string name="connecting_peripheral" msgid="3957490448472434505">"Menyambung"</string>
- <string name="connected_peripheral" msgid="5777997713940423952">"Disambungkan"</string>
- <string name="connect_peripheral_failed" msgid="7173159351147270788">"Tidak dapat menyambung"</string>
- <string name="disconnecting_peripheral" msgid="5320432304947519207">"Memutuskan sambungan"</string>
- <string name="disconnected_peripheral" msgid="2768150931245385916">"Diputuskan sambungan"</string>
- <string name="pairing_peripheral" msgid="5618129595426303236">"Menjadikan pasangan"</string>
- <string name="pairing_peripheral_failed" msgid="976004756112808526">"Tidak dapat berpasangan"</string>
+ <string name="beam_busy" msgid="5253335587620612576">"Pancaran sibuk pada masa ini. Cuba lagi apabila pemindahan sebelumnya selesai."</string>
+ <string name="device" msgid="4459621591392478151">"peranti"</string>
+ <string name="connecting_peripheral" msgid="1296182660525660935">"Menyambungkan <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> disambungkan"</string>
+ <string name="connect_peripheral_failed" msgid="7925702596242839275">"Tidak dapat menyambungkan <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="disconnecting_peripheral" msgid="1443699384809097200">"Memutuskan sambungan <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="disconnected_peripheral" msgid="4470578100296504366">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> diputuskan sambungan"</string>
+ <string name="pairing_peripheral" msgid="6983626861540899365">"Memasangkan <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="pairing_peripheral_failed" msgid="6087643307743264679">"Tidak dapat memasangkan <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
<string name="failed_to_enable_bt" msgid="7229153323594758077">"Tidak dapat mendayakan Bluetooth"</string>
<string name="confirm_pairing" msgid="4112568077038265363">"Adakah anda pasti anda mahu memadankan peranti Bluetooth <xliff:g id="DEVICE_NAME">%1$s</xliff:g>?"</string>
<string name="pair_yes" msgid="3525614878559994448">"Ya"</string>
diff --git a/res/values-my-rMM/strings.xml b/res/values-my-rMM/strings.xml
index c3fc9c89..6908d833 100644
--- a/res/values-my-rMM/strings.xml
+++ b/res/values-my-rMM/strings.xml
@@ -18,13 +18,15 @@
<string name="beam_touch_to_view" msgid="7853129156831642630">"ကြည့်ရန် တို့ထိပါ"</string>
<string name="beam_handover_not_supported" msgid="4083165921751489015">"လက်ခံစက်သည် လှိုင်းလွှင့်ခြင်းမှတစ်ဆင့် ကြီးမားသောဖိုင်လွဲခြင်းများကို မထောက်ပံ့ပါ"</string>
<string name="beam_try_again" msgid="3364677301009783455">"ထပ်ပြီး စက်ကို အတူထားပါ"</string>
- <string name="connecting_peripheral" msgid="3957490448472434505">"ချိတ်ဆက်နေ"</string>
- <string name="connected_peripheral" msgid="5777997713940423952">"ချိတ်ဆက်ထား"</string>
- <string name="connect_peripheral_failed" msgid="7173159351147270788">"မချိတ်ဆက်နိုင်ခဲ့ပါ"</string>
- <string name="disconnecting_peripheral" msgid="5320432304947519207">"ချိတ်ဆက်မှု ဖြတ်နေ"</string>
- <string name="disconnected_peripheral" msgid="2768150931245385916">"ချိတ်ဆက်မှု ဖြတ်ထား"</string>
- <string name="pairing_peripheral" msgid="5618129595426303236">"တွဲချိတ်နေ"</string>
- <string name="pairing_peripheral_failed" msgid="976004756112808526">"တွဲချိတ်၍မရနိုင်ခဲ့ပါ"</string>
+ <string name="beam_busy" msgid="5253335587620612576">"Beam လောလောဆယ် အလုပ်များနေ၏။ ယခင် ကူးပြောင်းမှုပြီးမှ ထပ်မံကြိုးစားပါ။"</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>
+ <string name="disconnecting_peripheral" msgid="1443699384809097200">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>အားချိတ်ဆက်မှုဖြတ်တောက်နေ၏"</string>
+ <string name="disconnected_peripheral" msgid="4470578100296504366">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> နှင့်မချိတ်ဆက်ထားပါ"</string>
+ <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="pair_yes" msgid="3525614878559994448">"မှန်ပါသည်"</string>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index df489a15..cea1dd0d 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -18,13 +18,15 @@
<string name="beam_touch_to_view" msgid="7853129156831642630">"Trykk for å se"</string>
<string name="beam_handover_not_supported" msgid="4083165921751489015">"Mottakerens enhet støtter ikke store filoverføringer via Android Beam."</string>
<string name="beam_try_again" msgid="3364677301009783455">"Før enhetene sammen igjen"</string>
- <string name="connecting_peripheral" msgid="3957490448472434505">"Kobler til"</string>
- <string name="connected_peripheral" msgid="5777997713940423952">"Tilkoblet"</string>
- <string name="connect_peripheral_failed" msgid="7173159351147270788">"Kunne ikke koble til"</string>
- <string name="disconnecting_peripheral" msgid="5320432304947519207">"Kobler fra"</string>
- <string name="disconnected_peripheral" msgid="2768150931245385916">"Frakoblet"</string>
- <string name="pairing_peripheral" msgid="5618129595426303236">"Kobler til"</string>
- <string name="pairing_peripheral_failed" msgid="976004756112808526">"Kunne ikke koble til"</string>
+ <string name="beam_busy" msgid="5253335587620612576">"Beam er opptatt for øyeblikket. Prøv igjen når den forrige overføringen er fullført."</string>
+ <string name="device" msgid="4459621591392478151">"enhet"</string>
+ <string name="connecting_peripheral" msgid="1296182660525660935">"Kobler til <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="connected_peripheral" msgid="20748648543160091">"Tilkoblet <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="connect_peripheral_failed" msgid="7925702596242839275">"Kunne ikke koble til <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="disconnecting_peripheral" msgid="1443699384809097200">"Kobler fra <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="disconnected_peripheral" msgid="4470578100296504366">"Frakoblet <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="pairing_peripheral" msgid="6983626861540899365">"Sammenkobler <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="pairing_peripheral_failed" msgid="6087643307743264679">"Kunne ikke sammenkoble <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
<string name="failed_to_enable_bt" msgid="7229153323594758077">"Kunne ikke aktivere Bluetooth"</string>
<string name="confirm_pairing" msgid="4112568077038265363">"Er du sikker på at koble til Bluetooth-enheten <xliff:g id="DEVICE_NAME">%1$s</xliff:g>?"</string>
<string name="pair_yes" msgid="3525614878559994448">"Ja"</string>
diff --git a/res/values-ne-rNP/strings.xml b/res/values-ne-rNP/strings.xml
index f2705927..ebdee3cc 100644
--- a/res/values-ne-rNP/strings.xml
+++ b/res/values-ne-rNP/strings.xml
@@ -18,13 +18,15 @@
<string name="beam_touch_to_view" msgid="7853129156831642630">"अवलोकन गर्न छुनुहोस्"</string>
<string name="beam_handover_not_supported" msgid="4083165921751489015">"प्राप्तकर्ताको उपकरणले बिम मार्फत ठूलो फाइल ट्रान्सफर गर्न समर्थन गर्दैन।"</string>
<string name="beam_try_again" msgid="3364677301009783455">"फेरि उपकरणहरू एकै साथ ल्याउनुहोस्"</string>
- <string name="connecting_peripheral" msgid="3957490448472434505">"जडान गरिँदै"</string>
- <string name="connected_peripheral" msgid="5777997713940423952">"जडित"</string>
- <string name="connect_peripheral_failed" msgid="7173159351147270788">"जडान गर्न सकेन"</string>
- <string name="disconnecting_peripheral" msgid="5320432304947519207">"विच्छेद हुँदै..."</string>
- <string name="disconnected_peripheral" msgid="2768150931245385916">"विच्छेद भएको"</string>
- <string name="pairing_peripheral" msgid="5618129595426303236">"जोडा मिलाउँदै"</string>
- <string name="pairing_peripheral_failed" msgid="976004756112808526">"जोडा मिलाउन सकेन"</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>
+ <string name="connect_peripheral_failed" msgid="7925702596242839275">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> जडान गर्न सकेन"</string>
+ <string name="disconnecting_peripheral" msgid="1443699384809097200">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> विच्छेदन गर्दै"</string>
+ <string name="disconnected_peripheral" msgid="4470578100296504366">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> विच्छेद गरियो"</string>
+ <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="pair_yes" msgid="3525614878559994448">"हो"</string>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index d0ea4d31..11b2c8f8 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -18,13 +18,15 @@
<string name="beam_touch_to_view" msgid="7853129156831642630">"Raak aan om te bekijken"</string>
<string name="beam_handover_not_supported" msgid="4083165921751489015">"Het apparaat van de ontvanger ondersteunt de overdracht van grote bestanden via beam niet."</string>
<string name="beam_try_again" msgid="3364677301009783455">"Houd de apparaten nogmaals tegen elkaar"</string>
- <string name="connecting_peripheral" msgid="3957490448472434505">"Verbinding maken"</string>
- <string name="connected_peripheral" msgid="5777997713940423952">"Verbonden"</string>
- <string name="connect_peripheral_failed" msgid="7173159351147270788">"Kan niet verbinden"</string>
- <string name="disconnecting_peripheral" msgid="5320432304947519207">"Verbinding verbreken"</string>
- <string name="disconnected_peripheral" msgid="2768150931245385916">"Verbinding verbroken"</string>
- <string name="pairing_peripheral" msgid="5618129595426303236">"Koppelen"</string>
- <string name="pairing_peripheral_failed" msgid="976004756112808526">"Kan niet koppelen"</string>
+ <string name="beam_busy" msgid="5253335587620612576">"Beam is momenteel bezet. Probeer het opnieuw zodra de huidige overdracht is voltooid."</string>
+ <string name="device" msgid="4459621591392478151">"apparaat"</string>
+ <string name="connecting_peripheral" msgid="1296182660525660935">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> verbinden"</string>
+ <string name="connected_peripheral" msgid="20748648543160091">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> verbonden"</string>
+ <string name="connect_peripheral_failed" msgid="7925702596242839275">"Kan <xliff:g id="DEVICE_NAME">%1$s</xliff:g> niet verbinden"</string>
+ <string name="disconnecting_peripheral" msgid="1443699384809097200">"Verbinding met <xliff:g id="DEVICE_NAME">%1$s</xliff:g> verbreken"</string>
+ <string name="disconnected_peripheral" msgid="4470578100296504366">"Verbinding met <xliff:g id="DEVICE_NAME">%1$s</xliff:g> verbroken"</string>
+ <string name="pairing_peripheral" msgid="6983626861540899365">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> koppelen"</string>
+ <string name="pairing_peripheral_failed" msgid="6087643307743264679">"Kan <xliff:g id="DEVICE_NAME">%1$s</xliff:g> niet koppelen"</string>
<string name="failed_to_enable_bt" msgid="7229153323594758077">"Kan Bluetooth niet inschakelen"</string>
<string name="confirm_pairing" msgid="4112568077038265363">"Weet u zeker dat u het Bluetooth-apparaat <xliff:g id="DEVICE_NAME">%1$s</xliff:g> wilt koppelen?"</string>
<string name="pair_yes" msgid="3525614878559994448">"Ja"</string>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index ab6422c8..28510cbc 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -18,13 +18,15 @@
<string name="beam_touch_to_view" msgid="7853129156831642630">"Dotknij, by wyświetlić"</string>
<string name="beam_handover_not_supported" msgid="4083165921751489015">"Urządzenie odbierające nie pozwala na zbliżeniowe przesyłanie dużych plików."</string>
<string name="beam_try_again" msgid="3364677301009783455">"Zbliż urządzenia do siebie"</string>
- <string name="connecting_peripheral" msgid="3957490448472434505">"Łączę"</string>
- <string name="connected_peripheral" msgid="5777997713940423952">"Połączono"</string>
- <string name="connect_peripheral_failed" msgid="7173159351147270788">"Nie można nawiązać połączenia"</string>
- <string name="disconnecting_peripheral" msgid="5320432304947519207">"Rozłączam"</string>
- <string name="disconnected_peripheral" msgid="2768150931245385916">"Rozłączono"</string>
- <string name="pairing_peripheral" msgid="5618129595426303236">"Parowanie"</string>
- <string name="pairing_peripheral_failed" msgid="976004756112808526">"Nie można sparować"</string>
+ <string name="beam_busy" msgid="5253335587620612576">"Funkcja Beam jest teraz zajęta. Spróbuj ponownie, gdy zakończy się poprzednia transmisja."</string>
+ <string name="device" msgid="4459621591392478151">"urządzenie"</string>
+ <string name="connecting_peripheral" msgid="1296182660525660935">"Łączę: <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="connected_peripheral" msgid="20748648543160091">"Połączono: <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="connect_peripheral_failed" msgid="7925702596242839275">"Nie udało się połączyć: <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="disconnecting_peripheral" msgid="1443699384809097200">"Odłączam: <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="disconnected_peripheral" msgid="4470578100296504366">"Odłączono: <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="pairing_peripheral" msgid="6983626861540899365">"Paruję: <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="pairing_peripheral_failed" msgid="6087643307743264679">"Nie udało się sparować: <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
<string name="failed_to_enable_bt" msgid="7229153323594758077">"Nie można włączyć Bluetootha"</string>
<string name="confirm_pairing" msgid="4112568077038265363">"Czy na pewno chcesz sparować urządzenie Bluetooth <xliff:g id="DEVICE_NAME">%1$s</xliff:g>?"</string>
<string name="pair_yes" msgid="3525614878559994448">"Tak"</string>
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index ce0b917f..0c78c9c2 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -18,13 +18,15 @@
<string name="beam_touch_to_view" msgid="7853129156831642630">"Tocar para ver"</string>
<string name="beam_handover_not_supported" msgid="4083165921751489015">"O dispositivo do recetor não suporta a transferência de ficheiros grandes através de partilha."</string>
<string name="beam_try_again" msgid="3364677301009783455">"Juntar os dispositivos novamente"</string>
- <string name="connecting_peripheral" msgid="3957490448472434505">"A ligar"</string>
- <string name="connected_peripheral" msgid="5777997713940423952">"Ligado"</string>
- <string name="connect_peripheral_failed" msgid="7173159351147270788">"Não foi possível ligar"</string>
- <string name="disconnecting_peripheral" msgid="5320432304947519207">"A desligar"</string>
- <string name="disconnected_peripheral" msgid="2768150931245385916">"Desligado"</string>
- <string name="pairing_peripheral" msgid="5618129595426303236">"A sincronizar"</string>
- <string name="pairing_peripheral_failed" msgid="976004756112808526">"Não foi possível sincronizar"</string>
+ <string name="beam_busy" msgid="5253335587620612576">"O Beam está atualmente ocupado. Tente novamente quando a transferência anterior for concluída."</string>
+ <string name="device" msgid="4459621591392478151">"dispositivo"</string>
+ <string name="connecting_peripheral" msgid="1296182660525660935">"A ligar o <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> ligado"</string>
+ <string name="connect_peripheral_failed" msgid="7925702596242839275">"Não foi possível ligar o <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="disconnecting_peripheral" msgid="1443699384809097200">"A desligar o <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="disconnected_peripheral" msgid="4470578100296504366">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> desligado"</string>
+ <string name="pairing_peripheral" msgid="6983626861540899365">"A sincronizar o <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="pairing_peripheral_failed" msgid="6087643307743264679">"Não foi possível sincronizar o <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
<string name="failed_to_enable_bt" msgid="7229153323594758077">"Não foi possível ativar o Bluetooth"</string>
<string name="confirm_pairing" msgid="4112568077038265363">"Tem a certeza de que pretende sincronizar o dispositivo Bluetooth <xliff:g id="DEVICE_NAME">%1$s</xliff:g>?"</string>
<string name="pair_yes" msgid="3525614878559994448">"Sim"</string>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index d05244fc..bbf26d06 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -18,13 +18,15 @@
<string name="beam_touch_to_view" msgid="7853129156831642630">"Toque para visualizar"</string>
<string name="beam_handover_not_supported" msgid="4083165921751489015">"O dispositivo receptor não suporta a transferência de arquivos grandes por meio do Android Beam."</string>
<string name="beam_try_again" msgid="3364677301009783455">"Una dispositivos novamente"</string>
- <string name="connecting_peripheral" msgid="3957490448472434505">"Conectando"</string>
- <string name="connected_peripheral" msgid="5777997713940423952">"Conectado"</string>
- <string name="connect_peripheral_failed" msgid="7173159351147270788">"Não foi possível conectar"</string>
- <string name="disconnecting_peripheral" msgid="5320432304947519207">"Desconectando"</string>
- <string name="disconnected_peripheral" msgid="2768150931245385916">"Desconectado"</string>
- <string name="pairing_peripheral" msgid="5618129595426303236">"Pareando"</string>
- <string name="pairing_peripheral_failed" msgid="976004756112808526">"Não foi possível parear"</string>
+ <string name="beam_busy" msgid="5253335587620612576">"O Beam está ocupado no momento. Tente novamente quando a transferência anterior for concluída."</string>
+ <string name="device" msgid="4459621591392478151">"dispositivo"</string>
+ <string name="connecting_peripheral" msgid="1296182660525660935">"Conectando <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> conectado"</string>
+ <string name="connect_peripheral_failed" msgid="7925702596242839275">"Não foi possível conectar o <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="disconnecting_peripheral" msgid="1443699384809097200">"Desconectando <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="disconnected_peripheral" msgid="4470578100296504366">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> desconectado"</string>
+ <string name="pairing_peripheral" msgid="6983626861540899365">"Pareando <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="pairing_peripheral_failed" msgid="6087643307743264679">"Não foi possível parear o <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
<string name="failed_to_enable_bt" msgid="7229153323594758077">"Não foi possível ativar o Bluetooth"</string>
<string name="confirm_pairing" msgid="4112568077038265363">"Tem certeza de que deseja parear o dispositivo Bluetooth <xliff:g id="DEVICE_NAME">%1$s</xliff:g>?"</string>
<string name="pair_yes" msgid="3525614878559994448">"Sim"</string>
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml
index 3dd9c0d9..8749531c 100644
--- a/res/values-ro/strings.xml
+++ b/res/values-ro/strings.xml
@@ -18,13 +18,15 @@
<string name="beam_touch_to_view" msgid="7853129156831642630">"Atingeţi pentru a afişa"</string>
<string name="beam_handover_not_supported" msgid="4083165921751489015">"Dispozitivul destinatarului nu acceptă transferul fişierelor mari prin fascicul."</string>
<string name="beam_try_again" msgid="3364677301009783455">"Apropiați dispozitivele din nou"</string>
- <string name="connecting_peripheral" msgid="3957490448472434505">"Se conectează"</string>
- <string name="connected_peripheral" msgid="5777997713940423952">"Conectat"</string>
- <string name="connect_peripheral_failed" msgid="7173159351147270788">"Nu s-a putut realiza conectarea"</string>
- <string name="disconnecting_peripheral" msgid="5320432304947519207">"Se deconectează"</string>
- <string name="disconnected_peripheral" msgid="2768150931245385916">"Deconectat"</string>
- <string name="pairing_peripheral" msgid="5618129595426303236">"Se împerechează"</string>
- <string name="pairing_peripheral_failed" msgid="976004756112808526">"Împerecherea a eșuat"</string>
+ <string name="beam_busy" msgid="5253335587620612576">"Beam este ocupat. Încercați după finalizarea transferului anterior."</string>
+ <string name="device" msgid="4459621591392478151">"dispozitiv"</string>
+ <string name="connecting_peripheral" msgid="1296182660525660935">"Se conectează <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="connected_peripheral" msgid="20748648543160091">"S-a conectat <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="connect_peripheral_failed" msgid="7925702596242839275">"Nu s-a putut conecta <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="disconnecting_peripheral" msgid="1443699384809097200">"Se deconectează <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="disconnected_peripheral" msgid="4470578100296504366">"S-a deconectat <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="pairing_peripheral" msgid="6983626861540899365">"Se asociază <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="pairing_peripheral_failed" msgid="6087643307743264679">"Nu s-a putut asocia <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
<string name="failed_to_enable_bt" msgid="7229153323594758077">"Activarea Bluetooth a eşuat"</string>
<string name="confirm_pairing" msgid="4112568077038265363">"Sigur doriţi să împerecheaţi dispozitivul Bluetooth <xliff:g id="DEVICE_NAME">%1$s</xliff:g>?"</string>
<string name="pair_yes" msgid="3525614878559994448">"Da"</string>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index 0427dd89..ea338e9d 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -18,13 +18,15 @@
<string name="beam_touch_to_view" msgid="7853129156831642630">"Нажмите, чтобы просмотреть"</string>
<string name="beam_handover_not_supported" msgid="4083165921751489015">"Устройство получателя не поддерживает передачу больших объемов данных через Android Beam."</string>
<string name="beam_try_again" msgid="3364677301009783455">"Повторить попытку"</string>
- <string name="connecting_peripheral" msgid="3957490448472434505">"Подключение…"</string>
- <string name="connected_peripheral" msgid="5777997713940423952">"Подключено"</string>
- <string name="connect_peripheral_failed" msgid="7173159351147270788">"Ошибка подключения"</string>
- <string name="disconnecting_peripheral" msgid="5320432304947519207">"Отключение…"</string>
- <string name="disconnected_peripheral" msgid="2768150931245385916">"Не подключено"</string>
- <string name="pairing_peripheral" msgid="5618129595426303236">"Подключение…"</string>
- <string name="pairing_peripheral_failed" msgid="976004756112808526">"Ошибка подключения"</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>
+ <string name="connect_peripheral_failed" msgid="7925702596242839275">"Не удалось подключить устройство <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="disconnecting_peripheral" msgid="1443699384809097200">"Устройство <xliff:g id="DEVICE_NAME">%1$s</xliff:g> отключается"</string>
+ <string name="disconnected_peripheral" msgid="4470578100296504366">"Устройство <xliff:g id="DEVICE_NAME">%1$s</xliff:g> отключено"</string>
+ <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="pair_yes" msgid="3525614878559994448">"Да"</string>
diff --git a/res/values-si-rLK/strings.xml b/res/values-si-rLK/strings.xml
index ddf0bc68..611167ac 100644
--- a/res/values-si-rLK/strings.xml
+++ b/res/values-si-rLK/strings.xml
@@ -18,13 +18,15 @@
<string name="beam_touch_to_view" msgid="7853129156831642630">"බැලීමට ස්පර්ශ කරන්න"</string>
<string name="beam_handover_not_supported" msgid="4083165921751489015">"බීම් ඔස්සේ ලැබෙන්නාගේ උපාංගය විශාල ගොනු හුවමාරුව සඳහා සහය නොදක්වයි."</string>
<string name="beam_try_again" msgid="3364677301009783455">"නැවතත් උපාංග එකට ගෙනෙන්න"</string>
- <string name="connecting_peripheral" msgid="3957490448472434505">"සම්බන්ධ වෙමින්"</string>
- <string name="connected_peripheral" msgid="5777997713940423952">"සම්බන්ධිත"</string>
- <string name="connect_peripheral_failed" msgid="7173159351147270788">"සම්බන්ධ විය නොහැක"</string>
- <string name="disconnecting_peripheral" msgid="5320432304947519207">"විසන්ධි වෙමින්"</string>
- <string name="disconnected_peripheral" msgid="2768150931245385916">"විසන්ධි වුණි"</string>
- <string name="pairing_peripheral" msgid="5618129595426303236">"යුගල කරමින්"</string>
- <string name="pairing_peripheral_failed" msgid="976004756112808526">"යුගල කළ නොහැක"</string>
+ <string name="beam_busy" msgid="5253335587620612576">"Beam දැනට කාර්ය බහුලය. පෙර මාරුව සම්පූර්ණ වන විට නැවත උත්සාහ කරන්න."</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>
+ <string name="disconnecting_peripheral" msgid="1443699384809097200">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> විසන්ධි කරමින්"</string>
+ <string name="disconnected_peripheral" msgid="4470578100296504366">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> විසන්ධි කරන ලදී"</string>
+ <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="pair_yes" msgid="3525614878559994448">"ඔව්"</string>
diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml
index af401d8e..f87be62b 100644
--- a/res/values-sk/strings.xml
+++ b/res/values-sk/strings.xml
@@ -18,13 +18,15 @@
<string name="beam_touch_to_view" msgid="7853129156831642630">"Zobrazte dotykom"</string>
<string name="beam_handover_not_supported" msgid="4083165921751489015">"Zariadenie príjemcu nepodporuje prenos veľkých súborov prostredníctvom funkcie Beam."</string>
<string name="beam_try_again" msgid="3364677301009783455">"Znova priblížte zariadenia"</string>
- <string name="connecting_peripheral" msgid="3957490448472434505">"Pripája sa"</string>
- <string name="connected_peripheral" msgid="5777997713940423952">"Pripojené"</string>
- <string name="connect_peripheral_failed" msgid="7173159351147270788">"Nepodarilo sa pripojiť"</string>
- <string name="disconnecting_peripheral" msgid="5320432304947519207">"Odpája sa"</string>
- <string name="disconnected_peripheral" msgid="2768150931245385916">"Odpojené"</string>
- <string name="pairing_peripheral" msgid="5618129595426303236">"Páruje sa"</string>
- <string name="pairing_peripheral_failed" msgid="976004756112808526">"Nie je možné spárovať"</string>
+ <string name="beam_busy" msgid="5253335587620612576">"Aplikácia Beam je momentálne zaneprázdnená. Skúste to znova, keď sa dokončí predchádzajúci prenos."</string>
+ <string name="device" msgid="4459621591392478151">"zariadenie"</string>
+ <string name="connecting_peripheral" msgid="1296182660525660935">"Pripája sa zariadenie <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="connected_peripheral" msgid="20748648543160091">"Zariadenie <xliff:g id="DEVICE_NAME">%1$s</xliff:g> je pripojené"</string>
+ <string name="connect_peripheral_failed" msgid="7925702596242839275">"Zariadenie <xliff:g id="DEVICE_NAME">%1$s</xliff:g> sa nepodarilo pripojiť"</string>
+ <string name="disconnecting_peripheral" msgid="1443699384809097200">"Odpája sa zariadenie <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="disconnected_peripheral" msgid="4470578100296504366">"Zariadenie <xliff:g id="DEVICE_NAME">%1$s</xliff:g> bolo odpojené"</string>
+ <string name="pairing_peripheral" msgid="6983626861540899365">"Páruje sa zariadenie <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="pairing_peripheral_failed" msgid="6087643307743264679">"Zariadenie <xliff:g id="DEVICE_NAME">%1$s</xliff:g> sa nepodarilo spárovať"</string>
<string name="failed_to_enable_bt" msgid="7229153323594758077">"Bluetooth sa nepodarilo povoliť"</string>
<string name="confirm_pairing" msgid="4112568077038265363">"Naozaj chcete spárovať zariadenie Bluetooth <xliff:g id="DEVICE_NAME">%1$s</xliff:g>?"</string>
<string name="pair_yes" msgid="3525614878559994448">"Áno"</string>
diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml
index 2c16197d..2fc02a4d 100644
--- a/res/values-sl/strings.xml
+++ b/res/values-sl/strings.xml
@@ -18,13 +18,15 @@
<string name="beam_touch_to_view" msgid="7853129156831642630">"Dotaknite se za prikaz"</string>
<string name="beam_handover_not_supported" msgid="4083165921751489015">"Prejemnikova naprava ne podpira prenosa velikih datotek prek funkcije Android Beam."</string>
<string name="beam_try_again" msgid="3364677301009783455">"Znova združi naprave"</string>
- <string name="connecting_peripheral" msgid="3957490448472434505">"Vzpostavljanje povezave"</string>
- <string name="connected_peripheral" msgid="5777997713940423952">"Povezava je vzpostavljena"</string>
- <string name="connect_peripheral_failed" msgid="7173159351147270788">"Povezava ni mogoča"</string>
- <string name="disconnecting_peripheral" msgid="5320432304947519207">"Prekinjanje povezave"</string>
- <string name="disconnected_peripheral" msgid="2768150931245385916">"Povezava je prekinjena"</string>
- <string name="pairing_peripheral" msgid="5618129595426303236">"Seznanjanje"</string>
- <string name="pairing_peripheral_failed" msgid="976004756112808526">"Seznanitev ni mogoča"</string>
+ <string name="beam_busy" msgid="5253335587620612576">"Android Beam je trenutno zaseden. Poskusite znova, ko se konča prejšnji prenos."</string>
+ <string name="device" msgid="4459621591392478151">"naprava"</string>
+ <string name="connecting_peripheral" msgid="1296182660525660935">"Povezovanje naprave <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="connected_peripheral" msgid="20748648543160091">"Naprava <xliff:g id="DEVICE_NAME">%1$s</xliff:g> je povezana"</string>
+ <string name="connect_peripheral_failed" msgid="7925702596242839275">"Naprave <xliff:g id="DEVICE_NAME">%1$s</xliff:g> ni mogoče povezati"</string>
+ <string name="disconnecting_peripheral" msgid="1443699384809097200">"Prekinjanje povezave z napravo <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="disconnected_peripheral" msgid="4470578100296504366">"Povezava z napravo <xliff:g id="DEVICE_NAME">%1$s</xliff:g> je prekinjena"</string>
+ <string name="pairing_peripheral" msgid="6983626861540899365">"Seznanjanje naprave <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="pairing_peripheral_failed" msgid="6087643307743264679">"Naprave <xliff:g id="DEVICE_NAME">%1$s</xliff:g> ni bilo mogoče seznaniti"</string>
<string name="failed_to_enable_bt" msgid="7229153323594758077">"Bluetootha ni mogoče omogočiti"</string>
<string name="confirm_pairing" msgid="4112568077038265363">"Ste prepričani, da želite seznaniti napravo Bluetooth <xliff:g id="DEVICE_NAME">%1$s</xliff:g>?"</string>
<string name="pair_yes" msgid="3525614878559994448">"Da"</string>
diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml
index b485e2ee..d48f5a64 100644
--- a/res/values-sr/strings.xml
+++ b/res/values-sr/strings.xml
@@ -18,13 +18,15 @@
<string name="beam_touch_to_view" msgid="7853129156831642630">"Додирните да бисте прегледали"</string>
<string name="beam_handover_not_supported" msgid="4083165921751489015">"Уређај пријемника не подржава пренос великих датотека пребацивањем."</string>
<string name="beam_try_again" msgid="3364677301009783455">"Поново приближите уређаје"</string>
- <string name="connecting_peripheral" msgid="3957490448472434505">"Повезивање"</string>
- <string name="connected_peripheral" msgid="5777997713940423952">"Повезано је"</string>
- <string name="connect_peripheral_failed" msgid="7173159351147270788">"Повезивање није успело"</string>
- <string name="disconnecting_peripheral" msgid="5320432304947519207">"Прекидање везе"</string>
- <string name="disconnected_peripheral" msgid="2768150931245385916">"Веза је прекинута"</string>
- <string name="pairing_peripheral" msgid="5618129595426303236">"Упаривање"</string>
- <string name="pairing_peripheral_failed" msgid="976004756112808526">"Упаривање није успело"</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>
+ <string name="connect_peripheral_failed" msgid="7925702596242839275">"Повезивање са уређајем <xliff:g id="DEVICE_NAME">%1$s</xliff:g> није успело"</string>
+ <string name="disconnecting_peripheral" msgid="1443699384809097200">"Прекидање везе са уређајем <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="disconnected_peripheral" msgid="4470578100296504366">"Веза са уређајем <xliff:g id="DEVICE_NAME">%1$s</xliff:g> је прекинута"</string>
+ <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="pair_yes" msgid="3525614878559994448">"Да"</string>
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index e4dc0507..45455209 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -18,13 +18,15 @@
<string name="beam_touch_to_view" msgid="7853129156831642630">"Tryck och visa"</string>
<string name="beam_handover_not_supported" msgid="4083165921751489015">"Mottagarens enheten stöder inte trådlös överföring av stora filer."</string>
<string name="beam_try_again" msgid="3364677301009783455">"För samman enheterna igen"</string>
- <string name="connecting_peripheral" msgid="3957490448472434505">"Ansluter"</string>
- <string name="connected_peripheral" msgid="5777997713940423952">"Ansluten"</string>
- <string name="connect_peripheral_failed" msgid="7173159351147270788">"Det gick inte att ansluta"</string>
- <string name="disconnecting_peripheral" msgid="5320432304947519207">"Anslutningen avbryts"</string>
- <string name="disconnected_peripheral" msgid="2768150931245385916">"Frånkopplad"</string>
- <string name="pairing_peripheral" msgid="5618129595426303236">"Kopplar"</string>
- <string name="pairing_peripheral_failed" msgid="976004756112808526">"Det gick inte att koppla"</string>
+ <string name="beam_busy" msgid="5253335587620612576">"Beam används för närvarande. Försök igen när den pågående överföringen är klar."</string>
+ <string name="device" msgid="4459621591392478151">"enhet"</string>
+ <string name="connecting_peripheral" msgid="1296182660525660935">"Ansluter <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> har anslutits"</string>
+ <string name="connect_peripheral_failed" msgid="7925702596242839275">"Det gick inte att ansluta <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="disconnecting_peripheral" msgid="1443699384809097200">"Kopplar från <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="disconnected_peripheral" msgid="4470578100296504366">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> har kopplats från"</string>
+ <string name="pairing_peripheral" msgid="6983626861540899365">"Kopplar <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="pairing_peripheral_failed" msgid="6087643307743264679">"Det gick inte att koppla <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
<string name="failed_to_enable_bt" msgid="7229153323594758077">"Det gick inte att aktivera Bluetooth"</string>
<string name="confirm_pairing" msgid="4112568077038265363">"Är du säker på att du vill para ihop Bluetooth-enheten <xliff:g id="DEVICE_NAME">%1$s</xliff:g>?"</string>
<string name="pair_yes" msgid="3525614878559994448">"Ja"</string>
diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml
index 8db6fb82..49ddd867 100644
--- a/res/values-sw/strings.xml
+++ b/res/values-sw/strings.xml
@@ -18,13 +18,15 @@
<string name="beam_touch_to_view" msgid="7853129156831642630">"Gusa ili utazame"</string>
<string name="beam_handover_not_supported" msgid="4083165921751489015">"Kifaa cha upokeaji hakihimili uhamishaji wa faili kubwa kupitia kwenye boriti."</string>
<string name="beam_try_again" msgid="3364677301009783455">"Unganisha vifaa tena"</string>
- <string name="connecting_peripheral" msgid="3957490448472434505">"Inaunganisha"</string>
- <string name="connected_peripheral" msgid="5777997713940423952">"Imeunganishwa"</string>
- <string name="connect_peripheral_failed" msgid="7173159351147270788">"Haikuweza kuunganisha"</string>
- <string name="disconnecting_peripheral" msgid="5320432304947519207">"Inakata muunganisho"</string>
- <string name="disconnected_peripheral" msgid="2768150931245385916">"Imekata muunganisho"</string>
- <string name="pairing_peripheral" msgid="5618129595426303236">"Inaoanisha"</string>
- <string name="pairing_peripheral_failed" msgid="976004756112808526">"Haikuweza kuoanisha"</string>
+ <string name="beam_busy" msgid="5253335587620612576">"Android Beam inatumika kwa sasa. Jaribu tena itakapokamilisha uhamishaji uliotangulia."</string>
+ <string name="device" msgid="4459621591392478151">"kifaa"</string>
+ <string name="connecting_peripheral" msgid="1296182660525660935">"Inaunganisha <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="connected_peripheral" msgid="20748648543160091">"Imeunganisha <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="connect_peripheral_failed" msgid="7925702596242839275">"Haikuweza kuunganisha <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="disconnecting_peripheral" msgid="1443699384809097200">"Inaondoa <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="disconnected_peripheral" msgid="4470578100296504366">"Imeondoa <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="pairing_peripheral" msgid="6983626861540899365">"Inaoanisha <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="pairing_peripheral_failed" msgid="6087643307743264679">"Haikuweza kuoanisha <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
<string name="failed_to_enable_bt" msgid="7229153323594758077">"Haikuweza kuwezesha Bluetooth"</string>
<string name="confirm_pairing" msgid="4112568077038265363">"Una uhakika unataka kuoanisha kifaa cha Bluetooth cha <xliff:g id="DEVICE_NAME">%1$s</xliff:g>?"</string>
<string name="pair_yes" msgid="3525614878559994448">"Ndiyo"</string>
diff --git a/res/values-ta-rIN/strings.xml b/res/values-ta-rIN/strings.xml
index 235bb75f..62e9bd06 100644
--- a/res/values-ta-rIN/strings.xml
+++ b/res/values-ta-rIN/strings.xml
@@ -18,13 +18,15 @@
<string name="beam_touch_to_view" msgid="7853129156831642630">"பார்க்கத் தொடவும்"</string>
<string name="beam_handover_not_supported" msgid="4083165921751489015">"பெறுநரின் சாதனம் பீம் வழியான பெரிய கோப்புப் பரிமாற்றத்தை ஆதரிக்கவில்லை."</string>
<string name="beam_try_again" msgid="3364677301009783455">"மீண்டும் சாதனங்களை ஒன்றாகக் கொண்டுவரவும்"</string>
- <string name="connecting_peripheral" msgid="3957490448472434505">"இணைக்கிறது"</string>
- <string name="connected_peripheral" msgid="5777997713940423952">"இணைக்கப்பட்டது"</string>
- <string name="connect_peripheral_failed" msgid="7173159351147270788">"இணைக்க முடியவில்லை"</string>
- <string name="disconnecting_peripheral" msgid="5320432304947519207">"துண்டிக்கிறது"</string>
- <string name="disconnected_peripheral" msgid="2768150931245385916">"துண்டிக்கப்பட்டது"</string>
- <string name="pairing_peripheral" msgid="5618129595426303236">"இணைக்கிறது"</string>
- <string name="pairing_peripheral_failed" msgid="976004756112808526">"இணைக்க முடியவில்லை"</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>
+ <string name="connect_peripheral_failed" msgid="7925702596242839275">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>ஐ இணைக்க முடியவில்லை"</string>
+ <string name="disconnecting_peripheral" msgid="1443699384809097200">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> துண்டிக்கப்படுகிறது"</string>
+ <string name="disconnected_peripheral" msgid="4470578100296504366">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> துண்டிக்கப்பட்டது"</string>
+ <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="pair_yes" msgid="3525614878559994448">"ஆம்"</string>
diff --git a/res/values-te-rIN/strings.xml b/res/values-te-rIN/strings.xml
index fef49295..bf66fd9b 100644
--- a/res/values-te-rIN/strings.xml
+++ b/res/values-te-rIN/strings.xml
@@ -18,13 +18,15 @@
<string name="beam_touch_to_view" msgid="7853129156831642630">"వీక్షించడానికి తాకండి"</string>
<string name="beam_handover_not_supported" msgid="4083165921751489015">"స్వీకర్త పరికరం Beam ద్వారా పెద్ద ఫైల్ బదిలీకి మద్దతు ఇవ్వదు."</string>
<string name="beam_try_again" msgid="3364677301009783455">"పరికరాలను మళ్లీ సమీపంలోకి తీసుకురండి"</string>
- <string name="connecting_peripheral" msgid="3957490448472434505">"కనెక్ట్ చేస్తోంది"</string>
- <string name="connected_peripheral" msgid="5777997713940423952">"కనెక్ట్ చేయబడింది"</string>
- <string name="connect_peripheral_failed" msgid="7173159351147270788">"కనెక్ట్ చేయడం సాధ్యపడలేదు"</string>
- <string name="disconnecting_peripheral" msgid="5320432304947519207">"డిస్‌కనెక్ట్ చేస్తోంది"</string>
- <string name="disconnected_peripheral" msgid="2768150931245385916">"డిస్‌కనెక్ట్ చేయబడింది"</string>
- <string name="pairing_peripheral" msgid="5618129595426303236">"జత చేస్తోంది"</string>
- <string name="pairing_peripheral_failed" msgid="976004756112808526">"జత చేయడం సాధ్యపడలేదు"</string>
+ <string name="beam_busy" msgid="5253335587620612576">"Beam ప్రస్తుతం బిజీగా ఉంది. మునుపటి బదిలీ పూర్తయిన తర్వాత మళ్లీ ప్రయత్నించండి."</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>
+ <string name="disconnecting_peripheral" msgid="1443699384809097200">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>ని డిస్‌కనెక్ట్ చేస్తోంది"</string>
+ <string name="disconnected_peripheral" msgid="4470578100296504366">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> డిస్‌కనెక్ట్ చేయబడింది"</string>
+ <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="pair_yes" msgid="3525614878559994448">"అవును"</string>
diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml
index 7e26b1f0..426a1400 100644
--- a/res/values-th/strings.xml
+++ b/res/values-th/strings.xml
@@ -18,13 +18,15 @@
<string name="beam_touch_to_view" msgid="7853129156831642630">"แตะเพื่อดู"</string>
<string name="beam_handover_not_supported" msgid="4083165921751489015">"อุปกรณ์ของผู้รับไม่สนับสนุนการถ่ายโอนไฟล์ขนาดใหญ่ผ่านการบีม"</string>
<string name="beam_try_again" msgid="3364677301009783455">"นำอุปกรณ์มารวมกันอีกครั้ง"</string>
- <string name="connecting_peripheral" msgid="3957490448472434505">"กำลังเชื่อมต่อ"</string>
- <string name="connected_peripheral" msgid="5777997713940423952">"เชื่อมต่อแล้ว"</string>
- <string name="connect_peripheral_failed" msgid="7173159351147270788">"ไม่สามารถเชื่อมต่อ"</string>
- <string name="disconnecting_peripheral" msgid="5320432304947519207">"กำลังยกเลิกการเชื่อมต่อ"</string>
- <string name="disconnected_peripheral" msgid="2768150931245385916">"ยกเลิกการเชื่อมต่อแล้ว"</string>
- <string name="pairing_peripheral" msgid="5618129595426303236">"กำลังจับคู่อุปกรณ์"</string>
- <string name="pairing_peripheral_failed" msgid="976004756112808526">"ไม่สามารถจับคู่อุปกรณ์"</string>
+ <string name="beam_busy" msgid="5253335587620612576">"Beam ไม่ว่างในขณะนี้ ลองอีกครั้งเมื่อการโอนก่อนหน้าเสร็จสมบูรณ์แล้ว"</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>
+ <string name="disconnecting_peripheral" msgid="1443699384809097200">"กำลังยกเลิกการเชื่อมต่อกับ <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="disconnected_peripheral" msgid="4470578100296504366">"ยกเลิกการเชื่อมต่อกับ <xliff:g id="DEVICE_NAME">%1$s</xliff:g> แล้ว"</string>
+ <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="pair_yes" msgid="3525614878559994448">"ใช่"</string>
diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml
index 02b71ab1..a37e4b0b 100644
--- a/res/values-tl/strings.xml
+++ b/res/values-tl/strings.xml
@@ -18,13 +18,15 @@
<string name="beam_touch_to_view" msgid="7853129156831642630">"Pindutin upang tingnan"</string>
<string name="beam_handover_not_supported" msgid="4083165921751489015">"Hindi sinusuportahan ng device ng receiver ang malaking paglipat ng file sa pamamagitan ng beam."</string>
<string name="beam_try_again" msgid="3364677301009783455">"Pagsamahing muli ang mga device"</string>
- <string name="connecting_peripheral" msgid="3957490448472434505">"Kumokonekta"</string>
- <string name="connected_peripheral" msgid="5777997713940423952">"Nakakonekta"</string>
- <string name="connect_peripheral_failed" msgid="7173159351147270788">"Hindi makakonekta"</string>
- <string name="disconnecting_peripheral" msgid="5320432304947519207">"Nagdidiskonekta"</string>
- <string name="disconnected_peripheral" msgid="2768150931245385916">"Nadiskonekta"</string>
- <string name="pairing_peripheral" msgid="5618129595426303236">"Nagpapares"</string>
- <string name="pairing_peripheral_failed" msgid="976004756112808526">"Hindi makapagpares"</string>
+ <string name="beam_busy" msgid="5253335587620612576">"Kasalukuyang abala ang beam. Subukang muli kapag nakumpleto na ang dating paglilipat."</string>
+ <string name="device" msgid="4459621591392478151">"device"</string>
+ <string name="connecting_peripheral" msgid="1296182660525660935">"Ikinokonekta ang <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="connected_peripheral" msgid="20748648543160091">"Naikonekta na ang <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="connect_peripheral_failed" msgid="7925702596242839275">"Hindi naikonekta ang <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="disconnecting_peripheral" msgid="1443699384809097200">"Idinidiskonekta ang <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="disconnected_peripheral" msgid="4470578100296504366">"Nadiskonekta ang <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="pairing_peripheral" msgid="6983626861540899365">"Ipinapares ang <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="pairing_peripheral_failed" msgid="6087643307743264679">"Hindi naipares ang <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
<string name="failed_to_enable_bt" msgid="7229153323594758077">"Hindi mapagana ang Bluetooth"</string>
<string name="confirm_pairing" msgid="4112568077038265363">"Sigurado ka bang nais mong ipares ang Bluetooth device na <xliff:g id="DEVICE_NAME">%1$s</xliff:g>?"</string>
<string name="pair_yes" msgid="3525614878559994448">"Oo"</string>
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index 382dbfe9..b592b7e8 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -18,13 +18,15 @@
<string name="beam_touch_to_view" msgid="7853129156831642630">"Görüntülemek için dokunun"</string>
<string name="beam_handover_not_supported" msgid="4083165921751489015">"Alıcının cihazı yüksek boyutlu dosyaların ışınlamayla aktarılmasını desteklemiyor."</string>
<string name="beam_try_again" msgid="3364677301009783455">"Cihazları tekrar bir araya getirin"</string>
- <string name="connecting_peripheral" msgid="3957490448472434505">"Bağlanılıyor"</string>
- <string name="connected_peripheral" msgid="5777997713940423952">"Bağlı"</string>
- <string name="connect_peripheral_failed" msgid="7173159351147270788">"Bağlantı kurulamadı"</string>
- <string name="disconnecting_peripheral" msgid="5320432304947519207">"Bağlantı kesiliyor"</string>
- <string name="disconnected_peripheral" msgid="2768150931245385916">"Bağlantı kesildi"</string>
- <string name="pairing_peripheral" msgid="5618129595426303236">"Eşleştiriliyor"</string>
- <string name="pairing_peripheral_failed" msgid="976004756112808526">"Eşleştirilemedi"</string>
+ <string name="beam_busy" msgid="5253335587620612576">"Android Beam şu anda meşgul. Önceki aktarım işlemi tamamlandığında tekrar deneyin."</string>
+ <string name="device" msgid="4459621591392478151">"cihaz"</string>
+ <string name="connecting_peripheral" msgid="1296182660525660935">"Şu cihaza bağlanılıyor: <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="connected_peripheral" msgid="20748648543160091">"Şu cihaza bağlanıldı: <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="connect_peripheral_failed" msgid="7925702596242839275">"Şu cihaza bağlanılamadı: <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="disconnecting_peripheral" msgid="1443699384809097200">"Şu cihazın bağlantısı kesiliyor: <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="disconnected_peripheral" msgid="4470578100296504366">"Şu cihazın bağlantısı kesildi: <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="pairing_peripheral" msgid="6983626861540899365">"Şu cihazla eşleştiriliyor: <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="pairing_peripheral_failed" msgid="6087643307743264679">"Şu cihazla eşleştirilemedi: <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
<string name="failed_to_enable_bt" msgid="7229153323594758077">"Bluetooth etkinleştirilemedi"</string>
<string name="confirm_pairing" msgid="4112568077038265363">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> adlı Bluetooth cihazını eşlemek istediğinizden emin misiniz?"</string>
<string name="pair_yes" msgid="3525614878559994448">"Evet"</string>
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml
index 284104c2..2c7e0b2f 100644
--- a/res/values-uk/strings.xml
+++ b/res/values-uk/strings.xml
@@ -18,13 +18,15 @@
<string name="beam_touch_to_view" msgid="7853129156831642630">"Торкніться, щоб переглянути"</string>
<string name="beam_handover_not_supported" msgid="4083165921751489015">"Пристрій отримувача не підтримує пересилання великих файлів за допомогою функції Передавання даних Android."</string>
<string name="beam_try_again" msgid="3364677301009783455">"Знову притуліть пристрої один до одного"</string>
- <string name="connecting_peripheral" msgid="3957490448472434505">"Під’єднання"</string>
- <string name="connected_peripheral" msgid="5777997713940423952">"Під’єднано"</string>
- <string name="connect_peripheral_failed" msgid="7173159351147270788">"Не вдалося під’єднатись"</string>
- <string name="disconnecting_peripheral" msgid="5320432304947519207">"Від’єднання"</string>
- <string name="disconnected_peripheral" msgid="2768150931245385916">"Від’єднано"</string>
- <string name="pairing_peripheral" msgid="5618129595426303236">"Підключення"</string>
- <string name="pairing_peripheral_failed" msgid="976004756112808526">"Не вдалося підключитися"</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>
+ <string name="connect_peripheral_failed" msgid="7925702596242839275">"Пристрій <xliff:g id="DEVICE_NAME">%1$s</xliff:g> не під’єднано"</string>
+ <string name="disconnecting_peripheral" msgid="1443699384809097200">"Від’єднання пристрою <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="disconnected_peripheral" msgid="4470578100296504366">"Пристрій <xliff:g id="DEVICE_NAME">%1$s</xliff:g> від’єднано"</string>
+ <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="pair_yes" msgid="3525614878559994448">"Так"</string>
diff --git a/res/values-ur-rPK/strings.xml b/res/values-ur-rPK/strings.xml
index ac4937f6..8622bc0d 100644
--- a/res/values-ur-rPK/strings.xml
+++ b/res/values-ur-rPK/strings.xml
@@ -18,13 +18,15 @@
<string name="beam_touch_to_view" msgid="7853129156831642630">"دیکھنے کیلئے ٹچ کریں"</string>
<string name="beam_handover_not_supported" msgid="4083165921751489015">"موصول کرنے والے کا آلہ بیم کے ذریعے بڑی فائل کی منتقلی کا تعاون نہیں کرتا ہے۔"</string>
<string name="beam_try_again" msgid="3364677301009783455">"آلات کو دوبارہ سے ساتھ لائیں"</string>
- <string name="connecting_peripheral" msgid="3957490448472434505">"منسلک کیا جا رہا ہے"</string>
- <string name="connected_peripheral" msgid="5777997713940423952">"منسلک ہے"</string>
- <string name="connect_peripheral_failed" msgid="7173159351147270788">"مربوط نہیں ہو سکا"</string>
- <string name="disconnecting_peripheral" msgid="5320432304947519207">"غیر منسلک کیا جا رہا ہے"</string>
- <string name="disconnected_peripheral" msgid="2768150931245385916">"غیر منسلک ہے"</string>
- <string name="pairing_peripheral" msgid="5618129595426303236">"جوڑا بنایا جا رہا ہے"</string>
- <string name="pairing_peripheral_failed" msgid="976004756112808526">"جوڑا نہیں بنایا جا سکا"</string>
+ <string name="beam_busy" msgid="5253335587620612576">"‏Beam فی الحال مصروف ہے۔ سابقہ منتقلی مکمل ہونے پر دوبارہ کوشش کریں۔"</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>
+ <string name="disconnecting_peripheral" msgid="1443699384809097200">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> غیر منسلک ہو رہا ہے"</string>
+ <string name="disconnected_peripheral" msgid="4470578100296504366">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> غیر منسلک ہوگیا"</string>
+ <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="pair_yes" msgid="3525614878559994448">"ہاں"</string>
diff --git a/res/values-uz-rUZ/strings.xml b/res/values-uz-rUZ/strings.xml
index 415a2164..1c71337d 100644
--- a/res/values-uz-rUZ/strings.xml
+++ b/res/values-uz-rUZ/strings.xml
@@ -18,13 +18,15 @@
<string name="beam_touch_to_view" msgid="7853129156831642630">"Ko‘rish uchun bosing"</string>
<string name="beam_handover_not_supported" msgid="4083165921751489015">"Qabul qiluvchining qurilmasi o‘tkazish xususiyati orqali katta hajmdagi fayllar o‘tkazmasini qo‘llab-quvvatlamaydi."</string>
<string name="beam_try_again" msgid="3364677301009783455">"Qurilmalarni yana jipslashtiring"</string>
- <string name="connecting_peripheral" msgid="3957490448472434505">"Ulanmoqda"</string>
- <string name="connected_peripheral" msgid="5777997713940423952">"Ulandi"</string>
- <string name="connect_peripheral_failed" msgid="7173159351147270788">"Ulanib bo‘lmadi"</string>
- <string name="disconnecting_peripheral" msgid="5320432304947519207">"Aloqa uzilmoqda"</string>
- <string name="disconnected_peripheral" msgid="2768150931245385916">"Aloqa uzildi"</string>
- <string name="pairing_peripheral" msgid="5618129595426303236">"Ulanmoqda"</string>
- <string name="pairing_peripheral_failed" msgid="976004756112808526">"Ulanib bo‘lmadi"</string>
+ <string name="beam_busy" msgid="5253335587620612576">"Beam hozirda band. Avvalgi o‘tkazma tugallangach, qaytadan urining."</string>
+ <string name="device" msgid="4459621591392478151">"qurilma"</string>
+ <string name="connecting_peripheral" msgid="1296182660525660935">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> ulanmoqda"</string>
+ <string name="connected_peripheral" msgid="20748648543160091">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> ulandi"</string>
+ <string name="connect_peripheral_failed" msgid="7925702596242839275">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> ulanmadi"</string>
+ <string name="disconnecting_peripheral" msgid="1443699384809097200">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> bilan aloqa uzilmoqda"</string>
+ <string name="disconnected_peripheral" msgid="4470578100296504366">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> bilan aloqa uzildi"</string>
+ <string name="pairing_peripheral" msgid="6983626861540899365">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> ulanmoqda"</string>
+ <string name="pairing_peripheral_failed" msgid="6087643307743264679">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> ulanmadi"</string>
<string name="failed_to_enable_bt" msgid="7229153323594758077">"Bluetooth’ni yoqib bo‘lmadi"</string>
<string name="confirm_pairing" msgid="4112568077038265363">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> Bluetooth qurilmasini bo‘glashga ishonchingiz komilmi?"</string>
<string name="pair_yes" msgid="3525614878559994448">"Ha"</string>
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
index e1a203ce..17cfefde 100644
--- a/res/values-vi/strings.xml
+++ b/res/values-vi/strings.xml
@@ -18,13 +18,15 @@
<string name="beam_touch_to_view" msgid="7853129156831642630">"Chạm để xem"</string>
<string name="beam_handover_not_supported" msgid="4083165921751489015">"Thiết bị của người nhận không hỗ trợ truyền tệp lớn qua quá trình chiếu."</string>
<string name="beam_try_again" msgid="3364677301009783455">"Nhóm các thiết bị lại với nhau lần nữa"</string>
- <string name="connecting_peripheral" msgid="3957490448472434505">"Đang kết nối"</string>
- <string name="connected_peripheral" msgid="5777997713940423952">"Đã kết nối"</string>
- <string name="connect_peripheral_failed" msgid="7173159351147270788">"Không thể kết nối"</string>
- <string name="disconnecting_peripheral" msgid="5320432304947519207">"Đang ngắt kết nối"</string>
- <string name="disconnected_peripheral" msgid="2768150931245385916">"Đã ngắt kết nối"</string>
- <string name="pairing_peripheral" msgid="5618129595426303236">"Đang ghép nối"</string>
- <string name="pairing_peripheral_failed" msgid="976004756112808526">"Không thể ghép nối"</string>
+ <string name="beam_busy" msgid="5253335587620612576">"Beam hiện đang bận. Hãy thử lại khi quá trình truyền trước đây hoàn tất."</string>
+ <string name="device" msgid="4459621591392478151">"thiết bị"</string>
+ <string name="connecting_peripheral" msgid="1296182660525660935">"Đang kết nối <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="connected_peripheral" msgid="20748648543160091">"Đã kết nối <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="connect_peripheral_failed" msgid="7925702596242839275">"Không thể kết nối <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="disconnecting_peripheral" msgid="1443699384809097200">"Đang ngắt kết nối <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="disconnected_peripheral" msgid="4470578100296504366">"Đã ngắt kết nối <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="pairing_peripheral" msgid="6983626861540899365">"Đang ghép nối <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="pairing_peripheral_failed" msgid="6087643307743264679">"Không thể ghép nối <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
<string name="failed_to_enable_bt" msgid="7229153323594758077">"Không thể bật Bluetooth"</string>
<string name="confirm_pairing" msgid="4112568077038265363">"Bạn có chắc chắn muốn ghép nối thiết bị Bluetooth <xliff:g id="DEVICE_NAME">%1$s</xliff:g> không?"</string>
<string name="pair_yes" msgid="3525614878559994448">"Có"</string>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index 9ca318a7..934c1fdd 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -18,13 +18,15 @@
<string name="beam_touch_to_view" msgid="7853129156831642630">"触摸即可查看"</string>
<string name="beam_handover_not_supported" msgid="4083165921751489015">"接收者的设备不支持传输较大的文件。"</string>
<string name="beam_try_again" msgid="3364677301009783455">"再次让两台设备接触"</string>
- <string name="connecting_peripheral" msgid="3957490448472434505">"正在连接"</string>
- <string name="connected_peripheral" msgid="5777997713940423952">"已连接"</string>
- <string name="connect_peripheral_failed" msgid="7173159351147270788">"无法连接"</string>
- <string name="disconnecting_peripheral" msgid="5320432304947519207">"正在断开连接"</string>
- <string name="disconnected_peripheral" msgid="2768150931245385916">"已断开连接"</string>
- <string name="pairing_peripheral" msgid="5618129595426303236">"正在配对"</string>
- <string name="pairing_peripheral_failed" msgid="976004756112808526">"无法配对"</string>
+ <string name="beam_busy" msgid="5253335587620612576">"Beam 目前正忙。请在之前的传输任务完成后重试。"</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>
+ <string name="disconnecting_peripheral" msgid="1443699384809097200">"正在断开与<xliff:g id="DEVICE_NAME">%1$s</xliff:g>的连接"</string>
+ <string name="disconnected_peripheral" msgid="4470578100296504366">"已断开与<xliff:g id="DEVICE_NAME">%1$s</xliff:g>的连接"</string>
+ <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="pair_yes" msgid="3525614878559994448">"是"</string>
diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml
index 7438b75b..b2d7884e 100644
--- a/res/values-zh-rHK/strings.xml
+++ b/res/values-zh-rHK/strings.xml
@@ -18,13 +18,15 @@
<string name="beam_touch_to_view" msgid="7853129156831642630">"輕觸即可查看"</string>
<string name="beam_handover_not_supported" msgid="4083165921751489015">"接收者的裝置不支援經由 Beam 傳送大型檔案。"</string>
<string name="beam_try_again" msgid="3364677301009783455">"再次把裝置放在一起"</string>
- <string name="connecting_peripheral" msgid="3957490448472434505">"正在連線"</string>
- <string name="connected_peripheral" msgid="5777997713940423952">"已連線"</string>
- <string name="connect_peripheral_failed" msgid="7173159351147270788">"無法連線"</string>
- <string name="disconnecting_peripheral" msgid="5320432304947519207">"正在中斷連線"</string>
- <string name="disconnected_peripheral" msgid="2768150931245385916">"已中斷連線"</string>
- <string name="pairing_peripheral" msgid="5618129595426303236">"配對中"</string>
- <string name="pairing_peripheral_failed" msgid="976004756112808526">"無法配對"</string>
+ <string name="beam_busy" msgid="5253335587620612576">"Beam 目前忙碌中。請在完成上一個傳輸工作後再試一次。"</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>
+ <string name="disconnecting_peripheral" msgid="1443699384809097200">"正在中斷連接<xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="disconnected_peripheral" msgid="4470578100296504366">"已中斷連接<xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <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="pair_yes" msgid="3525614878559994448">"是"</string>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index cfc64ece..3c336364 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -18,13 +18,15 @@
<string name="beam_touch_to_view" msgid="7853129156831642630">"輕觸即可查看"</string>
<string name="beam_handover_not_supported" msgid="4083165921751489015">"接收者的裝置不支援透過 Beam 傳輸大型檔案。"</string>
<string name="beam_try_again" msgid="3364677301009783455">"再次將裝置放在一起"</string>
- <string name="connecting_peripheral" msgid="3957490448472434505">"連線中"</string>
- <string name="connected_peripheral" msgid="5777997713940423952">"已連線"</string>
- <string name="connect_peripheral_failed" msgid="7173159351147270788">"無法連線"</string>
- <string name="disconnecting_peripheral" msgid="5320432304947519207">"正在中斷連線"</string>
- <string name="disconnected_peripheral" msgid="2768150931245385916">"已中斷連線"</string>
- <string name="pairing_peripheral" msgid="5618129595426303236">"配對中"</string>
- <string name="pairing_peripheral_failed" msgid="976004756112808526">"無法配對"</string>
+ <string name="beam_busy" msgid="5253335587620612576">"Beam 目前忙碌中。請等待先前的傳輸作業完成,然後再試一次。"</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>
+ <string name="disconnecting_peripheral" msgid="1443699384809097200">"正在中斷與 <xliff:g id="DEVICE_NAME">%1$s</xliff:g> 的連線"</string>
+ <string name="disconnected_peripheral" msgid="4470578100296504366">"已中斷與 <xliff:g id="DEVICE_NAME">%1$s</xliff:g> 的連線"</string>
+ <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="pair_yes" msgid="3525614878559994448">"是"</string>
diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml
index a801ca7e..e69586c4 100644
--- a/res/values-zu/strings.xml
+++ b/res/values-zu/strings.xml
@@ -18,13 +18,15 @@
<string name="beam_touch_to_view" msgid="7853129156831642630">"Thinta ukuze ubuke"</string>
<string name="beam_handover_not_supported" msgid="4083165921751489015">"Idivayisi yomamukeli ayisekeli ukuhanjiswa kwamafayela amakhulu ngokuvumelanisa."</string>
<string name="beam_try_again" msgid="3364677301009783455">"Phinda uhlanganise ndawonye amadivayisi"</string>
- <string name="connecting_peripheral" msgid="3957490448472434505">"Iyaxhuma"</string>
- <string name="connected_peripheral" msgid="5777997713940423952">"Ixhunyiwe"</string>
- <string name="connect_peripheral_failed" msgid="7173159351147270788">"Ayikwazanga ukuxhuma"</string>
- <string name="disconnecting_peripheral" msgid="5320432304947519207">"Iyanqamula"</string>
- <string name="disconnected_peripheral" msgid="2768150931245385916">"Kunqamukile"</string>
- <string name="pairing_peripheral" msgid="5618129595426303236">"Iyabhanqa"</string>
- <string name="pairing_peripheral_failed" msgid="976004756112808526">"Ayikwazanga ukubhanqa"</string>
+ <string name="beam_busy" msgid="5253335587620612576">"Ukuvumelansia okwamanje kumatasa. Zama futhi uma ukuthutha kwangaphambili kuqeda."</string>
+ <string name="device" msgid="4459621591392478151">"idivayisi"</string>
+ <string name="connecting_peripheral" msgid="1296182660525660935">"Ixhuma ku-<xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="connected_peripheral" msgid="20748648543160091">"Ixhunyiwe ku-<xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="connect_peripheral_failed" msgid="7925702596242839275">"Ayikwazanga ukuxhuma ku-<xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="disconnecting_peripheral" msgid="1443699384809097200">"Iyanqamula ku-<xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="disconnected_peripheral" msgid="4470578100296504366">"Inqanyuliwe ku-<xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="pairing_peripheral" msgid="6983626861540899365">"Ibhangqa i-<xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="pairing_peripheral_failed" msgid="6087643307743264679">"Ayikwazanga ukubhangqa i-<xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
<string name="failed_to_enable_bt" msgid="7229153323594758077">"Ayikwazanga ukunika amandla i-Bluetooth"</string>
<string name="confirm_pairing" msgid="4112568077038265363">"Ingabe unesiqinisekiso sokuthi ufuna ukuhambisa ngakubili idivayisi <xliff:g id="DEVICE_NAME">%1$s</xliff:g> ye-Bluetooth?"</string>
<string name="pair_yes" msgid="3525614878559994448">"Yebo"</string>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 923e4322..78102a6b 100755
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -28,15 +28,27 @@
<string name="beam_touch_to_view">Touch to view</string>
<string name="beam_handover_not_supported">The receiver\'s device doesn\'t support large file transfer via beam.</string>
<string name="beam_try_again">Bring devices together again</string>
+ <string name="beam_busy">Beam is currently busy. Try again when the previous transfer completes.</string>
- <string name="connecting_peripheral">Connecting</string>
- <string name="connected_peripheral">Connected</string>
- <string name="connect_peripheral_failed">Could not connect</string>
- <string name="disconnecting_peripheral">Disconnecting</string>
- <string name="disconnected_peripheral">Disconnected</string>
- <string name="pairing_peripheral">Pairing</string>
- <string name="pairing_peripheral_failed">Could not pair</string>
+ <!-- String referring to the device being connected when there is no name for the device -->
+ <string name="device">device</string>
+ <!-- Toast string informing the user that the device is connecting [CHAR_LIMIT=35] -->
+ <string name="connecting_peripheral">Connecting <xliff:g id="device_name">%1$s</xliff:g></string>
+ <!-- Toast string informing the user that the device is connected [CHAR_LIMIT=35] -->
+ <string name="connected_peripheral">Connected <xliff:g id="device_name">%1$s</xliff:g></string>
+ <!-- Toast string informing the user that the device failed to connect [CHAR_LIMIT=35] -->
+ <string name="connect_peripheral_failed">Could not connect <xliff:g id="device_name">%1$s</xliff:g></string>
+ <!-- Toast string informing the user that the device is disconnecting [CHAR_LIMIT=35] -->
+ <string name="disconnecting_peripheral">Disconnecting <xliff:g id="device_name">%1$s</xliff:g></string>
+ <!-- Toast string informing the user that the device is disconnected [CHAR_LIMIT=35] -->
+ <string name="disconnected_peripheral">Disconnected <xliff:g id="device_name">%1$s</xliff:g></string>
+ <!-- Toast string informing the user that the device is pairing [CHAR_LIMIT=35] -->
+ <string name="pairing_peripheral">Pairing <xliff:g id="device_name">%1$s</xliff:g></string>
+ <!-- Toast string informing the user that the device failed to pair [CHAR_LIMIT=35] -->
+ <string name="pairing_peripheral_failed">Could not pair <xliff:g id="device_name">%1$s</xliff:g></string>
+ <!-- Toast string informing the user that BT could not be enabled [CHAR_LIMIT=35] -->
<string name="failed_to_enable_bt">Could not enable Bluetooth</string>
+ <!-- Dialog string informing the user that BT could not be enabled [CHAR_LIMIT=75] -->
<string name="confirm_pairing">Are you sure you want to pair the Bluetooth device <xliff:g id="device_name">%1$s</xliff:g>?</string>
<string name="pair_yes">Yes</string>
<string name="pair_no">No</string>
diff --git a/src/com/android/nfc/BeamShareActivity.java b/src/com/android/nfc/BeamShareActivity.java
index 84a658a8..10f6632c 100644
--- a/src/com/android/nfc/BeamShareActivity.java
+++ b/src/com/android/nfc/BeamShareActivity.java
@@ -32,6 +32,7 @@ import android.nfc.NdefMessage;
import android.nfc.NdefRecord;
import android.nfc.NfcAdapter;
import android.os.Bundle;
+import android.os.UserHandle;
import android.util.Log;
import android.webkit.URLUtil;
@@ -78,7 +79,7 @@ public class BeamShareActivity extends Activity {
private void showNfcDialogAndExit(int msgId) {
IntentFilter filter = new IntentFilter(NfcAdapter.ACTION_ADAPTER_STATE_CHANGED);
- registerReceiver(mReceiver, filter);
+ registerReceiverAsUser(mReceiver, UserHandle.ALL, filter, null, null);
AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this,
AlertDialog.THEME_DEVICE_DEFAULT_LIGHT);
@@ -204,18 +205,18 @@ public class BeamShareActivity extends Activity {
}
}
if (numValidUris > 0) {
- shareData = new BeamShareData(null, uriArray, 0);
+ shareData = new BeamShareData(null, uriArray, UserHandle.CURRENT, 0);
} else {
// No uris left
- shareData = new BeamShareData(null, null, 0);
+ shareData = new BeamShareData(null, null, UserHandle.CURRENT, 0);
}
} else if (mNdefMessage != null) {
- shareData = new BeamShareData(mNdefMessage, null, 0);
+ shareData = new BeamShareData(mNdefMessage, null, UserHandle.CURRENT, 0);
if (DBG) Log.d(TAG, "Created NDEF message:" + mNdefMessage.toString());
} else {
if (DBG) Log.d(TAG, "Could not find any data to parse.");
// Activity may have set something to share over NFC, so pass on anyway
- shareData = new BeamShareData(null, null, 0);
+ shareData = new BeamShareData(null, null, UserHandle.CURRENT, 0);
}
mNfcAdapter.invokeBeam(shareData);
finish();
diff --git a/src/com/android/nfc/NfcDiscoveryParameters.java b/src/com/android/nfc/NfcDiscoveryParameters.java
index 5a49ef33..1149836d 100644
--- a/src/com/android/nfc/NfcDiscoveryParameters.java
+++ b/src/com/android/nfc/NfcDiscoveryParameters.java
@@ -55,27 +55,29 @@ 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;
+ // NOTE: when adding a new field, don't forget to update equals() and toString() below
private int mTechMask = 0;
private boolean mEnableLowPowerDiscovery = true;
private boolean mEnableReaderMode = false;
private boolean mEnableHostRouting = false;
+ private boolean mEnableP2p = false;
public NfcDiscoveryParameters() {}
@@ -99,6 +101,10 @@ public final class NfcDiscoveryParameters {
return mTechMask != 0 || mEnableHostRouting;
}
+ public boolean shouldEnableP2p() {
+ return mEnableP2p;
+ }
+
@Override
public boolean equals(Object obj) {
if (obj == this) {
@@ -112,7 +118,8 @@ public final class NfcDiscoveryParameters {
return mTechMask == params.mTechMask &&
(mEnableLowPowerDiscovery == params.mEnableLowPowerDiscovery) &&
(mEnableReaderMode == params.mEnableReaderMode) &&
- (mEnableHostRouting == params.mEnableHostRouting);
+ (mEnableHostRouting == params.mEnableHostRouting)
+ && (mEnableP2p == params.mEnableP2p);
}
@Override
@@ -125,7 +132,8 @@ public final class NfcDiscoveryParameters {
}
sb.append("mEnableLPD: " + Boolean.toString(mEnableLowPowerDiscovery) + "\n");
sb.append("mEnableReader: " + Boolean.toString(mEnableReaderMode) + "\n");
- sb.append("mEnableHostRouting: " + Boolean.toString(mEnableHostRouting));
+ sb.append("mEnableHostRouting: " + Boolean.toString(mEnableHostRouting) + "\n");
+ sb.append("mEnableP2p: " + Boolean.toString(mEnableP2p));
return sb.toString();
}
diff --git a/src/com/android/nfc/NfcDispatcher.java b/src/com/android/nfc/NfcDispatcher.java
index 90261c40..9fd30a60 100644
--- a/src/com/android/nfc/NfcDispatcher.java
+++ b/src/com/android/nfc/NfcDispatcher.java
@@ -16,9 +16,11 @@
package com.android.nfc;
-import android.nfc.INfcUnlockHandler;
+import android.bluetooth.BluetoothAdapter;
+
import com.android.nfc.RegisteredComponentCache.ComponentInfo;
-import com.android.nfc.handover.HandoverManager;
+import com.android.nfc.handover.HandoverDataParser;
+import com.android.nfc.handover.PeripheralHandoverService;
import android.app.Activity;
import android.app.ActivityManager;
@@ -50,7 +52,6 @@ import java.io.PrintWriter;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Arrays;
-import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
@@ -69,10 +70,11 @@ class NfcDispatcher {
private final IActivityManager mIActivityManager;
private final RegisteredComponentCache mTechListFilters;
private final ContentResolver mContentResolver;
- private final HandoverManager mHandoverManager;
+ private final HandoverDataParser mHandoverDataParser;
private final String[] mProvisioningMimes;
private final ScreenStateHelper mScreenStateHelper;
private final NfcUnlockManager mNfcUnlockManager;
+ private final boolean mDeviceSupportsBluetooth;
// Locked on this
private PendingIntent mOverrideIntent;
@@ -81,16 +83,17 @@ class NfcDispatcher {
private boolean mProvisioningOnly;
NfcDispatcher(Context context,
- HandoverManager handoverManager,
+ HandoverDataParser handoverDataParser,
boolean provisionOnly) {
mContext = context;
mIActivityManager = ActivityManagerNative.getDefault();
mTechListFilters = new RegisteredComponentCache(mContext,
NfcAdapter.ACTION_TECH_DISCOVERED, NfcAdapter.ACTION_TECH_DISCOVERED);
mContentResolver = context.getContentResolver();
- mHandoverManager = handoverManager;
+ mHandoverDataParser = handoverDataParser;
mScreenStateHelper = new ScreenStateHelper(context);
mNfcUnlockManager = NfcUnlockManager.getInstance();
+ mDeviceSupportsBluetooth = BluetoothAdapter.getDefaultAdapter() != null;
synchronized (this) {
mProvisioningOnly = provisionOnly;
@@ -259,7 +262,7 @@ class NfcDispatcher {
return screenUnlocked ? DISPATCH_UNLOCK : DISPATCH_SUCCESS;
}
- if (mHandoverManager.tryHandover(message)) {
+ if (tryPeripheralHandover(message)) {
if (DBG) Log.i(TAG, "matched BT HANDOVER");
return screenUnlocked ? DISPATCH_UNLOCK : DISPATCH_SUCCESS;
}
@@ -505,6 +508,24 @@ class NfcDispatcher {
return false;
}
+ public boolean tryPeripheralHandover(NdefMessage m) {
+ if (m == null || !mDeviceSupportsBluetooth) return false;
+
+ if (DBG) Log.d(TAG, "tryHandover(): " + m.toString());
+
+ HandoverDataParser.BluetoothHandoverData handover = mHandoverDataParser.parseBluetooth(m);
+ if (handover == null || !handover.valid) return false;
+
+ Intent intent = new Intent(mContext, PeripheralHandoverService.class);
+ intent.putExtra(PeripheralHandoverService.EXTRA_PERIPHERAL_DEVICE, handover.device);
+ intent.putExtra(PeripheralHandoverService.EXTRA_PERIPHERAL_NAME, handover.name);
+ intent.putExtra(PeripheralHandoverService.EXTRA_PERIPHERAL_TRANSPORT, handover.transport);
+ mContext.startServiceAsUser(intent, UserHandle.CURRENT);
+
+ return true;
+ }
+
+
/**
* Tells the ActivityManager to resume allowing app switches.
*
diff --git a/src/com/android/nfc/NfcService.java b/src/com/android/nfc/NfcService.java
index cbdfc081..0f3feedc 100755
--- a/src/com/android/nfc/NfcService.java
+++ b/src/com/android/nfc/NfcService.java
@@ -20,6 +20,7 @@ import android.app.ActivityManager;
import android.app.Application;
import android.app.KeyguardManager;
import android.app.PendingIntent;
+import android.app.admin.DevicePolicyManager;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.ContentResolver;
@@ -27,6 +28,7 @@ import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.SharedPreferences;
+import android.content.pm.IPackageManager;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.UserInfo;
@@ -75,16 +77,18 @@ import com.android.nfc.DeviceHost.NfcDepEndpoint;
import com.android.nfc.DeviceHost.TagEndpoint;
import com.android.nfc.cardemulation.CardEmulationManager;
import com.android.nfc.dhimpl.NativeNfcManager;
-import com.android.nfc.handover.HandoverManager;
+import com.android.nfc.handover.HandoverDataParser;
import java.io.FileDescriptor;
import java.io.PrintWriter;
import java.util.Arrays;
+import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.NoSuchElementException;
+
public class NfcService implements DeviceHostListener {
static final boolean DBG = false;
static final String TAG = "NfcService";
@@ -216,7 +220,7 @@ public class NfcService implements DeviceHostListener {
private NfcDispatcher mNfcDispatcher;
private PowerManager mPowerManager;
private KeyguardManager mKeyguard;
- private HandoverManager mHandoverManager;
+ private HandoverDataParser mHandoverDataParser;
private ContentResolver mContentResolver;
private CardEmulationManager mCardEmulationManager;
@@ -314,7 +318,7 @@ public class NfcService implements DeviceHostListener {
mNfcUnlockManager = NfcUnlockManager.getInstance();
- mHandoverManager = new HandoverManager(mContext);
+ mHandoverDataParser = new HandoverDataParser();
boolean isNfcProvisioningEnabled = false;
try {
isNfcProvisioningEnabled = mContext.getResources().getBoolean(
@@ -329,8 +333,8 @@ public class NfcService implements DeviceHostListener {
mInProvisionMode = false;
}
- mNfcDispatcher = new NfcDispatcher(mContext, mHandoverManager, mInProvisionMode);
- mP2pLinkManager = new P2pLinkManager(mContext, mHandoverManager,
+ mNfcDispatcher = new NfcDispatcher(mContext, mHandoverDataParser, mInProvisionMode);
+ mP2pLinkManager = new P2pLinkManager(mContext, mHandoverDataParser,
mDeviceHost.getDefaultLlcpMiu(), mDeviceHost.getDefaultLlcpRwSize());
mPrefs = mContext.getSharedPreferences(PREF, Context.MODE_PRIVATE);
@@ -374,6 +378,9 @@ public class NfcService implements DeviceHostListener {
ownerFilter.addDataScheme("package");
mContext.registerReceiver(mOwnerReceiver, ownerFilter);
+ IntentFilter policyFilter = new IntentFilter(DevicePolicyManager.ACTION_DEVICE_POLICY_MANAGER_STATE_CHANGED);
+ mContext.registerReceiverAsUser(mPolicyReceiver, UserHandle.ALL, policyFilter, null, null);
+
updatePackageCache();
PackageManager pm = mContext.getPackageManager();
@@ -658,11 +665,39 @@ public class NfcService implements DeviceHostListener {
}
void setBeamShareActivityState(boolean enabled) {
- mContext.getPackageManager().setComponentEnabledSetting(
- new ComponentName("com.android.nfc","com.android.nfc.BeamShareActivity"),
- enabled ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED :
- PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
- PackageManager.DONT_KILL_APP);
+ UserManager um = (UserManager) mContext.getSystemService(Context.USER_SERVICE);
+ // Propagate the state change to all user profiles related to the current
+ // user. Note that the list returned by getUserProfiles contains the
+ // current user.
+ List <UserHandle> luh = um.getUserProfiles();
+ for (UserHandle uh : luh){
+ enforceBeamShareActivityPolicy(mContext, uh, enabled);
+ }
+ }
+
+ void enforceBeamShareActivityPolicy(Context context, UserHandle uh,
+ boolean isGlobalEnabled){
+ UserManager um = (UserManager) context.getSystemService(Context.USER_SERVICE);
+ IPackageManager mIpm = IPackageManager.Stub.asInterface(ServiceManager.getService("package"));
+ boolean isActiveForUser =
+ (!um.hasUserRestriction(UserManager.DISALLOW_OUTGOING_BEAM, uh)) &&
+ isGlobalEnabled;
+ if (DBG){
+ Log.d(TAG, "Enforcing a policy change on user: " + uh +
+ ", isActiveForUser = " + isActiveForUser);
+ }
+ try {
+ mIpm.setComponentEnabledSetting(new ComponentName(
+ BeamShareActivity.class.getPackageName$(),
+ BeamShareActivity.class.getName()),
+ isActiveForUser ?
+ PackageManager.COMPONENT_ENABLED_STATE_ENABLED :
+ PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
+ PackageManager.DONT_KILL_APP,
+ uh.getIdentifier());
+ } catch (RemoteException e) {
+ Log.w(TAG, "Unable to change Beam status for user " + uh);
+ }
}
final class NfcAdapterService extends INfcAdapter.Stub {
@@ -816,8 +851,7 @@ public class NfcService implements DeviceHostListener {
// don't allow Beam for managed profiles, or devices with a device owner or policy owner
UserInfo userInfo = mUserManager.getUserInfo(UserHandle.getCallingUserId());
- if(!userInfo.isManagedProfile()
- && !mUserManager.hasUserRestriction(
+ if(!mUserManager.hasUserRestriction(
UserManager.DISALLOW_OUTGOING_BEAM, userInfo.getUserHandle())) {
mP2pLinkManager.setNdefCallback(callback, Binder.getCallingUid());
} else if (DBG) {
@@ -826,6 +860,11 @@ public class NfcService implements DeviceHostListener {
}
@Override
+ public void verifyNfcPermission() {
+ NfcPermissions.enforceUserPermissions(mContext);
+ }
+
+ @Override
public void invokeBeam() {
NfcPermissions.enforceUserPermissions(mContext);
@@ -965,8 +1004,7 @@ public class NfcService implements DeviceHostListener {
Map<Integer, Integer> techCodeToMask = new HashMap<Integer, Integer>();
techCodeToMask.put(TagTechnology.NFC_A, NfcService.NFC_POLL_A);
- techCodeToMask.put(TagTechnology.NFC_B,
- NfcService.NFC_POLL_B | NfcService.NFC_POLL_B_PRIME);
+ techCodeToMask.put(TagTechnology.NFC_B, NfcService.NFC_POLL_B);
techCodeToMask.put(TagTechnology.NFC_V, NfcService.NFC_POLL_ISO15693);
techCodeToMask.put(TagTechnology.NFC_F, NfcService.NFC_POLL_F);
techCodeToMask.put(TagTechnology.NFC_BARCODE, NfcService.NFC_POLL_KOVIO);
@@ -1424,7 +1462,6 @@ public class NfcService implements DeviceHostListener {
// Notify dispatcher it's fine to dispatch to any package now
// and allow handover transfers.
mNfcDispatcher.disableProvisioningMode();
- mHandoverManager.setEnabled(true);
}
}
// Special case: if we're transitioning to unlocked state while
@@ -1480,20 +1517,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();
}
@@ -1786,16 +1828,34 @@ public class NfcService implements DeviceHostListener {
intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
// Resume app switches so the receivers can start activites without delay
mNfcDispatcher.resumeAppSwitches();
-
+ ArrayList<String> matchingPackages = new ArrayList<String>();
+ ArrayList<String> preferredPackages = new ArrayList<String>();
synchronized (this) {
for (PackageInfo pkg : mInstalledPackages) {
if (pkg != null && pkg.applicationInfo != null) {
if (mNfceeAccessControl.check(pkg.applicationInfo)) {
- intent.setPackage(pkg.packageName);
- mContext.sendBroadcast(intent);
+ matchingPackages.add(pkg.packageName);
+ if (mCardEmulationManager != null &&
+ mCardEmulationManager.packageHasPreferredService(pkg.packageName)) {
+ preferredPackages.add(pkg.packageName);
+ }
}
}
}
+ if (preferredPackages.size() > 0) {
+ // If there's any packages in here which are preferred, only
+ // send field events to those packages, to prevent other apps
+ // with signatures in nfcee_access.xml from acting upon the events.
+ for (String packageName : preferredPackages){
+ intent.setPackage(packageName);
+ mContext.sendBroadcast(intent);
+ }
+ } else {
+ for (String packageName : matchingPackages){
+ intent.setPackage(packageName);
+ mContext.sendBroadcast(intent);
+ }
+ }
}
}
@@ -1930,6 +1990,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);
@@ -1961,6 +2022,7 @@ public class NfcService implements DeviceHostListener {
}
};
+
private final BroadcastReceiver mOwnerReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
@@ -1979,6 +2041,17 @@ public class NfcService implements DeviceHostListener {
}
};
+ private final BroadcastReceiver mPolicyReceiver = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent){
+ String action = intent.getAction();
+ if (DevicePolicyManager.ACTION_DEVICE_POLICY_MANAGER_STATE_CHANGED
+ .equals(action)) {
+ enforceBeamShareActivityPolicy(context,
+ new UserHandle(getSendingUserId()), mIsNdefPushEnabled);
+ }
+ }
+ };
/**
* Returns true if airplane mode is currently on
diff --git a/src/com/android/nfc/NfcWifiProtectedSetup.java b/src/com/android/nfc/NfcWifiProtectedSetup.java
index 14192488..dbd22b79 100644
--- a/src/com/android/nfc/NfcWifiProtectedSetup.java
+++ b/src/com/android/nfc/NfcWifiProtectedSetup.java
@@ -24,8 +24,12 @@ import android.nfc.NdefRecord;
import android.nfc.tech.Ndef;
import android.os.UserHandle;
import android.os.UserManager;
+import android.util.Log;
+import java.nio.BufferUnderflowException;
+import java.nio.ByteBuffer;
import java.util.Arrays;
+import java.util.BitSet;
public final class NfcWifiProtectedSetup {
@@ -37,13 +41,20 @@ public final class NfcWifiProtectedSetup {
* ID into configuration record for SSID and Network Key in hex.
* Obtained from WFA Wifi Simple Configuration Technical Specification v2.0.2.1.
*/
- private static final String SSID_ID = "1045";
- private static final String NETWORK_KEY_ID = "1027";
+ private static final short CREDENTIAL_FIELD_ID = 0x100E;
+ private static final short SSID_FIELD_ID = 0x1045;
+ private static final short NETWORK_KEY_FIELD_ID = 0x1027;
+ private static final short AUTH_TYPE_FIELD_ID = 0x1003;
+
+ private static final short AUTH_TYPE_EXPECTED_SIZE = 2;
+
+ private static final short AUTH_TYPE_OPEN = 0;
+ private static final short AUTH_TYPE_WPA_PSK = 0x0002;
+ private static final short AUTH_TYPE_WPA_EAP = 0x0008;
+ private static final short AUTH_TYPE_WPA2_EAP = 0x0010;
+ private static final short AUTH_TYPE_WPA2_PSK = 0x0020;
- private static final int SIZE_FIELD_WIDTH = 4;
- private static final int MAX_SSID_SIZE_BYTES = 32;
private static final int MAX_NETWORK_KEY_SIZE_BYTES = 64;
- private static final int HEX_CHARS_PER_BYTE = 2;
private NfcWifiProtectedSetup() {}
@@ -58,7 +69,13 @@ public final class NfcWifiProtectedSetup {
return false;
}
- final WifiConfiguration wifiConfiguration = parse(cachedNdefMessage);
+ final WifiConfiguration wifiConfiguration;
+ try {
+ wifiConfiguration = parse(cachedNdefMessage);
+ } catch (BufferUnderflowException e) {
+ // malformed payload
+ return false;
+ }
if (wifiConfiguration != null &&!UserManager.get(context).hasUserRestriction(
UserManager.DISALLOW_CONFIG_WIFI, UserHandle.CURRENT)) {
@@ -77,99 +94,77 @@ public final class NfcWifiProtectedSetup {
private static WifiConfiguration parse(NdefMessage message) {
NdefRecord[] records = message.getRecords();
- for (int i = 0; i < records.length; ++i) {
- NdefRecord record = records[i];
+ for (NdefRecord record : records) {
if (new String(record.getType()).equals(NFC_TOKEN_MIME_TYPE)) {
- String hexStringPayload = bytesToHex(record.getPayload());
-
- int ssidStringIndex = hexStringPayload.indexOf(SSID_ID);
-
- if (ssidStringIndex > 0) {
- int networkKeyStringIndex = hexStringPayload.indexOf(NETWORK_KEY_ID);
- if (networkKeyStringIndex > 0) {
-
- ssidStringIndex += SSID_ID.length();
- networkKeyStringIndex += NETWORK_KEY_ID.length();
-
- String ssidSize;
- try {
- ssidSize = hexStringPayload.substring(ssidStringIndex,
- ssidStringIndex + SIZE_FIELD_WIDTH);
- } catch(IndexOutOfBoundsException ex) {
- return null;
- }
-
- int ssidSizeBytes = hexStringToInt(ssidSize);
- if (ssidSizeBytes > MAX_SSID_SIZE_BYTES) {
- return null;
- }
-
- String networkKeySize;
- try {
- networkKeySize = hexStringPayload.substring(networkKeyStringIndex,
- networkKeyStringIndex + SIZE_FIELD_WIDTH);
- } catch (IndexOutOfBoundsException ex) {
- return null;
- }
-
- int networkKeySizeBytes = hexStringToInt(networkKeySize);
- if (networkKeySizeBytes > MAX_NETWORK_KEY_SIZE_BYTES) {
- return null;
- }
-
- ssidStringIndex += SIZE_FIELD_WIDTH;
- networkKeyStringIndex += SIZE_FIELD_WIDTH;
-
- String ssid;
- String networkKey;
- try {
- int ssidByteIndex = ssidStringIndex / HEX_CHARS_PER_BYTE;
- ssid = new String(Arrays.copyOfRange(record.getPayload(), ssidByteIndex,
- ssidByteIndex + ssidSizeBytes));
-
- int networkKeyByteIndex = networkKeyStringIndex / HEX_CHARS_PER_BYTE;
- networkKey = new String(Arrays.copyOfRange(record.getPayload(),
- networkKeyByteIndex,
- networkKeyByteIndex + networkKeySizeBytes));
- } catch (ArrayIndexOutOfBoundsException ex) {
- return null;
- }
-
- WifiConfiguration configuration = new WifiConfiguration();
- configuration.preSharedKey = '"' + networkKey + '"';
- configuration.SSID = '"' + ssid + '"';
-
- return configuration;
+ ByteBuffer payload = ByteBuffer.wrap(record.getPayload());
+ while (payload.hasRemaining()) {
+ short fieldId = payload.getShort();
+ short fieldSize = payload.getShort();
+ if (fieldId == CREDENTIAL_FIELD_ID) {
+ return parseCredential(payload, fieldSize);
}
}
}
}
-
return null;
}
- private static int hexStringToInt(String bigEndianHexString) {
- int val = 0;
+ private static WifiConfiguration parseCredential(ByteBuffer payload, short size) {
+ int startPosition = payload.position();
+ WifiConfiguration result = new WifiConfiguration();
+ while (payload.position() < startPosition + size) {
+ short fieldId = payload.getShort();
+ short fieldSize = payload.getShort();
- for (int i = 0; i < bigEndianHexString.length(); ++i) {
- val = (val | Character.digit(bigEndianHexString.charAt(i), 16));
+ // sanity check
+ if (payload.position() + fieldSize > startPosition + size) {
+ return null;
+ }
- if (i < bigEndianHexString.length() - 1) {
- val <<= 4;
+ switch (fieldId) {
+ case SSID_FIELD_ID:
+ byte[] ssid = new byte[fieldSize];
+ payload.get(ssid);
+ result.SSID = "\"" + new String(ssid) + "\"";
+ break;
+ case NETWORK_KEY_FIELD_ID:
+ if (fieldSize > MAX_NETWORK_KEY_SIZE_BYTES) {
+ return null;
+ }
+ byte[] networkKey = new byte[fieldSize];
+ payload.get(networkKey);
+ result.preSharedKey = "\"" + new String(networkKey) + "\"";
+ break;
+ case AUTH_TYPE_FIELD_ID:
+ if (fieldSize != AUTH_TYPE_EXPECTED_SIZE) {
+ // corrupt data
+ return null;
+ }
+
+ short authType = payload.getShort();
+ populateAllowedKeyManagement(result.allowedKeyManagement, authType);
+ break;
+ default:
+ // unknown / unparsed tag
+ payload.position(payload.position() + fieldSize);
+ break;
}
}
- return val;
+ if (result.preSharedKey != null && result.SSID != null) {
+ return result;
+ }
+
+ return null;
}
- private static String bytesToHex(byte[] bytes) {
- char[] hexChars = new char[bytes.length * 2];
- for ( int j = 0; j < bytes.length; j++) {
- int value = bytes[j] & 0xFF;
- hexChars[j * 2] = Character.forDigit(value >>> 4, 16);
- hexChars[j * 2 + 1] = Character.forDigit(value & 0x0F, 16);
+ private static void populateAllowedKeyManagement(BitSet allowedKeyManagement, short authType) {
+ if (authType == AUTH_TYPE_WPA_PSK || authType == AUTH_TYPE_WPA2_PSK) {
+ allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);
+ } else if (authType == AUTH_TYPE_WPA_EAP || authType == AUTH_TYPE_WPA2_EAP) {
+ allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_EAP);
+ } else if (authType == AUTH_TYPE_OPEN) {
+ allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
}
- return new String(hexChars);
}
-
}
diff --git a/src/com/android/nfc/P2pEventManager.java b/src/com/android/nfc/P2pEventManager.java
index f5db5443..c68fae80 100644
--- a/src/com/android/nfc/P2pEventManager.java
+++ b/src/com/android/nfc/P2pEventManager.java
@@ -16,6 +16,8 @@
package com.android.nfc;
+import com.android.nfc.beam.SendUi;
+
import android.app.NotificationManager;
import android.content.Context;
import android.content.res.Configuration;
@@ -129,6 +131,15 @@ public class P2pEventManager implements P2pEventListener, SendUi.Callback {
}
@Override
+ public void onP2pHandoverBusy() {
+ mNfcService.playSound(NfcService.SOUND_ERROR);
+ mVibrator.vibrate(VIBRATION_PATTERN, -1);
+ mSendUi.finishAndToast(SendUi.FINISH_SCALE_UP, mContext.getString(R.string.beam_busy));
+ mSending = false;
+ mNdefSent = false;
+ }
+
+ @Override
public void onP2pReceiveComplete(boolean playSound) {
mVibrator.vibrate(VIBRATION_PATTERN, -1);
if (playSound) mNfcService.playSound(NfcService.SOUND_END);
diff --git a/src/com/android/nfc/P2pLinkManager.java b/src/com/android/nfc/P2pLinkManager.java
index 487cd4e5..13c65ef9 100755
--- a/src/com/android/nfc/P2pLinkManager.java
+++ b/src/com/android/nfc/P2pLinkManager.java
@@ -16,11 +16,17 @@
package com.android.nfc;
+import android.content.Intent;
import android.content.pm.UserInfo;
+
+import com.android.nfc.beam.BeamManager;
+import com.android.nfc.beam.BeamSendService;
+import com.android.nfc.beam.BeamTransferRecord;
+
import android.os.UserManager;
import com.android.nfc.echoserver.EchoServer;
import com.android.nfc.handover.HandoverClient;
-import com.android.nfc.handover.HandoverManager;
+import com.android.nfc.handover.HandoverDataParser;
import com.android.nfc.handover.HandoverServer;
import com.android.nfc.ndefpush.NdefPushClient;
import com.android.nfc.ndefpush.NdefPushServer;
@@ -109,6 +115,11 @@ interface P2pEventListener {
public void onP2pHandoverNotSupported();
/**
+ * Called to indicate the device is busy with another handover transfer
+ */
+ public void onP2pHandoverBusy();
+
+ /**
* Called to indicate a receive was successful.
*/
public void onP2pReceiveComplete(boolean playSound);
@@ -173,6 +184,7 @@ class P2pLinkManager implements Handler.Callback, P2pEventListener.Callback {
static final int MSG_HANDOVER_NOT_SUPPORTED = 7;
static final int MSG_SHOW_CONFIRMATION_UI = 8;
static final int MSG_WAIT_FOR_LINK_TIMEOUT = 9;
+ static final int MSG_HANDOVER_BUSY = 10;
// values for mLinkState
static final int LINK_STATE_DOWN = 1;
@@ -196,6 +208,7 @@ class P2pLinkManager implements Handler.Callback, P2pEventListener.Callback {
static final int HANDOVER_SUCCESS = 0;
static final int HANDOVER_FAILURE = 1;
static final int HANDOVER_UNSUPPORTED = 2;
+ static final int HANDOVER_BUSY = 3;
final NdefPushServer mNdefPushServer;
final SnepServer mDefaultSnepServer;
@@ -204,7 +217,7 @@ class P2pLinkManager implements Handler.Callback, P2pEventListener.Callback {
final Context mContext;
final P2pEventListener mEventListener;
final Handler mHandler;
- final HandoverManager mHandoverManager;
+ final HandoverDataParser mHandoverDataParser;
final ForegroundUtils mForegroundUtils;
final int mDefaultMiu;
@@ -218,6 +231,7 @@ class P2pLinkManager implements Handler.Callback, P2pEventListener.Callback {
boolean mIsReceiveEnabled;
NdefMessage mMessageToSend; // not valid in SEND_STATE_NOTHING_TO_SEND
Uri[] mUrisToSend; // not valid in SEND_STATE_NOTHING_TO_SEND
+ UserHandle mUserHandle; // not valid in SEND_STATE_NOTHING_TO_SEND
int mSendFlags; // not valid in SEND_STATE_NOTHING_TO_SEND
IAppCallback mCallbackNdef;
int mNdefCallbackUid;
@@ -231,11 +245,11 @@ class P2pLinkManager implements Handler.Callback, P2pEventListener.Callback {
boolean mLlcpConnectDelayed;
long mLastLlcpActivationTime;
- public P2pLinkManager(Context context, HandoverManager handoverManager, int defaultMiu,
+ public P2pLinkManager(Context context, HandoverDataParser handoverDataParser, int defaultMiu,
int defaultRwSize) {
mNdefPushServer = new NdefPushServer(NDEFPUSH_SAP, mNppCallback);
mDefaultSnepServer = new SnepServer(mDefaultSnepCallback, defaultMiu, defaultRwSize);
- mHandoverServer = new HandoverServer(HANDOVER_SAP, handoverManager, mHandoverCallback);
+ mHandoverServer = new HandoverServer(context, HANDOVER_SAP, handoverDataParser, mHandoverCallback);
if (ECHOSERVER_ENABLED) {
mEchoServer = new EchoServer();
@@ -251,7 +265,7 @@ class P2pLinkManager implements Handler.Callback, P2pEventListener.Callback {
mIsSendEnabled = false;
mIsReceiveEnabled = false;
mPrefs = context.getSharedPreferences(NfcService.PREF, Context.MODE_PRIVATE);
- mHandoverManager = handoverManager;
+ mHandoverDataParser = handoverDataParser;
mDefaultMiu = defaultMiu;
mDefaultRwSize = defaultRwSize;
mLlcpServicesConnected = false;
@@ -328,9 +342,11 @@ class P2pLinkManager implements Handler.Callback, P2pEventListener.Callback {
} else if (shareData.ndefMessage != null) {
mMessageToSend = shareData.ndefMessage;
}
+
+ mUserHandle = shareData.userHandle;
}
if (mMessageToSend != null ||
- (mUrisToSend != null && mHandoverManager.isHandoverSupported())) {
+ (mUrisToSend != null && mHandoverDataParser.isHandoverSupported())) {
mSendState = SEND_STATE_PENDING;
mEventListener.onP2pNfcTapRequested();
scheduleTimeoutLocked(MSG_WAIT_FOR_LINK_TIMEOUT, WAIT_FOR_LINK_TIMEOUT_MS);
@@ -364,7 +380,7 @@ class P2pLinkManager implements Handler.Callback, P2pEventListener.Callback {
mSendState = SEND_STATE_NOTHING_TO_SEND;
prepareMessageToSend(true);
if (mMessageToSend != null ||
- (mUrisToSend != null && mHandoverManager.isHandoverSupported())) {
+ (mUrisToSend != null && mHandoverDataParser.isHandoverSupported())) {
// Ideally we would delay showing the Beam animation until
// we know for certain the other side has SNEP/handover.
// Unfortunately, the NXP LLCP implementation has a bug that
@@ -466,10 +482,11 @@ class P2pLinkManager implements Handler.Callback, P2pEventListener.Callback {
BeamShareData shareData = mCallbackNdef.createBeamShareData();
mMessageToSend = shareData.ndefMessage;
mUrisToSend = shareData.uris;
+ mUserHandle = shareData.userHandle;
mSendFlags = shareData.flags;
return;
} catch (Exception e) {
- Log.e(TAG, "Failed NDEF callback: " + e.getMessage());
+ Log.e(TAG, "Failed NDEF callback: ", e);
}
} else {
// This is not necessarily an error - we no longer unset callbacks from
@@ -484,7 +501,7 @@ class P2pLinkManager implements Handler.Callback, P2pEventListener.Callback {
String[] pkgs = mPackageManager.getPackagesForUid(foregroundUids.get(0));
if (pkgs != null && pkgs.length >= 1) {
if (!generatePlayLink || beamDefaultDisabled(pkgs[0])
- || isManagedOrBeamDisabled(foregroundUids.get(0))) {
+ || isBeamDisabled(foregroundUids.get(0))) {
if (DBG) Log.d(TAG, "Disabling default Beam behavior");
mMessageToSend = null;
mUrisToSend = null;
@@ -499,11 +516,10 @@ class P2pLinkManager implements Handler.Callback, P2pEventListener.Callback {
}
}
- private boolean isManagedOrBeamDisabled(int uid) {
+ private boolean isBeamDisabled(int uid) {
UserManager userManager = (UserManager) mContext.getSystemService(Context.USER_SERVICE);
UserInfo userInfo = userManager.getUserInfo(UserHandle.getUserId(uid));
- return userInfo.isManagedProfile() ||
- userManager.hasUserRestriction(
+ return userManager.hasUserRestriction(
UserManager.DISALLOW_OUTGOING_BEAM, userInfo.getUserHandle());
}
@@ -603,6 +619,10 @@ class P2pLinkManager implements Handler.Callback, P2pEventListener.Callback {
mHandler.sendEmptyMessage(MSG_HANDOVER_NOT_SUPPORTED);
}
+ void onHandoverBusy() {
+ mHandler.sendEmptyMessage(MSG_HANDOVER_BUSY);
+ }
+
void onSendComplete(NdefMessage msg, long elapsedRealtime) {
// Make callbacks on UI thread
mHandler.sendEmptyMessage(MSG_SEND_COMPLETE);
@@ -748,9 +768,15 @@ class P2pLinkManager implements Handler.Callback, P2pEventListener.Callback {
SnepClient snepClient;
HandoverClient handoverClient;
- int doHandover(Uri[] uris) throws IOException {
+ int doHandover(Uri[] uris, UserHandle userHandle) throws IOException {
NdefMessage response = null;
- NdefMessage request = mHandoverManager.createHandoverRequestMessage();
+ BeamManager beamManager = BeamManager.getInstance();
+
+ if (beamManager.isBeamInProgress()) {
+ return HANDOVER_BUSY;
+ }
+
+ NdefMessage request = mHandoverDataParser.createHandoverRequestMessage();
if (request != null) {
if (handoverClient != null) {
response = handoverClient.sendHandoverRequest(request);
@@ -768,7 +794,12 @@ class P2pLinkManager implements Handler.Callback, P2pEventListener.Callback {
} else {
return HANDOVER_UNSUPPORTED;
}
- mHandoverManager.doHandoverUri(uris, response);
+
+ if (!beamManager.startBeamSend(mContext,
+ mHandoverDataParser.getOutgoingHandoverData(response), uris, userHandle)) {
+ return HANDOVER_BUSY;
+ }
+
return HANDOVER_SUCCESS;
}
@@ -785,6 +816,7 @@ class P2pLinkManager implements Handler.Callback, P2pEventListener.Callback {
public Void doInBackground(Void... args) {
NdefMessage m;
Uri[] uris;
+ UserHandle userHandle;
boolean result = false;
synchronized (P2pLinkManager.this) {
@@ -793,6 +825,7 @@ class P2pLinkManager implements Handler.Callback, P2pEventListener.Callback {
}
m = mMessageToSend;
uris = mUrisToSend;
+ userHandle = mUserHandle;
snepClient = mSnepClient;
handoverClient = mHandoverClient;
nppClient = mNdefPushClient;
@@ -803,7 +836,7 @@ class P2pLinkManager implements Handler.Callback, P2pEventListener.Callback {
if (uris != null) {
if (DBG) Log.d(TAG, "Trying handover request");
try {
- int handoverResult = doHandover(uris);
+ int handoverResult = doHandover(uris, userHandle);
switch (handoverResult) {
case HANDOVER_SUCCESS:
result = true;
@@ -815,6 +848,10 @@ class P2pLinkManager implements Handler.Callback, P2pEventListener.Callback {
result = false;
onHandoverUnsupported();
break;
+ case HANDOVER_BUSY:
+ result = false;
+ onHandoverBusy();
+ break;
}
} catch (IOException e) {
result = false;
@@ -860,6 +897,11 @@ class P2pLinkManager implements Handler.Callback, P2pEventListener.Callback {
public void onHandoverRequestReceived() {
onReceiveHandover();
}
+
+ @Override
+ public void onHandoverBusy() {
+ onHandoverBusy();
+ }
};
final NdefPushServer.Callback mNppCallback = new NdefPushServer.Callback() {
@@ -883,7 +925,7 @@ class P2pLinkManager implements Handler.Callback, P2pEventListener.Callback {
// since Android 4.1 used the NFC Forum default server to
// implement connection handover, we will support this
// until we can deprecate it.
- NdefMessage response = mHandoverManager.tryHandoverRequest(msg);
+ NdefMessage response = mHandoverDataParser.getIncomingHandoverData(msg).handoverSelect;
if (response != null) {
onReceiveHandover();
return SnepMessage.getSuccessResponse(response);
@@ -998,6 +1040,17 @@ class P2pLinkManager implements Handler.Callback, P2pEventListener.Callback {
}
}
break;
+ case MSG_HANDOVER_BUSY:
+ synchronized (P2pLinkManager.this) {
+ mSendTask = null;
+
+ if (mLinkState == LINK_STATE_DOWN || mSendState != SEND_STATE_SENDING) {
+ break;
+ }
+ mSendState = SEND_STATE_NOTHING_TO_SEND;
+ if (DBG) Log.d(TAG, "onP2pHandoverBusy()");
+ mEventListener.onP2pHandoverBusy();
+ }
}
return true;
}
diff --git a/src/com/android/nfc/beam/BeamManager.java b/src/com/android/nfc/beam/BeamManager.java
new file mode 100644
index 00000000..ba16aa5e
--- /dev/null
+++ b/src/com/android/nfc/beam/BeamManager.java
@@ -0,0 +1,133 @@
+/*
+* Copyright (C) 2008 The Android Open Source Project
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+package com.android.nfc.beam;
+
+import com.android.nfc.handover.HandoverDataParser;
+
+import android.bluetooth.BluetoothDevice;
+import android.content.Context;
+import android.content.Intent;
+import android.net.Uri;
+import android.os.Handler;
+import android.os.Looper;
+import android.os.Message;
+import android.os.Messenger;
+import android.os.UserHandle;
+import android.util.Log;
+
+/**
+ * Manager for starting and stopping Beam transfers. Prevents more than one transfer from
+ * happening at a time.
+ */
+public class BeamManager implements Handler.Callback {
+ private static final String TAG = "BeamManager";
+ private static final boolean DBG = false;
+
+ private static final String ACTION_WHITELIST_DEVICE =
+ "android.btopp.intent.action.WHITELIST_DEVICE";
+ public static final int MSG_BEAM_COMPLETE = 0;
+
+ private final Object mLock;
+
+ private boolean mBeamInProgress;
+ private final Handler mCallback;
+
+ private static final class Singleton {
+ public static final BeamManager INSTANCE = new BeamManager();
+ }
+
+ private BeamManager() {
+ mLock = new Object();
+ mBeamInProgress = false;
+ mCallback = new Handler(Looper.getMainLooper(), this);
+ }
+
+ public static BeamManager getInstance() {
+ return Singleton.INSTANCE;
+ }
+
+ public boolean isBeamInProgress() {
+ synchronized (mLock) {
+ return mBeamInProgress;
+ }
+ }
+
+ public boolean startBeamReceive(Context context,
+ HandoverDataParser.BluetoothHandoverData handoverData) {
+ synchronized (mLock) {
+ if (mBeamInProgress) {
+ return false;
+ } else {
+ mBeamInProgress = true;
+ }
+ }
+
+ BeamTransferRecord transferRecord =
+ BeamTransferRecord.forBluetoothDevice(
+ handoverData.device, handoverData.carrierActivating, null);
+
+ Intent receiveIntent = new Intent(context.getApplicationContext(),
+ BeamReceiveService.class);
+ receiveIntent.putExtra(BeamReceiveService.EXTRA_BEAM_TRANSFER_RECORD, transferRecord);
+ receiveIntent.putExtra(BeamReceiveService.EXTRA_BEAM_COMPLETE_CALLBACK,
+ new Messenger(mCallback));
+ whitelistOppDevice(context, handoverData.device);
+ context.startServiceAsUser(receiveIntent, UserHandle.CURRENT);
+ return true;
+ }
+
+ public boolean startBeamSend(Context context,
+ HandoverDataParser.BluetoothHandoverData outgoingHandoverData,
+ Uri[] uris, UserHandle userHandle) {
+ synchronized (mLock) {
+ if (mBeamInProgress) {
+ return false;
+ } else {
+ mBeamInProgress = true;
+ }
+ }
+
+ BeamTransferRecord transferRecord = BeamTransferRecord.forBluetoothDevice(
+ outgoingHandoverData.device, outgoingHandoverData.carrierActivating,
+ uris);
+ Intent sendIntent = new Intent(context.getApplicationContext(),
+ BeamSendService.class);
+ sendIntent.putExtra(BeamSendService.EXTRA_BEAM_TRANSFER_RECORD, transferRecord);
+ sendIntent.putExtra(BeamSendService.EXTRA_BEAM_COMPLETE_CALLBACK,
+ new Messenger(mCallback));
+ context.startServiceAsUser(sendIntent, userHandle);
+ return true;
+ }
+
+ @Override
+ public boolean handleMessage(Message msg) {
+ if (msg.what == MSG_BEAM_COMPLETE) {
+ synchronized (mLock) {
+ mBeamInProgress = false;
+ }
+ return true;
+ }
+ return false;
+ }
+
+ void whitelistOppDevice(Context context, BluetoothDevice device) {
+ if (DBG) Log.d(TAG, "Whitelisting " + device + " for BT OPP");
+ Intent intent = new Intent(ACTION_WHITELIST_DEVICE);
+ intent.putExtra(BluetoothDevice.EXTRA_DEVICE, device);
+ context.sendBroadcastAsUser(intent, UserHandle.CURRENT);
+ }
+
+}
diff --git a/src/com/android/nfc/beam/BeamReceiveService.java b/src/com/android/nfc/beam/BeamReceiveService.java
new file mode 100644
index 00000000..7deb0148
--- /dev/null
+++ b/src/com/android/nfc/beam/BeamReceiveService.java
@@ -0,0 +1,175 @@
+package com.android.nfc.beam;
+
+import com.android.nfc.R;
+
+import android.app.Service;
+import android.bluetooth.BluetoothAdapter;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.media.AudioManager;
+import android.media.SoundPool;
+import android.os.Handler;
+import android.os.IBinder;
+import android.os.Message;
+import android.os.Messenger;
+import android.os.RemoteException;
+import android.util.Log;
+
+
+/**
+ * @hide
+ */
+public class BeamReceiveService extends Service implements BeamTransferManager.Callback {
+ private static String TAG = "BeamReceiveService";
+ private static boolean DBG = true;
+
+ public static final String EXTRA_BEAM_TRANSFER_RECORD
+ = "com.android.nfc.beam.EXTRA_BEAM_TRANSFER_RECORD";
+ public static final String EXTRA_BEAM_COMPLETE_CALLBACK
+ = "com.android.nfc.beam.TRANSFER_COMPLETE_CALLBACK";
+
+ private BeamStatusReceiver mBeamStatusReceiver;
+ private boolean mBluetoothEnabledByNfc;
+ private int mStartId;
+ private SoundPool mSoundPool;
+ private int mSuccessSound;
+ private BeamTransferManager mTransferManager;
+ private Messenger mCompleteCallback;
+
+ private final BluetoothAdapter mBluetoothAdapter;
+ private final BroadcastReceiver mBluetoothStateReceiver = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ String action = intent.getAction();
+ if (BluetoothAdapter.ACTION_STATE_CHANGED.equals(action)) {
+ int state = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE,
+ BluetoothAdapter.ERROR);
+ if (state == BluetoothAdapter.STATE_OFF) {
+ mBluetoothEnabledByNfc = false;
+ }
+ }
+ }
+ };
+
+ public BeamReceiveService() {
+ mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
+ }
+
+ @Override
+ public int onStartCommand(Intent intent, int flags, int startId) {
+ mStartId = startId;
+
+ BeamTransferRecord transferRecord;
+ if (intent == null ||
+ (transferRecord = intent.getParcelableExtra(EXTRA_BEAM_TRANSFER_RECORD)) == null) {
+ if (DBG) Log.e(TAG, "No transfer record provided. Stopping.");
+ stopSelf(startId);
+ return START_NOT_STICKY;
+ }
+
+ mCompleteCallback = intent.getParcelableExtra(EXTRA_BEAM_COMPLETE_CALLBACK);
+
+ if (prepareToReceive(transferRecord)) {
+ if (DBG) Log.i(TAG, "Ready for incoming Beam transfer");
+ return START_STICKY;
+ } else {
+ invokeCompleteCallback();
+ stopSelf(startId);
+ return START_NOT_STICKY;
+ }
+ }
+
+ // TODO: figure out a way to not duplicate this code
+ @Override
+ public void onCreate() {
+ super.onCreate();
+
+ mSoundPool = new SoundPool(1, AudioManager.STREAM_NOTIFICATION, 0);
+ mSuccessSound = mSoundPool.load(this, R.raw.end, 1);
+
+ // register BT state receiver
+ IntentFilter filter = new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED);
+ registerReceiver(mBluetoothStateReceiver, filter);
+ }
+
+ @Override
+ public void onDestroy() {
+ super.onDestroy();
+ if (mSoundPool != null) {
+ mSoundPool.release();
+ }
+
+ if (mBeamStatusReceiver != null) {
+ unregisterReceiver(mBeamStatusReceiver);
+ }
+ unregisterReceiver(mBluetoothStateReceiver);
+ }
+
+ boolean prepareToReceive(BeamTransferRecord transferRecord) {
+ if (mTransferManager != null) {
+ return false;
+ }
+
+ if (transferRecord.dataLinkType != BeamTransferRecord.DATA_LINK_TYPE_BLUETOOTH) {
+ // only support BT
+ return false;
+ }
+
+ if (!mBluetoothAdapter.isEnabled()) {
+ if (!mBluetoothAdapter.enableNoAutoConnect()) {
+ Log.e(TAG, "Error enabling Bluetooth.");
+ return false;
+ }
+ mBluetoothEnabledByNfc = true;
+ if (DBG) Log.d(TAG, "Queueing out transfer "
+ + Integer.toString(transferRecord.id));
+ }
+
+ mTransferManager = new BeamTransferManager(this, this, transferRecord, true);
+
+ // register Beam status receiver
+ mBeamStatusReceiver = new BeamStatusReceiver(this, mTransferManager);
+ registerReceiver(mBeamStatusReceiver, mBeamStatusReceiver.getIntentFilter(),
+ BeamStatusReceiver.BEAM_STATUS_PERMISSION, new Handler());
+
+ mTransferManager.start();
+ mTransferManager.updateNotification();
+ return true;
+ }
+
+ private void invokeCompleteCallback() {
+ if (mCompleteCallback != null) {
+ try {
+ mCompleteCallback.send(Message.obtain(null, BeamManager.MSG_BEAM_COMPLETE));
+ } catch (RemoteException e) {
+ Log.e(TAG, "failed to invoke Beam complete callback", e);
+ }
+ }
+ }
+
+ @Override
+ public void onTransferComplete(BeamTransferManager transfer, boolean success) {
+ // Play success sound
+ if (success) {
+ mSoundPool.play(mSuccessSound, 1.0f, 1.0f, 0, 0, 1.0f);
+ } else {
+ if (DBG) Log.d(TAG, "Transfer failed, final state: " +
+ Integer.toString(transfer.mState));
+ }
+
+ if (mBluetoothEnabledByNfc) {
+ mBluetoothEnabledByNfc = false;
+ mBluetoothAdapter.disable();
+ }
+
+ invokeCompleteCallback();
+ stopSelf(mStartId);
+ }
+
+ @Override
+ public IBinder onBind(Intent intent) {
+ return null;
+ }
+}
diff --git a/src/com/android/nfc/beam/BeamSendService.java b/src/com/android/nfc/beam/BeamSendService.java
new file mode 100644
index 00000000..59019d53
--- /dev/null
+++ b/src/com/android/nfc/beam/BeamSendService.java
@@ -0,0 +1,206 @@
+/*
+ * Copyright (C) 2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.nfc.beam;
+
+import com.android.nfc.R;
+
+import android.app.Service;
+import android.bluetooth.BluetoothAdapter;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.media.AudioManager;
+import android.media.SoundPool;
+import android.os.Handler;
+import android.os.IBinder;
+import android.os.Message;
+import android.os.Messenger;
+import android.os.RemoteException;
+import android.util.Log;
+
+public class BeamSendService extends Service implements BeamTransferManager.Callback {
+ private static String TAG = "BeamSendService";
+ private static boolean DBG = true;
+
+ public static String EXTRA_BEAM_TRANSFER_RECORD
+ = "com.android.nfc.beam.EXTRA_BEAM_TRANSFER_RECORD";
+ public static final String EXTRA_BEAM_COMPLETE_CALLBACK
+ = "com.android.nfc.beam.TRANSFER_COMPLETE_CALLBACK";
+
+ private BeamTransferManager mTransferManager;
+ private BeamStatusReceiver mBeamStatusReceiver;
+ private boolean mBluetoothEnabledByNfc;
+ private Messenger mCompleteCallback;
+ private int mStartId;
+ SoundPool mSoundPool;
+ int mSuccessSound;
+
+ private final BluetoothAdapter mBluetoothAdapter;
+ private final BroadcastReceiver mBluetoothStateReceiver = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ String action = intent.getAction();
+ if (action.equals(BluetoothAdapter.ACTION_STATE_CHANGED)) {
+ handleBluetoothStateChanged(intent);
+ }
+ }
+ };
+
+ public BeamSendService() {
+ mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
+ }
+
+ @Override
+ public void onCreate() {
+ super.onCreate();
+
+ mSoundPool = new SoundPool(1, AudioManager.STREAM_NOTIFICATION, 0);
+ mSuccessSound = mSoundPool.load(this, R.raw.end, 1);
+
+ // register BT state receiver
+ IntentFilter filter = new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED);
+ registerReceiver(mBluetoothStateReceiver, filter);
+ }
+
+ @Override
+ public void onDestroy() {
+ super.onDestroy();
+ if (mSoundPool != null) {
+ mSoundPool.release();
+ }
+
+ if (mBeamStatusReceiver != null) {
+ unregisterReceiver(mBeamStatusReceiver);
+ }
+ unregisterReceiver(mBluetoothStateReceiver);
+ }
+
+ @Override
+ public int onStartCommand(Intent intent, int flags, int startId) {
+ mStartId = startId;
+
+ BeamTransferRecord transferRecord;
+ if (intent == null ||
+ (transferRecord = intent.getParcelableExtra(EXTRA_BEAM_TRANSFER_RECORD)) == null) {
+ if (DBG) Log.e(TAG, "No transfer record provided. Stopping.");
+ stopSelf(startId);
+ return START_NOT_STICKY;
+ }
+
+ mCompleteCallback = intent.getParcelableExtra(EXTRA_BEAM_COMPLETE_CALLBACK);
+
+ if (doTransfer(transferRecord)) {
+ if (DBG) Log.i(TAG, "Starting outgoing Beam transfer");
+ return START_STICKY;
+ } else {
+ invokeCompleteCallback();
+ stopSelf(startId);
+ return START_NOT_STICKY;
+ }
+ }
+
+ boolean doTransfer(BeamTransferRecord transferRecord) {
+ if (createBeamTransferManager(transferRecord)) {
+ // register Beam status receiver
+ mBeamStatusReceiver = new BeamStatusReceiver(this, mTransferManager);
+ registerReceiver(mBeamStatusReceiver, mBeamStatusReceiver.getIntentFilter(),
+ BeamStatusReceiver.BEAM_STATUS_PERMISSION, new Handler());
+
+ if (transferRecord.dataLinkType == BeamTransferRecord.DATA_LINK_TYPE_BLUETOOTH) {
+ if (mBluetoothAdapter.isEnabled()) {
+ // Start the transfer
+ mTransferManager.start();
+ } else {
+ if (!mBluetoothAdapter.enableNoAutoConnect()) {
+ Log.e(TAG, "Error enabling Bluetooth.");
+ mTransferManager = null;
+ return false;
+ }
+ mBluetoothEnabledByNfc = true;
+ if (DBG) Log.d(TAG, "Queueing out transfer "
+ + Integer.toString(transferRecord.id));
+ }
+ }
+ return true;
+ }
+
+ return false;
+ }
+
+ boolean createBeamTransferManager(BeamTransferRecord transferRecord) {
+ if (mTransferManager != null) {
+ return false;
+ }
+
+ if (transferRecord.dataLinkType != BeamTransferRecord.DATA_LINK_TYPE_BLUETOOTH) {
+ // only support BT
+ return false;
+ }
+
+ mTransferManager = new BeamTransferManager(this, this, transferRecord, false);
+ mTransferManager.updateNotification();
+ return true;
+ }
+
+ private void handleBluetoothStateChanged(Intent intent) {
+ int state = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE,
+ BluetoothAdapter.ERROR);
+ if (state == BluetoothAdapter.STATE_ON) {
+ if (mTransferManager != null &&
+ mTransferManager.mDataLinkType == BeamTransferRecord.DATA_LINK_TYPE_BLUETOOTH) {
+ mTransferManager.start();
+ }
+ } else if (state == BluetoothAdapter.STATE_OFF) {
+ mBluetoothEnabledByNfc = false;
+ }
+ }
+
+ private void invokeCompleteCallback() {
+ if (mCompleteCallback != null) {
+ try {
+ mCompleteCallback.send(Message.obtain(null, BeamManager.MSG_BEAM_COMPLETE));
+ } catch (RemoteException e) {
+ Log.e(TAG, "failed to invoke Beam complete callback", e);
+ }
+ }
+ }
+
+ @Override
+ public void onTransferComplete(BeamTransferManager transfer, boolean success) {
+ // Play success sound
+ if (success) {
+ mSoundPool.play(mSuccessSound, 1.0f, 1.0f, 0, 0, 1.0f);
+ } else {
+ if (DBG) Log.d(TAG, "Transfer failed, final state: " +
+ Integer.toString(transfer.mState));
+ }
+
+ if (mBluetoothEnabledByNfc) {
+ mBluetoothEnabledByNfc = false;
+ mBluetoothAdapter.disable();
+ }
+
+ invokeCompleteCallback();
+ stopSelf(mStartId);
+ }
+
+ @Override
+ public IBinder onBind(Intent intent) {
+ return null;
+ }
+}
diff --git a/src/com/android/nfc/beam/BeamStatusReceiver.java b/src/com/android/nfc/beam/BeamStatusReceiver.java
new file mode 100644
index 00000000..67b5b82a
--- /dev/null
+++ b/src/com/android/nfc/beam/BeamStatusReceiver.java
@@ -0,0 +1,155 @@
+package com.android.nfc.beam;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.net.Uri;
+import android.util.Log;
+
+import java.io.File;
+
+/**
+ * @hide
+ */
+public class BeamStatusReceiver extends BroadcastReceiver {
+ private static final boolean DBG = true;
+ private static final String TAG = "BeamStatusReceiver";
+
+ private static final String ACTION_HANDOVER_STARTED =
+ "android.nfc.handover.intent.action.HANDOVER_STARTED";
+
+ private static final String ACTION_TRANSFER_PROGRESS =
+ "android.nfc.handover.intent.action.TRANSFER_PROGRESS";
+
+ private static final String ACTION_TRANSFER_DONE =
+ "android.nfc.handover.intent.action.TRANSFER_DONE";
+
+ private static final String EXTRA_HANDOVER_DATA_LINK_TYPE =
+ "android.nfc.handover.intent.extra.HANDOVER_DATA_LINK_TYPE";
+
+
+ private static final String EXTRA_TRANSFER_PROGRESS =
+ "android.nfc.handover.intent.extra.TRANSFER_PROGRESS";
+
+ private static final String EXTRA_TRANSFER_URI =
+ "android.nfc.handover.intent.extra.TRANSFER_URI";
+
+ private static final String EXTRA_OBJECT_COUNT =
+ "android.nfc.handover.intent.extra.OBJECT_COUNT";
+
+ private static final String EXTRA_TRANSFER_STATUS =
+ "android.nfc.handover.intent.extra.TRANSFER_STATUS";
+
+ private static final String EXTRA_TRANSFER_MIMETYPE =
+ "android.nfc.handover.intent.extra.TRANSFER_MIME_TYPE";
+
+ private static final String ACTION_STOP_BLUETOOTH_TRANSFER =
+ "android.btopp.intent.action.STOP_HANDOVER_TRANSFER";
+
+ // FIXME: Needs to stay in sync with com.android.bluetooth.opp.Constants
+ private static final int HANDOVER_TRANSFER_STATUS_SUCCESS = 0;
+ private static final int HANDOVER_TRANSFER_STATUS_FAILURE = 1;
+
+ // permission needed to be able to receive handover status requests
+ public static final String BEAM_STATUS_PERMISSION =
+ "android.permission.NFC_HANDOVER_STATUS";
+
+ // Needed to build cancel intent in Beam notification
+ public static final String EXTRA_INCOMING =
+ "com.android.nfc.handover.extra.INCOMING";
+
+ public static final String EXTRA_TRANSFER_ID =
+ "android.nfc.handover.intent.extra.TRANSFER_ID";
+
+ public static final String EXTRA_ADDRESS =
+ "android.nfc.handover.intent.extra.ADDRESS";
+
+ public static final String ACTION_CANCEL_HANDOVER_TRANSFER =
+ "com.android.nfc.handover.action.CANCEL_HANDOVER_TRANSFER";
+
+ public static final int DIRECTION_INCOMING = 0;
+ public static final int DIRECTION_OUTGOING = 1;
+
+ private final Context mContext;
+ private final BeamTransferManager mTransferManager;
+
+ BeamStatusReceiver(Context context, BeamTransferManager transferManager) {
+ mContext = context;
+ mTransferManager = transferManager;
+ }
+
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ String action = intent.getAction();
+ int dataLinkType = intent.getIntExtra(EXTRA_HANDOVER_DATA_LINK_TYPE,
+ BeamTransferManager.DATA_LINK_TYPE_BLUETOOTH);
+
+ if (ACTION_CANCEL_HANDOVER_TRANSFER.equals(action)) {
+ if (mTransferManager != null) {
+ mTransferManager.cancel();
+ }
+ } else if (ACTION_TRANSFER_PROGRESS.equals(action) ||
+ ACTION_TRANSFER_DONE.equals(action) ||
+ ACTION_HANDOVER_STARTED.equals(action)) {
+ handleTransferEvent(intent, dataLinkType);
+ }
+ }
+
+ public IntentFilter getIntentFilter() {
+ IntentFilter filter = new IntentFilter(ACTION_TRANSFER_DONE);
+ filter.addAction(ACTION_TRANSFER_PROGRESS);
+ filter.addAction(ACTION_CANCEL_HANDOVER_TRANSFER);
+ filter.addAction(ACTION_HANDOVER_STARTED);
+ return filter;
+ }
+
+ private void handleTransferEvent(Intent intent, int deviceType) {
+ String action = intent.getAction();
+ int id = intent.getIntExtra(EXTRA_TRANSFER_ID, -1);
+
+ String sourceAddress = intent.getStringExtra(EXTRA_ADDRESS);
+
+ if (sourceAddress == null) return;
+
+ if (mTransferManager == null) {
+ // There is no transfer running for this source address; most likely
+ // the transfer was cancelled. We need to tell BT OPP to stop transferring.
+ if (id != -1) {
+ if (deviceType == BeamTransferManager.DATA_LINK_TYPE_BLUETOOTH) {
+ if (DBG) Log.d(TAG, "Didn't find transfer, stopping");
+ Intent cancelIntent = new Intent(ACTION_STOP_BLUETOOTH_TRANSFER);
+ cancelIntent.putExtra(EXTRA_TRANSFER_ID, id);
+ mContext.sendBroadcast(cancelIntent);
+ }
+ }
+ return;
+ }
+
+ mTransferManager.setBluetoothTransferId(id);
+
+ if (action.equals(ACTION_TRANSFER_DONE)) {
+ int handoverStatus = intent.getIntExtra(EXTRA_TRANSFER_STATUS,
+ HANDOVER_TRANSFER_STATUS_FAILURE);
+ if (handoverStatus == HANDOVER_TRANSFER_STATUS_SUCCESS) {
+ String uriString = intent.getStringExtra(EXTRA_TRANSFER_URI);
+ String mimeType = intent.getStringExtra(EXTRA_TRANSFER_MIMETYPE);
+ Uri uri = Uri.parse(uriString);
+ if (uri != null && uri.getScheme() == null) {
+ uri = Uri.fromFile(new File(uri.getPath()));
+ }
+ mTransferManager.finishTransfer(true, uri, mimeType);
+ } else {
+ mTransferManager.finishTransfer(false, null, null);
+ }
+ } else if (action.equals(ACTION_TRANSFER_PROGRESS)) {
+ float progress = intent.getFloatExtra(EXTRA_TRANSFER_PROGRESS, 0.0f);
+ mTransferManager.updateFileProgress(progress);
+ } else if (action.equals(ACTION_HANDOVER_STARTED)) {
+ int count = intent.getIntExtra(EXTRA_OBJECT_COUNT, 0);
+ if (count > 0) {
+ mTransferManager.setObjectCount(count);
+ }
+ }
+ }
+}
diff --git a/src/com/android/nfc/handover/HandoverTransfer.java b/src/com/android/nfc/beam/BeamTransferManager.java
index b0baf182..b6785010 100644
--- a/src/com/android/nfc/handover/HandoverTransfer.java
+++ b/src/com/android/nfc/beam/BeamTransferManager.java
@@ -14,7 +14,9 @@
* limitations under the License.
*/
-package com.android.nfc.handover;
+package com.android.nfc.beam;
+
+import com.android.nfc.R;
import android.app.Notification;
import android.app.NotificationManager;
@@ -34,20 +36,22 @@ import android.os.SystemClock;
import android.os.UserHandle;
import android.util.Log;
-import com.android.nfc.R;
-
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.Locale;
/**
- * A HandoverTransfer object represents a set of files
+ * A BeamTransferManager object represents a set of files
* that were received through NFC connection handover
* from the same source address.
*
+ * It manages starting, stopping, and processing the transfer, as well
+ * as the user visible notification.
+ *
* For Bluetooth, files are received through OPP, and
* we have no knowledge how many files will be transferred
* as part of a single transaction.
@@ -57,21 +61,21 @@ import java.util.Locale;
* same source address as part of the same transfer.
* The corresponding URIs will be grouped in a single folder.
*
+ * @hide
*/
-public class HandoverTransfer implements Handler.Callback,
- MediaScannerConnection.OnScanCompletedListener {
+public class BeamTransferManager implements Handler.Callback,
+ MediaScannerConnection.OnScanCompletedListener {
interface Callback {
- void onTransferComplete(HandoverTransfer transfer, boolean success);
+ void onTransferComplete(BeamTransferManager transfer, boolean success);
};
- static final String TAG = "HandoverTransfer";
+ static final String TAG = "BeamTransferManager";
static final Boolean DBG = true;
// In the states below we still accept new file transfer
static final int STATE_NEW = 0;
-
static final int STATE_IN_PROGRESS = 1;
static final int STATE_W4_NEXT_TRANSFER = 2;
// In the states below no new files are accepted.
@@ -83,9 +87,8 @@ public class HandoverTransfer implements Handler.Callback,
static final int MSG_NEXT_TRANSFER_TIMER = 0;
static final int MSG_TRANSFER_TIMEOUT = 1;
- static final int DEVICE_TYPE_BLUETOOTH = 1;
+ static final int DATA_LINK_TYPE_BLUETOOTH = 1;
- public static final int DEVICE_TYPE_WIFI = 2;
// We need to receive an update within this time period
// to still consider this transfer to be "alive" (ie
// a reason to keep the handover transport enabled).
@@ -97,6 +100,12 @@ public class HandoverTransfer implements Handler.Callback,
static final String BEAM_DIR = "beam";
+ static final String ACTION_WHITELIST_DEVICE =
+ "android.btopp.intent.action.WHITELIST_DEVICE";
+
+ static final String ACTION_STOP_BLUETOOTH_TRANSFER =
+ "android.btopp.intent.action.STOP_HANDOVER_TRANSFER";
+
final boolean mIncoming; // whether this is an incoming transfer
final int mTransferId; // Unique ID of this transfer used for notifications
@@ -107,49 +116,51 @@ public class HandoverTransfer implements Handler.Callback,
final Handler mHandler;
final NotificationManager mNotificationManager;
final BluetoothDevice mRemoteDevice;
- final String mRemoteMac;
final Callback mCallback;
- final Long mStartTime;
+ final boolean mRemoteActivating;
// Variables below are only accessed on the main thread
int mState;
int mCurrentCount;
int mSuccessCount;
int mTotalCount;
- int mDeviceType;
+ int mDataLinkType;
boolean mCalledBack;
Long mLastUpdate; // Last time an event occurred for this transfer
float mProgress; // Progress in range [0..1]
ArrayList<Uri> mUris; // Received uris from transport
ArrayList<String> mTransferMimeTypes; // Mime-types received from transport
- Uri[] mOutgoingUris; // URIs to send via Wifi Direct
-
+ Uri[] mOutgoingUris; // URIs to send
ArrayList<String> mPaths; // Raw paths on the filesystem for Beam-stored files
HashMap<String, String> mMimeTypes; // Mime-types associated with each path
HashMap<String, Uri> mMediaUris; // URIs found by the media scanner for each path
int mUrisScanned;
+ Long mStartTime;
- public HandoverTransfer(Context context, Callback callback,
- PendingHandoverTransfer pendingTransfer) {
+ public BeamTransferManager(Context context, Callback callback,
+ BeamTransferRecord pendingTransfer, boolean incoming) {
mContext = context;
mCallback = callback;
mRemoteDevice = pendingTransfer.remoteDevice;
- mRemoteMac = pendingTransfer.remoteMacAddress;
- mIncoming = pendingTransfer.incoming;
+ mIncoming = incoming;
mTransferId = pendingTransfer.id;
mBluetoothTransferId = -1;
- mDeviceType = pendingTransfer.deviceType;
+ mDataLinkType = pendingTransfer.dataLinkType;
+ mRemoteActivating = pendingTransfer.remoteActivating;
+ mStartTime = 0L;
// For incoming transfers, count can be set later
mTotalCount = (pendingTransfer.uris != null) ? pendingTransfer.uris.length : 0;
mLastUpdate = SystemClock.elapsedRealtime();
mProgress = 0.0f;
mState = STATE_NEW;
- mUris = new ArrayList<Uri>();
+ mUris = pendingTransfer.uris == null
+ ? new ArrayList<Uri>()
+ : new ArrayList<Uri>(Arrays.asList(pendingTransfer.uris));
mTransferMimeTypes = new ArrayList<String>();
mMimeTypes = new HashMap<String, String>();
mPaths = new ArrayList<String>();
mMediaUris = new HashMap<String, Uri>();
- mCancelIntent = buildCancelIntent(mIncoming);
+ mCancelIntent = buildCancelIntent();
mUrisScanned = 0;
mCurrentCount = 0;
mSuccessCount = 0;
@@ -158,17 +169,30 @@ public class HandoverTransfer implements Handler.Callback,
mHandler.sendEmptyMessageDelayed(MSG_TRANSFER_TIMEOUT, ALIVE_CHECK_MS);
mNotificationManager = (NotificationManager) mContext.getSystemService(
Context.NOTIFICATION_SERVICE);
-
- mStartTime = System.currentTimeMillis();
}
void whitelistOppDevice(BluetoothDevice device) {
if (DBG) Log.d(TAG, "Whitelisting " + device + " for BT OPP");
- Intent intent = new Intent(HandoverManager.ACTION_WHITELIST_DEVICE);
+ Intent intent = new Intent(ACTION_WHITELIST_DEVICE);
intent.putExtra(BluetoothDevice.EXTRA_DEVICE, device);
mContext.sendBroadcastAsUser(intent, UserHandle.CURRENT);
}
+ public void start() {
+ if (mStartTime > 0) {
+ // already started
+ return;
+ }
+
+ mStartTime = System.currentTimeMillis();
+
+ if (!mIncoming) {
+ if (mDataLinkType == BeamTransferRecord.DATA_LINK_TYPE_BLUETOOTH) {
+ new BluetoothOppHandover(mContext, mRemoteDevice, mUris, mRemoteActivating).start();
+ }
+ }
+ }
+
public void updateFileProgress(float progress) {
if (!isRunning()) return; // Ignore when we're no longer running
@@ -218,7 +242,6 @@ public class HandoverTransfer implements Handler.Callback,
if (mIncoming) {
processFiles();
} else {
- Log.i(TAG, "Updating state!");
updateStateAndNotification(mSuccessCount > 0 ? STATE_SUCCESS : STATE_FAILED);
}
} else {
@@ -258,9 +281,8 @@ public class HandoverTransfer implements Handler.Callback,
}
private void sendBluetoothCancelIntentAndUpdateState() {
- Intent cancelIntent = new Intent(
- "android.btopp.intent.action.STOP_HANDOVER_TRANSFER");
- cancelIntent.putExtra(HandoverService.EXTRA_TRANSFER_ID, mBluetoothTransferId);
+ Intent cancelIntent = new Intent(ACTION_STOP_BLUETOOTH_TRANSFER);
+ cancelIntent.putExtra(BeamStatusReceiver.EXTRA_TRANSFER_ID, mBluetoothTransferId);
mContext.sendBroadcast(cancelIntent);
updateStateAndNotification(STATE_CANCELLED);
}
@@ -409,10 +431,6 @@ public class HandoverTransfer implements Handler.Callback,
}
- public int getTransferId() {
- return mTransferId;
- }
-
public boolean handleMessage(Message msg) {
if (msg.what == MSG_NEXT_TRANSFER_TIMER) {
// We didn't receive a new transfer in time, finalize this one
@@ -442,18 +460,6 @@ public class HandoverTransfer implements Handler.Callback,
}
}
- boolean checkMediaStorage(File path) {
- if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
- if (!path.isDirectory() && !path.mkdir()) {
- Log.e(TAG, "Not dir or not mkdir " + path.getAbsolutePath());
- return false;
- }
- return true;
- } else {
- Log.e(TAG, "External storage not mounted, can't store file.");
- return false;
- }
- }
Intent buildViewIntent() {
if (mPaths.size() == 0) return null;
@@ -469,19 +475,31 @@ public class HandoverTransfer implements Handler.Callback,
return viewIntent;
}
- PendingIntent buildCancelIntent(boolean incoming) {
- Intent intent = new Intent(HandoverService.ACTION_CANCEL_HANDOVER_TRANSFER);
- intent.putExtra(HandoverService.EXTRA_ADDRESS, mDeviceType == DEVICE_TYPE_BLUETOOTH
- ? mRemoteDevice.getAddress() : mRemoteMac);
- intent.putExtra(HandoverService.EXTRA_INCOMING, incoming ?
- HandoverService.DIRECTION_INCOMING : HandoverService.DIRECTION_OUTGOING);
+ PendingIntent buildCancelIntent() {
+ Intent intent = new Intent(BeamStatusReceiver.ACTION_CANCEL_HANDOVER_TRANSFER);
+ intent.putExtra(BeamStatusReceiver.EXTRA_ADDRESS, mRemoteDevice.getAddress());
+ intent.putExtra(BeamStatusReceiver.EXTRA_INCOMING, mIncoming ?
+ BeamStatusReceiver.DIRECTION_INCOMING : BeamStatusReceiver.DIRECTION_OUTGOING);
PendingIntent pi = PendingIntent.getBroadcast(mContext, mTransferId, intent,
PendingIntent.FLAG_ONE_SHOT);
return pi;
}
- File generateUniqueDestination(String path, String fileName) {
+ static boolean checkMediaStorage(File path) {
+ if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
+ if (!path.isDirectory() && !path.mkdir()) {
+ Log.e(TAG, "Not dir or not mkdir " + path.getAbsolutePath());
+ return false;
+ }
+ return true;
+ } else {
+ Log.e(TAG, "External storage not mounted, can't store file.");
+ return false;
+ }
+ }
+
+ static File generateUniqueDestination(String path, String fileName) {
int dotIndex = fileName.lastIndexOf(".");
String extension = null;
String fileNameWithoutExtension = null;
@@ -502,7 +520,7 @@ public class HandoverTransfer implements Handler.Callback,
return dstFile;
}
- File generateMultiplePath(String beamRoot) {
+ static File generateMultiplePath(String beamRoot) {
// Generate a unique directory with the date
String format = "yyyy-MM-dd";
SimpleDateFormat sdf = new SimpleDateFormat(format, Locale.US);
diff --git a/src/com/android/nfc/beam/BeamTransferRecord.aidl b/src/com/android/nfc/beam/BeamTransferRecord.aidl
new file mode 100644
index 00000000..93af205d
--- /dev/null
+++ b/src/com/android/nfc/beam/BeamTransferRecord.aidl
@@ -0,0 +1,19 @@
+/*
+ * Copyright (C) 2013 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.nfc.beam;
+
+parcelable BeamTransferRecord;
diff --git a/src/com/android/nfc/beam/BeamTransferRecord.java b/src/com/android/nfc/beam/BeamTransferRecord.java
new file mode 100644
index 00000000..d8f86689
--- /dev/null
+++ b/src/com/android/nfc/beam/BeamTransferRecord.java
@@ -0,0 +1,98 @@
+/*
+ * Copyright (C) 2012 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.nfc.beam;
+
+import android.bluetooth.BluetoothDevice;
+import android.net.Uri;
+import android.os.Parcel;
+import android.os.Parcelable;
+
+public class BeamTransferRecord implements Parcelable {
+
+ public static int DATA_LINK_TYPE_BLUETOOTH = 0;
+
+ public int id;
+ public boolean remoteActivating;
+ public Uri[] uris;
+ public int dataLinkType;
+
+ // Data link specific fields
+ public BluetoothDevice remoteDevice;
+
+
+ private BeamTransferRecord(BluetoothDevice remoteDevice,
+ boolean remoteActivating, Uri[] uris) {
+ this.id = 0;
+ this.remoteDevice = remoteDevice;
+ this.remoteActivating = remoteActivating;
+ this.uris = uris;
+
+ this.dataLinkType = DATA_LINK_TYPE_BLUETOOTH;
+ }
+
+ public static final BeamTransferRecord forBluetoothDevice(
+ BluetoothDevice remoteDevice, boolean remoteActivating,
+ Uri[] uris) {
+ return new BeamTransferRecord(remoteDevice, remoteActivating, uris);
+ }
+
+ public static final Parcelable.Creator<BeamTransferRecord> CREATOR
+ = new Parcelable.Creator<BeamTransferRecord>() {
+ public BeamTransferRecord createFromParcel(Parcel in) {
+ int deviceType = in.readInt();
+
+ if (deviceType != DATA_LINK_TYPE_BLUETOOTH) {
+ // only support BLUETOOTH
+ return null;
+ }
+
+ BluetoothDevice remoteDevice = in.readParcelable(getClass().getClassLoader());
+ boolean remoteActivating = (in.readInt() == 1);
+ int numUris = in.readInt();
+ Uri[] uris = null;
+ if (numUris > 0) {
+ uris = new Uri[numUris];
+ in.readTypedArray(uris, Uri.CREATOR);
+ }
+
+ return new BeamTransferRecord(remoteDevice,
+ remoteActivating, uris);
+
+ }
+
+ @Override
+ public BeamTransferRecord[] newArray(int size) {
+ return new BeamTransferRecord[size];
+ }
+ };
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ @Override
+ public void writeToParcel(Parcel dest, int flags) {
+ dest.writeInt(dataLinkType);
+ dest.writeParcelable(remoteDevice, 0);
+ dest.writeInt(remoteActivating ? 1 : 0);
+ dest.writeInt(uris != null ? uris.length : 0);
+ if (uris != null && uris.length > 0) {
+ dest.writeTypedArray(uris, 0);
+ }
+ }
+}
diff --git a/src/com/android/nfc/handover/BluetoothOppHandover.java b/src/com/android/nfc/beam/BluetoothOppHandover.java
index 85e7f133..84d3c209 100644
--- a/src/com/android/nfc/handover/BluetoothOppHandover.java
+++ b/src/com/android/nfc/beam/BluetoothOppHandover.java
@@ -14,21 +14,18 @@
* limitations under the License.
*/
-package com.android.nfc.handover;
+package com.android.nfc.beam;
import android.bluetooth.BluetoothDevice;
-import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Handler;
import android.os.Message;
import android.os.SystemClock;
-import android.os.UserHandle;
import android.util.Log;
-import android.webkit.MimeTypeMap;
+
import java.util.ArrayList;
-import java.util.Arrays;
public class BluetoothOppHandover implements Handler.Callback {
static final String TAG = "BluetoothOppHandover";
@@ -52,14 +49,14 @@ public class BluetoothOppHandover implements Handler.Callback {
final Context mContext;
final BluetoothDevice mDevice;
- final Uri[] mUris;
+ final ArrayList<Uri> mUris;
final boolean mRemoteActivating;
final Handler mHandler;
final Long mCreateTime;
int mState;
- public BluetoothOppHandover(Context context, BluetoothDevice device, Uri[] uris,
+ public BluetoothOppHandover(Context context, BluetoothDevice device, ArrayList<Uri> uris,
boolean remoteActivating) {
mContext = context;
mDevice = device;
@@ -67,7 +64,7 @@ public class BluetoothOppHandover implements Handler.Callback {
mRemoteActivating = remoteActivating;
mCreateTime = SystemClock.elapsedRealtime();
- mHandler = new Handler(context.getMainLooper(),this);
+ mHandler = new Handler(context.getMainLooper(), this);
mState = STATE_INIT;
}
@@ -99,7 +96,7 @@ public class BluetoothOppHandover implements Handler.Callback {
void sendIntent() {
Intent intent = new Intent();
intent.setPackage("com.android.bluetooth");
- String mimeType = MimeTypeUtil.getMimeTypeForUri(mContext, mUris[0]);
+ String mimeType = MimeTypeUtil.getMimeTypeForUri(mContext, mUris.get(0));
intent.setType(mimeType);
intent.putExtra(BluetoothDevice.EXTRA_DEVICE, mDevice);
for (Uri uri : mUris) {
@@ -113,13 +110,12 @@ public class BluetoothOppHandover implements Handler.Callback {
Log.e(TAG, "Failed to transfer permission to Bluetooth process.");
}
}
- if (mUris.length == 1) {
+ if (mUris.size() == 1) {
intent.setAction(ACTION_HANDOVER_SEND);
- intent.putExtra(Intent.EXTRA_STREAM, mUris[0]);
+ intent.putExtra(Intent.EXTRA_STREAM, mUris.get(0));
} else {
- ArrayList<Uri> uris = new ArrayList<Uri>(Arrays.asList(mUris));
intent.setAction(ACTION_HANDOVER_SEND_MULTIPLE);
- intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris);
+ intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, mUris);
}
if (DBG) Log.d(TAG, "Handing off outging transfer to BT");
mContext.sendBroadcast(intent);
diff --git a/src/com/android/nfc/FireflyRenderer.java b/src/com/android/nfc/beam/FireflyRenderer.java
index 40c931d1..d87a5d97 100644
--- a/src/com/android/nfc/FireflyRenderer.java
+++ b/src/com/android/nfc/beam/FireflyRenderer.java
@@ -15,7 +15,7 @@
*/
-package com.android.nfc;
+package com.android.nfc.beam;
import android.content.Context;
import android.graphics.Bitmap;
diff --git a/src/com/android/nfc/handover/MimeTypeUtil.java b/src/com/android/nfc/beam/MimeTypeUtil.java
index 7a0556d9..73d7fd6e 100644
--- a/src/com/android/nfc/handover/MimeTypeUtil.java
+++ b/src/com/android/nfc/beam/MimeTypeUtil.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.android.nfc.handover;
+package com.android.nfc.beam;
import android.content.ContentResolver;
import android.content.Context;
@@ -46,4 +46,4 @@ public final class MimeTypeUtil {
return null;
}
}
-} \ No newline at end of file
+}
diff --git a/src/com/android/nfc/SendUi.java b/src/com/android/nfc/beam/SendUi.java
index 58a38888..0761ba52 100644
--- a/src/com/android/nfc/SendUi.java
+++ b/src/com/android/nfc/beam/SendUi.java
@@ -14,9 +14,11 @@
* limitations under the License.
*/
-package com.android.nfc;
+package com.android.nfc.beam;
import com.android.internal.policy.PolicyManager;
+import com.android.nfc.R;
+import com.android.nfc.beam.FireflyRenderer;
import android.animation.Animator;
import android.animation.AnimatorSet;
@@ -110,8 +112,8 @@ public class SendUi implements Animator.AnimatorListener, View.OnTouchListener,
static final int TEXT_HINT_ALPHA_DURATION_MS = 500;
static final int TEXT_HINT_ALPHA_START_DELAY_MS = 300;
- static final int FINISH_SCALE_UP = 0;
- static final int FINISH_SEND_SUCCESS = 1;
+ public static final int FINISH_SCALE_UP = 0;
+ public static final int FINISH_SEND_SUCCESS = 1;
static final int STATE_IDLE = 0;
static final int STATE_W4_SCREENSHOT = 1;
@@ -185,7 +187,7 @@ public class SendUi implements Animator.AnimatorListener, View.OnTouchListener,
int mSurfaceWidth;
int mSurfaceHeight;
- interface Callback {
+ public interface Callback {
public void onSendConfirmed();
public void onCanceled();
}
diff --git a/src/com/android/nfc/cardemulation/AidRoutingManager.java b/src/com/android/nfc/cardemulation/AidRoutingManager.java
index a727989d..96225b71 100644
--- a/src/com/android/nfc/cardemulation/AidRoutingManager.java
+++ b/src/com/android/nfc/cardemulation/AidRoutingManager.java
@@ -88,7 +88,23 @@ public class AidRoutingManager {
void clearNfcRoutingTableLocked() {
for (Map.Entry<String, Integer> aidEntry : mRouteForAid.entrySet()) {
- NfcService.getInstance().unrouteAids(aidEntry.getKey());
+ String aid = aidEntry.getKey();
+ if (aid.endsWith("*")) {
+ if (mAidMatchingSupport == AID_MATCHING_EXACT_ONLY) {
+ Log.e(TAG, "Device does not support prefix AIDs but AID [" + aid
+ + "] is registered");
+ } else if (mAidMatchingSupport == AID_MATCHING_PREFIX_ONLY) {
+ if (DBG) Log.d(TAG, "Unrouting prefix AID " + aid);
+ // Cut off '*' since controller anyway treats all AIDs as a prefix
+ aid = aid.substring(0, aid.length() - 1);
+ } else if (mAidMatchingSupport == AID_MATCHING_EXACT_OR_PREFIX) {
+ if (DBG) Log.d(TAG, "Unrouting prefix AID " + aid);
+ }
+ } else {
+ if (DBG) Log.d(TAG, "Unrouting exact AID " + aid);
+ }
+
+ NfcService.getInstance().unrouteAids(aid);
}
}
diff --git a/src/com/android/nfc/cardemulation/CardEmulationManager.java b/src/com/android/nfc/cardemulation/CardEmulationManager.java
index e1794645..02d36227 100644
--- a/src/com/android/nfc/cardemulation/CardEmulationManager.java
+++ b/src/com/android/nfc/cardemulation/CardEmulationManager.java
@@ -248,6 +248,15 @@ public class CardEmulationManager implements RegisteredServicesCache.Callback,
}
/**
+ * Returns whether a service in this package is preferred,
+ * either because it's the default payment app or it's running
+ * in the foreground.
+ */
+ public boolean packageHasPreferredService(String packageName) {
+ return mPreferredServices.packageHasPreferredService(packageName);
+ }
+
+ /**
* This class implements the application-facing APIs
* and are called from binder. All calls must be
* permission-checked.
diff --git a/src/com/android/nfc/cardemulation/PreferredServices.java b/src/com/android/nfc/cardemulation/PreferredServices.java
index 89542259..41f10fad 100644
--- a/src/com/android/nfc/cardemulation/PreferredServices.java
+++ b/src/com/android/nfc/cardemulation/PreferredServices.java
@@ -354,6 +354,20 @@ public class PreferredServices implements com.android.nfc.ForegroundUtils.Callba
loadDefaultsFromSettings(userId);
}
+ public boolean packageHasPreferredService(String packageName) {
+ if (packageName == null) return false;
+
+ if (mPaymentDefaults.currentPreferred != null &&
+ packageName.equals(mPaymentDefaults.currentPreferred.getPackageName())) {
+ return true;
+ } else if (mForegroundCurrent != null &&
+ packageName.equals(mForegroundCurrent.getPackageName())) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+
public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
pw.println("Preferred services (in order of importance): ");
pw.println(" *** Current preferred foreground service: " + mForegroundCurrent);
diff --git a/src/com/android/nfc/handover/BluetoothPeripheralHandover.java b/src/com/android/nfc/handover/BluetoothPeripheralHandover.java
index 39dcf81f..3ac09e62 100644
--- a/src/com/android/nfc/handover/BluetoothPeripheralHandover.java
+++ b/src/com/android/nfc/handover/BluetoothPeripheralHandover.java
@@ -222,8 +222,7 @@ public class BluetoothPeripheralHandover implements BluetoothProfile.ServiceList
!= BluetoothProfile.STATE_DISCONNECTED) {
mHidResult = RESULT_PENDING;
mInput.disconnect(mDevice);
- toast(mContext.getString(R.string.disconnecting_peripheral) + " " +
- mName + "...");
+ toast(getToastString(R.string.disconnecting_peripheral));
break;
} else {
mHidResult = RESULT_DISCONNECTED;
@@ -244,8 +243,7 @@ public class BluetoothPeripheralHandover implements BluetoothProfile.ServiceList
mA2dpResult = RESULT_DISCONNECTED;
}
if (mA2dpResult == RESULT_PENDING || mHfpResult == RESULT_PENDING) {
- toast(mContext.getString(R.string.disconnecting_peripheral) + " " +
- mName + "...");
+ toast(getToastString(R.string.disconnecting_peripheral));
break;
}
}
@@ -254,7 +252,7 @@ public class BluetoothPeripheralHandover implements BluetoothProfile.ServiceList
case STATE_DISCONNECTING:
if (mTransport == BluetoothDevice.TRANSPORT_LE) {
if (mHidResult == RESULT_DISCONNECTED) {
- toast(mContext.getString(R.string.disconnected_peripheral) + " " + mName);
+ toast(getToastString(R.string.disconnected_peripheral));
complete(false);
}
@@ -265,7 +263,7 @@ public class BluetoothPeripheralHandover implements BluetoothProfile.ServiceList
break;
}
if (mA2dpResult == RESULT_DISCONNECTED && mHfpResult == RESULT_DISCONNECTED) {
- toast(mContext.getString(R.string.disconnected_peripheral) + " " + mName);
+ toast(getToastString(R.string.disconnected_peripheral));
}
complete(false);
break;
@@ -275,6 +273,10 @@ public class BluetoothPeripheralHandover implements BluetoothProfile.ServiceList
}
+ private String getToastString(int resid) {
+ return mContext.getString(resid, mName != null ? mName : R.string.device);
+ }
+
boolean getProfileProxys() {
if (mTransport == BluetoothDevice.TRANSPORT_LE) {
@@ -294,6 +296,7 @@ public class BluetoothPeripheralHandover implements BluetoothProfile.ServiceList
void nextStepConnect() {
switch (mState) {
case STATE_INIT_COMPLETE:
+
if (mDevice.getBondState() != BluetoothDevice.BOND_BONDED) {
requestPairConfirmation();
mState = STATE_WAITING_FOR_BOND_CONFIRMATION;
@@ -325,8 +328,7 @@ public class BluetoothPeripheralHandover implements BluetoothProfile.ServiceList
!= BluetoothProfile.STATE_CONNECTED) {
mHidResult = RESULT_PENDING;
mInput.connect(mDevice);
- toast(mContext.getString(R.string.connecting_peripheral) + " "
- + mName + "...");
+ toast(getToastString(R.string.connecting_peripheral));
break;
} else {
mHidResult = RESULT_CONNECTED;
@@ -346,8 +348,7 @@ public class BluetoothPeripheralHandover implements BluetoothProfile.ServiceList
mA2dpResult = RESULT_CONNECTED;
}
if (mA2dpResult == RESULT_PENDING || mHfpResult == RESULT_PENDING) {
- toast(mContext.getString(R.string.connecting_peripheral) + " "
- + mName + "...");
+ toast(getToastString(R.string.connecting_peripheral));
break;
}
}
@@ -358,11 +359,11 @@ public class BluetoothPeripheralHandover implements BluetoothProfile.ServiceList
if (mHidResult == RESULT_PENDING) {
break;
} else if (mHidResult == RESULT_CONNECTED) {
- toast(mContext.getString(R.string.connected_peripheral) + " " + mName);
+ toast(getToastString(R.string.connected_peripheral));
+ mDevice.setAlias(mName);
complete(true);
} else {
- toast (mContext.getString(R.string.connect_peripheral_failed) + " "
- + mName);
+ toast (getToastString(R.string.connect_peripheral_failed));
complete(false);
}
} else {
@@ -372,11 +373,12 @@ public class BluetoothPeripheralHandover implements BluetoothProfile.ServiceList
}
if (mA2dpResult == RESULT_CONNECTED || mHfpResult == RESULT_CONNECTED) {
// we'll take either as success
- toast(mContext.getString(R.string.connected_peripheral) + " " + mName);
+ toast(getToastString(R.string.connected_peripheral));
if (mA2dpResult == RESULT_CONNECTED) startTheMusic();
+ mDevice.setAlias(mName);
complete(true);
} else {
- toast (mContext.getString(R.string.connect_peripheral_failed) + " " + mName);
+ toast (getToastString(R.string.connect_peripheral_failed));
complete(false);
}
}
@@ -386,9 +388,9 @@ public class BluetoothPeripheralHandover implements BluetoothProfile.ServiceList
void startBonding() {
mState = STATE_BONDING;
- toast(mContext.getString(R.string.pairing_peripheral) + " " + mName + "...");
+ toast(getToastString(R.string.pairing_peripheral));
if (!mDevice.createBond(mTransport)) {
- toast(mContext.getString(R.string.pairing_peripheral_failed) + " " + mName);
+ toast(getToastString(R.string.pairing_peripheral_failed));
complete(false);
}
}
@@ -410,7 +412,7 @@ public class BluetoothPeripheralHandover implements BluetoothProfile.ServiceList
if (bond == BluetoothDevice.BOND_BONDED) {
nextStepConnect();
} else if (bond == BluetoothDevice.BOND_NONE) {
- toast(mContext.getString(R.string.pairing_peripheral_failed) + " " + mName);
+ toast(getToastString(R.string.pairing_peripheral_failed));
complete(false);
}
} else if (BluetoothHeadset.ACTION_CONNECTION_STATE_CHANGED.equals(action) &&
diff --git a/src/com/android/nfc/handover/HandoverManager.java b/src/com/android/nfc/handover/HandoverDataParser.java
index d48b4904..71e06ad1 100644
--- a/src/com/android/nfc/handover/HandoverManager.java
+++ b/src/com/android/nfc/handover/HandoverDataParser.java
@@ -19,36 +19,23 @@ package com.android.nfc.handover;
import java.nio.BufferUnderflowException;
import java.nio.ByteBuffer;
import java.nio.charset.Charset;
-import java.util.ArrayList;
import java.util.Arrays;
-import java.util.HashMap;
import java.util.Random;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
-import android.content.BroadcastReceiver;
-import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
-import android.content.IntentFilter;
-import android.content.ServiceConnection;
-import android.net.Uri;
import android.nfc.FormatException;
import android.nfc.NdefMessage;
import android.nfc.NdefRecord;
-import android.os.Bundle;
-import android.os.Handler;
-import android.os.IBinder;
-import android.os.Message;
-import android.os.Messenger;
-import android.os.RemoteException;
import android.os.UserHandle;
import android.util.Log;
/**
* Manages handover of NFC to other technologies.
*/
-public class HandoverManager {
+public class HandoverDataParser {
private static final String TAG = "NfcHandover";
private static final boolean DBG = false;
@@ -72,33 +59,14 @@ public class HandoverManager {
private static final int BT_HANDOVER_TYPE_SHORT_LOCAL_NAME = 0x08;
public static final int BT_HANDOVER_LE_ROLE_CENTRAL_ONLY = 0x01;
- static final String ACTION_WHITELIST_DEVICE =
- "android.btopp.intent.action.WHITELIST_DEVICE";
-
- static final int MSG_HANDOVER_COMPLETE = 0;
- static final int MSG_HEADSET_CONNECTED = 1;
- static final int MSG_HEADSET_NOT_CONNECTED = 2;
-
- private final Context mContext;
private final BluetoothAdapter mBluetoothAdapter;
- private final MessageHandler mHandler = new MessageHandler();
- private final Messenger mMessenger = new Messenger(mHandler);
private final Object mLock = new Object();
// Variables below synchronized on mLock
- /* package as optimization */ HashMap<Integer, PendingHandoverTransfer> mPendingTransfers;
- private ArrayList<Message> mPendingServiceMessages;
- /* package as optimization */ boolean mBluetoothHeadsetPending;
- /* package as optimization */ boolean mBluetoothHeadsetConnected;
- protected boolean mBluetoothEnabledByNfc;
- private int mHandoverTransferId;
- private Messenger mService = null;
- private boolean mBinding = false;
- private boolean mBound;
+
private String mLocalBluetoothAddress;
- private boolean mEnabled;
- static class BluetoothHandoverData {
+ public static class BluetoothHandoverData {
public boolean valid = false;
public BluetoothDevice device;
public String name;
@@ -106,141 +74,19 @@ public class HandoverManager {
public int transport = BluetoothDevice.TRANSPORT_AUTO;
}
- class MessageHandler extends Handler {
- @Override
- public void handleMessage(Message msg) {
- synchronized (mLock) {
- switch (msg.what) {
- case MSG_HANDOVER_COMPLETE:
- int transferId = msg.arg1;
- Log.d(TAG, "Completed transfer id: " + Integer.toString(transferId));
- if (mPendingTransfers.containsKey(transferId)) {
- mPendingTransfers.remove(transferId);
- } else {
- Log.e(TAG, "Could not find completed transfer id: " +
- Integer.toString(transferId));
- }
- break;
- case MSG_HEADSET_CONNECTED:
- mBluetoothEnabledByNfc = msg.arg1 != 0;
- mBluetoothHeadsetConnected = true;
- mBluetoothHeadsetPending = false;
- break;
- case MSG_HEADSET_NOT_CONNECTED:
- mBluetoothEnabledByNfc = false; // No need to maintain this state any longer
- mBluetoothHeadsetConnected = false;
- mBluetoothHeadsetPending = false;
- break;
- default:
- break;
- }
- unbindServiceIfNeededLocked(false);
- }
- }
- };
-
- private ServiceConnection mConnection = new ServiceConnection() {
- @Override
- public void onServiceConnected(ComponentName name, IBinder service) {
- synchronized (mLock) {
- mService = new Messenger(service);
- mBinding = false;
- mBound = true;
- // Register this client and transfer last known service state
- Message msg = Message.obtain(null, HandoverService.MSG_REGISTER_CLIENT);
- msg.arg1 = mBluetoothEnabledByNfc ? 1 : 0;
- msg.arg2 = mBluetoothHeadsetConnected ? 1 : 0;
- msg.replyTo = mMessenger;
- try {
- mService.send(msg);
- } catch (RemoteException e) {
- Log.e(TAG, "Failed to register client");
- }
- // Send all queued messages
- while (!mPendingServiceMessages.isEmpty()) {
- msg = mPendingServiceMessages.remove(0);
- try {
- mService.send(msg);
- } catch (RemoteException e) {
- Log.e(TAG, "Failed to send queued message to service");
- }
- }
- }
- }
+ public static class IncomingHandoverData {
+ public final NdefMessage handoverSelect;
+ public final BluetoothHandoverData handoverData;
- @Override
- public void onServiceDisconnected(ComponentName name) {
- synchronized (mLock) {
- Log.d(TAG, "Service disconnected");
- if (mService != null) {
- try {
- Message msg = Message.obtain(null, HandoverService.MSG_DEREGISTER_CLIENT);
- msg.replyTo = mMessenger;
- mService.send(msg);
- } catch (RemoteException e) {
- // Service may have crashed - ignore
- }
- }
- mService = null;
- mBound = false;
- mBluetoothHeadsetPending = false;
- mPendingTransfers.clear();
- mPendingServiceMessages.clear();
- }
- }
- };
-
- public HandoverManager(Context context) {
- mContext = context;
- mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
- mPendingTransfers = new HashMap<Integer, PendingHandoverTransfer>();
- mPendingServiceMessages = new ArrayList<Message>();
-
- IntentFilter filter = new IntentFilter(Intent.ACTION_USER_SWITCHED);
- mContext.registerReceiver(mReceiver, filter, null, null);
- mEnabled = true;
- mBluetoothEnabledByNfc = false;
- }
-
- final BroadcastReceiver mReceiver = new BroadcastReceiver() {
- @Override
- public void onReceive(Context context, Intent intent) {
- String action = intent.getAction();
- if (action.equals(Intent.ACTION_USER_SWITCHED)) {
- // Just force unbind the service.
- unbindServiceIfNeededLocked(true);
- }
- }
- };
-
- /**
- * @return whether the service was bound to successfully
- */
- boolean bindServiceIfNeededLocked() {
- if (!mBinding) {
- Log.d(TAG, "Binding to handover service");
- boolean bindSuccess = mContext.bindServiceAsUser(new Intent(mContext,
- HandoverService.class), mConnection, Context.BIND_AUTO_CREATE,
- UserHandle.CURRENT);
- mBinding = bindSuccess;
- return bindSuccess;
- } else {
- // A previous bind is pending
- return true;
+ public IncomingHandoverData(NdefMessage handoverSelect,
+ BluetoothHandoverData handoverData) {
+ this.handoverSelect = handoverSelect;
+ this.handoverData = handoverData;
}
}
- void unbindServiceIfNeededLocked(boolean force) {
- // If no service operation is pending, unbind
- if (mBound && (force || (!mBluetoothHeadsetPending && mPendingTransfers.isEmpty()))) {
- Log.d(TAG, "Unbinding from service.");
- mContext.unbindService(mConnection);
- mBound = false;
- mPendingServiceMessages.clear();
- mBluetoothHeadsetPending = false;
- mPendingTransfers.clear();
- }
- return;
+ public HandoverDataParser() {
+ mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
}
static NdefRecord createCollisionRecord() {
@@ -256,7 +102,8 @@ public class HandoverManager {
payload[1] = 1; // length of carrier data reference
payload[2] = 'b'; // carrier data reference: ID for Bluetooth OOB data record
payload[3] = 0; // Auxiliary data reference count
- return new NdefRecord(NdefRecord.TNF_WELL_KNOWN, NdefRecord.RTD_ALTERNATIVE_CARRIER, null, payload);
+ return new NdefRecord(NdefRecord.TNF_WELL_KNOWN, NdefRecord.RTD_ALTERNATIVE_CARRIER, null,
+ payload);
}
NdefRecord createBluetoothOobDataRecord() {
@@ -280,12 +127,6 @@ public class HandoverManager {
return new NdefRecord(NdefRecord.TNF_MIME_MEDIA, TYPE_BT_OOB, new byte[]{'b'}, payload);
}
- public void setEnabled(boolean enabled) {
- synchronized (mLock) {
- mEnabled = enabled;
- }
- }
-
public boolean isHandoverSupported() {
return (mBluetoothAdapter != null);
}
@@ -345,16 +186,16 @@ public class HandoverManager {
}
/**
- * Return null if message is not a Handover Request,
- * return the Handover Select response if it is.
+ * Returns null if message is not a Handover Request,
+ * returns the IncomingHandoverData (Hs + parsed data) if it is.
*/
- public NdefMessage tryHandoverRequest(NdefMessage m) {
- if (m == null) return null;
+ public IncomingHandoverData getIncomingHandoverData(NdefMessage handoverRequest) {
+ if (handoverRequest == null) return null;
if (mBluetoothAdapter == null) return null;
- if (DBG) Log.d(TAG, "tryHandoverRequest():" + m.toString());
+ if (DBG) Log.d(TAG, "getIncomingHandoverData():" + handoverRequest.toString());
- NdefRecord handoverRequestRecord = m.getRecords()[0];
+ NdefRecord handoverRequestRecord = handoverRequest.getRecords()[0];
if (handoverRequestRecord.getTnf() != NdefRecord.TNF_WELL_KNOWN) {
return null;
}
@@ -365,7 +206,7 @@ public class HandoverManager {
// we have a handover request, look for BT OOB record
BluetoothHandoverData bluetoothData = null;
- for (NdefRecord dataRecord : m.getRecords()) {
+ for (NdefRecord dataRecord : handoverRequest.getRecords()) {
if (dataRecord.getTnf() == NdefRecord.TNF_MIME_MEDIA) {
if (Arrays.equals(dataRecord.getType(), TYPE_BT_OOB)) {
bluetoothData = parseBtOob(ByteBuffer.wrap(dataRecord.getPayload()));
@@ -373,13 +214,21 @@ public class HandoverManager {
}
}
- return tryBluetoothHandoverRequest(bluetoothData);
+ NdefMessage hs = tryBluetoothHandoverRequest(bluetoothData);
+ if (hs != null) {
+ return new IncomingHandoverData(hs, bluetoothData);
+ }
+
+ return null;
+ }
+
+ public BluetoothHandoverData getOutgoingHandoverData(NdefMessage handoverSelect) {
+ return parseBluetooth(handoverSelect);
}
private NdefMessage tryBluetoothHandoverRequest(BluetoothHandoverData bluetoothData) {
NdefMessage selectMessage = null;
if (bluetoothData != null) {
-
// Note: there could be a race where we conclude
// that Bluetooth is already enabled, and shortly
// after the user turns it off. That will cause
@@ -388,23 +237,6 @@ public class HandoverManager {
// be common for the user to be changing BT settings
// while waiting to receive a picture.
boolean bluetoothActivating = !mBluetoothAdapter.isEnabled();
- synchronized (mLock) {
- if (!mEnabled) return null;
-
- Message msg = Message.obtain(null, HandoverService.MSG_START_INCOMING_TRANSFER);
- PendingHandoverTransfer transfer
- = registerBluetoothInTransferLocked(bluetoothData.device);
- Bundle transferData = new Bundle();
- transferData.putParcelable(HandoverService.BUNDLE_TRANSFER, transfer);
- msg.setData(transferData);
-
- if (!sendOrQueueMessageLocked(msg)) {
- removeTransferLocked(transfer.id);
- return null;
- }
- }
- // BT OOB found, whitelist it for incoming OPP data
- whitelistOppDevice(bluetoothData.device);
// return BT OOB record so they can perform handover
selectMessage = (createBluetoothHandoverSelectMessage(bluetoothActivating));
@@ -415,101 +247,7 @@ public class HandoverManager {
return selectMessage;
}
- public boolean sendOrQueueMessageLocked(Message msg) {
- if (!mBound || mService == null) {
- // Need to start service, let us know if we can queue the message
- if (!bindServiceIfNeededLocked()) {
- Log.e(TAG, "Could not start service");
- return false;
- }
- // Queue the message to send when the service is bound
- mPendingServiceMessages.add(msg);
- } else {
- try {
- mService.send(msg);
- } catch (RemoteException e) {
- Log.e(TAG, "Could not connect to handover service");
- return false;
- }
- }
- return true;
- }
-
- public boolean tryHandover(NdefMessage m) {
- if (m == null) return false;
- if (mBluetoothAdapter == null) return false;
-
- if (DBG) Log.d(TAG, "tryHandover(): " + m.toString());
-
- BluetoothHandoverData handover = parseBluetooth(m);
- if (handover == null) return false;
- if (!handover.valid) return true;
-
- synchronized (mLock) {
- if (!mEnabled) return false;
-
- if (mBluetoothAdapter == null) {
- if (DBG) Log.d(TAG, "BT handover, but BT not available");
- return true;
- }
-
- Message msg = Message.obtain(null, HandoverService.MSG_PERIPHERAL_HANDOVER, 0, 0);
- Bundle headsetData = new Bundle();
- headsetData.putParcelable(HandoverService.EXTRA_PERIPHERAL_DEVICE, handover.device);
- headsetData.putString(HandoverService.EXTRA_PERIPHERAL_NAME, handover.name);
- headsetData.putInt(HandoverService.EXTRA_PERIPHERAL_TRANSPORT, handover.transport);
- msg.setData(headsetData);
- return sendOrQueueMessageLocked(msg);
- }
- }
-
- // This starts sending an Uri over BT
- public void doHandoverUri(Uri[] uris,
- NdefMessage handoverResponse) {
- if (mBluetoothAdapter == null) return;
-
- BluetoothHandoverData data = parseBluetooth(handoverResponse);
- if (data != null && data.valid) {
- // Register a new handover transfer object
- synchronized (mLock) {
- Message msg = Message.obtain(null, HandoverService.MSG_START_OUTGOING_TRANSFER, 0, 0);
- PendingHandoverTransfer transfer = registerBluetoothOutTransferLocked(data, uris);
- Bundle transferData = new Bundle();
- transferData.putParcelable(HandoverService.BUNDLE_TRANSFER, transfer);
- msg.setData(transferData);
- if (DBG) Log.d(TAG, "Initiating outgoing bluetooth transfer, [" +
- mLocalBluetoothAddress + "]->[" + data.device.getAddress() + "]");
- sendOrQueueMessageLocked(msg);
- }
- }
- }
-
- PendingHandoverTransfer registerBluetoothInTransferLocked(BluetoothDevice remoteDevice) {
- PendingHandoverTransfer transfer = PendingHandoverTransfer.forBluetoothDevice(
- mHandoverTransferId++, true, remoteDevice, false, null);
- mPendingTransfers.put(transfer.id, transfer);
-
- return transfer;
- }
-
- PendingHandoverTransfer registerBluetoothOutTransferLocked(BluetoothHandoverData data,
- Uri[] uris) {
- PendingHandoverTransfer transfer = PendingHandoverTransfer.forBluetoothDevice(
- mHandoverTransferId++, false, data.device, data.carrierActivating, uris);
- mPendingTransfers.put(transfer.id, transfer);
- return transfer;
- }
- void removeTransferLocked(int id) {
- mPendingTransfers.remove(id);
- }
-
- void whitelistOppDevice(BluetoothDevice device) {
- if (DBG) Log.d(TAG, "Whitelisting " + device + " for BT OPP");
- Intent intent = new Intent(ACTION_WHITELIST_DEVICE);
- intent.putExtra(BluetoothDevice.EXTRA_DEVICE, device);
- mContext.sendBroadcastAsUser(intent, UserHandle.CURRENT);
- }
boolean isCarrierActivating(NdefRecord handoverRec, byte[] carrierId) {
byte[] payload = handoverRec.getPayload();
@@ -567,7 +305,7 @@ public class HandoverManager {
return null;
}
- BluetoothHandoverData parseBluetooth(NdefMessage m) {
+ public BluetoothHandoverData parseBluetooth(NdefMessage m) {
NdefRecord r = m.getRecords()[0];
short tnf = r.getTnf();
byte[] type = r.getType();
@@ -729,16 +467,5 @@ public class HandoverManager {
return result;
}
-
- final protected static char[] hexArray = "0123456789ABCDEF".toCharArray();
- private static String byteArrayToHexString(byte[] bytes) {
- char[] hexChars = new char[bytes.length * 2];
- for ( int j = 0; j < bytes.length; j++ ) {
- int v = bytes[j] & 0xFF;
- hexChars[j * 2] = hexArray[v >>> 4];
- hexChars[j * 2 + 1] = hexArray[v & 0x0F];
- }
- return new String(hexChars);
- }
}
diff --git a/src/com/android/nfc/handover/HandoverServer.java b/src/com/android/nfc/handover/HandoverServer.java
index 093d1dd5..23ac1d9d 100644
--- a/src/com/android/nfc/handover/HandoverServer.java
+++ b/src/com/android/nfc/handover/HandoverServer.java
@@ -15,40 +15,50 @@
*/
package com.android.nfc.handover;
+import com.android.nfc.DeviceHost.LlcpServerSocket;
+import com.android.nfc.DeviceHost.LlcpSocket;
+import com.android.nfc.LlcpException;
+import com.android.nfc.NfcService;
+import com.android.nfc.beam.BeamManager;
+import com.android.nfc.beam.BeamReceiveService;
+import com.android.nfc.beam.BeamTransferRecord;
+
+import android.bluetooth.BluetoothDevice;
+import android.content.Context;
+import android.content.Intent;
import android.nfc.FormatException;
import android.nfc.NdefMessage;
+import android.os.UserHandle;
import android.util.Log;
-import com.android.nfc.LlcpException;
-import com.android.nfc.NfcService;
-import com.android.nfc.DeviceHost.LlcpServerSocket;
-import com.android.nfc.DeviceHost.LlcpSocket;
-
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.Arrays;
public final class HandoverServer {
- public static final String HANDOVER_SERVICE_NAME = "urn:nfc:sn:handover";
- public static final String TAG = "HandoverServer";
- public static final Boolean DBG = false;
+ static final String HANDOVER_SERVICE_NAME = "urn:nfc:sn:handover";
+ static final String TAG = "HandoverServer";
+ static final Boolean DBG = false;
- public static final int MIU = 128;
+ static final int MIU = 128;
- final HandoverManager mHandoverManager;
+ final HandoverDataParser mHandoverDataParser;
final int mSap;
final Callback mCallback;
+ private final Context mContext;
ServerThread mServerThread = null;
boolean mServerRunning = false;
public interface Callback {
void onHandoverRequestReceived();
+ void onHandoverBusy();
}
- public HandoverServer(int sap, HandoverManager manager, Callback callback) {
+ public HandoverServer(Context context, int sap, HandoverDataParser manager, Callback callback) {
+ mContext = context;
mSap = sap;
- mHandoverManager = manager;
+ mHandoverDataParser = manager;
mCallback = callback;
}
@@ -191,16 +201,24 @@ public final class HandoverServer {
}
if (handoverRequestMsg != null) {
+ BeamManager beamManager = BeamManager.getInstance();
+
+ if (beamManager.isBeamInProgress()) {
+ mCallback.onHandoverBusy();
+ break;
+ }
+
// 2) convert to handover response
- NdefMessage resp = mHandoverManager.tryHandoverRequest(handoverRequestMsg);
- if (resp == null) {
+ HandoverDataParser.IncomingHandoverData handoverData
+ = mHandoverDataParser.getIncomingHandoverData(handoverRequestMsg);
+ if (handoverData == null) {
Log.e(TAG, "Failed to create handover response");
break;
}
// 3) send handover response
int offset = 0;
- byte[] buffer = resp.toByteArray();
+ byte[] buffer = handoverData.handoverSelect.toByteArray();
int remoteMiu = mSock.getRemoteMiu();
while (offset < buffer.length) {
int length = Math.min(buffer.length - offset, remoteMiu);
@@ -210,6 +228,10 @@ public final class HandoverServer {
}
// We're done
mCallback.onHandoverRequestReceived();
+ if (!beamManager.startBeamReceive(mContext, handoverData.handoverData)) {
+ mCallback.onHandoverBusy();
+ break;
+ }
// We can process another handover transfer
byteStream = new ByteArrayOutputStream();
}
@@ -238,3 +260,4 @@ public final class HandoverServer {
}
}
}
+
diff --git a/src/com/android/nfc/handover/HandoverService.java b/src/com/android/nfc/handover/HandoverService.java
deleted file mode 100644
index b2c7814e..00000000
--- a/src/com/android/nfc/handover/HandoverService.java
+++ /dev/null
@@ -1,568 +0,0 @@
-/*
- * Copyright (C) 2012 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.nfc.handover;
-
-import android.app.Service;
-import android.bluetooth.BluetoothAdapter;
-import android.bluetooth.BluetoothDevice;
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.media.AudioManager;
-import android.media.SoundPool;
-import android.net.Uri;
-import android.nfc.NfcAdapter;
-import android.os.Bundle;
-import android.os.Handler;
-import android.os.IBinder;
-import android.os.Message;
-import android.os.Messenger;
-import android.os.RemoteException;
-import android.util.Log;
-import android.util.Pair;
-
-import com.android.nfc.R;
-
-import java.io.File;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.Map;
-import java.util.Queue;
-
-public class HandoverService extends Service implements HandoverTransfer.Callback,
- BluetoothPeripheralHandover.Callback {
-
- static final String TAG = "HandoverService";
- static final boolean DBG = true;
-
- static final int MSG_REGISTER_CLIENT = 0;
- static final int MSG_DEREGISTER_CLIENT = 1;
- static final int MSG_START_INCOMING_TRANSFER = 2;
- static final int MSG_START_OUTGOING_TRANSFER = 3;
- static final int MSG_PERIPHERAL_HANDOVER = 4;
- static final int MSG_PAUSE_POLLING = 5;
-
-
- static final String BUNDLE_TRANSFER = "transfer";
-
- static final String EXTRA_PERIPHERAL_DEVICE = "device";
- static final String EXTRA_PERIPHERAL_NAME = "headsetname";
- static final String EXTRA_PERIPHERAL_TRANSPORT = "transporttype";
-
- public static final String ACTION_CANCEL_HANDOVER_TRANSFER =
- "com.android.nfc.handover.action.CANCEL_HANDOVER_TRANSFER";
-
- public static final String EXTRA_INCOMING =
- "com.android.nfc.handover.extra.INCOMING";
-
- public static final String ACTION_HANDOVER_STARTED =
- "android.nfc.handover.intent.action.HANDOVER_STARTED";
-
- public static final String ACTION_TRANSFER_PROGRESS =
- "android.nfc.handover.intent.action.TRANSFER_PROGRESS";
-
- public static final String ACTION_TRANSFER_DONE =
- "android.nfc.handover.intent.action.TRANSFER_DONE";
-
- public static final String EXTRA_TRANSFER_STATUS =
- "android.nfc.handover.intent.extra.TRANSFER_STATUS";
-
- public static final String EXTRA_TRANSFER_MIMETYPE =
- "android.nfc.handover.intent.extra.TRANSFER_MIME_TYPE";
-
- public static final String EXTRA_ADDRESS =
- "android.nfc.handover.intent.extra.ADDRESS";
-
- public static final String EXTRA_TRANSFER_DIRECTION =
- "android.nfc.handover.intent.extra.TRANSFER_DIRECTION";
-
- public static final String EXTRA_TRANSFER_ID =
- "android.nfc.handover.intent.extra.TRANSFER_ID";
-
- public static final String EXTRA_TRANSFER_PROGRESS =
- "android.nfc.handover.intent.extra.TRANSFER_PROGRESS";
-
- public static final String EXTRA_TRANSFER_URI =
- "android.nfc.handover.intent.extra.TRANSFER_URI";
-
- public static final String EXTRA_OBJECT_COUNT =
- "android.nfc.handover.intent.extra.OBJECT_COUNT";
-
- public static final String EXTRA_HANDOVER_DEVICE_TYPE =
- "android.nfc.handover.intent.extra.HANDOVER_DEVICE_TYPE";
-
- public static final int DIRECTION_INCOMING = 0;
- public static final int DIRECTION_OUTGOING = 1;
-
- public static final int HANDOVER_TRANSFER_STATUS_SUCCESS = 0;
- public static final int HANDOVER_TRANSFER_STATUS_FAILURE = 1;
-
- // permission needed to be able to receive handover status requests
- public static final String HANDOVER_STATUS_PERMISSION =
- "android.permission.NFC_HANDOVER_STATUS";
-
- // Amount of time to pause polling when connecting to peripherals
- private static final int PAUSE_POLLING_TIMEOUT_MS = 35000;
- public static final int PAUSE_DELAY_MILLIS = 300;
-
- // Variables below only accessed on main thread
- final Queue<BluetoothOppHandover> mPendingOutTransfers;
- final HashMap<Pair<String, Boolean>, HandoverTransfer> mBluetoothTransfers;
- final Messenger mMessenger;
-
- SoundPool mSoundPool;
- int mSuccessSound;
-
- BluetoothAdapter mBluetoothAdapter;
- NfcAdapter mNfcAdapter;
- Messenger mClient;
- Handler mHandler;
- BluetoothPeripheralHandover mBluetoothPeripheralHandover;
- boolean mBluetoothHeadsetConnected;
- boolean mBluetoothEnabledByNfc;
-
- private HandoverTransfer mWifiTransfer;
-
- class MessageHandler extends Handler {
- @Override
- public void handleMessage(Message msg) {
- switch (msg.what) {
- case MSG_REGISTER_CLIENT:
- mClient = msg.replyTo;
- // Restore state from previous instance
- mBluetoothEnabledByNfc = msg.arg1 != 0;
- mBluetoothHeadsetConnected = msg.arg2 != 0;
- break;
- case MSG_DEREGISTER_CLIENT:
- mClient = null;
- break;
- case MSG_START_INCOMING_TRANSFER:
- doIncomingTransfer(msg);
- break;
- case MSG_START_OUTGOING_TRANSFER:
- doOutgoingTransfer(msg);
- break;
- case MSG_PERIPHERAL_HANDOVER:
- doPeripheralHandover(msg);
- break;
- case MSG_PAUSE_POLLING:
- mNfcAdapter.pausePolling(PAUSE_POLLING_TIMEOUT_MS);
- break;
- }
- }
-
- }
-
- final BroadcastReceiver mHandoverStatusReceiver = new BroadcastReceiver() {
- @Override
- public void onReceive(Context context, Intent intent) {
- String action = intent.getAction();
- int deviceType = intent.getIntExtra(EXTRA_HANDOVER_DEVICE_TYPE,
- HandoverTransfer.DEVICE_TYPE_BLUETOOTH);
-
- if (action.equals(BluetoothAdapter.ACTION_STATE_CHANGED)) {
- handleBluetoothStateChanged(intent);
- } else if (action.equals(ACTION_CANCEL_HANDOVER_TRANSFER)) {
- handleCancelTransfer(intent, deviceType);
- } else if (action.equals(ACTION_TRANSFER_PROGRESS) ||
- action.equals(ACTION_TRANSFER_DONE) ||
- action.equals(ACTION_HANDOVER_STARTED)) {
- handleTransferEvent(intent, deviceType);
- }
- }
- };
-
- public HandoverService() {
- mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
- mPendingOutTransfers = new LinkedList<BluetoothOppHandover>();
- mBluetoothTransfers = new HashMap<Pair<String, Boolean>, HandoverTransfer>();
- mHandler = new MessageHandler();
- mMessenger = new Messenger(mHandler);
- mBluetoothHeadsetConnected = false;
- mBluetoothEnabledByNfc = false;
- }
-
- @Override
- public void onCreate() {
- super.onCreate();
-
- mSoundPool = new SoundPool(1, AudioManager.STREAM_NOTIFICATION, 0);
- mSuccessSound = mSoundPool.load(this, R.raw.end, 1);
- mNfcAdapter = NfcAdapter.getDefaultAdapter(getApplicationContext());
-
- IntentFilter filter = new IntentFilter(ACTION_TRANSFER_DONE);
- filter.addAction(ACTION_TRANSFER_PROGRESS);
- filter.addAction(ACTION_CANCEL_HANDOVER_TRANSFER);
- filter.addAction(BluetoothAdapter.ACTION_STATE_CHANGED);
- filter.addAction(ACTION_HANDOVER_STARTED);
- registerReceiver(mHandoverStatusReceiver, filter, HANDOVER_STATUS_PERMISSION, mHandler);
- }
-
- @Override
- public void onDestroy() {
- super.onDestroy();
- if (mSoundPool != null) {
- mSoundPool.release();
- }
- unregisterReceiver(mHandoverStatusReceiver);
- }
-
- void doOutgoingTransfer(Message msg) {
- Bundle msgData = msg.getData();
-
- msgData.setClassLoader(getClassLoader());
- PendingHandoverTransfer pendingTransfer = msgData.getParcelable(BUNDLE_TRANSFER);
- createHandoverTransfer(pendingTransfer);
-
- if (pendingTransfer.deviceType == HandoverTransfer.DEVICE_TYPE_BLUETOOTH) {
- // Create the actual bluetooth transfer
-
- BluetoothOppHandover handover = new BluetoothOppHandover(HandoverService.this,
- pendingTransfer.remoteDevice, pendingTransfer.uris,
- pendingTransfer.remoteActivating);
- if (mBluetoothAdapter.isEnabled()) {
- // Start the transfer
- handover.start();
- } else {
- if (!enableBluetooth()) {
- Log.e(TAG, "Error enabling Bluetooth.");
- notifyClientTransferComplete(pendingTransfer.id);
- return;
- }
- if (DBG) Log.d(TAG, "Queueing out transfer " + Integer.toString(pendingTransfer.id));
- mPendingOutTransfers.add(handover);
- // Queue the transfer and enable Bluetooth - when it is enabled
- // the transfer will be started.
- }
- }
- }
-
- void doIncomingTransfer(Message msg) {
- Bundle msgData = msg.getData();
-
- msgData.setClassLoader(getClassLoader());
- PendingHandoverTransfer pendingTransfer = msgData.getParcelable(BUNDLE_TRANSFER);
- if (pendingTransfer.deviceType == HandoverTransfer.DEVICE_TYPE_BLUETOOTH &&
- !mBluetoothAdapter.isEnabled() && !enableBluetooth()) {
- Log.e(TAG, "Error enabling Bluetooth.");
- notifyClientTransferComplete(pendingTransfer.id);
- return;
- }
- createHandoverTransfer(pendingTransfer);
- // Remote device will connect and finish the transfer
- }
-
- void doPeripheralHandover(Message msg) {
- Bundle msgData = msg.getData();
- BluetoothDevice device = msgData.getParcelable(EXTRA_PERIPHERAL_DEVICE);
- String name = msgData.getString(EXTRA_PERIPHERAL_NAME);
- int transport = msgData.getInt(EXTRA_PERIPHERAL_TRANSPORT);
- if (mBluetoothPeripheralHandover != null) {
- Log.d(TAG, "Ignoring pairing request, existing handover in progress.");
- return;
- }
- mBluetoothPeripheralHandover = new BluetoothPeripheralHandover(HandoverService.this,
- device, name, transport, HandoverService.this);
- // TODO: figure out a way to disable polling without deactivating current target
- if (transport == BluetoothDevice.TRANSPORT_LE) {
- mHandler.sendMessageDelayed(
- mHandler.obtainMessage(MSG_PAUSE_POLLING), PAUSE_DELAY_MILLIS);
- }
- if (mBluetoothAdapter.isEnabled()) {
- if (!mBluetoothPeripheralHandover.start()) {
- mNfcAdapter.resumePolling();
- }
- } else {
- // Once BT is enabled, the headset pairing will be started
-
- if (!enableBluetooth()) {
- Log.e(TAG, "Error enabling Bluetooth.");
- mBluetoothPeripheralHandover = null;
- }
- }
- }
-
- void startPendingTransfers() {
- while (!mPendingOutTransfers.isEmpty()) {
- BluetoothOppHandover handover = mPendingOutTransfers.remove();
- handover.start();
- }
- }
-
- boolean enableBluetooth() {
- if (!mBluetoothAdapter.isEnabled()) {
- mBluetoothEnabledByNfc = true;
- return mBluetoothAdapter.enableNoAutoConnect();
- }
- return true;
- }
-
- void disableBluetoothIfNeeded() {
- if (!mBluetoothEnabledByNfc) return;
-
- if (mBluetoothTransfers.size() == 0 && !mBluetoothHeadsetConnected) {
- mBluetoothAdapter.disable();
- mBluetoothEnabledByNfc = false;
- }
- }
-
- void createHandoverTransfer(PendingHandoverTransfer pendingTransfer) {
- HandoverTransfer transfer;
- String macAddress;
-
- if (pendingTransfer.deviceType == HandoverTransfer.DEVICE_TYPE_BLUETOOTH) {
- macAddress = pendingTransfer.remoteDevice.getAddress();
- transfer = maybeCreateHandoverTransfer(macAddress,
- pendingTransfer.incoming, pendingTransfer);
- } else {
- Log.e(TAG, "Invalid device type [" + pendingTransfer.deviceType + "] received.");
- return;
- }
-
- if (transfer != null) {
- transfer.updateNotification();
- }
- }
-
- HandoverTransfer maybeCreateHandoverTransfer(String address, boolean incoming,
- PendingHandoverTransfer pendingTransfer) {
- HandoverTransfer transfer;
- Pair<String, Boolean> key = new Pair<String, Boolean>(address, incoming);
-
- if (mBluetoothTransfers.containsKey(key)) {
- transfer = mBluetoothTransfers.get(key);
- if (!transfer.isRunning()) {
- mBluetoothTransfers.remove(key); // new one created below
- } else {
- // There is already a transfer running to this
- // device - it will automatically get combined
- // with the existing transfer.
- notifyClientTransferComplete(pendingTransfer.id);
- return null;
- }
- } else {
- transfer = new HandoverTransfer(this, this, pendingTransfer);
- }
-
- mBluetoothTransfers.put(key, transfer);
- return transfer;
- }
-
-
- HandoverTransfer findHandoverTransfer(String macAddress, boolean incoming) {
- Pair<String, Boolean> key = new Pair<String, Boolean>(macAddress, incoming);
- if (mBluetoothTransfers.containsKey(key)) {
- HandoverTransfer transfer = mBluetoothTransfers.get(key);
- if (transfer.isRunning()) {
- return transfer;
- }
- }
-
- return null;
- }
-
- @Override
- public IBinder onBind(Intent intent) {
- return mMessenger.getBinder();
- }
-
- private void handleTransferEvent(Intent intent, int deviceType) {
- String action = intent.getAction();
- int direction = intent.getIntExtra(EXTRA_TRANSFER_DIRECTION, -1);
- int id = intent.getIntExtra(EXTRA_TRANSFER_ID, -1);
- if (action.equals(ACTION_HANDOVER_STARTED)) {
- // This is always for incoming transfers
- direction = DIRECTION_INCOMING;
- }
- String sourceAddress = intent.getStringExtra(EXTRA_ADDRESS);
-
- if (direction == -1 || sourceAddress == null) return;
- boolean incoming = (direction == DIRECTION_INCOMING);
-
- HandoverTransfer transfer =
- findHandoverTransfer(sourceAddress, incoming);
- if (transfer == null) {
- // There is no transfer running for this source address; most likely
- // the transfer was cancelled. We need to tell BT OPP to stop transferring.
- if (id != -1) {
- if (deviceType == HandoverTransfer.DEVICE_TYPE_BLUETOOTH) {
- if (DBG) Log.d(TAG, "Didn't find transfer, stopping");
- Intent cancelIntent = new Intent(
- "android.btopp.intent.action.STOP_HANDOVER_TRANSFER");
- cancelIntent.putExtra(EXTRA_TRANSFER_ID, id);
- sendBroadcast(cancelIntent);
- }
- }
- return;
- }
-
- transfer.setBluetoothTransferId(id);
-
- if (action.equals(ACTION_TRANSFER_DONE)) {
- int handoverStatus = intent.getIntExtra(EXTRA_TRANSFER_STATUS,
- HANDOVER_TRANSFER_STATUS_FAILURE);
- if (handoverStatus == HANDOVER_TRANSFER_STATUS_SUCCESS) {
- String uriString = intent.getStringExtra(EXTRA_TRANSFER_URI);
- String mimeType = intent.getStringExtra(EXTRA_TRANSFER_MIMETYPE);
- Uri uri = Uri.parse(uriString);
- if (uri != null && uri.getScheme() == null) {
- uri = Uri.fromFile(new File(uri.getPath()));
- }
- transfer.finishTransfer(true, uri, mimeType);
- } else {
- transfer.finishTransfer(false, null, null);
- }
- } else if (action.equals(ACTION_TRANSFER_PROGRESS)) {
- float progress = intent.getFloatExtra(EXTRA_TRANSFER_PROGRESS, 0.0f);
- transfer.updateFileProgress(progress);
- } else if (action.equals(ACTION_HANDOVER_STARTED)) {
- int count = intent.getIntExtra(EXTRA_OBJECT_COUNT, 0);
- if (count > 0) {
- transfer.setObjectCount(count);
- }
- }
- }
-
- private void handleCancelTransfer(Intent intent, int deviceType) {
- String sourceAddress = intent.getStringExtra(EXTRA_ADDRESS);
- int direction = intent.getIntExtra(EXTRA_INCOMING, -1);
-
- if (direction == -1) {
- return;
- }
-
- boolean incoming = direction == DIRECTION_INCOMING;
- HandoverTransfer transfer = findHandoverTransfer(sourceAddress, incoming);
-
- if (transfer != null) {
- if (DBG) Log.d(TAG, "Cancelling transfer " + Integer.toString(transfer.mTransferId));
- transfer.cancel();
- }
- }
-
- private void handleBluetoothStateChanged(Intent intent) {
- int state = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE,
- BluetoothAdapter.ERROR);
- if (state == BluetoothAdapter.STATE_ON) {
- // If there is a pending device pairing, start it
- if (mBluetoothPeripheralHandover != null &&
- !mBluetoothPeripheralHandover.hasStarted()) {
- if (!mBluetoothPeripheralHandover.start()) {
- mNfcAdapter.resumePolling();
- }
- }
-
- // Start any pending file transfers
- startPendingTransfers();
- } else if (state == BluetoothAdapter.STATE_OFF) {
- mBluetoothEnabledByNfc = false;
- mBluetoothHeadsetConnected = false;
- }
- }
-
- void notifyClientTransferComplete(int transferId) {
- if (mClient != null) {
- Message msg = Message.obtain(null, HandoverManager.MSG_HANDOVER_COMPLETE);
- msg.arg1 = transferId;
- try {
- mClient.send(msg);
- } catch (RemoteException e) {
- // Ignore
- }
- }
- }
-
- @Override
- public boolean onUnbind(Intent intent) {
- // prevent any future callbacks to the client, no rebind call needed.
- mClient = null;
- return false;
- }
-
- @Override
- public void onTransferComplete(HandoverTransfer transfer, boolean success) {
- // Called on the main thread
-
- // First, remove the transfer from our list
- synchronized (this) {
- if (mWifiTransfer == transfer) {
- mWifiTransfer = null;
- }
- }
-
- if (mWifiTransfer == null) {
- Iterator it = mBluetoothTransfers.entrySet().iterator();
- while (it.hasNext()) {
- Map.Entry hashPair = (Map.Entry)it.next();
- HandoverTransfer transferEntry = (HandoverTransfer) hashPair.getValue();
- if (transferEntry == transfer) {
- it.remove();
- }
- }
- }
-
- // Notify any clients of the service
- notifyClientTransferComplete(transfer.getTransferId());
-
- // Play success sound
- if (success) {
- mSoundPool.play(mSuccessSound, 1.0f, 1.0f, 0, 0, 1.0f);
- } else {
- if (DBG) Log.d(TAG, "Transfer failed, final state: " +
- Integer.toString(transfer.mState));
- }
- disableBluetoothIfNeeded();
- }
-
- @Override
- public void onBluetoothPeripheralHandoverComplete(boolean connected) {
- // Called on the main thread
- int transport = mBluetoothPeripheralHandover.mTransport;
- mBluetoothPeripheralHandover = null;
- mBluetoothHeadsetConnected = connected;
-
- // <hack> resume polling immediately if the connection failed,
- // otherwise just wait for polling to come back up after the timeout
- // This ensures we don't disconnect if the user left the volantis
- // on the tag after pairing completed, which results in automatic
- // disconnection </hack>
- if (transport == BluetoothDevice.TRANSPORT_LE && !connected) {
- if (mHandler.hasMessages(MSG_PAUSE_POLLING)) {
- mHandler.removeMessages(MSG_PAUSE_POLLING);
- }
-
- // do this unconditionally as the polling could have been paused as we were removing
- // the message in the handler. It's a no-op if polling is already enabled.
- mNfcAdapter.resumePolling();
- }
-
- if (mClient != null) {
- Message msg = Message.obtain(null,
- connected ? HandoverManager.MSG_HEADSET_CONNECTED
- : HandoverManager.MSG_HEADSET_NOT_CONNECTED);
- msg.arg1 = mBluetoothEnabledByNfc ? 1 : 0;
- try {
- mClient.send(msg);
- } catch (RemoteException e) {
- // Ignore
- }
- }
- disableBluetoothIfNeeded();
- }
-}
diff --git a/src/com/android/nfc/handover/PendingHandoverTransfer.java b/src/com/android/nfc/handover/PendingHandoverTransfer.java
deleted file mode 100644
index 568b3ecd..00000000
--- a/src/com/android/nfc/handover/PendingHandoverTransfer.java
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * Copyright (C) 2012 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.nfc.handover;
-
-import android.bluetooth.BluetoothDevice;
-import android.net.Uri;
-import android.os.Parcel;
-import android.os.Parcelable;
-
-public class PendingHandoverTransfer implements Parcelable {
-
- public String remoteMacAddress; // For type WIFI only
- public BluetoothDevice remoteDevice; // For type BLUETOOTH only
- public int id;
- public boolean incoming;
- public boolean remoteActivating;
- public Uri[] uris;
- public int deviceType;
-
- private PendingHandoverTransfer(int id, boolean incoming, BluetoothDevice remoteDevice,
- boolean remoteActivating, Uri[] uris) {
- this.id = id;
- this.incoming = incoming;
- this.remoteDevice = remoteDevice;
- this.remoteActivating = remoteActivating;
- this.uris = uris;
-
- this.deviceType = HandoverTransfer.DEVICE_TYPE_BLUETOOTH;
- }
-
- private PendingHandoverTransfer(int id, boolean incoming, String remoteMacAddress,
- boolean remoteActivating, Uri[] uris) {
- this.id = id;
- this.incoming = incoming;
- this.remoteMacAddress = remoteMacAddress;
- this.remoteActivating = remoteActivating;
- this.uris = uris;
-
- this.deviceType = HandoverTransfer.DEVICE_TYPE_WIFI;
- }
-
- public static final PendingHandoverTransfer forBluetoothDevice(
- int id, boolean incoming, BluetoothDevice remoteDevice, boolean remoteActivating,
- Uri[] uris) {
- return new PendingHandoverTransfer(id, incoming, remoteDevice, remoteActivating, uris);
- }
-
- public static final PendingHandoverTransfer forWifiDevice(
- int id, boolean incoming, String macAddress, boolean remoteActivating, Uri[] uris) {
- return new PendingHandoverTransfer(id, incoming, macAddress, remoteActivating, uris);
- }
-
- public static final Parcelable.Creator<PendingHandoverTransfer> CREATOR
- = new Parcelable.Creator<PendingHandoverTransfer>() {
- public PendingHandoverTransfer createFromParcel(Parcel in) {
- int id = in.readInt();
- boolean incoming = (in.readInt() == 1) ? true : false;
- int deviceType = in.readInt();
- BluetoothDevice remoteDevice = null;
- String remoteMac = null;
- if (deviceType == HandoverTransfer.DEVICE_TYPE_BLUETOOTH) {
- remoteDevice = in.readParcelable(getClass().getClassLoader());
- } else {
- remoteMac = in.readString();
- }
- boolean remoteActivating = (in.readInt() == 1) ? true : false;
- int numUris = in.readInt();
- Uri[] uris = null;
- if (numUris > 0) {
- uris = new Uri[numUris];
- in.readTypedArray(uris, Uri.CREATOR);
- }
- if (deviceType == HandoverTransfer.DEVICE_TYPE_BLUETOOTH) {
- return new PendingHandoverTransfer(id, incoming, remoteDevice,
- remoteActivating, uris);
- } else {
- return new PendingHandoverTransfer(id, incoming, remoteMac, remoteActivating, uris);
- }
- }
-
- @Override
- public PendingHandoverTransfer[] newArray(int size) {
- return new PendingHandoverTransfer[size];
- }
- };
-
- @Override
- public int describeContents() {
- return 0;
- }
-
- @Override
- public void writeToParcel(Parcel dest, int flags) {
- dest.writeInt(id);
- dest.writeInt(incoming ? 1 : 0);
- dest.writeInt(deviceType);
- if (deviceType == HandoverTransfer.DEVICE_TYPE_BLUETOOTH) {
- dest.writeParcelable(remoteDevice, 0);
- } else {
- dest.writeString(remoteMacAddress);
- }
- dest.writeInt(remoteActivating ? 1 : 0);
- dest.writeInt(uris != null ? uris.length : 0);
- if (uris != null && uris.length > 0) {
- dest.writeTypedArray(uris, 0);
- }
- }
-}
diff --git a/src/com/android/nfc/handover/PeripheralHandoverService.java b/src/com/android/nfc/handover/PeripheralHandoverService.java
new file mode 100644
index 00000000..3e0f2448
--- /dev/null
+++ b/src/com/android/nfc/handover/PeripheralHandoverService.java
@@ -0,0 +1,250 @@
+/*
+ * Copyright (C) 2012 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.nfc.handover;
+
+import android.app.Service;
+import android.bluetooth.BluetoothAdapter;
+import android.bluetooth.BluetoothDevice;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.media.AudioManager;
+import android.media.SoundPool;
+import android.nfc.NfcAdapter;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.IBinder;
+import android.os.Message;
+import android.os.Messenger;
+import android.os.RemoteException;
+import android.util.Log;
+
+import com.android.nfc.R;
+
+public class PeripheralHandoverService extends Service implements BluetoothPeripheralHandover.Callback {
+ static final String TAG = "PeripheralHandoverService";
+ static final boolean DBG = true;
+
+ static final int MSG_PAUSE_POLLING = 0;
+
+ public static final String BUNDLE_TRANSFER = "transfer";
+ public static final String EXTRA_PERIPHERAL_DEVICE = "device";
+ public static final String EXTRA_PERIPHERAL_NAME = "headsetname";
+ public static final String EXTRA_PERIPHERAL_TRANSPORT = "transporttype";
+
+ // Amount of time to pause polling when connecting to peripherals
+ private static final int PAUSE_POLLING_TIMEOUT_MS = 35000;
+ private static final int PAUSE_DELAY_MILLIS = 300;
+
+ // Variables below only accessed on main thread
+ final Messenger mMessenger;
+
+ SoundPool mSoundPool;
+ int mSuccessSound;
+ int mStartId;
+
+ BluetoothAdapter mBluetoothAdapter;
+ NfcAdapter mNfcAdapter;
+ Handler mHandler;
+ BluetoothPeripheralHandover mBluetoothPeripheralHandover;
+ boolean mBluetoothHeadsetConnected;
+ boolean mBluetoothEnabledByNfc;
+
+ class MessageHandler extends Handler {
+ @Override
+ public void handleMessage(Message msg) {
+ switch (msg.what) {
+ case MSG_PAUSE_POLLING:
+ mNfcAdapter.pausePolling(PAUSE_POLLING_TIMEOUT_MS);
+ break;
+ }
+ }
+ }
+
+ final BroadcastReceiver mBluetoothStatusReceiver = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ String action = intent.getAction();
+ if (action.equals(BluetoothAdapter.ACTION_STATE_CHANGED)) {
+ handleBluetoothStateChanged(intent);
+ }
+ }
+ };
+
+ public PeripheralHandoverService() {
+ mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
+ mHandler = new MessageHandler();
+ mMessenger = new Messenger(mHandler);
+ mBluetoothHeadsetConnected = false;
+ mBluetoothEnabledByNfc = false;
+ mStartId = 0;
+ }
+
+ @Override
+ public int onStartCommand(Intent intent, int flags, int startId) {
+ if (mStartId != 0) {
+ // already running
+ return START_STICKY;
+ }
+
+ mStartId = startId;
+
+ if (intent == null) {
+ if (DBG) Log.e(TAG, "Intent is null, can't do peripheral handover.");
+ stopSelf(startId);
+ return START_NOT_STICKY;
+ }
+
+ if (doPeripheralHandover(intent.getExtras())) {
+ return START_STICKY;
+ } else {
+ stopSelf(startId);
+ return START_NOT_STICKY;
+ }
+ }
+
+ @Override
+ public void onCreate() {
+ super.onCreate();
+
+ mSoundPool = new SoundPool(1, AudioManager.STREAM_NOTIFICATION, 0);
+ mSuccessSound = mSoundPool.load(this, R.raw.end, 1);
+ mNfcAdapter = NfcAdapter.getDefaultAdapter(getApplicationContext());
+
+ IntentFilter filter = new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED);
+ registerReceiver(mBluetoothStatusReceiver, filter);
+ }
+
+ @Override
+ public void onDestroy() {
+ super.onDestroy();
+ if (mSoundPool != null) {
+ mSoundPool.release();
+ }
+ unregisterReceiver(mBluetoothStatusReceiver);
+ }
+
+ boolean doPeripheralHandover(Bundle msgData) {
+ if (mBluetoothPeripheralHandover != null) {
+ Log.d(TAG, "Ignoring pairing request, existing handover in progress.");
+ return true;
+ }
+
+ if (msgData == null) {
+ return false;
+ }
+
+ BluetoothDevice device = msgData.getParcelable(EXTRA_PERIPHERAL_DEVICE);
+ String name = msgData.getString(EXTRA_PERIPHERAL_NAME);
+ int transport = msgData.getInt(EXTRA_PERIPHERAL_TRANSPORT);
+
+ mBluetoothPeripheralHandover = new BluetoothPeripheralHandover(
+ this, device, name, transport, this);
+
+ if (transport == BluetoothDevice.TRANSPORT_LE) {
+ mHandler.sendMessageDelayed(
+ mHandler.obtainMessage(MSG_PAUSE_POLLING), PAUSE_DELAY_MILLIS);
+ }
+ if (mBluetoothAdapter.isEnabled()) {
+ if (!mBluetoothPeripheralHandover.start()) {
+ mHandler.removeMessages(MSG_PAUSE_POLLING);
+ mNfcAdapter.resumePolling();
+ }
+ } else {
+ // Once BT is enabled, the headset pairing will be started
+ if (!enableBluetooth()) {
+ Log.e(TAG, "Error enabling Bluetooth.");
+ mBluetoothPeripheralHandover = null;
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ private void handleBluetoothStateChanged(Intent intent) {
+ int state = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE,
+ BluetoothAdapter.ERROR);
+ if (state == BluetoothAdapter.STATE_ON) {
+ // If there is a pending device pairing, start it
+ if (mBluetoothPeripheralHandover != null &&
+ !mBluetoothPeripheralHandover.hasStarted()) {
+ if (!mBluetoothPeripheralHandover.start()) {
+ mNfcAdapter.resumePolling();
+ }
+ }
+ } else if (state == BluetoothAdapter.STATE_OFF) {
+ mBluetoothEnabledByNfc = false;
+ mBluetoothHeadsetConnected = false;
+ }
+ }
+
+ @Override
+ public void onBluetoothPeripheralHandoverComplete(boolean connected) {
+ // Called on the main thread
+ int transport = mBluetoothPeripheralHandover.mTransport;
+ mBluetoothPeripheralHandover = null;
+ mBluetoothHeadsetConnected = connected;
+
+ // <hack> resume polling immediately if the connection failed,
+ // otherwise just wait for polling to come back up after the timeout
+ // This ensures we don't disconnect if the user left the volantis
+ // on the tag after pairing completed, which results in automatic
+ // disconnection </hack>
+ if (transport == BluetoothDevice.TRANSPORT_LE && !connected) {
+ if (mHandler.hasMessages(MSG_PAUSE_POLLING)) {
+ mHandler.removeMessages(MSG_PAUSE_POLLING);
+ }
+
+ // do this unconditionally as the polling could have been paused as we were removing
+ // the message in the handler. It's a no-op if polling is already enabled.
+ mNfcAdapter.resumePolling();
+ }
+ disableBluetoothIfNeeded();
+ stopSelf(mStartId);
+ }
+
+
+ boolean enableBluetooth() {
+ if (!mBluetoothAdapter.isEnabled()) {
+ mBluetoothEnabledByNfc = true;
+ return mBluetoothAdapter.enableNoAutoConnect();
+ }
+ return true;
+ }
+
+ void disableBluetoothIfNeeded() {
+ if (!mBluetoothEnabledByNfc) return;
+
+ if (!mBluetoothHeadsetConnected) {
+ mBluetoothAdapter.disable();
+ mBluetoothEnabledByNfc = false;
+ }
+ }
+
+ @Override
+ public IBinder onBind(Intent intent) {
+ return null;
+ }
+
+ @Override
+ public boolean onUnbind(Intent intent) {
+ // prevent any future callbacks to the client, no rebind call needed.
+ return false;
+ }
+}