diff options
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 Binary files differindex 07c6f3af..f732349e 100644 --- a/res/drawable-hdpi/icon.png +++ b/res/drawable-hdpi/icon.png diff --git a/res/drawable-mdpi/icon.png b/res/drawable-mdpi/icon.png Binary files differindex 66c648dd..a27df56f 100644 --- a/res/drawable-mdpi/icon.png +++ b/res/drawable-mdpi/icon.png diff --git a/res/drawable-xhdpi/icon.png b/res/drawable-xhdpi/icon.png Binary files differindex c1dd26ca..3bfed643 100644 --- a/res/drawable-xhdpi/icon.png +++ b/res/drawable-xhdpi/icon.png diff --git a/res/drawable-xxhdpi/icon.png b/res/drawable-xxhdpi/icon.png Binary files differindex 6a7fed72..ca1bce36 100644 --- a/res/drawable-xxhdpi/icon.png +++ b/res/drawable-xxhdpi/icon.png diff --git a/res/drawable-xxxhdpi/icon.png b/res/drawable-xxxhdpi/icon.png Binary files differnew file mode 100644 index 00000000..9b0c96b9 --- /dev/null +++ b/res/drawable-xxxhdpi/icon.png 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; + } +} |