From 2c2a03e5e2559c4cc781df4ad09d474733fdb7bc Mon Sep 17 00:00:00 2001 From: rhodey Date: Mon, 16 Sep 2013 00:55:01 -0700 Subject: [PATCH] Enhanced MMS configuration prompts and processing. 1) Added a new message status to MmsDatabase to signify a pending MMS download which requires APN settings. 2) Added a database method to query MMS messages based on status. 3) Added login to SendReceiveService for processing of MMS pending APN information. 4) Moved all APN/MMS settings into ApnPreferencesActivity and transformed PromptApnActivity into a simple informational activity. 5) Added logic to check for APN settings on send and receive of all MMS (media, group, email) and direct user to PromptApnActivity then ApnPreferencesActivity if necessary. 6) Vocab/grammar adjustments. --- AndroidManifest.xml | 7 +- res/layout/prompt_apn_activity.xml | 35 +---- res/values-ar/strings.xml | 22 +-- res/values-bg/strings.xml | 22 +-- res/values-bo/strings.xml | 22 +-- res/values-de/strings.xml | 22 +-- res/values-el/strings.xml | 22 +-- res/values-es/strings.xml | 22 +-- res/values-fr/strings.xml | 22 +-- res/values-he/strings.xml | 22 +-- res/values-it/strings.xml | 22 +-- res/values-ja/strings.xml | 22 +-- res/values-my/strings.xml | 22 +-- res/values-nl/strings.xml | 22 +-- res/values-no/strings.xml | 22 +-- res/values-pt-rBR/strings.xml | 22 +-- res/values-pt/strings.xml | 22 +-- res/values-ro/strings.xml | 22 +-- res/values-ru/strings.xml | 22 +-- res/values-sk/strings.xml | 6 +- res/values-sl/strings.xml | 22 +-- res/values-sv/strings.xml | 22 +-- res/values-zh-rCN/strings.xml | 2 +- res/values/strings.xml | 32 +++-- res/xml/mms_preferences.xml | 23 +++ res/xml/preferences.xml | 21 +-- .../ApplicationPreferencesActivity.java | 43 +++--- .../securesms/ConversationActivity.java | 16 ++- .../securesms/ConversationItem.java | 32 +++-- .../securesms/MmsPreferencesActivity.java | 136 ++++++++++++++++++ .../securesms/PromptApnActivity.java | 86 ----------- .../securesms/PromptMmsActivity.java | 43 ++++++ .../securesms/database/MmsDatabase.java | 17 ++- .../securesms/mms/MmsCommunication.java | 11 +- .../securesms/mms/MmsDownloadHelper.java | 20 +-- .../securesms/service/MmsDownloader.java | 49 +++++-- .../securesms/service/SendReceiveService.java | 15 +- 37 files changed, 573 insertions(+), 439 deletions(-) create mode 100644 res/xml/mms_preferences.xml create mode 100644 src/org/thoughtcrime/securesms/MmsPreferencesActivity.java delete mode 100644 src/org/thoughtcrime/securesms/PromptApnActivity.java create mode 100644 src/org/thoughtcrime/securesms/PromptMmsActivity.java diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 055e9f1a8c..5c87f5dee1 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -75,12 +75,15 @@ - - + + + android:text="@string/prompt_mms_activity__textsecure_requires_mms_settings_to_deliver_media_and_group_messages"/> - - - - - - - - - - - - + android:text="@string/prompt_mms_activity__to_send_media_and_group_messages_click_ok"/> يجب أن تحدد كلمة سرية عبارة سرية غير صحيحة! - - يجب أن تحدد عنوان أو رابط لمركز رسائل الوسائط المتعددة. - تم تعديل اعدادات رسائل الوسائط المتعددة - يمكنك تعديل هذه البيانات من اعدادات تكست سكيور بأي وقت. + + يجب أن تحدد عنوان أو رابط لمركز رسائل الوسائط المتعددة. + تم تعديل اعدادات رسائل الوسائط المتعددة + يمكنك تعديل هذه البيانات من اعدادات تكست سكيور بأي وقت. المفتاح لجهة الاتصال هذه مختلف عن المرة السابقة. هذا قد يعني ان هناك محاولة لاعتراض اتصالاتك، أو ان جهة الاتصال قام\قامت بإعادة تنصيب تكست سيكيور لديهم. ربما تود التحقق من جهة الاتصال هذه @@ -238,11 +238,11 @@ العبارة السرية لتكست سيكيور فتح القفل - تكست سيكيور يحتاج لإعدادات الشبكة APN لتوصيل رسائل الوسائط المتعددة. جهازك لا يوفر هذه المعلومة. - لإرسال رسائل الوسائط المتعددة، يجب عليك اكمال اعدادات الشبكة APN. تحتاج لادخال هذه المعلومة مرة واحدة فقط. - عنوان مركز رسائل الوسائط المتعددة (الزامي) - عنوان بروكسي مركز رسائل الوسائط المتعددة (اختياري): - منفذ بروكسي مركز رسائل الوسائط المتعددة (اختياري): + تكست سيكيور يحتاج لإعدادات الشبكة APN لتوصيل رسائل الوسائط المتعددة. جهازك لا يوفر هذه المعلومة. + لإرسال رسائل الوسائط المتعددة، يجب عليك اكمال اعدادات الشبكة APN. تحتاج لادخال هذه المعلومة مرة واحدة فقط. + عنوان مركز رسائل الوسائط المتعددة (الزامي) + عنوان بروكسي مركز رسائل الوسائط المتعددة (اختياري): + منفذ بروكسي مركز رسائل الوسائط المتعددة (اختياري): انتهاء @@ -325,8 +325,8 @@ متقدم العبارة السرية مركز رسائل الوسائط المتعددة الاحتياطي - شغل مركز رسائل الوسائط المتعددة الاحتياطي - استخدم مركز رسائل الوسائط المتعددة هنا اذا لم تتوفر بيناتات اتصال النظام APN + شغل مركز رسائل الوسائط المتعددة الاحتياطي + استخدم مركز رسائل الوسائط المتعددة هنا اذا لم تتوفر بيناتات اتصال النظام APN عنوان مركز رسائل الوسائط المتعددة (الزامي) عنوان بروكسي رسائل الوسائط المتعددة (غير الزامي) منفذ او بورت بروكسي الرسائل الوسائط المتعددة (غير الزامي) diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml index 4106bf3edf..7be8219175 100644 --- a/res/values-bg/strings.xml +++ b/res/values-bg/strings.xml @@ -122,10 +122,10 @@ Трябва да посочите парола Грешна Парола! - - Трябва да определите MMSC URL за вашия оператор. - MMS настройки са обновени - Можете да промените тези стойности по всяко време от менюто за настройките на TextSecure + + Трябва да определите MMSC URL за вашия оператор. + MMS настройки са обновени + Можете да промените тези стойности по всяко време от менюто за настройките на TextSecure ⏎\nподписа на този обмен на ключове е по-различно от това, което сте получавали преди това от този ⏎\nконтакт. Това може да означава, че някой се опитва да прихване комуникацията ви, или ⏎\nче този контакт просто е преинсталирал TextSecure и сега има нов ключ за идентичност. ⏎ Може би е добре да се провери ⏎\nтози контакт. ⏎ @@ -250,11 +250,11 @@ TEXTSECURE ПАРОЛА Отключи - TextSecure изисква APN настройки, за да достави медийни съобщения чрез вашата безжична мрежа. Вашето устройство не предоставят тази информация, която е вярно за заключени устройства и други ограничителни конфигурации. - За да изпратите медийни съобщения, моля, попълнете необходимата информация за APN-долу. Стойностите за оператора ви могат да се намерят чрез търсене на \'<your carrier> APN\'. Вие трябва да направите това само веднъж. - MMSC URL (ИЗИСКВАНО): - MMS PROXY HOST (ДОПЪЛНИТЕЛНО): - MMS PROXY PORT (ДОПЪЛНИТЕЛНО): + TextSecure изисква APN настройки, за да достави медийни съобщения чрез вашата безжична мрежа. Вашето устройство не предоставят тази информация, която е вярно за заключени устройства и други ограничителни конфигурации. + За да изпратите медийни съобщения, моля, попълнете необходимата информация за APN-долу. Стойностите за оператора ви могат да се намерят чрез търсене на \'<your carrier> APN\'. Вие трябва да направите това само веднъж. + MMSC URL (ИЗИСКВАНО): + MMS PROXY HOST (ДОПЪЛНИТЕЛНО): + MMS PROXY PORT (ДОПЪЛНИТЕЛНО): Завършен @@ -339,8 +339,8 @@ За напреднали Парола Резервен MMSC - Активирайте Резервен MMSC - Използвайте MMSC информация конфигурирана тук, когато системната APN информация не е налична. + Активирайте Резервен MMSC + Използвайте MMSC информация конфигурирана тук, когато системната APN информация не е налична. MMSC URL (Задължително) MMS Proxy Host (По изборl) MMS Proxy Port (По избор) diff --git a/res/values-bo/strings.xml b/res/values-bo/strings.xml index c7cc58c5cf..09e35927fe 100644 --- a/res/values-bo/strings.xml +++ b/res/values-bo/strings.xml @@ -86,10 +86,10 @@ ཁྱེད་ཀྱིས་ངེས་པར་དུ་གསང་ཚིག་ཞིག་གཏན་འཁེལ་བྱོས། གསང་ཡིག་ཁུངས་ལྡན་རེད་མི་འདུག - - ཁྱེད་ཀྱི་སྐུད་མེད་འཕྲིན་ཐུང་སྐྱེལ་མཁན་དེའི་སླད་དུ་ཁྱེད་ཀྱིས་ངེས་པར་དུ MMSC URL ཞིག་དམིགས་འདོན་བྱེད་དགོས། - སྣ་མང་བརྒྱུད་ལམ་ཅན་གྱི་འཕྲིན་ཐུང་གི་སྒྲིག་བཟོར་ཁ་སྣོན་བྱས་ཡོད། - ཁྱེད་ཀྱིས་དུས་ཚོད་གང་རུང་དུ་གཡག་འཕྲིན་སྒྲིག་བཟོའི་ཐོ་བྱང་ནས་འདི་དག་གི་ངོ་བོར་འགྱུར་བ་བཏང་ཆོག + + ཁྱེད་ཀྱི་སྐུད་མེད་འཕྲིན་ཐུང་སྐྱེལ་མཁན་དེའི་སླད་དུ་ཁྱེད་ཀྱིས་ངེས་པར་དུ MMSC URL ཞིག་དམིགས་འདོན་བྱེད་དགོས། + སྣ་མང་བརྒྱུད་ལམ་ཅན་གྱི་འཕྲིན་ཐུང་གི་སྒྲིག་བཟོར་ཁ་སྣོན་བྱས་ཡོད། + ཁྱེད་ཀྱིས་དུས་ཚོད་གང་རུང་དུ་གཡག་འཕྲིན་སྒྲིག་བཟོའི་ཐོ་བྱང་ནས་འདི་དག་གི་ངོ་བོར་འགྱུར་བ་བཏང་ཆོག ཁྱེད་ལ་ངོས་འཛིན་བྱེད་ཀྱི་ལྡེ་མིག་མི་འདུག @@ -196,11 +196,11 @@ གཡག་འཕྲིན་གྱི་གསང་ཚིག སྒོ་ཕྱེས། - ཁྱེད་ཀྱི་སྐུད་མེད་འཕྲིན་ལམ་བརྒྱུད་འཕྲིན་ཐུང་གཏོང་བ་ལ་གཡག་འཕྲིན་ལ་ APN སྒྲིག་བཟོ་དགོས་ཀྱི་ཡོད། ཁྱེད་ཀྱི་ལག་ཆ་དེས་གནས་ཚུལ་འདི་ཐོབ་རུང་བ་བཟོས་མི་འདུག་ཅིང་། དེ་ནི་མཚམས་ལན་རེར་སྒོ་ལྕགས་བརྒྱབ་ཡོད་པའི་ལག་ཆའི་རིགས་དང་བཀག་རྒྱ་ཅན་གྱི་བཟོ་སྒྲིག་རིགས་ལ་བདེན་པ་ཡིན། - བརྒྱུད་ལམ་གྱི་འཕྲིན་ཐུང་དག་གཏོང་བ་ལ་གཤམ་གྱི་ APN ཡི་གནས་ཚུལ་གལ་ཆེན་རིགས་ཚར་བ་བྱོས། \nཁྱེད་ཀྱི་སྐུད་མེད་འཕྲིན་ཐུང་འཁྱེར་མཁན་དེའི་ངོ་བོ་ནི་ \'<your carrier> APN\'.་བ་བརྒྱུད་གཏན་འབེབས་བྱེད་ཐུབ། ཁྱེད་ཀྱིས་འདི་ཐེངས་གཅིག་ལ་བྱས་ན་འགྲིག - MMSC URL (དགོས་ངེས་རེད།): - MMS PROXY PORT (གདམ་ཁ་ཅན།): - MMS PROXY PORT (གདམ་ཁ་ཅན): + ཁྱེད་ཀྱི་སྐུད་མེད་འཕྲིན་ལམ་བརྒྱུད་འཕྲིན་ཐུང་གཏོང་བ་ལ་གཡག་འཕྲིན་ལ་ APN སྒྲིག་བཟོ་དགོས་ཀྱི་ཡོད། ཁྱེད་ཀྱི་ལག་ཆ་དེས་གནས་ཚུལ་འདི་ཐོབ་རུང་བ་བཟོས་མི་འདུག་ཅིང་། དེ་ནི་མཚམས་ལན་རེར་སྒོ་ལྕགས་བརྒྱབ་ཡོད་པའི་ལག་ཆའི་རིགས་དང་བཀག་རྒྱ་ཅན་གྱི་བཟོ་སྒྲིག་རིགས་ལ་བདེན་པ་ཡིན། + བརྒྱུད་ལམ་གྱི་འཕྲིན་ཐུང་དག་གཏོང་བ་ལ་གཤམ་གྱི་ APN ཡི་གནས་ཚུལ་གལ་ཆེན་རིགས་ཚར་བ་བྱོས། \nཁྱེད་ཀྱི་སྐུད་མེད་འཕྲིན་ཐུང་འཁྱེར་མཁན་དེའི་ངོ་བོ་ནི་ \'<your carrier> APN\'.་བ་བརྒྱུད་གཏན་འབེབས་བྱེད་ཐུབ། ཁྱེད་ཀྱིས་འདི་ཐེངས་གཅིག་ལ་བྱས་ན་འགྲིག + MMSC URL (དགོས་ངེས་རེད།): + MMS PROXY PORT (གདམ་ཁ་ཅན།): + MMS PROXY PORT (གདམ་ཁ་ཅན): གཏོང་ཡུལ། @@ -271,8 +271,8 @@ སྤྱིར་བཏང་། དལ་བོ། ཡུལ་སྲོལ། - Fallback MMSC དེ་བསྐྱར་དུ་བྱེད་ནུས་ཅན་བཟོས། - APN ཡི་མ་ལག་གི་བརྡ་ལན་དེ་མི་རྙེད་དུས། MMSC ཡི་བརྡ་ལན་སྡེབ་སྒྲིག་བྱས་བ་དེ་བེད་སྤྱོད་ཐོངས། + Fallback MMSC དེ་བསྐྱར་དུ་བྱེད་ནུས་ཅན་བཟོས། + APN ཡི་མ་ལག་གི་བརྡ་ལན་དེ་མི་རྙེད་དུས། MMSC ཡི་བརྡ་ལན་སྡེབ་སྒྲིག་བྱས་བ་དེ་བེད་སྤྱོད་ཐོངས། MMSC URL(དགོས་ངེས་ཅན) MMS Proxy Host (གདམ་ཀ་ཅན) MMS Proxy Port (གདམ་ཀ་ཅན) diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml index 9458960184..b4aa9cb947 100644 --- a/res/values-de/strings.xml +++ b/res/values-de/strings.xml @@ -122,10 +122,10 @@ Sie müssen ein Passwort angeben Ungültiges Passwort! - - Sie müssen eine MMSC URL für Ihren Provider angeben. - MMS Einstellungen aktualisiert - Sie können diese Werte jederzeit in den TextSecure Einstellungen ändern. + + Sie müssen eine MMSC URL für Ihren Provider angeben. + MMS Einstellungen aktualisiert + Sie können diese Werte jederzeit in den TextSecure Einstellungen ändern. Die Signatur dieses Schlüsselaustauschs ist eine andere als die schon von diesem Kontakt erhaltenen.\nDas könnte bedeuten, dass jemand versucht, Ihr Gespräch abzufangen oder\nauch nur, dass dieser Kontakt TextSecure neu installiert hat und nun einen neuen Schlüssel benutzt. Sie können diesen Kontakt überprüfen. @@ -251,11 +251,11 @@ TEXTSECURE PASSWORT Entsperren - TextSecure benötigt APN-Parameter, um MMS über den Mobilfunkanbieter zu senden. Ihr Gerät stellt diese Informationen nicht bereit, was gelegentlich auf gesperrte Geräte oder restriktive Konfigurationen hindeutet. - Um MMS zu verschicken, tragen Sie bitte die nötige APN Information ein. Die Werte für das Netzwerk können normalerweise gefunden werden, indem man nach \'<Ihr Netzwerk> APN\' sucht. Das müssen Sie nur einmal tun. - MMSC URL (BENÖTIGT): - MMS PROXY HOST (OPTIONAL): - MMS PROXY PORT (OPTIONAL): + TextSecure benötigt APN-Parameter, um MMS über den Mobilfunkanbieter zu senden. Ihr Gerät stellt diese Informationen nicht bereit, was gelegentlich auf gesperrte Geräte oder restriktive Konfigurationen hindeutet. + Um MMS zu verschicken, tragen Sie bitte die nötige APN Information ein. Die Werte für das Netzwerk können normalerweise gefunden werden, indem man nach \'<Ihr Netzwerk> APN\' sucht. Das müssen Sie nur einmal tun. + MMSC URL (BENÖTIGT): + MMS PROXY HOST (OPTIONAL): + MMS PROXY PORT (OPTIONAL): Vollständig @@ -340,8 +340,8 @@ Weitere Einstellungen Passwort Ersatz für MMSC - Ersatz für MMSC aktivieren - Benutzen Sie die hier konfigurierten MMSC-Daten, falls keine System APN-Daten vorliegen, + Ersatz für MMSC aktivieren + Benutzen Sie die hier konfigurierten MMSC-Daten, falls keine System APN-Daten vorliegen, MMSC URL (Benötigt) MMS Proxy Host (Optional) MMS Proxy Port (Optional) diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml index aa2518cf63..8342f0ec4e 100644 --- a/res/values-el/strings.xml +++ b/res/values-el/strings.xml @@ -122,10 +122,10 @@ Πρέπει να επιλέξετε ένα κωδικό Άκυρη συνθηματική φράση! - - Πρέπει να καθορίσετε μια διεύθυνση MMSC για τον πάροχό σας. - Ρυθμίσεις MMS ενημερώθηκαν - Μπορείτε να αλλάξετε αυτές τις ρυθμίσεις από το μενού ρυθμίσεων του TextSecure. + + Πρέπει να καθορίσετε μια διεύθυνση MMSC για τον πάροχό σας. + Ρυθμίσεις MMS ενημερώθηκαν + Μπορείτε να αλλάξετε αυτές τις ρυθμίσεις από το μενού ρυθμίσεων του TextSecure. Το\n αποτύπωμα αυτής της ανταλλαγής κλειδιών είναι διαφορετικό από αυτό που λάβαμε πρωτύτερα από αυτή την\n επαφή. Αυτό σημαίνει είτε ότι κάποιος προσπαθεί να υποκλέψει τη συνομιλία σας, ή\n ότι αυτή η επαφή απλά επανεγκτέστησε το TextSecure και τώρα έχει νέο κλειδί ταυτότητας.\n Προτείνεται να επιβεβαιώσετε\n αυτή την επαφή.\n @@ -250,11 +250,11 @@ ΣΥΝΘΗΜΑΤΙΚΗ ΦΡΑΣΗ TEXTSECURE Ξεκλείδωμα - Το TextSecure χρειάζεται τις ρυθμίσεις APN για να στείλει μυνήματα πολυμέσων μέσω του παρόχου σας. Η συσκευή σας δε παρέχει αυτές τις ρυθμίσεις, κάτι που ισχύει σε κλειδωμένες συσκευές και άλλες περιοριστικές διαμορφώσεις. - Για να στείλετε μηνύματα πολυμέσων, παρακαλώ συμπληρώστε τις απαραίτητες ρυθμίσεις APN εδώ. Βρείτε τις σωστές ρυθμίσεις για τον πάροχό σας ψάχνοντας online για \'<όνομα παρόχου σας> APN\'. Αυτό θα χρειαστεί μόνο μία φορά. - Διεύθυνση MMSC (ΑΠΑΙΤΕΙΤΑΙ): - Διακομιστής MMS PROXY (ΠΡΟΑΙΡΕΤΙΚΟΣ): - Θύρα MMS PROXY (ΠΡΟΑΙΡΕΤΙΚΟ): + Το TextSecure χρειάζεται τις ρυθμίσεις APN για να στείλει μυνήματα πολυμέσων μέσω του παρόχου σας. Η συσκευή σας δε παρέχει αυτές τις ρυθμίσεις, κάτι που ισχύει σε κλειδωμένες συσκευές και άλλες περιοριστικές διαμορφώσεις. + Για να στείλετε μηνύματα πολυμέσων, παρακαλώ συμπληρώστε τις απαραίτητες ρυθμίσεις APN εδώ. Βρείτε τις σωστές ρυθμίσεις για τον πάροχό σας ψάχνοντας online για \'<όνομα παρόχου σας> APN\'. Αυτό θα χρειαστεί μόνο μία φορά. + Διεύθυνση MMSC (ΑΠΑΙΤΕΙΤΑΙ): + Διακομιστής MMS PROXY (ΠΡΟΑΙΡΕΤΙΚΟΣ): + Θύρα MMS PROXY (ΠΡΟΑΙΡΕΤΙΚΟ): Ολοκληρώθηκε @@ -339,8 +339,8 @@ Για προχωρημένους Συνθηματική φράση Εναλλακτικό MMSC - Ενεργοποίηση εναλλακτικού MMSC - Να χρησιμοποιούνται αυτές οι ρυθμίσεις MMSC όταν οι ρυθμίσεις APN δεν είναι διαθέσιμες. + Ενεργοποίηση εναλλακτικού MMSC + Να χρησιμοποιούνται αυτές οι ρυθμίσεις MMSC όταν οι ρυθμίσεις APN δεν είναι διαθέσιμες. Διεύθυνση MMSC (απαραίτητη) Διακομιστής MMS Proxy (Προαιρετικό) Επιλογή πόρτας MMS Proxy (προαιρετικό) diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml index b818da072e..949d3ab61e 100644 --- a/res/values-es/strings.xml +++ b/res/values-es/strings.xml @@ -122,10 +122,10 @@ Debes especificar una contraseña Frase de contraseña inválida - - Debes especificar una URL MMSC para tu operador. - Configuración MMS Actualizada - Puedes modificar estos valores en el menú de configuración de TextSecure en cualquier momento. + + Debes especificar una URL MMSC para tu operador. + Configuración MMS Actualizada + Puedes modificar estos valores en el menú de configuración de TextSecure en cualquier momento. La firma en este intercambio de claves es diferente de lo que previamente ha recibido de este contacto. Esto podría significar que alguien está intentando interceptar las comunicaciones o que este contacto simplemente reinstaló TextSecure y ahora tiene una nueva clave de identidad. Puede que desees verificar⏎\neste contacto.⏎ @@ -250,11 +250,11 @@ FRASE DE CONTRASEÑA DE TEXTSECURE Desbloquear - TextSecure necesita las opciones de APN para enviar mensajes multimedia por tu operador móvil. Tu dispositivo no proporciona esta información, lo que sería porque tu dispositivo está bloqueado o presenta otra configuración restrictiva. - Para enviar mensajes multimedia, por favor completa la información APN necesaria abajo. Los valores para tu proveedor pueden por lo general ser encontrados buscando \'<tu operador> APN\'. Solo necesitarás hacer esto una única vez. - URL MMSC (REQUERIDA): - MMS PROXY HOST (OPCIONAL): - PUERTO PROXY MMS (OPCIONAL): + TextSecure necesita las opciones de APN para enviar mensajes multimedia por tu operador móvil. Tu dispositivo no proporciona esta información, lo que sería porque tu dispositivo está bloqueado o presenta otra configuración restrictiva. + Para enviar mensajes multimedia, por favor completa la información APN necesaria abajo. Los valores para tu proveedor pueden por lo general ser encontrados buscando \'<tu operador> APN\'. Solo necesitarás hacer esto una única vez. + URL MMSC (REQUERIDA): + MMS PROXY HOST (OPCIONAL): + PUERTO PROXY MMS (OPCIONAL): Completo @@ -339,8 +339,8 @@ Avanzado Frase de contraseña Fallback MMSC - Activar Fallback MMSC - Usar la información MMSC configurada aquí cuando el sistema de información APN no está disponible. + Activar Fallback MMSC + Usar la información MMSC configurada aquí cuando el sistema de información APN no está disponible. MMSC URL (Requerido) MMS Proxy Host (Opcional) Puerto de Proxy MMS (Opcional) diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml index e19a64e607..40bbc2ce47 100644 --- a/res/values-fr/strings.xml +++ b/res/values-fr/strings.xml @@ -122,10 +122,10 @@ Vous devez renseigner un mot de passe Phrase de passe incorrecte ! - - Vous devez indiquer une URL MMSC de votre opérateur. - Paramètres MMS mis à jour - Vous pouvez modifier ces valeurs depuis le menu des paramètres de TextSecure à tout moment. + + Vous devez indiquer une URL MMSC de votre opérateur. + Paramètres MMS mis à jour + Vous pouvez modifier ces valeurs depuis le menu des paramètres de TextSecure à tout moment. La\nsignature de cet échange de clé est différente de celle que vous avez précédemment reçue de ce\ncontact. Cela peut signifier soit que quelqu’un essaie d’intercepter votre communication, soit\nque ce contact a simplement réinstallé TextSecure et a maintenant une nouvelle clé d’identité. Peut-être devriez-vous\nvérifier ce contact. @@ -251,11 +251,11 @@ PHRASE DE PASSE TEXTSECURE Déverrouiller - TextSecure nécessite que les paramètres APN distribuent les messages multimédia via votre opérateur mobile. Votre appareil ne rend pas ces informations disponibles, ce qui est parfois le cas des appareils verrouillés et d’autres configurations restrictives. - Pour envoyer des messages multimédia, merci de compléter les informations sur l’APN ci-dessous. Les valeurs de votre opérateur peuvent généralement être trouvées en cherchant \'APN <votre opérateur>\'. Vous aurez besoin de faire cela une seule fois. - URL MMSC (OBLIGATOIRE) : - HÔTE PROXY MMS (OPTIONNEL) : - PORT PROXY MMS (OPTIONNEL) : + TextSecure nécessite que les paramètres APN distribuent les messages multimédia via votre opérateur mobile. Votre appareil ne rend pas ces informations disponibles, ce qui est parfois le cas des appareils verrouillés et d’autres configurations restrictives. + Pour envoyer des messages multimédia, merci de compléter les informations sur l’APN ci-dessous. Les valeurs de votre opérateur peuvent généralement être trouvées en cherchant \'APN <votre opérateur>\'. Vous aurez besoin de faire cela une seule fois. + URL MMSC (OBLIGATOIRE) : + HÔTE PROXY MMS (OPTIONNEL) : + PORT PROXY MMS (OPTIONNEL) : Compléter @@ -340,8 +340,8 @@ Avancé Phrase de passe MMSC par défaut - Activer le MMSC par défaut - Utiliser les informations MMSC configurée ici lorsque les informations APN ne sont pas disponibles + Activer le MMSC par défaut + Utiliser les informations MMSC configurée ici lorsque les informations APN ne sont pas disponibles URL MMSC (Obligatoire) Hôte Proxy MMS (Optionnel) Port Proxy MMS (Optionnel) diff --git a/res/values-he/strings.xml b/res/values-he/strings.xml index 7beb207c20..a15681932c 100644 --- a/res/values-he/strings.xml +++ b/res/values-he/strings.xml @@ -122,10 +122,10 @@ אתה חייב לציין סיסמה סיסמה שגויה! - - אתה חייב לציין כתובת MMSC עבור ספק השירות שלך. - הגדרות ה-MMS עודכנו - אתה יכול לערוך את הערכים האלו מתפריט ההגדרות של TextSecure בכל זמן. + + אתה חייב לציין כתובת MMSC עבור ספק השירות שלך. + הגדרות ה-MMS עודכנו + אתה יכול לערוך את הערכים האלו מתפריט ההגדרות של TextSecure בכל זמן. החתימה\nעל החלפת המפתח הזאת שונה ממה שקיבלת בעבר מאיש הקשר הזה.\nזה יכול להעיד שמישהו מנסה ליירט את התקשורת שלך\nאו\nשאיש הקשר פשוט התקין מחדש את TextSecure ועכשיו יש לו מפתח זהות חדש.\n ייתכן שתרצה לאמת\nאת איש הקשר הזה.\n @@ -250,11 +250,11 @@ סיסמת TextSecure פתח - TextSecure חייבת הגדרות APN כדי לשלוח הודעות מולטימדיה דרך ספק השירות שלך. המכשיר שלך לא מספק את המידע הזה, זה קורה לעיתים במכשירים נעולים או קונפיגורציות מוגבלות אחרות. - כדי לשלוח הודעות מולטימדיה, בבקשה השלם את מידע ה-APN הנצרך למטה. את הערכים עבור ספק השירות שלך אתה יכול למצוא בד\"כ ע\"י חיפוש \'<your carrier> APN\'. אתה תצטרך להשלים מידע זה רק פעם אחת. - כתובת MMSC (חובה): - שרת Proxy של MMS (לא חובה): - פתחת ה-Proxy של שרת ה-MMS (לא חובה): + TextSecure חייבת הגדרות APN כדי לשלוח הודעות מולטימדיה דרך ספק השירות שלך. המכשיר שלך לא מספק את המידע הזה, זה קורה לעיתים במכשירים נעולים או קונפיגורציות מוגבלות אחרות. + כדי לשלוח הודעות מולטימדיה, בבקשה השלם את מידע ה-APN הנצרך למטה. את הערכים עבור ספק השירות שלך אתה יכול למצוא בד\"כ ע\"י חיפוש \'<your carrier> APN\'. אתה תצטרך להשלים מידע זה רק פעם אחת. + כתובת MMSC (חובה): + שרת Proxy של MMS (לא חובה): + פתחת ה-Proxy של שרת ה-MMS (לא חובה): השלם @@ -339,8 +339,8 @@ מתקדם סיסמה נסיגה ל-MMSC - אפשר נסיגה ל-MMSC - השתמש במידע ה-MMSC המוגדר כאן כשמידע ה-APN של המערכת לא זמין. + אפשר נסיגה ל-MMSC + השתמש במידע ה-MMSC המוגדר כאן כשמידע ה-APN של המערכת לא זמין. כתובת MMSC (חובה) שרת Proxy של MMS (לא חובה) יציאת MMS (לא חובה) diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml index d31c31cbe2..d2f7077d67 100644 --- a/res/values-it/strings.xml +++ b/res/values-it/strings.xml @@ -92,10 +92,10 @@ Devi creare un password Password errata! - - Devi specificare un MMSC URL per il tuo provider. - Impostazioni MMS aggiornate. - Puoi modificare questi valori dalle impostazioni di TextSecure in ogni momento. + + Devi specificare un MMSC URL per il tuo provider. + Impostazioni MMS aggiornate. + Puoi modificare questi valori dalle impostazioni di TextSecure in ogni momento. La\nfirma su questo scambio di chiavi è differente di quella ricevuta precedentemente. Questo potrebbe significare che qualcuno stà cercando di intercettare la tua comunicazione\no\nche il contatto ha reinstallato TextSecure e ora ha una nuova chiave. Dovresti verificare\nquesto contatto. @@ -210,11 +210,11 @@ PASSWORD TEXTSECURE Sblocca - TextSecure richiede le impostazioni del APN per inviare messaggi multimediali ( MMS ) con il tuo provider. Il tuo dispositivo non ha queste impostazioni disponibili, il che è occasionalmente vero per device con operatore bloccato o altre configurazioni restrittive. - Per inviare messaggi multimediali ( MMS ), completare le informazioni APN necessarie. I valori del vostro operatore generalmente si trovano cercando \'<yourcarrier> APN\'. L\'operazione dovrà essere effettuata solo una volta. - MMSC URL ( RICHIESTO ) - MMS INDIRIZZO PROXY ( OPZIONALE ) - MMS PORTA PROXY ( OPZIONALE ) + TextSecure richiede le impostazioni del APN per inviare messaggi multimediali ( MMS ) con il tuo provider. Il tuo dispositivo non ha queste impostazioni disponibili, il che è occasionalmente vero per device con operatore bloccato o altre configurazioni restrittive. + Per inviare messaggi multimediali ( MMS ), completare le informazioni APN necessarie. I valori del vostro operatore generalmente si trovano cercando \'<yourcarrier> APN\'. L\'operazione dovrà essere effettuata solo una volta. + MMSC URL ( RICHIESTO ) + MMS INDIRIZZO PROXY ( OPZIONALE ) + MMS PORTA PROXY ( OPZIONALE ) Completato @@ -294,8 +294,8 @@ Avanzate Passphrase Fallback MMSC - Fallback MMSC Abilitato - Usa le informazioni MMSC impostate quì quando l\'APN di sistema non è disponibile + Fallback MMSC Abilitato + Usa le informazioni MMSC impostate quì quando l\'APN di sistema non è disponibile URL MMSC (Richiesto) MMS - Indirizzo Proxy ( Opzionale ) MMS - Porta Proxy ( Opzionale ) diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml index 1f4ac27994..640d4b6835 100644 --- a/res/values-ja/strings.xml +++ b/res/values-ja/strings.xml @@ -122,10 +122,10 @@ パスワードを指定して下さい 無効なパスワードです。 - - お使いの通信事業者のMMSセンター用URLを指定して下さい。 - MMSの設定を更新しました - TextSecure設定メニューから、これらの値をいつでも変更できます。 + + お使いの通信事業者のMMSセンター用URLを指定して下さい。 + MMSの設定を更新しました + TextSecure設定メニューから、これらの値をいつでも変更できます。 この\n鍵交換の電子署名は、以前この連絡先から受信したものと違っています。\n誰かがあなたの通信を傍受しようとしているか、もしくは\n単にこの連絡先がTextSecureを再インストールしたため、認証キーが新しくなった可能性があります。 この連絡先を\n照合することが推奨されています。 @@ -250,11 +250,11 @@ TextSecureパスワード ロック解除 - TextSecureでは、無線通信事業者からファイル付きメッセージを配信するのに、APN設定が必要です。お使いの携帯端末では、この設定のための情報が取得できません。ロックされた端末であるか、その他の制限設定があると、このような状況が生じます。 - ファイル付きメッセージを配信するのに必要な以下のAPN情報を入力してください。お使いの通信事業者への設定値は、通常\'<your carrier> APN\'検索によって設定されます。この作業は一度だけでいいです。 - MMSC URL (必須): - MMSプロキシ・ホスト (自由選択): - MMSプロキシ・ポート (自由選択) + TextSecureでは、無線通信事業者からファイル付きメッセージを配信するのに、APN設定が必要です。お使いの携帯端末では、この設定のための情報が取得できません。ロックされた端末であるか、その他の制限設定があると、このような状況が生じます。 + ファイル付きメッセージを配信するのに必要な以下のAPN情報を入力してください。お使いの通信事業者への設定値は、通常\'<your carrier> APN\'検索によって設定されます。この作業は一度だけでいいです。 + MMSC URL (必須): + MMSプロキシ・ホスト (自由選択): + MMSプロキシ・ポート (自由選択) 完了 @@ -339,8 +339,8 @@ 詳細設定 パスワード MMSCのフォールバック - MMSCのフォールバックを有効にする - APNからの情報が携帯端末で利用できない時に、ここで設定されたMMSセンターからの情報を使う。 + MMSCのフォールバックを有効にする + APNからの情報が携帯端末で利用できない時に、ここで設定されたMMSセンターからの情報を使う。 MMSC URL (必須) MMSプロキシ・ホスト(選択自由) MMSプロキシ・ポート(選択自由) diff --git a/res/values-my/strings.xml b/res/values-my/strings.xml index c139412447..2064747880 100644 --- a/res/values-my/strings.xml +++ b/res/values-my/strings.xml @@ -83,10 +83,10 @@ စကားဝှက်သတ်မှတ်ရန်လိုအပ် စကားဝှက်မမှန်ကန် - - သင်၏ carrier အတွက် MMSC URL သတ်မှတ်သင့် - MMS ဆက်တင် အဆင့်မြှင့်ပြီး - သင်သည် ဤတန်ဖိုးတွေကို စာသာလံုခြုံမှု ဆက်တင်မီနူးမှနေ၍ အချိန်မရွေး ပြင်ဆင်နိုင် + + သင်၏ carrier အတွက် MMSC URL သတ်မှတ်သင့် + MMS ဆက်တင် အဆင့်မြှင့်ပြီး + သင်သည် ဤတန်ဖိုးတွေကို စာသာလံုခြုံမှု ဆက်တင်မီနူးမှနေ၍ အချိန်မရွေး ပြင်ဆင်နိုင် သင့်တွင်အသိအမှတ်ပြုကီးမရှိပါ @@ -193,11 +193,11 @@ Textsecure စကားဝှက် ပိတ်ထားသည်ကိုဖွင့် - TextSecure requires APN settings to deliver media messages via your wireless carrier. Your device does not make this information available, which is occasionally true for locked devices and other restrictive configurations. - To send media messages, please complete the necessary APN information below. The values for your carrier can generally be located by searching for \'<your carrier> APN\'. You will only need to do this once. - MMSC URL (အရေးကြီး) - - MMSC ပရောက်ဇီ အိမ်ရှင်စက် (အရေးမကြီး) - - MMS ပရောက်ဇီ PORT (အရေးမကြီး) + TextSecure requires APN settings to deliver media messages via your wireless carrier. Your device does not make this information available, which is occasionally true for locked devices and other restrictive configurations. + To send media messages, please complete the necessary APN information below. The values for your carrier can generally be located by searching for \'<your carrier> APN\'. You will only need to do this once. + MMSC URL (အရေးကြီး) - + MMSC ပရောက်ဇီ အိမ်ရှင်စက် (အရေးမကြီး) - + MMS ပရောက်ဇီ PORT (အရေးမကြီး) သို့ @@ -268,8 +268,8 @@ ပုံမှန် အနှေး စိတ်ကြိုက် - Fallback MMSC ကို ခွင့်ပြုပါ - စနစ်၏ APN အချက်အလက်များကိုသုံး၍မရပါက ဤနေရာတွင်သတ်မှတ်ထားသော MMSC အချက်အလက်များကိုအသုံးပြုပါ + Fallback MMSC ကို ခွင့်ပြုပါ + စနစ်၏ APN အချက်အလက်များကိုသုံး၍မရပါက ဤနေရာတွင်သတ်မှတ်ထားသော MMSC အချက်အလက်များကိုအသုံးပြုပါ MMSC URL (အရေးကြီး) MMS ပရောက်ဇီ အိမ်ရှင်စက် (အရေးမကြီး) MMS ပရောက်ဇီ Port (အရေးမကြီး) diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml index d6c09a57be..71e78449fa 100644 --- a/res/values-nl/strings.xml +++ b/res/values-nl/strings.xml @@ -122,10 +122,10 @@ U moet een wachtwoord specificeren Ongeldig Wachtwoord! - - U moet een MMSC URL specificeren voor uw provider. - MMS Instellingen Geupdate - U kunt deze instellingen op elk gewenst moment wijzigen via het TextSecure instellingen menu. + + U moet een MMSC URL specificeren voor uw provider. + MMS Instellingen Geupdate + U kunt deze instellingen op elk gewenst moment wijzigen via het TextSecure instellingen menu. De handtekening op deze sleuteluitwisseling is anders dan wat u eerder ontvangen heeft van dit contact. Dit kan betekenen dat iemand probeert uw communicatie the onderscheppen, of dat dit contact gewoon TextSecure opnieuw geïnstalleerd heeft en nu een nieuwe identiteitssleutel heeft. U kunt wensen dit contact te verifiëren. @@ -251,11 +251,11 @@ TEXTSECURE WACHTWOORD Ontgrendel - TextSecure heeft APN instellingen nodig om mediaberichten te kunnen versturen via uw telefoonprovider. Uw toestel heeft deze informatie niet beschikbaar, iets wat vaker voorkomt bij gelockte toestellen en andere beperkende configuraties. - Om mediaberichten te versturen, moet u de benodigde APN informatie hieronder opgeven. De waarden voor uw provider kunnen meestal gevonden worden door te zoeken naar \'<uw provider> APN\'. U hoeft dit maar eenmaal te doen. - MMSC URL (VEREIST): - MMS PROXY HOST (OPTIONEEL): - MMS PROXY POORT (OPTIONEEL): + TextSecure heeft APN instellingen nodig om mediaberichten te kunnen versturen via uw telefoonprovider. Uw toestel heeft deze informatie niet beschikbaar, iets wat vaker voorkomt bij gelockte toestellen en andere beperkende configuraties. + Om mediaberichten te versturen, moet u de benodigde APN informatie hieronder opgeven. De waarden voor uw provider kunnen meestal gevonden worden door te zoeken naar \'<uw provider> APN\'. U hoeft dit maar eenmaal te doen. + MMSC URL (VEREIST): + MMS PROXY HOST (OPTIONEEL): + MMS PROXY POORT (OPTIONEEL): Voltooid @@ -340,8 +340,8 @@ Geavanceerd Wachtwoord Reserve MMSC - Fallback MMSC Activeren - Gebruik de hier ingestelde MMSC informatie wanneer de APN informatie van het systeem niet beschikbaar is. + Fallback MMSC Activeren + Gebruik de hier ingestelde MMSC informatie wanneer de APN informatie van het systeem niet beschikbaar is. MMSC URL (Vereist) MMS Proxy Host (Optioneel) MMS Proxy Poort (Optioneel) diff --git a/res/values-no/strings.xml b/res/values-no/strings.xml index 26b23c4b28..197e2bf5f1 100644 --- a/res/values-no/strings.xml +++ b/res/values-no/strings.xml @@ -122,10 +122,10 @@ Du må oppgi et passord Feil passord! - - Du må spesifisere en MMSC URL for din operatør. - MMS konfigurasjon oppdatert - Du kan forandre disse verdiene når som helst i konfigurasjonsmenyen for TextSecure. + + Du må spesifisere en MMSC URL for din operatør. + MMS konfigurasjon oppdatert + Du kan forandre disse verdiene når som helst i konfigurasjonsmenyen for TextSecure. Signaturen på denne nøkkelutvekslingen er ikke lik den du tidligere mottok fra denne\nkontakten. Det kan enten bety at noen prøver å avskjære kommunikasjonen din eller\nat denne kontakten har installert TextSecure på nytt og dermed fått en ny identitetsnøkkel. Du bør verifisere\ndenne kontakten. @@ -258,11 +258,11 @@ TEXTSECURE PASSORD Lås opp - En gyldig APN konfigurasjon er nødvendig for at TextSecure kan sende og motta multimedia meldinger via operatøren din. Enheten din tilgjengeliggjør ikke denne konfigurasjonen. Dette er ofte tilfelle for operatørlåste enheter og annen restriktiv konfigurasjon. - For å sende multimedia meldinger, vær vennlig å fullfør den nødvendige APN informasjonen under. Verdiene for din operatør kan ofte finnes ved å lete etter \'<din operatør> APN\'. Du trenger kun å gjøre dette en gang. - MMSC URL (PÅKREVD): - MMS PROXY VERT (IKKE PÅKREVD): - MMS PROXY PORT (IKKE PÅKREVD): + En gyldig APN konfigurasjon er nødvendig for at TextSecure kan sende og motta multimedia meldinger via operatøren din. Enheten din tilgjengeliggjør ikke denne konfigurasjonen. Dette er ofte tilfelle for operatørlåste enheter og annen restriktiv konfigurasjon. + For å sende multimedia meldinger, vær vennlig å fullfør den nødvendige APN informasjonen under. Verdiene for din operatør kan ofte finnes ved å lete etter \'<din operatør> APN\'. Du trenger kun å gjøre dette en gang. + MMSC URL (PÅKREVD): + MMS PROXY VERT (IKKE PÅKREVD): + MMS PROXY PORT (IKKE PÅKREVD): Complete @@ -347,8 +347,8 @@ Avansert Passord Alternativ MMSC - Aktiver alternativ MMSC - Benytt MMSC informasjonen konfigurert her når systemets APN informasjon er utilgjengelig. + Aktiver alternativ MMSC + Benytt MMSC informasjonen konfigurert her når systemets APN informasjon er utilgjengelig. MMSC URL (påkrevd) MMS proxy host (valgfritt) MMS proxy port (valgfritt) diff --git a/res/values-pt-rBR/strings.xml b/res/values-pt-rBR/strings.xml index 23536be561..eb867ffc61 100644 --- a/res/values-pt-rBR/strings.xml +++ b/res/values-pt-rBR/strings.xml @@ -122,10 +122,10 @@ Você deve especificar uma senha Frase-chave inválida! - - Você deve especificar a URL do MMSC da sua operadora. - Configurações MMS Atualizadas - Você pode modificar estes valores a qualquer momento nas configurações do TextSecure. + + Você deve especificar a URL do MMSC da sua operadora. + Configurações MMS Atualizadas + Você pode modificar estes valores a qualquer momento nas configurações do TextSecure. A\n assinatura nesta troca de chaves é diferente da que você recebeu anteriormente deste\n contato. Isto pode significar que alguém está tentando interceptar sua comunicação, ou\n que este contato reinstalou o TextSecure e agora tem uma nova chave de identidade.\n Talvez você queira verificar\n este contato.\n @@ -250,11 +250,11 @@ Palavra-chave do TextSecure Desbloquear - O TextSecure precisa das configurações de APN para entregar mensagens MMS via sua operadora móvel. Seu aparelho não disponibiliza esta informação, o que pode ocorrer em aparelhos bloqueados ou com configurações restritivas. - Para enviar mensagens MMS, complete as informações de APN abaixo. Os valores para sua operadora normalmente podem ser localizados procurando por \'<operadora> APN\'. Você só precisará fazer isso uma vez. - URL MMSC (NECESSÁRIO): - PROXY MMS (OPCIONAL): - PORTA DO PROXY MMS (OPCIONAL): + O TextSecure precisa das configurações de APN para entregar mensagens MMS via sua operadora móvel. Seu aparelho não disponibiliza esta informação, o que pode ocorrer em aparelhos bloqueados ou com configurações restritivas. + Para enviar mensagens MMS, complete as informações de APN abaixo. Os valores para sua operadora normalmente podem ser localizados procurando por \'<operadora> APN\'. Você só precisará fazer isso uma vez. + URL MMSC (NECESSÁRIO): + PROXY MMS (OPCIONAL): + PORTA DO PROXY MMS (OPCIONAL): Concluído @@ -339,8 +339,8 @@ Avançado Frase-chave MMSC Reserva - Habilitar MMSC de reseva - Usar esta informação de MMSC quando APN do sistema estiver indisponível. + Habilitar MMSC de reseva + Usar esta informação de MMSC quando APN do sistema estiver indisponível. URL do MMSC (Necessário) Proxy MMS (Opcional) Porta do Proxy MMS (Opcional) diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml index ebae7b0e2d..32d5c7f496 100644 --- a/res/values-pt/strings.xml +++ b/res/values-pt/strings.xml @@ -120,10 +120,10 @@ Tem de especificar uma palavra-chave Frase-chave inválida! - - Tem de especificar uma URL MMSC para a sua operadora. - Configuração MMS Actualizada - Pode modificar estes valores a partir do menu de configuração TextSecure em qualquer altura. + + Tem de especificar uma URL MMSC para a sua operadora. + Configuração MMS Actualizada + Pode modificar estes valores a partir do menu de configuração TextSecure em qualquer altura. A assinatura deste intercâmbio de chaves é diferente da previamente recebida deste contacto. Isto pode significar que alguém está a tentar interceptar esta comunicação ou simplesmente que este contacto reinstalou o TextSecure e tem agora uma nova chave de identidade. Pode ser desejável verificar este contracto. @@ -248,11 +248,11 @@ FRASE-CHAVE TEXTSECURE Desbloquear - TextSecure requer configurações APN para entregar mensagens multimédia através da sua operadora sem fios. O seu dispositivo não disponibiliza esta informação, o que é ocasionalmente o caso para dispositivos bloqueados e outras configurações restritivas. - Para enviar mensagens multimédia, por favor complete a informação APN requerida abaixo. Os valores para a sua operadora podem habitualmente ser encontrados procurando por \'APN <Operadora>\'. Apenas necessita de efectuar esta operação uma vez. - URL MMSC (OBRIGATÓRIO): - ANFITRIÃO PROXY MMS (OPCIONAL): - PORTA PROXY MMS (OPCIONAL): + TextSecure requer configurações APN para entregar mensagens multimédia através da sua operadora sem fios. O seu dispositivo não disponibiliza esta informação, o que é ocasionalmente o caso para dispositivos bloqueados e outras configurações restritivas. + Para enviar mensagens multimédia, por favor complete a informação APN requerida abaixo. Os valores para a sua operadora podem habitualmente ser encontrados procurando por \'APN <Operadora>\'. Apenas necessita de efectuar esta operação uma vez. + URL MMSC (OBRIGATÓRIO): + ANFITRIÃO PROXY MMS (OPCIONAL): + PORTA PROXY MMS (OPCIONAL): Completo @@ -335,8 +335,8 @@ Avançado Frase-chave MMSC de recurso - Habilitar MMSC de reseva - Usar esta informação de MMSC quando APN do sistema estiver indisponível. + Habilitar MMSC de reseva + Usar esta informação de MMSC quando APN do sistema estiver indisponível. URL do MMSC (Necessário) Proxy MMS (Opcional) Porta do Proxy MMS (Opcional) diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml index 775ea2d069..d033556d44 100644 --- a/res/values-ro/strings.xml +++ b/res/values-ro/strings.xml @@ -122,10 +122,10 @@ Trebuie specificata o parola Parola Incorecta! - - Trebuie sa specifici un URL MMSC pentru operatorul tau. - Setarile MMS au fost actualizate - Poti modifica aceste valori in orice moment din meniul Setari al TextSecure. + + Trebuie sa specifici un URL MMSC pentru operatorul tau. + Setarile MMS au fost actualizate + Poti modifica aceste valori in orice moment din meniul Setari al TextSecure. Semnatura digitala din acest schimb de chei este diferita fata de ce ai primit anterior de la aceasta persoana. Asta poate insemna ca cineva incearca sa intercepteze comunicatia sau ca aceasta persoana a reinstalat TextSecure si acum are o noua cheie de identitate. Probabil ca doresti sa verifici aceasta persoana. @@ -250,11 +250,11 @@ PAROLA TEXTSECURE Deblocheaza - TextSecure are nevoie de setari APN pentru a trimite mesaje multimedia prin operatorul wireless. Acest aparat nu ofera informatiile necesare, lucru care se poate intampla uneori pentru dispozitive blocate sau alte configuratii restrictive. - Pentru a trimite mesaje multimedia te rog sa completezi mai jos informatiile APN necesare. Valorile corecte pentru operatorul tau pot fi gasite deseori cautand dupa \'<operatorul tau> APN\'. Acest lucru trebuie facut o singura data. - MMSC URL (Necesar): - Host proxy MMS (Optional): - Port proxy MMS (Optional): + TextSecure are nevoie de setari APN pentru a trimite mesaje multimedia prin operatorul wireless. Acest aparat nu ofera informatiile necesare, lucru care se poate intampla uneori pentru dispozitive blocate sau alte configuratii restrictive. + Pentru a trimite mesaje multimedia te rog sa completezi mai jos informatiile APN necesare. Valorile corecte pentru operatorul tau pot fi gasite deseori cautand dupa \'<operatorul tau> APN\'. Acest lucru trebuie facut o singura data. + MMSC URL (Necesar): + Host proxy MMS (Optional): + Port proxy MMS (Optional): Complet @@ -339,8 +339,8 @@ Avansat Parola MMSC de rezerva - Activeaza MMSC de rezerva - Foloseste informatiile MMSC configurate aici cand informatiile despre sistemul APN nu sunt disponibile + Activeaza MMSC de rezerva + Foloseste informatiile MMSC configurate aici cand informatiile despre sistemul APN nu sunt disponibile URL MMSC (Necesar) Host proxy MMS (Optional) Port proxy MMS (Optional) diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml index 5f3297b883..dee0a9ba46 100644 --- a/res/values-ru/strings.xml +++ b/res/values-ru/strings.xml @@ -84,10 +84,10 @@ Вы должны указать пароль Неправильный пароль! - - Вы должны указать MMSC URL для вашего оператора. - Настройки MMS Обновлены - Вы можете изменить эти значения из TextSecure меню в любое время. + + Вы должны указать MMSC URL для вашего оператора. + Настройки MMS Обновлены + Вы можете изменить эти значения из TextSecure меню в любое время. У вас нет персонального ключа! @@ -194,11 +194,11 @@ TEXTSECURE ПАРОЛЬ Отпереть - TextSecure требует настройки APN для доставки сообщений медиа через ваш беспроводной связи. Эта информация недоступна на вашем устройстве. Это может произойти, если устройство заблокировано или ограничено. - Для отправки сообщений СМИ, заполните информацию APN здесь. Значения вашего оператора обычно можно находить поиске \'<your carrier> APN\'. Это только надо сделать один раз. - MMSC URL (ОБЯЗАТЕЛЬНО): - MMS ПРОКСИ-СЕРВЕРА (НЕОБЯЗАТЕЛЬНО): - MMS ПОРТА ПРОКСИ (НЕОБЯЗАТЕЛЬНО): + TextSecure требует настройки APN для доставки сообщений медиа через ваш беспроводной связи. Эта информация недоступна на вашем устройстве. Это может произойти, если устройство заблокировано или ограничено. + Для отправки сообщений СМИ, заполните информацию APN здесь. Значения вашего оператора обычно можно находить поиске \'<your carrier> APN\'. Это только надо сделать один раз. + MMSC URL (ОБЯЗАТЕЛЬНО): + MMS ПРОКСИ-СЕРВЕРА (НЕОБЯЗАТЕЛЬНО): + MMS ПОРТА ПРОКСИ (НЕОБЯЗАТЕЛЬНО): Завершено @@ -271,8 +271,8 @@ Медленно Свой Пароль - Включите Резервной MMSC - Используйте установленную здесь информацию MMSC когда информационная система APN недоступна. + Включите Резервной MMSC + Используйте установленную здесь информацию MMSC когда информационная система APN недоступна. MMSC URL (обязательно) MMS Адрес Прокси (Необязательно) MMS Порт Прокси (необязательно) diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml index 59b5b9e956..802cfe5344 100644 --- a/res/values-sk/strings.xml +++ b/res/values-sk/strings.xml @@ -78,7 +78,7 @@ Nesprávne heslo! - + Nemáte kľúč totožnosti. @@ -243,8 +243,8 @@ Normálne Pomaly Vlastné - Povoľ fallback MMSC - Použi nastavenia MMSC ak nie sú dostupné APN informácie. + Povoľ fallback MMSC + Použi nastavenia MMSC ak nie sú dostupné APN informácie. MMSC URL (nutné) MMS Proxy (voliteľné) MMS Proxy port (voliteľné) diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml index 589d177a88..61ea597b52 100644 --- a/res/values-sl/strings.xml +++ b/res/values-sl/strings.xml @@ -122,10 +122,10 @@ Določiti morate geslo Neveljavno geslo! - - Navesti morate MMSC URL vašega operaterja. - Nastavitve MMS posodobljene - Vnešeno lahko kadarkoli popravite v nastavitvah TextSecure. + + Navesti morate MMSC URL vašega operaterja. + Nastavitve MMS posodobljene + Vnešeno lahko kadarkoli popravite v nastavitvah TextSecure. Podpis pri tej izmenjavi ključev se razlikuje od tistih pri predhodno izmenjanih ključih s to osebo. To lahko pomeni, da nekdo prestreza komunikacijo, ali pa, da je oseba ponovno namestila TextSecure in ima zdaj nov identifikacijski ključ. Morda bi želeli overoviti ta stik. @@ -258,11 +258,11 @@ GESLO TEXTSECURE Odkleni - Za posredovanje sporočil preko vašega mobilnega operaterja potrebuje TextSecure ustrezne nastavitve APN. Pri vaši napravi ti podatki niso na voljo. To je značilno predvsem za zaklenjene naprave ali različne omejene konfiguracije. - Za pošiljanje multimedijskih sporočil vnesite ustrezne nastavitve APN. Podatke za vašega operaterja lahko verjetno najdete s poizvedbo za \'<vaš operater> APN\'. To morate storiti le enkrat. - MMSC URL (ZAHTEVANO): - GOSTITELJ POSRED. STREŽNIKA MMS (IZBIRNO): - VRATA POSRED. STREŽNIKA MMS (IZBIRNO): + Za posredovanje sporočil preko vašega mobilnega operaterja potrebuje TextSecure ustrezne nastavitve APN. Pri vaši napravi ti podatki niso na voljo. To je značilno predvsem za zaklenjene naprave ali različne omejene konfiguracije. + Za pošiljanje multimedijskih sporočil vnesite ustrezne nastavitve APN. Podatke za vašega operaterja lahko verjetno najdete s poizvedbo za \'<vaš operater> APN\'. To morate storiti le enkrat. + MMSC URL (ZAHTEVANO): + GOSTITELJ POSRED. STREŽNIKA MMS (IZBIRNO): + VRATA POSRED. STREŽNIKA MMS (IZBIRNO): Končano @@ -347,8 +347,8 @@ Napredno Geslo Nadomestni MMSC - Omogoči nadomestni MMSC - Uporabi tu izbrane MMSC nastavitve kadar sistemske APN nastavitve niso na voljo. + Omogoči nadomestni MMSC + Uporabi tu izbrane MMSC nastavitve kadar sistemske APN nastavitve niso na voljo. MMSC URL (zahtevano) Posredniški strežnik za MMS (opcijsko) Vrata posredniškega strežnika za MMS (opcijsko) diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml index 2245f6b784..063c425f7b 100644 --- a/res/values-sv/strings.xml +++ b/res/values-sv/strings.xml @@ -122,10 +122,10 @@ Du måste specificera ett lösenord Fel Lösenord! - - Du måste specificera en MMSC URL för din operatör. - MMS-inställningar uppdaterade - Du kan modifiera dessa värden från TextSecure inställningsmenyn när du vill. + + Du måste specificera en MMSC URL för din operatör. + MMS-inställningar uppdaterade + Du kan modifiera dessa värden från TextSecure inställningsmenyn när du vill. Signaturen för detta nyckelutbytet skiljer sig från det som du tidigare har mottagit från denna kontakt.\nDetta kan innebära antingen att någon försöker avlyssna din kommunikation, eller att denna kontakt helt enkelt installerade om TextSecure och nu har en ny identitetsnyckel. Det kan vara en bra idé att\nverifiera denna kontakt. @@ -250,11 +250,11 @@ TEXTSECURE LÖSENORD Lås upp - TextSecure kräver APN inställningar för att leverera mediemeddelanden via din mobilöperatör. Din enhet gör inte den här informationen tillgänglig, vilket ibland stämmer för låsta enheter och andra restriktiva konfigurationer. - För att skicka mediemeddelanden, var vänlig fyll i den nödvändiga APN informationen nedan. Värdena för din operatör kan generellt sett hittas genom att söka på \'<din operatör< APN\'. Du behöver bara göra detta en gång. - MMSC URL (KRÄVS): - MMS PROXY VÄRD (VALFRITT): - MMS PROXY PORT (VALFRITT): + TextSecure kräver APN inställningar för att leverera mediemeddelanden via din mobilöperatör. Din enhet gör inte den här informationen tillgänglig, vilket ibland stämmer för låsta enheter och andra restriktiva konfigurationer. + För att skicka mediemeddelanden, var vänlig fyll i den nödvändiga APN informationen nedan. Värdena för din operatör kan generellt sett hittas genom att söka på \'<din operatör< APN\'. Du behöver bara göra detta en gång. + MMSC URL (KRÄVS): + MMS PROXY VÄRD (VALFRITT): + MMS PROXY PORT (VALFRITT): Klart @@ -339,8 +339,8 @@ Avancerade Lösenfras Reserv MMSC - Aktivera Fallback MMSC - Använd MMSC information konfugerad här när system APN information är otillgänglig. + Aktivera Fallback MMSC + Använd MMSC information konfugerad här när system APN information är otillgänglig. MMSC URL (nödvändigt) MMS Proxyvärd (valfritt) MMS proxyport (valfritt) diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml index 7d53c9ce8d..d63d69fd83 100644 --- a/res/values-zh-rCN/strings.xml +++ b/res/values-zh-rCN/strings.xml @@ -73,7 +73,7 @@ 无效密码! - + 您没有身份密钥。 diff --git a/res/values/strings.xml b/res/values/strings.xml index ac5dc85155..2a398c9816 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -150,6 +150,7 @@ No connectivity available for MMS download, try again later... Error storing MMS! Error connecting to MMS provider... + Error reading wireless provider MMS settings... Multimedia Message @@ -165,10 +166,10 @@ Invalid Passphrase! - - You must specify an MMSC URL for your carrier. - MMS Settings Updated - You can modify these values from the TextSecure settings menu at any time. + + You must specify an MMSC URL for your carrier. + MMS Settings Updated + You can modify these values from the TextSecure settings menu at any time. The @@ -229,6 +230,7 @@ Downloading MMS... MMS Download failed! Downloading... + Tap and configure MMS settings to continue download. Decrypting MMS, please wait... @@ -350,16 +352,20 @@ Regenerate Key + + Manual MMS settings are required for your phone. + + TEXTSECURE PASSPHRASE Unlock - - TextSecure requires APN settings to deliver media messages via your wireless carrier. Your device does not make this information available, which is occasionally true for locked devices and other restrictive configurations. - To send media messages, please complete the necessary APN information below. The values for your carrier can generally be located by searching for \'<your carrier> APN\'. You will only need to do this once. - MMSC URL (REQUIRED): - MMS PROXY HOST (OPTIONAL): - MMS PROXY PORT (OPTIONAL): + + TextSecure requires MMS settings to deliver media and group messages through your wireless carrier. Your device does not make this information available, which is occasionally true for locked devices and other restrictive configurations. + To send media and group messages, click \'OK\' and complete the requested settings. The MMS settings for your carrier can generally be located by searching for \'your carrier APN\'. You will only need to do this once. + MMSC URL (REQUIRED): + MMS PROXY HOST (OPTIONAL): + MMS PROXY PORT (OPTIONAL): Complete @@ -455,9 +461,9 @@ Custom Advanced Passphrase - Fallback MMSC - Enable Fallback MMSC - Use MMSC information configured here when system APN information is unavailable. + MMS Preferences + Enable Manual MMS + Override system MMS settings with the below information. MMSC URL (Required) MMS Proxy Host (Optional) MMS Proxy Port (Optional) diff --git a/res/xml/mms_preferences.xml b/res/xml/mms_preferences.xml new file mode 100644 index 0000000000..67df42ff17 --- /dev/null +++ b/res/xml/mms_preferences.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/res/xml/preferences.xml b/res/xml/preferences.xml index d166319807..cf4f6668cb 100644 --- a/res/xml/preferences.xml +++ b/res/xml/preferences.xml @@ -159,24 +159,7 @@ android:title="@string/preferences__complete_key_exchanges" android:summary="@string/preferences__automatically_complete_key_exchanges_for_new_sessions_or_for_existing_sessions_with_the_same_identity_key" /> - - - - - - - - - + diff --git a/src/org/thoughtcrime/securesms/ApplicationPreferencesActivity.java b/src/org/thoughtcrime/securesms/ApplicationPreferencesActivity.java index 358b80fee6..73d96ea142 100644 --- a/src/org/thoughtcrime/securesms/ApplicationPreferencesActivity.java +++ b/src/org/thoughtcrime/securesms/ApplicationPreferencesActivity.java @@ -79,10 +79,11 @@ public class ApplicationPreferencesActivity extends PassphraseRequiredSherlockPr private static final String CHANGE_PASSPHRASE_PREF = "pref_change_passphrase"; public static final String DISABLE_PASSPHRASE_PREF = "pref_disable_passphrase"; - public static final String USE_LOCAL_MMS_APNS_PREF = "pref_use_local_apns"; - public static final String MMSC_HOST_PREF = "pref_apn_mmsc_host"; - public static final String MMSC_PROXY_HOST_PREF = "pref_apn_mms_proxy"; - public static final String MMSC_PROXY_PORT_PREF = "pref_apn_mms_proxy_port"; + public static final String MMS_PREF = "pref_mms_preferences"; + public static final String ENABLE_MANUAL_MMS_PREF = "pref_enable_manual_mms"; + public static final String MMSC_HOST_PREF = "pref_apn_mmsc_host"; + public static final String MMSC_PROXY_HOST_PREF = "pref_apn_mms_proxy"; + public static final String MMSC_PROXY_PORT_PREF = "pref_apn_mms_proxy_port"; public static final String SMS_DELIVERY_REPORT_PREF = "pref_delivery_report_sms"; @@ -109,7 +110,6 @@ public class ApplicationPreferencesActivity extends PassphraseRequiredSherlockPr addPreferencesFromResource(R.xml.preferences); initializeIdentitySelection(); - initializeEditTextSummaries(); this.findPreference(CHANGE_PASSPHRASE_PREF) .setOnPreferenceClickListener(new ChangePassphraseClickListener()); @@ -119,6 +119,8 @@ public class ApplicationPreferencesActivity extends PassphraseRequiredSherlockPr .setOnPreferenceChangeListener(new TrimLengthValidationListener()); this.findPreference(DISABLE_PASSPHRASE_PREF) .setOnPreferenceChangeListener(new DisablePassphraseClickListener()); + this.findPreference(MMS_PREF) + .setOnPreferenceClickListener(new ApnPreferencesClickListener()); } @Override @@ -174,28 +176,6 @@ public class ApplicationPreferencesActivity extends PassphraseRequiredSherlockPr return false; } - private void initializeEditTextSummary(final EditTextPreference preference) { - if (preference.getText() == null) { - preference.setSummary("Not set"); - } else { - preference.setSummary(preference.getText()); - } - - preference.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { - @Override - public boolean onPreferenceChange(Preference pref, Object newValue) { - preference.setSummary(newValue == null ? "Not set" : ((String) newValue)); - return true; - } - }); - } - - private void initializeEditTextSummaries() { - initializeEditTextSummary((EditTextPreference)this.findPreference(MMSC_HOST_PREF)); - initializeEditTextSummary((EditTextPreference)this.findPreference(MMSC_PROXY_HOST_PREF)); - initializeEditTextSummary((EditTextPreference)this.findPreference(MMSC_PROXY_PORT_PREF)); - } - private void initializeIdentitySelection() { ContactIdentityManager identity = ContactIdentityManager.getInstance(this); @@ -363,6 +343,15 @@ public class ApplicationPreferencesActivity extends PassphraseRequiredSherlockPr } + private class ApnPreferencesClickListener implements Preference.OnPreferenceClickListener { + + @Override + public boolean onPreferenceClick(Preference preference) { + startActivity(new Intent(ApplicationPreferencesActivity.this, MmsPreferencesActivity.class)); + return true; + } + } + /* http://code.google.com/p/android/issues/detail?id=4611#c35 */ @SuppressWarnings("deprecation") @Override diff --git a/src/org/thoughtcrime/securesms/ConversationActivity.java b/src/org/thoughtcrime/securesms/ConversationActivity.java index 4b8648a939..89aeed6d15 100644 --- a/src/org/thoughtcrime/securesms/ConversationActivity.java +++ b/src/org/thoughtcrime/securesms/ConversationActivity.java @@ -465,10 +465,18 @@ public class ConversationActivity extends PassphraseRequiredSherlockFragmentActi builder.setAdapter(attachmentAdapter, new AttachmentTypeListener()); builder.show(); } else { - startActivity(new Intent(this, PromptApnActivity.class)); + handleManualMmsRequired(); } } + private void handleManualMmsRequired() { + Toast.makeText(this, R.string.MmsDownloader_error_reading_mms_settings, Toast.LENGTH_LONG).show(); + + Intent intent = new Intent(this, PromptMmsActivity.class); + intent.putExtras(getIntent().getExtras()); + startActivity(intent); + } + ///// Initializers private void initializeTitleBar() { @@ -849,7 +857,10 @@ public class ConversationActivity extends PassphraseRequiredSherlockFragmentActi String body = getMessage(); long allocatedThreadId; - if (attachmentManager.isAttachmentPresent()) { + if ((!recipients.isSingleRecipient() || recipients.isEmailRecipient()) && !isMmsEnabled) { + handleManualMmsRequired(); + return; + } else if (attachmentManager.isAttachmentPresent()) { allocatedThreadId = MessageSender.sendMms(ConversationActivity.this, masterSecret, recipients, threadId, attachmentManager.getSlideDeck(), body, distributionType, isEncryptedConversation && !forcePlaintext); @@ -870,7 +881,6 @@ public class ConversationActivity extends PassphraseRequiredSherlockFragmentActi allocatedThreadId = MessageSender.send(ConversationActivity.this, masterSecret, message, threadId); } - sendComplete(recipients, allocatedThreadId); } catch (RecipientFormattingException ex) { Toast.makeText(ConversationActivity.this, diff --git a/src/org/thoughtcrime/securesms/ConversationItem.java b/src/org/thoughtcrime/securesms/ConversationItem.java index 536c4ffc3b..294029bd70 100644 --- a/src/org/thoughtcrime/securesms/ConversationItem.java +++ b/src/org/thoughtcrime/securesms/ConversationItem.java @@ -92,10 +92,11 @@ public class ConversationItem extends LinearLayout { private TextView mmsDownloadingLabel; private ListenableFutureTask slideDeck; - private final FailedIconClickListener failedIconClickListener = new FailedIconClickListener(); - private final MmsDownloadClickListener mmsDownloadClickListener = new MmsDownloadClickListener(); - private final ClickListener clickListener = new ClickListener(); - private final Handler handler = new Handler(); + private final FailedIconClickListener failedIconClickListener = new FailedIconClickListener(); + private final MmsDownloadClickListener mmsDownloadClickListener = new MmsDownloadClickListener(); + private final MmsPreferencesClickListener mmsPreferencesClickListener = new MmsPreferencesClickListener(); + private final ClickListener clickListener = new ClickListener(); + private final Handler handler = new Handler(); private final Context context; public ConversationItem(Context context) { @@ -168,7 +169,7 @@ public class ConversationItem extends LinearLayout { private void setBodyText(MessageRecord messageRecord) { bodyText.setText(Emoji.getInstance(context).emojify(messageRecord.getDisplayBody(), Emoji.EMOJI_LARGE), - TextView.BufferType.SPANNABLE); + TextView.BufferType.SPANNABLE); } private void setContactPhoto(MessageRecord messageRecord) { @@ -203,8 +204,8 @@ public class ConversationItem extends LinearLayout { if (!messageRecord.isOutgoing() && messageRecord.getRecipients().isSingleRecipient()) { checkForAutoInitiate(messageRecord.getIndividualRecipient(), - messageRecord.getBody().getBody(), - messageRecord.getThreadId()); + messageRecord.getBody().getBody(), + messageRecord.getThreadId()); } } @@ -236,6 +237,11 @@ public class ConversationItem extends LinearLayout { mmsDownloadingLabel.setText(MmsDatabase.Status.getLabelForStatus(context, messageRecord.getStatus())); mmsDownloadButton.setVisibility(View.GONE); mmsDownloadingLabel.setVisibility(View.VISIBLE); + + if (MmsDatabase.Status.isHardError(messageRecord.getStatus()) && !messageRecord.isOutgoing()) + setOnClickListener(mmsDownloadClickListener); + else if (MmsDatabase.Status.DOWNLOAD_APN_UNAVAILABLE == messageRecord.getStatus() && !messageRecord.isOutgoing()) + setOnClickListener(mmsPreferencesClickListener); } } @@ -313,7 +319,7 @@ public class ConversationItem extends LinearLayout { if (recipient.getContactUri() != null) { QuickContact.showQuickContact(context, contactPhoto, recipient.getContactUri(), QuickContact.MODE_LARGE, null); } else { - Intent intent = new Intent(Intents.SHOW_OR_CREATE_CONTACT, Uri.fromParts("tel", recipient.getNumber(), null)); + Intent intent = new Intent(Intents.SHOW_OR_CREATE_CONTACT, Uri.fromParts("tel", recipient.getNumber(), null)); context.startActivity(intent); } } @@ -504,6 +510,16 @@ public class ConversationItem extends LinearLayout { } } + private class MmsPreferencesClickListener implements View.OnClickListener { + public void onClick(View v) { + Intent intent = new Intent(context, PromptMmsActivity.class); + intent.putExtra("message_id", messageRecord.getId()); + intent.putExtra("thread_id", messageRecord.getThreadId()); + intent.putExtra("automatic", true); + context.startActivity(intent); + } + } + private class FailedIconClickListener implements View.OnClickListener { public void onClick(View v) { if (failedIconHandler != null && !messageRecord.isKeyExchange()) { diff --git a/src/org/thoughtcrime/securesms/MmsPreferencesActivity.java b/src/org/thoughtcrime/securesms/MmsPreferencesActivity.java new file mode 100644 index 0000000000..59d91c33af --- /dev/null +++ b/src/org/thoughtcrime/securesms/MmsPreferencesActivity.java @@ -0,0 +1,136 @@ +/** + * Copyright (C) 2011 Whisper Systems + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.thoughtcrime.securesms; + +import android.content.Intent; +import android.os.Bundle; +import android.preference.EditTextPreference; +import android.preference.Preference; +import android.preference.PreferenceManager; +import android.widget.Toast; + +import com.actionbarsherlock.view.MenuItem; +import org.thoughtcrime.securesms.crypto.MasterSecret; +import org.thoughtcrime.securesms.mms.MmsDownloadHelper; +import org.thoughtcrime.securesms.service.SendReceiveService; +import org.thoughtcrime.securesms.util.DynamicLanguage; +import org.thoughtcrime.securesms.util.DynamicTheme; +import org.thoughtcrime.securesms.util.MemoryCleaner; + +public class MmsPreferencesActivity extends PassphraseRequiredSherlockPreferenceActivity { + + private MasterSecret masterSecret; + + private final DynamicTheme dynamicTheme = new DynamicTheme(); + private final DynamicLanguage dynamicLanguage = new DynamicLanguage(); + + @Override + protected void onCreate(Bundle icicle) { + dynamicTheme.onCreate(this); + dynamicLanguage.onCreate(this); + super.onCreate(icicle); + + this.getSupportActionBar().setDisplayHomeAsUpEnabled(true); + initializePreferences(); + + masterSecret = getIntent().getParcelableExtra("master_secret"); + + initializeEditTextSummaries(); + } + + @Override + public void onResume() { + super.onResume(); + dynamicTheme.onResume(this); + dynamicLanguage.onResume(this); + } + + @Override + public void onDestroy() { + MemoryCleaner.clean(masterSecret); + MemoryCleaner.clean((MasterSecret) getIntent().getParcelableExtra("master_secret")); + super.onDestroy(); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + case android.R.id.home: + handleDownloadMmsPendingApn(); + finish(); + return true; + } + + return false; + } + + @Override + public void onBackPressed() { + handleDownloadMmsPendingApn(); + super.onBackPressed(); + } + + private void initializePreferences() { + if (!MmsDownloadHelper.isMmsConnectionParametersAvailable(this, null, false)) { + PreferenceManager.getDefaultSharedPreferences(this).edit() + .putBoolean(ApplicationPreferencesActivity.ENABLE_MANUAL_MMS_PREF, true).commit(); + addPreferencesFromResource(R.xml.mms_preferences); + this.findPreference(ApplicationPreferencesActivity.ENABLE_MANUAL_MMS_PREF).setOnPreferenceChangeListener(new OverrideMmsChangeListener()); + } else { + addPreferencesFromResource(R.xml.mms_preferences); + } + } + + private void initializeEditTextSummary(final EditTextPreference preference) { + if (preference.getText() == null) { + preference.setSummary("Not set"); + } else { + preference.setSummary(preference.getText()); + } + + preference.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { + @Override + public boolean onPreferenceChange(Preference pref, Object newValue) { + preference.setSummary(newValue == null ? "Not set" : ((String) newValue)); + return true; + } + }); + } + + private void initializeEditTextSummaries() { + initializeEditTextSummary((EditTextPreference)this.findPreference(ApplicationPreferencesActivity.MMSC_HOST_PREF)); + initializeEditTextSummary((EditTextPreference)this.findPreference(ApplicationPreferencesActivity.MMSC_PROXY_HOST_PREF)); + initializeEditTextSummary((EditTextPreference)this.findPreference(ApplicationPreferencesActivity.MMSC_PROXY_PORT_PREF)); + } + + private void handleDownloadMmsPendingApn() { + Intent intent = new Intent(this, SendReceiveService.class); + intent.setAction(SendReceiveService.DOWNLOAD_MMS_PENDING_APN_ACTION); + startService(intent); + } + + private class OverrideMmsChangeListener implements Preference.OnPreferenceChangeListener { + @Override + public boolean onPreferenceChange(Preference preference, Object o) { + PreferenceManager.getDefaultSharedPreferences(MmsPreferencesActivity.this).edit() + .putBoolean(ApplicationPreferencesActivity.ENABLE_MANUAL_MMS_PREF, true).commit(); + Toast.makeText(MmsPreferencesActivity.this, R.string.mms_preferences_activity__manual_mms_settings_are_required, Toast.LENGTH_SHORT).show(); + return false; + } + } + +} diff --git a/src/org/thoughtcrime/securesms/PromptApnActivity.java b/src/org/thoughtcrime/securesms/PromptApnActivity.java deleted file mode 100644 index d3d6978aac..0000000000 --- a/src/org/thoughtcrime/securesms/PromptApnActivity.java +++ /dev/null @@ -1,86 +0,0 @@ -package org.thoughtcrime.securesms; - -import android.app.AlertDialog; -import android.content.DialogInterface; -import android.content.SharedPreferences; -import android.os.Bundle; -import android.preference.PreferenceManager; -import android.view.View; -import android.widget.Button; -import android.widget.EditText; -import android.widget.Toast; - -import org.thoughtcrime.securesms.util.Util; - -public class PromptApnActivity extends PassphraseRequiredSherlockActivity { - - private EditText mmsc; - private EditText proxyHost; - private EditText proxyPort; - - private Button okButton; - private Button cancelButton; - - @Override - public void onCreate(Bundle bundle) { - super.onCreate(bundle); - setContentView(R.layout.prompt_apn_activity); - - initializeResources(); - initializeValues(); - } - - private void initializeValues() { - SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this); - mmsc.setText(preferences.getString(ApplicationPreferencesActivity.MMSC_HOST_PREF, "")); - proxyHost.setText(preferences.getString(ApplicationPreferencesActivity.MMSC_PROXY_HOST_PREF, "")); - proxyPort.setText(preferences.getString(ApplicationPreferencesActivity.MMSC_PROXY_PORT_PREF, "")); - } - - private void initializeResources() { - this.mmsc = (EditText)findViewById(R.id.mmsc_url); - this.proxyHost = (EditText)findViewById(R.id.mms_proxy_host); - this.proxyPort = (EditText)findViewById(R.id.mms_proxy_port); - this.okButton = (Button)findViewById(R.id.ok_button); - this.cancelButton = (Button)findViewById(R.id.cancel_button); - - this.okButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - handleSettings(); - } - }); - - this.cancelButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - finish(); - } - }); - } - - private void handleSettings() { - if (Util.isEmpty(mmsc)) { - Toast.makeText(this, R.string.PromptApnActivity_you_must_specify_an_mmsc_url_for_your_carrier, Toast.LENGTH_LONG).show(); - return; - } - - PreferenceManager.getDefaultSharedPreferences(this).edit() - .putBoolean(ApplicationPreferencesActivity.USE_LOCAL_MMS_APNS_PREF, true) - .putString(ApplicationPreferencesActivity.MMSC_HOST_PREF, mmsc.getText().toString().trim()) - .putString(ApplicationPreferencesActivity.MMSC_PROXY_HOST_PREF, proxyHost.getText().toString().trim()) - .putString(ApplicationPreferencesActivity.MMSC_PROXY_PORT_PREF, proxyPort.getText().toString().trim()) - .commit(); - - AlertDialog.Builder builder = new AlertDialog.Builder(this); - builder.setTitle(R.string.PromptApnActivity_mms_settings_updated); - builder.setMessage(R.string.PromptApnActivity_you_can_modify_these_values_from_the_textsecure_settings_menu_at_any_time_); - builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - finish(); - } - }); - builder.show(); - } -} diff --git a/src/org/thoughtcrime/securesms/PromptMmsActivity.java b/src/org/thoughtcrime/securesms/PromptMmsActivity.java new file mode 100644 index 0000000000..295d4bec5f --- /dev/null +++ b/src/org/thoughtcrime/securesms/PromptMmsActivity.java @@ -0,0 +1,43 @@ +package org.thoughtcrime.securesms; + +import android.content.Intent; +import android.os.Bundle; +import android.view.View; +import android.widget.Button; + +public class PromptMmsActivity extends PassphraseRequiredSherlockActivity { + + private Button okButton; + private Button cancelButton; + + @Override + public void onCreate(Bundle bundle) { + super.onCreate(bundle); + + setContentView(R.layout.prompt_apn_activity); + initializeResources(); + } + + private void initializeResources() { + this.okButton = (Button)findViewById(R.id.ok_button); + this.cancelButton = (Button)findViewById(R.id.cancel_button); + + this.okButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = new Intent(PromptMmsActivity.this, MmsPreferencesActivity.class); + intent.putExtras(PromptMmsActivity.this.getIntent().getExtras()); + startActivity(intent); + finish(); + } + }); + + this.cancelButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + +} diff --git a/src/org/thoughtcrime/securesms/database/MmsDatabase.java b/src/org/thoughtcrime/securesms/database/MmsDatabase.java index 2a22d042fb..c7d145b2fc 100644 --- a/src/org/thoughtcrime/securesms/database/MmsDatabase.java +++ b/src/org/thoughtcrime/securesms/database/MmsDatabase.java @@ -345,6 +345,15 @@ public class MmsDatabase extends Database implements MmsSmsColumns { } } + public Reader getNotificationsWithDownloadState(MasterSecret masterSecret, long state) { + SQLiteDatabase database = databaseHelper.getReadableDatabase(); + String selection = STATUS + " = ?"; + String[] selectionArgs = new String[]{state + ""}; + + Cursor cursor = database.query(TABLE_NAME, MMS_PROJECTION, selection, selectionArgs, null, null, null); + return new Reader(masterSecret, cursor); + } + private Pair insertMessageInbox(MasterSecret masterSecret, RetrieveConf retrieved, String contentLocation, long threadId, long mailbox) throws MmsException @@ -679,6 +688,7 @@ public class MmsDatabase extends Database implements MmsSmsColumns { public static final int DOWNLOAD_CONNECTING = 3; public static final int DOWNLOAD_SOFT_FAILURE = 4; public static final int DOWNLOAD_HARD_FAILURE = 5; + public static final int DOWNLOAD_APN_UNAVAILABLE = 6; public static boolean isDisplayDownloadButton(int status) { return @@ -689,9 +699,10 @@ public class MmsDatabase extends Database implements MmsSmsColumns { public static String getLabelForStatus(Context context, int status) { switch (status) { - case DOWNLOAD_CONNECTING: return context.getString(R.string.MmsDatabase_connecting_to_mms_server); - case DOWNLOAD_INITIALIZED: return context.getString(R.string.MmsDatabase_downloading_mms); - case DOWNLOAD_HARD_FAILURE: return context.getString(R.string.MmsDatabase_mms_download_failed); + case DOWNLOAD_CONNECTING: return context.getString(R.string.MmsDatabase_connecting_to_mms_server); + case DOWNLOAD_INITIALIZED: return context.getString(R.string.MmsDatabase_downloading_mms); + case DOWNLOAD_HARD_FAILURE: return context.getString(R.string.MmsDatabase_mms_download_failed); + case DOWNLOAD_APN_UNAVAILABLE: return context.getString(R.string.MmsDatabase_mms_pending_download); } return context.getString(R.string.MmsDatabase_downloading); diff --git a/src/org/thoughtcrime/securesms/mms/MmsCommunication.java b/src/org/thoughtcrime/securesms/mms/MmsCommunication.java index 60d90c84fc..1930c30558 100644 --- a/src/org/thoughtcrime/securesms/mms/MmsCommunication.java +++ b/src/org/thoughtcrime/securesms/mms/MmsCommunication.java @@ -49,11 +49,14 @@ public class MmsCommunication { { SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context); - if (preferences.getBoolean(ApplicationPreferencesActivity.USE_LOCAL_MMS_APNS_PREF, false)) { + if (preferences.getBoolean(ApplicationPreferencesActivity.ENABLE_MANUAL_MMS_PREF, false)) { String mmsc = preferences.getString(ApplicationPreferencesActivity.MMSC_HOST_PREF, null); - if (mmsc == null || !mmsc.startsWith("http")) - throw new ApnUnavailableException("Malformed locally configured MMSC: " + mmsc); + if (mmsc == null) + throw new ApnUnavailableException("Malformed locally configured MMSC."); + + if (!mmsc.startsWith("http")) + mmsc = "http://" + mmsc; String proxy = preferences.getString(ApplicationPreferencesActivity.MMSC_PROXY_HOST_PREF, null); String port = preferences.getString(ApplicationPreferencesActivity.MMSC_PROXY_PORT_PREF, null); @@ -69,7 +72,7 @@ public class MmsCommunication { { SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context); - if (preferences.getBoolean(ApplicationPreferencesActivity.USE_LOCAL_MMS_APNS_PREF, false)) { + if (preferences.getBoolean(ApplicationPreferencesActivity.ENABLE_MANUAL_MMS_PREF, false)) { return getLocallyConfiguredMmsConnectionParameters(context); } else { MmsConnectionParameters params = ApnDefaults.getMmsConnectionParameters(context); diff --git a/src/org/thoughtcrime/securesms/mms/MmsDownloadHelper.java b/src/org/thoughtcrime/securesms/mms/MmsDownloadHelper.java index bf94d65648..22585f1afa 100644 --- a/src/org/thoughtcrime/securesms/mms/MmsDownloadHelper.java +++ b/src/org/thoughtcrime/securesms/mms/MmsDownloadHelper.java @@ -64,18 +64,20 @@ public class MmsDownloadHelper extends MmsCommunication { } } + public static boolean isMmsConnectionParametersAvailable(Context context, String apn, boolean proxyIfPossible) { + try { + getMmsConnectionParameters(context, apn, proxyIfPossible); + return true; + } catch (ApnUnavailableException e) { + return false; + } + } + public static RetrieveConf retrieveMms(Context context, String url, String apn, boolean usingMmsRadio, boolean proxyIfPossible) - throws IOException + throws IOException, ApnUnavailableException { - MmsConnectionParameters connectionParameters; - - try { - connectionParameters = getMmsConnectionParameters(context, apn, proxyIfPossible); - } catch (ApnUnavailableException aue) { - Log.w("MmsDownloadHelper", aue); - connectionParameters = new MmsConnectionParameters(null, null, null); - } + MmsConnectionParameters connectionParameters = getMmsConnectionParameters(context, apn, proxyIfPossible); checkRouteToHost(context, connectionParameters, url, usingMmsRadio); diff --git a/src/org/thoughtcrime/securesms/service/MmsDownloader.java b/src/org/thoughtcrime/securesms/service/MmsDownloader.java index 7224ec0c4d..687d004617 100644 --- a/src/org/thoughtcrime/securesms/service/MmsDownloader.java +++ b/src/org/thoughtcrime/securesms/service/MmsDownloader.java @@ -27,11 +27,17 @@ import org.thoughtcrime.securesms.crypto.DecryptingQueue; import org.thoughtcrime.securesms.crypto.MasterSecret; import org.thoughtcrime.securesms.database.DatabaseFactory; import org.thoughtcrime.securesms.database.MmsDatabase; +import org.thoughtcrime.securesms.database.model.NotificationMmsMessageRecord; +import org.thoughtcrime.securesms.mms.ApnUnavailableException; import org.thoughtcrime.securesms.mms.MmsDownloadHelper; import org.thoughtcrime.securesms.mms.MmsSendHelper; import org.thoughtcrime.securesms.notifications.MessageNotifier; import org.thoughtcrime.securesms.protocol.WirePrefix; +import java.io.IOException; +import java.util.LinkedList; +import java.util.List; + import ws.com.google.android.mms.InvalidHeaderValueException; import ws.com.google.android.mms.MmsException; import ws.com.google.android.mms.pdu.NotifyRespInd; @@ -39,10 +45,6 @@ import ws.com.google.android.mms.pdu.PduComposer; import ws.com.google.android.mms.pdu.PduHeaders; import ws.com.google.android.mms.pdu.RetrieveConf; -import java.io.IOException; -import java.util.LinkedList; -import java.util.List; - public class MmsDownloader extends MmscProcessor { private final LinkedList pendingMessages = new LinkedList(); @@ -66,6 +68,8 @@ public class MmsDownloader extends MmscProcessor { handleDownloadMmsAction(item); } else if (intent.getAction().equals(SendReceiveService.DOWNLOAD_MMS_CONNECTIVITY_ACTION)) { handleConnectivityChange(); + } else if (intent.getAction().equals(SendReceiveService.DOWNLOAD_MMS_PENDING_APN_ACTION)) { + handleMmsPendingApnDownloads(masterSecret); } } @@ -83,6 +87,28 @@ public class MmsDownloader extends MmscProcessor { else downloadMms(item); } + private void handleMmsPendingApnDownloads(MasterSecret masterSecret) { + if (!MmsDownloadHelper.isMmsConnectionParametersAvailable(context, null, false)) + return; + + MmsDatabase mmsDatabase = DatabaseFactory.getMmsDatabase(context); + MmsDatabase.Reader stalledMmsReader = mmsDatabase.getNotificationsWithDownloadState(masterSecret, + MmsDatabase.Status.DOWNLOAD_APN_UNAVAILABLE); + while (stalledMmsReader.getNext() != null) { + NotificationMmsMessageRecord stalledMmsRecord = (NotificationMmsMessageRecord) stalledMmsReader.getCurrent(); + + Intent intent = new Intent(SendReceiveService.DOWNLOAD_MMS_ACTION, null, context, SendReceiveService.class); + intent.putExtra("content_location", new String(stalledMmsRecord.getContentLocation())); + intent.putExtra("message_id", stalledMmsRecord.getId()); + intent.putExtra("transaction_id", stalledMmsRecord.getTransactionId()); + intent.putExtra("thread_id", stalledMmsRecord.getThreadId()); + intent.putExtra("automatic", true); + context.startService(intent); + } + + stalledMmsReader.close(); + } + private void downloadMmsWithRadioChange(DownloadItem item) { Log.w("MmsDownloader", "Handling MMS download with radio change..."); pendingMessages.add(item); @@ -107,6 +133,10 @@ public class MmsDownloader extends MmscProcessor { storeRetrievedMms(mmsDatabase, item, retrieved); sendRetrievedAcknowledgement(item); + } catch (ApnUnavailableException e) { + Log.w("MmsDownloader", e); + handleDownloadError(item, MmsDatabase.Status.DOWNLOAD_APN_UNAVAILABLE, + context.getString(R.string.MmsDownloader_error_reading_mms_settings)); } catch (IOException e) { Log.w("MmsDownloader", e); if (!item.useMmsRadioMode() && !item.proxyRequestIfPossible()) { @@ -188,18 +218,9 @@ public class MmsDownloader extends MmscProcessor { } private void handleDownloadError(List items, int downloadStatus, String error) { - MmsDatabase db = DatabaseFactory.getMmsDatabase(context); - for (DownloadItem item : items) { - db.markDownloadState(item.getMessageId(), downloadStatus); - - if (item.isAutomatic()) { - db.markIncomingNotificationReceived(item.getThreadId()); - MessageNotifier.updateNotification(context, item.getMasterSecret(), item.getThreadId()); - } + handleDownloadError(item, downloadStatus, error); } - - toastHandler.makeToast(error); } private void handleDownloadError(DownloadItem item, int downloadStatus, String error) { diff --git a/src/org/thoughtcrime/securesms/service/SendReceiveService.java b/src/org/thoughtcrime/securesms/service/SendReceiveService.java index ffbcb41cfe..0ab4214612 100644 --- a/src/org/thoughtcrime/securesms/service/SendReceiveService.java +++ b/src/org/thoughtcrime/securesms/service/SendReceiveService.java @@ -54,12 +54,14 @@ public class SendReceiveService extends Service { public static final String RECEIVE_MMS_ACTION = "org.thoughtcrime.securesms.SendReceiveService.RECEIVE_MMS_ACTION"; public static final String DOWNLOAD_MMS_ACTION = "org.thoughtcrime.securesms.SendReceiveService.DOWNLOAD_MMS_ACTION"; public static final String DOWNLOAD_MMS_CONNECTIVITY_ACTION = "org.thoughtcrime.securesms.SendReceiveService.DOWNLOAD_MMS_CONNECTIVITY_ACTION"; + public static final String DOWNLOAD_MMS_PENDING_APN_ACTION = "org.thoughtcrime.securesms.SendReceiveService.DOWNLOAD_MMS_PENDING_APN_ACTION"; private static final int SEND_SMS = 0; private static final int RECEIVE_SMS = 1; private static final int SEND_MMS = 2; private static final int RECEIVE_MMS = 3; private static final int DOWNLOAD_MMS = 4; + private static final int DOWNLOAD_MMS_PENDING = 5; private ToastHandler toastHandler; @@ -105,6 +107,8 @@ public class SendReceiveService extends Service { scheduleIntent(RECEIVE_MMS, intent); else if (intent.getAction().equals(DOWNLOAD_MMS_ACTION) || intent.getAction().equals(DOWNLOAD_MMS_CONNECTIVITY_ACTION)) scheduleSecretRequiredIntent(DOWNLOAD_MMS, intent); + else if (intent.getAction().equals(DOWNLOAD_MMS_PENDING_APN_ACTION)) + scheduleSecretRequiredIntent(DOWNLOAD_MMS_PENDING, intent); else Log.w("SendReceiveService", "Received intent with unknown action: " + intent.getAction()); } @@ -216,11 +220,12 @@ public class SendReceiveService extends Service { @Override public void run() { switch (what) { - case RECEIVE_SMS: smsReceiver.process(masterSecret, intent); return; - case SEND_SMS: smsSender.process(masterSecret, intent); return; - case RECEIVE_MMS: mmsReceiver.process(masterSecret, intent); return; - case SEND_MMS: mmsSender.process(masterSecret, intent); return; - case DOWNLOAD_MMS: mmsDownloader.process(masterSecret, intent); return; + case RECEIVE_SMS: smsReceiver.process(masterSecret, intent); return; + case SEND_SMS: smsSender.process(masterSecret, intent); return; + case RECEIVE_MMS: mmsReceiver.process(masterSecret, intent); return; + case SEND_MMS: mmsSender.process(masterSecret, intent); return; + case DOWNLOAD_MMS: mmsDownloader.process(masterSecret, intent); return; + case DOWNLOAD_MMS_PENDING: mmsDownloader.process(masterSecret, intent); return; } } }