diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index c7b3c4e06..4b83ea840 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -78,7 +78,7 @@
@@ -104,20 +104,21 @@
android:enabled="false"
>
+
+
-
+
-
-
-
+
+
+
-
+ android:layout_height="wrap_content"
+ android:paddingTop="5dip"
+ android:paddingLeft="4dip"
+ android:paddingRight="4dip"
+ android:paddingBottom="1dip"
+ android:background="@android:drawable/bottom_bar">
diff --git a/res/layout/account_setup_basics.xml b/res/layout/account_setup_basics.xml
index 6440fb8ff..31efc8551 100644
--- a/res/layout/account_setup_basics.xml
+++ b/res/layout/account_setup_basics.xml
@@ -29,15 +29,14 @@
+ android:layout_height="54dip"
+ android:background="@android:drawable/bottom_bar">
@@ -54,9 +53,10 @@
android:layout_width="fill_parent"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textColor="?android:attr/textColorPrimary" />
+
@@ -115,8 +115,8 @@
android:layout_weight="1" />
+ android:layout_height="54dip"
+ android:background="@android:drawable/bottom_bar">
+ android:layout_height="54dip"
+ android:background="@android:drawable/bottom_bar">
+ android:layout_height="54dip"
+ android:background="@android:drawable/bottom_bar">
+
@@ -96,8 +96,8 @@
android:layout_weight="1" />
+ android:layout_height="54dip"
+ android:background="@android:drawable/bottom_bar">
+ android:layout_height="54dip"
+ android:background="@android:drawable/bottom_bar">
+ android:inputType="textEmailSubject|textAutoCorrect|textCapSentences|textImeMultiLine" />
-
-
diff --git a/res/layout/message_view.xml b/res/layout/message_view.xml
index 8deab6d4e..9f1e3f8fa 100644
--- a/res/layout/message_view.xml
+++ b/res/layout/message_view.xml
@@ -60,25 +60,28 @@
+ android:layout_height="wrap_content"
+ android:paddingTop="5dip"
+ android:paddingLeft="4dip"
+ android:paddingRight="4dip"
+ android:paddingBottom="1dip"
+ android:background="@android:drawable/bottom_bar">
diff --git a/res/values-cs/arrays.xml b/res/values-cs/arrays.xml
deleted file mode 100644
index 1d337a8ec..000000000
--- a/res/values-cs/arrays.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-
-
-
-
-
-
-
-
-
-
- "-1"
- "5"
- "10"
- "15"
- "30"
- "60"
-
-
diff --git a/res/values-cs/build_number.xml b/res/values-cs/build_number.xml
deleted file mode 100644
index 4be95dcab..000000000
--- a/res/values-cs/build_number.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
- "20080722-0001"
-
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index 56d470df0..8f21b8fa0 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -95,7 +95,7 @@
"Nastavit e-mail""Váš účet je nastaven, e-mail je na cestě!""Pojmenovat tento účet (nepovinné)"
- "Vaše jméno (zobrazované na odchozích zprávách)"
+ "Vaše jméno (zobrazované v odchozích zprávách)""Přidat nový e-mailový účet""O jaký typ účtu se jedná?""Účet POP3"
@@ -143,9 +143,9 @@
"Nelze se připojit k serveru.""Nelze se připojit k serveru."\n"(%s)""Služba TLS je požadována, ale není podporována na serveru."
- "Metody ověřování nejsou na serveru podporovány."
+ "Server nepodporuje metody ověření.""Nelze navázat připojení k serveru z důvodu chyby zabezpečení."
- "Nelze otevřít připojení k serveru."
+ "Nelze navázat připojení k serveru.""Upravit podrobnosti""Obecná nastavení""Výchozí účet"
@@ -163,7 +163,8 @@
"Při příchodu e-mailu také vibrovat""Zvolit vyzváněcí tón""Nastavení serveru"
- "Odebrat"
+
+ "Účet %s bude z aplikace Email odebrán.""Přístup do schránky není u některých poštovních účtů Yahoo! podporován. Pokud máte problémy s připojením, získáte další informace na webové stránce yahoo.com.""Před nastavením tohoto e-mailového účtu přejděte na web Yahoo! a povolte u tohoto účtu e-mailový přístup POP3."
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index 30936e738..d121ac80a 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -68,8 +68,7 @@
"Sie müssen mindestens einen Empfänger hinzufügen.""Einige Anhänge können nicht weitergeleitet werden, da Sie noch nicht heruntergeladen wurden.""An:"
-
-
+ "Cc:""Öffnen""Speichern""Vorherige Nachricht"
@@ -88,18 +87,15 @@
"Passwort""E-Mails standardmäßig von diesem Konto senden""Manuelle Einrichtung"
-
-
+ "Geben Sie eine gültige E-Mail-Adresse und ein gültiges Passwort ein.""Kontoinformationen werden abgerufen...""Einstellungen des Eingangsservers werden überprüft...""Einstellungen des Ausgangsservers werden überprüft...""Vorgang wird abgebrochen...""E-Mail einrichten""Ihr Konto ist nun eingerichtet."
-
-
-
-
+ "Konto benennen (optional)"
+ "Ihr Name (wird für ausgehende Nachrichten angezeigt)""Neues E-Mail-Konto hinzufügen""Um welchen Kontotyp handelt es sich hierbei?""POP3-Konto"
@@ -116,8 +112,7 @@
"SSL (immer)""TLS (wenn verfügbar)""TLS (immer)"
-
-
+ "E-Mail von Server löschen""Nie""Nach 7 Tagen""Wenn ich sie aus dem Posteingang lösche"
@@ -143,20 +138,14 @@
"Einrichtung konnte nicht abgeschlossen werden""Nutzername oder Passwort falsch""Nutzername oder Password falsch"\n"(%s)"
-
-
+ "Keine sichere Verbindung zu Server möglich""Keine sichere Verbindung zum Server möglich"\n"(%s)"
-
-
+ "Keine Verbindung zu Server möglich""Keine Verbindung zum Server möglich"\n"(%s)"
-
-
-
-
-
-
-
-
+ "TLS erforderlich aber nicht von Server unterstützt"
+ "Authentifizierungsmethoden nicht von Server unterstützt"
+ "Verbindung zu Server kann aufgrund eines Sicherheitsfehlers nicht geöffnet werden."
+ "Verbindung zu Server kann nicht geöffnet werden""Details bearbeiten""Allgemeine Einstellungen""Standardkonto"
@@ -174,7 +163,8 @@
"Bei E-Mail-Eingang zusätzlich vibrieren""Klingelton auswählen""Servereinstellungen"
- "Entfernen"
+
+ "Das Konto \"%s\" wird aus Email entfernt.""Der Zugang zum Postfach bestimmter E-Mail-Konten von Yahoo! wird nicht unterstützt. Bei Verbindungsproblemen besuchen Sie die Website von Yahoo! für weitere Informationen.""Vor Eröffnung dieses E-Mail-Kontos bitte die Website von Yahoo! besuchen und E-Mail-Zugang über POP3 für dieses Konto aktivieren."
diff --git a/res/values-es/arrays.xml b/res/values-es/arrays.xml
deleted file mode 100644
index 1d337a8ec..000000000
--- a/res/values-es/arrays.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-
-
-
-
-
-
-
-
-
-
- "-1"
- "5"
- "10"
- "15"
- "30"
- "60"
-
-
diff --git a/res/values-es/build_number.xml b/res/values-es/build_number.xml
deleted file mode 100644
index 4be95dcab..000000000
--- a/res/values-es/build_number.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
- "20080722-0001"
-
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index f02cd3500..409c06be6 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -95,7 +95,7 @@
"Configurar correo electrónico""Tu cuenta ya está configurada y el correo electrónico está por llegar.""Asignar un nombre a esta cuenta (opcional)"
- "Tu nombre (aparecerá en los mensajes salientes)"
+ "Tu nombre (aparece en los mensajes salientes)""Añadir una cuenta de correo electrónico nueva""¿Qué tipo de cuenta es ésta?""Cuenta POP3"
@@ -163,7 +163,8 @@
"Vibrar también cuando llegue un mensaje""Seleccionar tono de llamada""Configuración del servidor"
- "Eliminar"
+
+ "Se va a eliminar la cuenta \"%s\" de \"Correo electrónico\".""Algunos tipos de cuentas de correo de Yahoo! no permiten acceder al buzón de correo. Si tienes problemas de conexión, visita yahoo.com para obtener información adicional al respecto.""Antes de configurar esta cuenta de correo electrónico, visita el sitio web de Yahoo! y habilita el acceso al correo electrónico POP3 para esta cuenta."
diff --git a/res/values-fr/arrays.xml b/res/values-fr/arrays.xml
deleted file mode 100644
index 1d337a8ec..000000000
--- a/res/values-fr/arrays.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-
-
-
-
-
-
-
-
-
-
- "-1"
- "5"
- "10"
- "15"
- "30"
- "60"
-
-
diff --git a/res/values-fr/build_number.xml b/res/values-fr/build_number.xml
deleted file mode 100644
index 4be95dcab..000000000
--- a/res/values-fr/build_number.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
- "20080722-0001"
-
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index 8fe1f8083..b7fb648d9 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -163,7 +163,8 @@
"Vibrer également lors de la réception d\'un e-mail""Sélectionner la sonnerie""Paramètres du serveur"
- "Supprimer"
+
+ "Le compte \"%s\" va être supprimé de votre messagerie.""L\'accès à la boîte aux lettres n\'est pas possible avec certains types de comptes Yahoo!. En cas de problème de connexion, consultez le site yahoo.fr pour obtenir plus d\'informations.""Avant de configurer ce compte de messagerie, veuillez consulter le site de Yahoo! et activer l\'accès POP3 pour ce compte."
diff --git a/res/values-it/arrays.xml b/res/values-it/arrays.xml
deleted file mode 100644
index 1d337a8ec..000000000
--- a/res/values-it/arrays.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-
-
-
-
-
-
-
-
-
-
- "-1"
- "5"
- "10"
- "15"
- "30"
- "60"
-
-
diff --git a/res/values-it/build_number.xml b/res/values-it/build_number.xml
deleted file mode 100644
index 4be95dcab..000000000
--- a/res/values-it/build_number.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
- "20080722-0001"
-
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index f1eb249b9..2d774a2d6 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -163,7 +163,8 @@
"Attiva anche vibrazione all\'arrivo di email""Seleziona suoneria""Impostazioni server"
- "Rimuovi"
+
+ "L\'account \"%s\" verrà rimosso da Email.""Accesso alla casella di posta non supportato per alcuni tipi di account di posta Yahoo!. Se hai problemi di connessione, visita il sito yahoo.com per ulteriori informazioni.""Prima di impostare questo account email, visita il sito web Yahoo! e attiva l\'accesso email POP3 per questo account."
diff --git a/res/values-ja/arrays.xml b/res/values-ja/arrays.xml
deleted file mode 100644
index 1d337a8ec..000000000
--- a/res/values-ja/arrays.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-
-
-
-
-
-
-
-
-
-
- "-1"
- "5"
- "10"
- "15"
- "30"
- "60"
-
-
diff --git a/res/values-ja/build_number.xml b/res/values-ja/build_number.xml
deleted file mode 100644
index 4be95dcab..000000000
--- a/res/values-ja/build_number.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
- "20080722-0001"
-
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index 09a58c00d..40ae3f84b 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -163,7 +163,8 @@
"メールの着信をバイブレーションでも知らせる""着信音を選択""サーバーの設定"
- "削除"
+
+ "アカウント「%s」をメールから削除します。""一部のタイプの Yahoo! メール アカウントでは、受信トレイへのアクセスがサポートされていません。接続できない場合は yahoo.com にアクセスして詳細をご確認ください。""このメールアカウントを設定する前に、Yahoo!サイトでこのアカウントのPOP3メールアクセスを有効にしてください。"
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
new file mode 100644
index 000000000..67ba29d11
--- /dev/null
+++ b/res/values-ko/strings.xml
@@ -0,0 +1,173 @@
+
+
+
+ "이메일 첨부파일 읽기"
+ "이 응용프로그램으로 이메일 첨부파일을 읽을 수 있습니다."
+ "이메일"
+ "사용자 계정"
+ "편지쓰기"
+ "디버그"
+ "다음"
+ "확인"
+ "취소"
+ "보내기"
+ "답장"
+ "전체답장"
+ "삭제"
+ "전달"
+ "완료"
+ "삭제"
+ "임시 저장"
+ "새로고침"
+ "계정 추가"
+ "편지쓰기"
+ "검색"
+ "열기"
+ "계정 설정"
+ "계정 삭제"
+ "계정"
+ "읽은 상태로 표시"
+ "읽지않은 상태로 표시"
+ "참조 및 숨은참조 추가"
+ "첨부파일 추가"
+ "덤프 설정"
+ "계정 옵션"
+ "메일 로드 중..."
+ "연결 오류"
+ "추가 메일 로드 재시도"
+ "새 이메일"
+ "읽지않은 메일 %d개(%s)"
+ "%d개 계정"
+ "받은편지함"
+ "이메일 설정에 오신 것을 환영합니다."\n\n"원하는 이메일 계정을 사용하세요."\n\n"가장 많이 사용하는 이메일 계정은 2단계 만에 설정할 수 있습니다."
+ "버전: %s"
+ "별도의 디버그 로깅 사용 여부"
+ "디버그 로깅 시 중요 정보 표시 여부(로그에 비밀번호가 표시될 수 있음)"
+ "추가 메일 로드"
+ "받는사람"
+ "참조"
+ "숨은참조"
+ "제목"
+ \n\n"-------- 원본 메일 --------"\n"제목: %s"\n"보낸사람: %s"\n"받는사람: %s"\n"참조: %s"\n\n
+ \n\n"%s님이 작성:"\n\n
+ "받은메일"
+ "받는 사람을 한 명 이상 추가해야 합니다."
+ "일부 첨부파일이 다운로드되지 않아 전달할 수 없습니다."
+ "받는사람:"
+ "참조:"
+ "열기"
+ "저장"
+ "이전 메일"
+ "다음 메일"
+ "첨부파일(%s)이 SD 카드에 저장되었습니다."
+ "SD 카드에 첨부파일을 저장할 수 없습니다."
+ "삽입된 사진을 표시하려면 \'사진 표시\'를 선택하세요."
+ "사진 표시"
+ "첨부파일을 가져오는 중입니다."
+ "메일이 삭제되었습니다."
+ "메일이 삭제되었습니다."
+ "메일을 임시로 저장했습니다."
+ "이메일 설정"
+ "계정 이메일 주소 입력:"
+ "이메일 주소"
+ "비밀번호"
+ "기본적으로 이 계정에서 이메일 전송"
+ "수동 설정"
+ "올바른 이메일 주소와 비밀번호를 입력하세요."
+ "계정 정보 검색 중..."
+ "받는 서버 설정 확인 중..."
+ "보내는 서버 설정 확인 중..."
+ "취소하는 중..."
+ "이메일 설정"
+ "계정이 설정되었으며 이메일이 작동됩니다."
+ "계정 이름 입력(선택사항)"
+ "발신 메일에 표시할 이름"
+ "새 이메일 계정 추가"
+ "계정 유형"
+ "POP3 계정"
+ "IMAP 계정"
+ "받는 서버 설정"
+ "사용자 이름"
+ "비밀번호"
+ "POP3 서버"
+ "IMAP 서버"
+ "포트"
+ "보안 유형"
+ "없음"
+ "SSL(제공되는 경우)"
+ "SSL(항상)"
+ "TLS(제공되는 경우)"
+ "TLS(항상)"
+ "서버에서 이메일 삭제"
+ "삭제 안함"
+ "7일 후"
+ "받은편지함에서 삭제할 때"
+ "IMAP 경로 접두어(prefix)"
+ "선택사항"
+ "보내는 서버 설정"
+ "SMTP 서버"
+ "포트"
+ "보안 유형"
+ "로그인해야 함"
+ "사용자 이름"
+ "비밀번호"
+ "계정 옵션"
+ "이메일 확인 빈도"
+ "안함"
+ "5분마다"
+ "10분마다"
+ "15분마다"
+ "30분마다"
+ "1시간마다"
+ "기본적으로 이 계정에서 이메일 전송"
+ "이메일 도착 시 알림"
+ "설정을 완료할 수 없음"
+ "사용자 이름 또는 비밀번호가 잘못되었습니다."
+ "잘못된 사용자 이름 또는 비밀번호"\n"(%s)"
+ "서버에 안전하게 연결할 수 없습니다."
+ "서버에 안전하게 연결할 수 없습니다."\n"(%s)"
+ "서버에 연결할 수 없습니다."
+ "서버에 연결할 수 없습니다."\n"(%s)"
+ "TLS가 필요하지만 서버에서 지원하지 않습니다."
+ "인증 방법이 서버에서 지원되지 않습니다."
+ "보안 오류로 서버에 연결할 수 없습니다."
+ "서버에 연결할 수 없습니다."
+ "세부정보 수정"
+ "기본설정"
+ "기본 계정"
+ "기본적으로 이 계정에서 이메일 전송"
+ "이메일 알림"
+ "이메일 도착 시 상태 표시줄에서 알림"
+ "이메일 확인 빈도"
+ "수신 설정"
+ "발신 설정"
+ "다른 계정 추가"
+ "계정 이름"
+ "이름"
+ "알림 설정"
+ "진동"
+ "이메일 도착 시 진동"
+ "벨소리 선택"
+ "서버 설정"
+
+
+ "계정(%s)이 이메일에서 삭제됩니다."
+ "일부 Yahoo! 메일 계정의 경우 편지함에 액세스할 수 없습니다. 접속에 문제가 있을 경우 자세한 정보는 yahoo.com을 참조하세요."
+ "이메일 계정을 설정하기 전에 Yahoo! 웹사이트를 방문하여 이 계정에 대한 POP3 이메일 액세스를 사용 설정하세요."
+ "일부 \'Plus\' 계정에만 이 프로그램을 연결할 수 있는 POP 액세스 권한이 있습니다. 올바른 이메일 주소와 비밀번호를 입력해도 로그인이 되지 않으면 \'Plus\' 계정 사용료가 미납되었을 수 있습니다. 이러한 메일 계정에 액세스하려면 웹브라우저를 실행하세요."
+ "이메일 계정을 설정하기 전에 T-Online 웹사이트를 방문하여 POP3 이메일 액세스에 대한 비밀번호를 만드세요."
+
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
new file mode 100644
index 000000000..652b35284
--- /dev/null
+++ b/res/values-nb/strings.xml
@@ -0,0 +1,172 @@
+
+
+
+ "lese e-post-vedlegg"
+ "Tillat applikasjonen å lese e-post-vedleggene dine."
+ "E-post"
+ "Dine kontoer"
+ "Skriv e-post"
+ "Debug"
+ "Neste"
+ "OK"
+ "Avbryt"
+ "Send"
+ "Svar"
+ "Svar alle"
+ "Slett"
+ "Videresend"
+ "Ferdig"
+ "Forkast"
+ "Lagre som utkast"
+ "Oppdater"
+ "Legg til konto"
+ "Skriv e-post"
+ "Søk"
+ "Åpne"
+ "Kontoinnstillinger"
+ "Fjern konto"
+ "Kontoer"
+ "Merk som lest"
+ "Merk som ulest"
+ "Legg til kopi/blindkopi"
+ "Legg til vedlegg"
+ "Dump settings"
+ "Kontoinnstillinger"
+ "Henter meldinger…"
+ "Feil ved tilkobling"
+ "Prøv på nytt å hente flere meldinger"
+ "Ny e-post"
+ "%d ulest(e) (%s)"
+ "i %d kontoer"
+ "Innboks"
+ "Velkommen til e-post-oppsettet!"\n\n"Du kan bruke hvilken som helst e-postkonto."\n\n"De fleste vanlige e-postkontoer kan settes opp i to trinn!"
+ "Version: %s"
+ "Enable extra debug logging?"
+ "Enable sensitive information debug logging? (May show passwords in logs.)"
+ "Hent flere meldinger"
+ "Til"
+ "Kopi"
+ "Blindkopi"
+ "Emne"
+ \n\n"-------- Original Message --------"\n"Subject: %s"\n"From: %s"\n"To: %s"\n"CC: %s"\n\n
+ \n\n"%s:"\n\n
+ "Sitert tekst"
+ "Du må legge til minst én mottager."
+ "Noen vedlegg kunne ikke sendes videre fordi de ikke er blitt lastet ned."
+ "Til:"
+ "Kopi:"
+ "Åpne"
+ "Lagre"
+ "Forrige melding"
+ "Neste melding"
+ "Vedlegget ble lagret til minnekortet som %s."
+ "Kunne ikke lagre vedlegget til minnekort."
+ "Velg \\\"Vis bilder\\\" for å vise vedlagte bilder."
+ "Vis bilder"
+ "Henter vedlegg."
+ "Meldingen ble slettet."
+ "Meldingen ble forkastet."
+ "Meldingen ble lagret som utkast."
+ "Sett opp e-post"
+ "Skriv e-postadressen til kontoen din:"
+ "E-postadresse"
+ "Passord"
+ "Bruk denne kontoen som standard for utgående e-post."
+ "Manuelt oppsett"
+ "Skriv inn en gyldig e-postadresse og passord."
+ "Henter kontoinformasjon…"
+ "Sjekker tjenerinnstillinger for inngående e-post…"
+ "Sjekker tjenerinnstillinger for utgående e-post…"
+ "Avbryter…"
+ "Sett opp e-post"
+ "Kontoen er satt opp, og e-post er på vei!"
+ "Gi denne kontoen et navn (valgfritt)"
+ "Navnet ditt (vises i utgående meldinger)"
+ "Legg til ny e-postkonto"
+ "Hva slags konto er dette?"
+ "POP3-konto"
+ "IMAP-konto"
+ "Tjenerinnstillinger for inngående e-post"
+ "Brukernavn"
+ "Passord"
+ "POP3-tjener"
+ "IMAP-tjener"
+ "Port"
+ "Sikkerhetstype"
+ "Ingen"
+ "SSL (hvis tilgjengelig)"
+ "SSL (alltid)"
+ "TLS (hvis tilgjengelig)"
+ "TLS (alltid)"
+ "Slett e-post fra tjener"
+ "Aldri"
+ "Etter en uke"
+ "Når jeg sletter den fra innboksen"
+ "IMAP-stiprefiks"
+ "Valgfritt"
+ "Tjenerinnstillinger for utgående e-post"
+ "SMTP-tjener"
+ "Port"
+ "Sikkerhetstype"
+ "Krev innlogging."
+ "Brukernavn"
+ "Passord"
+ "Kontoinnstillinger"
+ "Hvor ofte e-post skal sjekkes"
+ "Aldri"
+ "Hvert 5. minutt"
+ "Hvert 10. minutt"
+ "Hvert 15. minutt"
+ "Hvert 30. minutt"
+ "Hver time"
+ "Bruk denne kontoen som standard for utgående e-post."
+ "Varsle når det kommer e-post."
+ "Kunne ikke fullføre oppsettet"
+ "Feil brukernavn eller passord."
+ "Feil brukernavn eller passord."\n"(%s)"
+ "Kan ikke åpne en sikker tilkobling til tjeneren."
+ "Kan ikke åpne en sikker tilkobling til tjeneren."\n"(%s)"
+ "Kan ikke koble til tjeneren."
+ "Kan ikke koble til tjeneren."\n"(%s)"
+ "TLS påkrevd, men tjeneren støtter det ikke."
+ "Tjeneren støtter ikke de påkrevde autentiseringsmetodene."
+ "Kunne ikke koble til tjeneren på grunn av sikkerhetsfeil."
+ "Kunne ikke koble til tjeneren."
+ "Rediger detaljer"
+ "Generelle innstillinger"
+ "Standardkonto"
+ "Bruk denne kontoen som standard for utgående e-post."
+ "Varsling om e-post"
+ "Varsle i statusfeltet når det kommer e-post"
+ "Hvor ofte det skal sjekkes etter e-post"
+ "Inngående innstillinger"
+ "Utgående innstillinger"
+ "Legg til en annen konto"
+ "Kontonavn"
+ "Ditt navn"
+ "Innstillinger for varsling"
+ "Vibrer"
+ "Vibrer når det kommer e-post"
+ "Velg ringetone"
+ "Innstillinger for tjener"
+ "Fjern"
+ "Kontoen \\\"%s\\\" vil bli fjernet fra e-postapplikasjonen."
+ "E-posttilgang er ikke støttet for enkelte typer Yahoo!-e-postkontoer. Hvis du har problemer med å koble til, besøk yahoo.com for mer informasjon."
+ "Før du setter opp denne e-postkontoen, må du gå til Yahoo!-nettsiden og slå på POP3-tilgang for den."
+ "Bare noen \\\"pluss-kontoer tilbyr POP-tilgangBREAK_0 som dette programmet trenger for å koble til. Hvis du ikke klarer å logge innBREAK_1 med riktig e-postadresse og passord, kan det være du ikke har en betaltBREAK_2 \\\"pluss-tilgang. Start nettleseren for å få tilgang til slike e-postkontoer."
+ "Før du setter opp denne e-postkontoen, besøk T-Online-nettsiden og velg et passord for e-posttilgang via POP3."
+
diff --git a/res/values-nl/arrays.xml b/res/values-nl/arrays.xml
deleted file mode 100644
index 1d337a8ec..000000000
--- a/res/values-nl/arrays.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-
-
-
-
-
-
-
-
-
-
- "-1"
- "5"
- "10"
- "15"
- "30"
- "60"
-
-
diff --git a/res/values-nl/build_number.xml b/res/values-nl/build_number.xml
deleted file mode 100644
index 4be95dcab..000000000
--- a/res/values-nl/build_number.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
- "20080722-0001"
-
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index 175151f49..581b7a637 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -163,7 +163,8 @@
"Ook trillen bij ontvangst van e-mail""Beltoon selecteren""Serverinstellingen"
- "Verwijderen"
+
+ "De account %s wordt verwijderd van E-mail""Toegang tot postvakken wordt niet ondersteund door sommige typen Yahoo!-mailaccounts. Als er problemen ontstaan bij het verbinden, ga je naar yahoo.com voor meer informatie.""Ga voordat je deze e-mailaccount instelt naar de website van Yahoo! en schakel toegang met POP3 in voor deze account."
diff --git a/res/values-pl/arrays.xml b/res/values-pl/arrays.xml
deleted file mode 100644
index 1d337a8ec..000000000
--- a/res/values-pl/arrays.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-
-
-
-
-
-
-
-
-
-
- "-1"
- "5"
- "10"
- "15"
- "30"
- "60"
-
-
diff --git a/res/values-pl/build_number.xml b/res/values-pl/build_number.xml
deleted file mode 100644
index 4be95dcab..000000000
--- a/res/values-pl/build_number.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
- "20080722-0001"
-
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index a275c3d00..cb5022d87 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -95,7 +95,7 @@
"Konfiguracja konta e-mail""Konto zostało skonfigurowane, a wiadomości e-mail są w drodze!""Nazwa konta (opcjonalnie)"
- "Imię i nazwisko (wyświetlane w wiadomościach wychodzących)"
+ "Twoje nazwisko (wyświetlane w wiadomościach wychodzących)""Dodaj nowe konto e-mail""Jakiego typu jest to konto?""Konto POP3"
@@ -144,7 +144,7 @@
"Nie można nawiązać połączenia z serwerem."\n"(%s)""Wymagane połączenie TLS nie jest obsługiwane przez serwer.""Serwer nie obsługuje metod uwierzytelniania."
- "Nie można nawiązać połączenia z serwerem z powodu wystąpienia błędu zabezpieczeń."
+ "Nie można nawiązać połączenia z serwerem z powodu błędu zabezpieczeń.""Nie można nawiązać połączenia z serwerem.""Edytuj szczegóły""Ustawienia ogólne"
@@ -163,7 +163,8 @@
"Sygnalizuj wibracjami otrzymanie wiadomości e-mail""Wybierz dzwonek""Ustawienia serwera"
- "Usuń"
+
+ "Konto %s zostanie usunięte z usługi poczty e-mail.""Dostęp do skrzynki pocztowej nie jest obsługiwany w przypadku kilku typów kont pocztowych w usłudze Yahoo! Jeśli podczas nawiązywania połączenia występują problemy, odwiedź witrynę yahoo.com w celu uzyskania dodatkowych informacji.""Przed skonfigurowaniem tego konta e-mail odwiedź witrynę usługi Yahoo! i włącz dostęp do poczty POP3."
diff --git a/res/values-ru/arrays.xml b/res/values-ru/arrays.xml
deleted file mode 100644
index 1d337a8ec..000000000
--- a/res/values-ru/arrays.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-
-
-
-
-
-
-
-
-
-
- "-1"
- "5"
- "10"
- "15"
- "30"
- "60"
-
-
diff --git a/res/values-ru/build_number.xml b/res/values-ru/build_number.xml
deleted file mode 100644
index 4be95dcab..000000000
--- a/res/values-ru/build_number.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
- "20080722-0001"
-
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index a96a70586..76dc34e00 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -87,7 +87,7 @@
"Пароль""По умолчанию отправлять почту с данного аккаунта.""Ручная настройка"
- "Укажите правильный адрес электронной почты и пароль."
+ "Укажите правильные адрес электронной почты и пароль.""Получение информации об аккаунте...""Проверка настроек сервера входящей почты...""Проверка настроек сервера исходящей почты..."
@@ -95,7 +95,7 @@
"Настройка электронной почты""Ваш аккаунт настроен, электронная почта работает.""Указать название этого аккаунта (необязательно)"
- "Ваше имя (будет показано в исходящих письмах)"
+ "Ваше имя (отображается в исходящих письмах)""Добавить новый аккаунт электронной почты""К какому типу принадлежит этот аккаунт?""Аккаунт POP3"
@@ -143,7 +143,7 @@
"Не удается подключиться к серверу.""Не удается подключиться к серверу."\n"(%s)""TLS требуется, но не поддерживается сервером."
- "Методы проверки подлинности не поддерживаются сервером."
+ "Сервер не поддерживает методы аутентификации.""Не удается установить соединение с сервером из-за ошибки безопасности.""Не удается установить соединение с сервером.""Изменить подробную информацию"
@@ -163,7 +163,8 @@
"Также включить вибрацию при получении почты""Выбрать мелодию""Настройки сервера"
- "Удалить"
+
+ "Аккаунт \"%s\" будет удален из системы электронной почты.""Доступ к почтовому ящику для некоторых типов почтовых аккаунтов Yahoo! не поддерживается. Если при подключении возникли проблемы, см. дополнительные сведения на yahoo.com.""Чтобы настроить этот аккаунт электронной почты, перейдите на веб-сайт Yahoo! и включите для этого аккаунта доступ по протоколу POP3."
diff --git a/res/values-zh-rCN/arrays.xml b/res/values-zh-rCN/arrays.xml
deleted file mode 100644
index 1d337a8ec..000000000
--- a/res/values-zh-rCN/arrays.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-
-
-
-
-
-
-
-
-
-
- "-1"
- "5"
- "10"
- "15"
- "30"
- "60"
-
-
diff --git a/res/values-zh-rCN/build_number.xml b/res/values-zh-rCN/build_number.xml
deleted file mode 100644
index 4be95dcab..000000000
--- a/res/values-zh-rCN/build_number.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
- "20080722-0001"
-
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index 17cd2fd1c..33d06eef9 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -163,7 +163,8 @@
"收到电子邮件时发出振动""选择铃声""服务器设置"
- "删除"
+
+ "帐户“%s”将从电子邮件中删除。""某些类型的 Yahoo! 邮件帐户不支持邮箱访问。如果您在连接时遇到问题,请访问 yahoo.com 了解更多信息。""在设置此电子邮件帐户之前,请访问 Yahoo! 网站,并为此帐户启用 POP3 电子邮件服务。"
diff --git a/res/values-zh-rTW/arrays.xml b/res/values-zh-rTW/arrays.xml
deleted file mode 100644
index 1d337a8ec..000000000
--- a/res/values-zh-rTW/arrays.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-
-
-
-
-
-
-
-
-
-
- "-1"
- "5"
- "10"
- "15"
- "30"
- "60"
-
-
diff --git a/res/values-zh-rTW/build_number.xml b/res/values-zh-rTW/build_number.xml
deleted file mode 100644
index 4be95dcab..000000000
--- a/res/values-zh-rTW/build_number.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
- "20080722-0001"
-
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index 9f3ff7326..415429c20 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -144,7 +144,7 @@
"無法連線至伺服器。"\n"(%s)""必須使用 TLS,但此伺服器不支援。""伺服器不支援這些驗證方法。"
- "無法連線至伺服器,因為發生安全性錯誤。"
+ "發生安全性錯誤,無法連線至伺服器。""無法連線至伺服器。""編輯詳細資訊""一般設定"
@@ -163,7 +163,8 @@
"收到電子郵件時也振動""選取鈴聲""伺服器設定"
- "移除"
+
+ "系統將從 [電子郵件] 中移除帳戶「%s」。""不支援某些類型的 Yahoo! 郵件帳戶信箱。如果您無法順利連線,請造訪 yahoo.com 以取得詳細資訊。""在設定此電子郵件帳戶前,請先造訪 Yahoo! 網站,並啟用這個帳戶的 POP3 電子郵件收發功能。"
diff --git a/res/values/arrays.xml b/res/values/arrays.xml
index b93612329..cdf14b159 100644
--- a/res/values/arrays.xml
+++ b/res/values/arrays.xml
@@ -30,7 +30,7 @@
@string/account_setup_options_mail_check_frequency_1hour
-
+ -1510
diff --git a/res/values/build_number.xml b/res/values/build_number.xml
index d5ca53feb..9c414d2a2 100644
--- a/res/values/build_number.xml
+++ b/res/values/build_number.xml
@@ -15,5 +15,5 @@
-->
- 20080722-0001
+ 20080722-0001
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 5c7086b85..d57727d11 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -344,7 +344,7 @@
Server settings
- Remove
+ Remove accountThe account \"%s\" will be removed from Email.
diff --git a/res/xml/providers.xml b/res/xml/providers.xml
index c97afa3a8..21fc17bc8 100644
--- a/res/xml/providers.xml
+++ b/res/xml/providers.xml
@@ -244,20 +244,20 @@
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
diff --git a/src/com/android/email/activity/Accounts.java b/src/com/android/email/activity/Accounts.java
index ad284ea95..c2c6521de 100644
--- a/src/com/android/email/activity/Accounts.java
+++ b/src/com/android/email/activity/Accounts.java
@@ -163,6 +163,7 @@ public class Accounts extends ListActivity implements OnItemClickListener, OnCli
private Dialog createRemoveAccountDialog() {
return new AlertDialog.Builder(this)
+ .setIcon(android.R.drawable.ic_dialog_alert)
.setTitle(R.string.account_delete_dlg_title)
.setMessage(getString(R.string.account_delete_dlg_instructions_fmt,
mSelectedContextAccount.getDescription()))
diff --git a/src/com/android/email/activity/MessageCompose.java b/src/com/android/email/activity/MessageCompose.java
index 27590c29f..c0a10b6a0 100644
--- a/src/com/android/email/activity/MessageCompose.java
+++ b/src/com/android/email/activity/MessageCompose.java
@@ -17,8 +17,11 @@
package com.android.email.activity;
import java.io.Serializable;
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
import java.util.ArrayList;
import java.util.Date;
+import java.util.List;
import android.app.Activity;
import android.content.ActivityNotFoundException;
@@ -352,65 +355,27 @@ public class MessageCompose extends Activity implements OnClickListener, OnFocus
Intent intent = getIntent();
String action = intent.getAction();
-
- if (Intent.ACTION_VIEW.equals(action) || Intent.ACTION_SENDTO.equals(action)) {
- /*
- * Someone has clicked a mailto: link. The address is in the URI.
- */
+
+ // Handle the various intents that launch the message composer
+ if (Intent.ACTION_VIEW.equals(action) || Intent.ACTION_SENDTO.equals(action) ||
+ (Intent.ACTION_SEND.equals(action))) {
+
+ // Check first for a valid account
mAccount = Preferences.getPreferences(this).getDefaultAccount();
if (mAccount == null) {
- /*
- * There are no accounts set up. This should not have happened. Prompt the
- * user to set up an account as an acceptable bailout.
- */
+ // There are no accounts set up. This should not have happened. Prompt the
+ // user to set up an account as an acceptable bailout.
Accounts.actionShowAccounts(this);
mDraftNeedsSaving = false;
finish();
return;
}
- if (intent.getData() != null) {
- Uri uri = intent.getData();
- try {
- if (uri.getScheme().equalsIgnoreCase("mailto")) {
- Address[] addresses = Address.parse(uri.getSchemeSpecificPart());
- addAddresses(mToView, addresses);
- }
- }
- catch (Exception e) {
- /*
- * If we can't extract any information from the URI it's okay. They can
- * still compose a message.
- */
- }
- }
- }
- else if (Intent.ACTION_SEND.equals(action)) {
- /*
- * Someone is trying to compose an email with an attachment, probably Pictures.
- * The Intent should contain an EXTRA_STREAM with the data to attach.
- */
-
- mAccount = Preferences.getPreferences(this).getDefaultAccount();
- if (mAccount == null) {
- /*
- * There are no accounts set up. This should not have happened. Prompt the
- * user to set up an account as an acceptable bailout.
- */
- Accounts.actionShowAccounts(this);
- mDraftNeedsSaving = false;
- finish();
- return;
- }
-
- String type = intent.getType();
- Uri stream = (Uri) intent.getParcelableExtra(Intent.EXTRA_STREAM);
- if (stream != null && type != null) {
- if (MimeUtility.mimeTypeMatches(type, Email.ACCEPTABLE_ATTACHMENT_SEND_TYPES)) {
- addAttachment(stream);
- }
- }
+
+ // Use the fields found in the Intent to prefill as much of the message as possible
+ initFromIntent(intent);
}
else {
+ // Otherwise, handle the internal cases (Message Composer invoked from within app)
mAccount = (Account) intent.getSerializableExtra(EXTRA_ACCOUNT);
mFolder = intent.getStringExtra(EXTRA_FOLDER);
mSourceMessageUid = intent.getStringExtra(EXTRA_MESSAGE);
@@ -528,11 +493,20 @@ public class MessageCompose extends Activity implements OnClickListener, OnFocus
return;
}
for (Address address : addresses) {
- addAddress(view, address);
+ addAddress(view, address.toString());
+ }
+ }
+
+ private void addAddresses(MultiAutoCompleteTextView view, String[] addresses) {
+ if (addresses == null) {
+ return;
+ }
+ for (String oneAddress : addresses) {
+ addAddress(view, oneAddress);
}
}
- private void addAddress(MultiAutoCompleteTextView view, Address address) {
+ private void addAddress(MultiAutoCompleteTextView view, String address) {
view.append(address + ", ");
}
@@ -902,13 +876,149 @@ public class MessageCompose extends Activity implements OnClickListener, OnFocus
return true;
}
}
+
+ /**
+ * Fill all the widgets with the content found in the Intent Extra, if any.
+ *
+ * Note that we don't actually check the intent action (typically VIEW, SENDTO, or SEND).
+ * There is enough overlap in the definitions that it makes more sense to simply check for
+ * all available data and use as much of it as possible.
+ *
+ * With one exception: EXTRA_STREAM is defined as only valid for ACTION_SEND.
+ *
+ * @param intent the launch intent
+ */
+ /* package */ void initFromIntent(Intent intent) {
+
+ // First, add values stored in top-level extras
+
+ String[] extraStrings = intent.getStringArrayExtra(Intent.EXTRA_EMAIL);
+ if (extraStrings != null) {
+ addAddresses(mToView, extraStrings);
+ }
+ extraStrings = intent.getStringArrayExtra(Intent.EXTRA_CC);
+ if (extraStrings != null) {
+ addAddresses(mCcView, extraStrings);
+ }
+ extraStrings = intent.getStringArrayExtra(Intent.EXTRA_BCC);
+ if (extraStrings != null) {
+ addAddresses(mBccView, extraStrings);
+ }
+ String extraString = intent.getStringExtra(Intent.EXTRA_SUBJECT);
+ if (extraString != null) {
+ mSubjectView.setText(extraString);
+ }
+
+ // Next, if we were invoked with a URI, try to interpret it
+ // We'll take two courses here. If it's mailto:, there is a specific set of rules
+ // that define various optional fields. However, for any other scheme, we'll simply
+ // take the entire scheme-specific part and interpret it as a possible list of addresses.
+
+ final Uri dataUri = intent.getData();
+ if (dataUri != null) {
+ if ("mailto".equals(dataUri.getScheme())) {
+ initializeFromMailTo(dataUri.toString());
+ } else {
+ String toText = dataUri.getSchemeSpecificPart();
+ if (toText != null) {
+ addAddresses(mToView, toText.split(","));
+ }
+ }
+ }
+
+ // Next, fill in the plaintext (note, this will override mailto:?body=)
+
+ CharSequence text = intent.getCharSequenceExtra(Intent.EXTRA_TEXT);
+ if (text != null) {
+ mMessageContentView.setText(text);
+ }
+
+ // Next, convert EXTRA_STREAM into an attachment
+
+ if (Intent.ACTION_SEND.equals(intent.getAction()) && intent.hasExtra(Intent.EXTRA_STREAM)) {
+ String type = intent.getType();
+ Uri stream = (Uri) intent.getParcelableExtra(Intent.EXTRA_STREAM);
+ if (stream != null && type != null) {
+ if (MimeUtility.mimeTypeMatches(type, Email.ACCEPTABLE_ATTACHMENT_SEND_TYPES)) {
+ addAttachment(stream);
+ }
+ }
+ }
+
+ // Finally - expose fields that were filled in but are normally hidden, and set focus
+
+ if (mCcView.length() > 0) {
+ mCcView.setVisibility(View.VISIBLE);
+ }
+ if (mBccView.length() > 0) {
+ mBccView.setVisibility(View.VISIBLE);
+ }
+ setNewMessageFocus();
+ mDraftNeedsSaving = false;
+ }
+
+ /**
+ * When we are launched with an intent that includes a mailto: URI, we can actually
+ * gather quite a few of our message fields from it.
+ *
+ * @mailToString the href (which must start with "mailto:").
+ */
+ private void initializeFromMailTo(String mailToString) {
+
+ // Chop up everything between mailto: and ? to find recipients
+ int index = mailToString.indexOf("?");
+ int length = "mailto".length() + 1;
+ String to;
+ try {
+ // Extract the recipient after mailto:
+ if (index == -1) {
+ to = decode(mailToString.substring(length));
+ } else {
+ to = decode(mailToString.substring(length, index));
+ }
+ addAddresses(mToView, to.split(" ,"));
+ } catch (UnsupportedEncodingException e) {
+ Log.e(Email.LOG_TAG, e.getMessage() + " while decoding '" + mailToString + "'");
+ }
+
+ // Extract the other parameters
+
+ // We need to disguise this string as a URI in order to parse it
+ Uri uri = Uri.parse("foo://" + mailToString);
+
+ List cc = uri.getQueryParameters("cc");
+ addAddresses(mCcView, cc.toArray(new String[cc.size()]));
+
+ List otherTo = uri.getQueryParameters("to");
+ addAddresses(mCcView, otherTo.toArray(new String[otherTo.size()]));
+
+ List bcc = uri.getQueryParameters("bcc");
+ addAddresses(mBccView, bcc.toArray(new String[bcc.size()]));
+
+ List subject = uri.getQueryParameters("subject");
+ if (subject.size() > 0) {
+ mSubjectView.setText(subject.get(0));
+ }
+
+ List body = uri.getQueryParameters("body");
+ if (body.size() > 0) {
+ mMessageContentView.setText(body.get(0));
+ }
+ }
+
+ private String decode(String s) throws UnsupportedEncodingException {
+ return URLDecoder.decode(s, "UTF-8");
+ }
/**
* Pull out the parts of the now loaded source message and apply them to the new message
* depending on the type of message being composed.
* @param message
*/
- /* package */ void processSourceMessage(Message message) {
+ /* package */ /**
+ * @param message
+ */
+ void processSourceMessage(Message message) {
String action = getIntent().getAction();
if (ACTION_REPLY.equals(action) || ACTION_REPLY_ALL.equals(action)) {
try {
@@ -933,13 +1043,13 @@ public class MessageCompose extends Activity implements OnClickListener, OnFocus
if (ACTION_REPLY_ALL.equals(action)) {
for (Address address : message.getRecipients(RecipientType.TO)) {
if (!address.getAddress().equalsIgnoreCase(mAccount.getEmail())) {
- addAddress(mToView, address);
+ addAddress(mToView, address.toString());
}
}
if (message.getRecipients(RecipientType.CC).length > 0) {
for (Address address : message.getRecipients(RecipientType.CC)) {
if (!Utility.arrayContains(replyToAddresses, address)) {
- addAddress(mCcView, address);
+ addAddress(mCcView, address.toString());
}
}
mCcView.setVisibility(View.VISIBLE);
@@ -1029,12 +1139,21 @@ public class MessageCompose extends Activity implements OnClickListener, OnFocus
}
}
- // In order to accelerate typing, position the cursor in the first empty field,
- // or at the end of the body composition field if none are empty. Typically, this will
- // play out as follows:
- // Reply / Reply All - put cursor in the empty message body
- // Forward - put cursor in the empty To field
- // Edit Draft - put cursor in whatever field still needs entry
+ setNewMessageFocus();
+
+ mSourceMessageProcessed = true;
+ mDraftNeedsSaving = false;
+ }
+
+ /**
+ * In order to accelerate typing, position the cursor in the first empty field,
+ * or at the end of the body composition field if none are empty. Typically, this will
+ * play out as follows:
+ * Reply / Reply All - put cursor in the empty message body
+ * Forward - put cursor in the empty To field
+ * Edit Draft - put cursor in whatever field still needs entry
+ */
+ private void setNewMessageFocus() {
if (mToView.length() == 0) {
mToView.requestFocus();
} else if (mSubjectView.length() == 0) {
@@ -1046,9 +1165,6 @@ public class MessageCompose extends Activity implements OnClickListener, OnFocus
int selection = mMessageContentView.length();
mMessageContentView.setSelection(selection, selection);
}
-
- mSourceMessageProcessed = true;
- mDraftNeedsSaving = false;
}
class Listener extends MessagingListener {
diff --git a/src/com/android/email/activity/setup/AccountSetupBasics.java b/src/com/android/email/activity/setup/AccountSetupBasics.java
index adf694645..fcd9ce7cc 100644
--- a/src/com/android/email/activity/setup/AccountSetupBasics.java
+++ b/src/com/android/email/activity/setup/AccountSetupBasics.java
@@ -48,6 +48,7 @@ import com.android.email.EmailAddressValidator;
import com.android.email.Preferences;
import com.android.email.R;
import com.android.email.Utility;
+import com.android.email.activity.Debug;
/**
* Prompts the user for the email address and password. Also prompts for
@@ -59,6 +60,7 @@ import com.android.email.Utility;
*/
public class AccountSetupBasics extends Activity
implements OnClickListener, TextWatcher {
+ private final static boolean ENTER_DEBUG_SCREEN = true;
private final static String EXTRA_ACCOUNT = "com.android.email.AccountSetupBasics.account";
private final static int DIALOG_NOTE = 1;
private final static String STATE_KEY_PROVIDER =
@@ -180,6 +182,8 @@ public class AccountSetupBasics extends Activity
if (id == DIALOG_NOTE) {
if (mProvider != null && mProvider.note != null) {
return new AlertDialog.Builder(this)
+ .setIcon(android.R.drawable.ic_dialog_alert)
+ .setTitle(android.R.string.dialog_alert_title)
.setMessage(mProvider.note)
.setPositiveButton(
getString(R.string.okay_action),
@@ -294,6 +298,14 @@ public class AccountSetupBasics extends Activity
String[] emailParts = email.split("@");
String user = emailParts[0].trim();
String domain = emailParts[1].trim();
+
+ // Alternate entry to the debug options screen (for devices without a physical keyboard:
+ // Username: d@d
+ // Password: debug
+ if (ENTER_DEBUG_SCREEN && "d@d".equals(email) && "debug".equals(password)) {
+ startActivity(new Intent(this, Debug.class));
+ return;
+ }
mAccount = new Account(this);
mAccount.setName(getOwnerName());
diff --git a/src/com/android/email/activity/setup/AccountSetupCheckSettings.java b/src/com/android/email/activity/setup/AccountSetupCheckSettings.java
index 290f704d4..c54203fd8 100644
--- a/src/com/android/email/activity/setup/AccountSetupCheckSettings.java
+++ b/src/com/android/email/activity/setup/AccountSetupCheckSettings.java
@@ -196,6 +196,7 @@ public class AccountSetupCheckSettings extends Activity implements OnClickListen
}
mProgressBar.setIndeterminate(false);
new AlertDialog.Builder(AccountSetupCheckSettings.this)
+ .setIcon(android.R.drawable.ic_dialog_alert)
.setTitle(getString(R.string.account_setup_failed_dlg_title))
.setMessage(getString(msgResId, args))
.setCancelable(true)
diff --git a/src/com/android/email/mail/internet/MimeMessage.java b/src/com/android/email/mail/internet/MimeMessage.java
index 912f5380e..6a2339d59 100644
--- a/src/com/android/email/mail/internet/MimeMessage.java
+++ b/src/com/android/email/mail/internet/MimeMessage.java
@@ -23,6 +23,7 @@ import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
+import java.util.Locale;
import java.util.Stack;
import org.apache.james.mime4j.BodyDescriptor;
@@ -51,7 +52,13 @@ public class MimeMessage extends Message {
protected Address[] mBcc;
protected Address[] mReplyTo;
protected Date mSentDate;
- protected SimpleDateFormat mDateFormat = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss Z");
+ // In MIME, en_US-like date format should be used. In other words "MMM" should be encoded to
+ // "Jan", not the other localized format like "Ene" (meaning January in locale es).
+ // This conversion is used when generating outgoing MIME messages. Incoming MIME date
+ // headers are parsed by org.apache.james.mime4j.field.DateTimeField which does not have any
+ // localization code.
+ protected SimpleDateFormat mDateFormat =
+ new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss Z", Locale.US);
protected Body mBody;
protected int mSize;
diff --git a/src/com/android/email/mail/store/ImapResponseParser.java b/src/com/android/email/mail/store/ImapResponseParser.java
index 96b4181db..4c7028b89 100644
--- a/src/com/android/email/mail/store/ImapResponseParser.java
+++ b/src/com/android/email/mail/store/ImapResponseParser.java
@@ -22,6 +22,7 @@ import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
+import java.util.Locale;
import android.util.Config;
import android.util.Log;
@@ -35,7 +36,10 @@ public class ImapResponseParser {
// DEBUG ONLY - Always check in as "false"
private static boolean DEBUG_LOG_RAW_STREAM = false;
- SimpleDateFormat mDateTimeFormat = new SimpleDateFormat("dd-MMM-yyyy HH:mm:ss Z");
+ // mDateTimeFormat is used only for parsing IMAP's FETCH ENVELOPE command, in which
+ // en_US-like date format is used like "01-Jan-2009 11:20:39 -0800", so this should be
+ // handled by Locale.US
+ SimpleDateFormat mDateTimeFormat = new SimpleDateFormat("dd-MMM-yyyy HH:mm:ss Z", Locale.US);
PeekableInputStream mIn;
InputStream mActiveLiteral;
diff --git a/tests/src/com/android/email/activity/MessageComposeInstrumentationTests.java b/tests/src/com/android/email/activity/MessageComposeInstrumentationTests.java
index bdd88150c..b831d8013 100644
--- a/tests/src/com/android/email/activity/MessageComposeInstrumentationTests.java
+++ b/tests/src/com/android/email/activity/MessageComposeInstrumentationTests.java
@@ -16,7 +16,11 @@
package com.android.email.activity;
+import com.android.email.Account;
+import com.android.email.Email;
+import com.android.email.Preferences;
import com.android.email.R;
+import com.android.email.activity.MessageCompose;
import com.android.email.mail.Address;
import com.android.email.mail.Message;
import com.android.email.mail.MessagingException;
@@ -25,10 +29,12 @@ import com.android.email.mail.internet.MimeMessage;
import com.android.email.mail.internet.TextBody;
import android.content.Intent;
+import android.net.Uri;
import android.test.ActivityInstrumentationTestCase2;
import android.test.suitebuilder.annotation.MediumTest;
import android.view.View;
import android.widget.EditText;
+import android.content.Context;
/**
* Various instrumentation tests for MessageCompose.
@@ -46,6 +52,8 @@ public class MessageComposeInstrumentationTests
private static final String SENDER = "sender@android.com";
private static final String REPLYTO = "replyto@android.com";
private static final String RECIPIENT_TO = "recipient-to@android.com";
+ private static final String RECIPIENT_CC = "recipient-cc@android.com";
+ private static final String RECIPIENT_BCC = "recipient-bcc@android.com";
private static final String SUBJECT = "This is the subject";
private static final String BODY = "This is the body. This is also the body.";
@@ -59,12 +67,22 @@ public class MessageComposeInstrumentationTests
super("com.android.email", MessageCompose.class);
}
- /**
- * Common setup code for all tests. Attaches to the Activity and
+ /*
+ * The Message Composer activity is only enabled if one or more accounts
+ * are configured on the device and a default account has been specified,
+ * so we do that here before every test.
*/
@Override
protected void setUp() throws Exception {
super.setUp();
+ Context context = getInstrumentation().getTargetContext();
+ Account[] accounts = Preferences.getPreferences(context).getAccounts();
+ if (accounts.length > 0)
+ {
+ // This depends on getDefaultAccount() to auto-assign the default account, if necessary
+ Preferences.getPreferences(context).getDefaultAccount();
+ Email.setServicesEnabled(context);
+ }
final MessageCompose a = getActivity();
mToView = (EditText) a.findViewById(R.id.to);
mSubjectView = (EditText) a.findViewById(R.id.subject);
@@ -105,7 +123,7 @@ public class MessageComposeInstrumentationTests
runTestOnUiThread(new Runnable() {
public void run() {
a.processSourceMessage(message);
- checkFields(SENDER + ", ", "Re: " + SUBJECT, null);
+ checkFields(SENDER + ", ", null, null, "Re: " + SUBJECT, null);
checkFocused(mMessageView);
}
});
@@ -117,7 +135,7 @@ public class MessageComposeInstrumentationTests
public void run() {
resetViews();
a.processSourceMessage(message);
- checkFields(REPLYTO + ", ", "Re: " + SUBJECT, null);
+ checkFields(REPLYTO + ", ", null, null, "Re: " + SUBJECT, null);
checkFocused(mMessageView);
}
});
@@ -139,7 +157,7 @@ public class MessageComposeInstrumentationTests
runTestOnUiThread(new Runnable() {
public void run() {
a.processSourceMessage(message);
- checkFields(null, "Fwd: " + SUBJECT, null);
+ checkFields(null, null, null, "Fwd: " + SUBJECT, null);
checkFocused(mToView);
}
});
@@ -164,7 +182,7 @@ public class MessageComposeInstrumentationTests
runTestOnUiThread(new Runnable() {
public void run() {
a.processSourceMessage(message);
- checkFields(RECIPIENT_TO + ", ", SUBJECT, BODY);
+ checkFields(RECIPIENT_TO + ", ", null, null, SUBJECT, BODY);
checkFocused(mMessageView);
}
});
@@ -177,21 +195,100 @@ public class MessageComposeInstrumentationTests
public void run() {
resetViews();
a.processSourceMessage(message);
- checkFields(RECIPIENT_TO + ", ", null, BODY);
+ checkFields(RECIPIENT_TO + ", ", null, null, null, BODY);
checkFocused(mSubjectView);
}
});
}
+ /**
+ * Test for processing of Intent EXTRA_* fields that impact the headers:
+ * Intent.EXTRA_EMAIL, Intent.EXTRA_CC, Intent.EXTRA_BCC, Intent.EXTRA_SUBJECT
+ */
+ public void testIntentHeaderExtras() throws MessagingException, Throwable {
+
+ Intent intent = new Intent(Intent.ACTION_VIEW);
+ intent.putExtra(Intent.EXTRA_EMAIL, new String[] { RECIPIENT_TO });
+ intent.putExtra(Intent.EXTRA_CC, new String[] { RECIPIENT_CC });
+ intent.putExtra(Intent.EXTRA_BCC, new String[] { RECIPIENT_BCC });
+ intent.putExtra(Intent.EXTRA_SUBJECT, SUBJECT);
+
+ final MessageCompose a = getActivity();
+ final Intent i2 = new Intent(intent);
+
+ runTestOnUiThread(new Runnable() {
+ public void run() {
+ a.initFromIntent(i2);
+ checkFields(RECIPIENT_TO + ", ", RECIPIENT_CC, RECIPIENT_BCC, SUBJECT, null);
+ checkFocused(mMessageView);
+ }
+ });
+ }
+
+ /**
+ * Test for processing of a typical browser "share" intent, e.g.
+ * type="text/plain", EXTRA_TEXT="http:link.server.com"
+ */
+ public void testIntentSendPlainText() throws MessagingException, Throwable {
+
+ Intent intent = new Intent(Intent.ACTION_SEND);
+ intent.setType("text/plain");
+ intent.putExtra(Intent.EXTRA_TEXT, BODY);
+
+ final MessageCompose a = getActivity();
+ final Intent i2 = new Intent(intent);
+
+ runTestOnUiThread(new Runnable() {
+ public void run() {
+ a.initFromIntent(i2);
+ checkFields(null, null, null, null, BODY);
+ checkFocused(mToView);
+ }
+ });
+ }
+
+ /**
+ * Test for processing of a typical browser Mailto intent, e.g.
+ * action=android.intent.action.VIEW
+ * categories={android.intent.category.BROWSABLE}
+ * data=mailto:user@domain.com?subject=This%20is%20%the%subject
+ */
+ public void testBrowserMailToIntent() throws MessagingException, Throwable {
+
+ Intent intent = new Intent(Intent.ACTION_VIEW);
+ Uri uri = Uri.parse("mailto:" + RECIPIENT_TO + "?subject=This%20is%20the%20subject");
+ intent.setData(uri);
+
+ final MessageCompose a = getActivity();
+ final Intent i2 = new Intent(intent);
+
+ runTestOnUiThread(new Runnable() {
+ public void run() {
+ a.initFromIntent(i2);
+ checkFields(RECIPIENT_TO + ", ", null, null, "This is the subject", null);
+ checkFocused(mMessageView);
+ }
+ });
+ }
+
+ /**
+ * TODO: test mailto: with simple encoding mode
+ * TODO: test mailto: URI with all optional fields
+ * TODO: come up with a way to add a very small attachment
+ * TODO: confirm the various details between handling of SEND, VIEW, SENDTO
+ */
+
/**
* Helper method to quickly check (and assert) on the to, subject, and content views.
*
- * @param to expected value
- * @param subject expected value
- * @param content expected value
+ * @param to expected value (null = it must be empty)
+ * @param cc expected value (null = it must be empty)
+ * @param bcc expected value (null = it must be empty)
+ * @param subject expected value (null = it must be empty)
+ * @param content expected value (null = it must be empty)
*/
- private void checkFields(String to, String subject, String content) {
+ private void checkFields(String to, String cc, String bcc, String subject, String content) {
String toText = mToView.getText().toString();
if (to == null) {
assertEquals(0, toText.length());
diff --git a/tests/src/com/android/email/mail/internet/MimeMessageTest.java b/tests/src/com/android/email/mail/internet/MimeMessageTest.java
new file mode 100644
index 000000000..8cc6fb51f
--- /dev/null
+++ b/tests/src/com/android/email/mail/internet/MimeMessageTest.java
@@ -0,0 +1,74 @@
+/*
+ * Copyright (C) 2009 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.email.mail.internet;
+
+import com.android.email.mail.MessagingException;
+import com.android.email.mail.internet.MimeMessage;
+
+import junit.framework.TestCase;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Locale;
+
+import android.test.suitebuilder.annotation.SmallTest;
+import android.util.Log;
+
+/**
+ * This is a series of unit tests for the MimeMessage class. These tests must be locally
+ * complete - no server(s) required.
+ */
+@SmallTest
+public class MimeMessageTest extends TestCase {
+
+ // TODO: more tests.
+
+ /**
+ * Confirms that setSentDate() correctly set the "Date" header of a Mime message.
+ *
+ * We tries a same test twice using two locales, Locale.US and the other, since
+ * MimeMessage depends on the date formatter, which may emit wrong date format
+ * in the locale other than Locale.US.
+ * @throws MessagingException
+ * @throws ParseException
+ */
+ public void testSetSentDate() throws MessagingException, ParseException {
+ Locale savedLocale = Locale.getDefault();
+ Locale.setDefault(Locale.US);
+ doTestSetSentDate();
+ Locale.setDefault(Locale.JAPAN);
+ doTestSetSentDate();
+ Locale.setDefault(savedLocale);
+ }
+
+ private void doTestSetSentDate() throws MessagingException, ParseException {
+ // "Thu, 01 Jan 2009 09:00:00 +0000" => 1230800400000L
+ long expectedTime = 1230800400000L;
+ Date date = new Date(expectedTime);
+ MimeMessage message = new MimeMessage();
+ message.setSentDate(date);
+ String[] headers = message.getHeader("Date");
+ assertEquals(1, headers.length);
+ // Explicitly specify the locale so that the object does not depend on the default
+ // locale.
+ SimpleDateFormat format = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss Z", Locale.US);
+
+ Date result = format.parse(headers[0]);
+ assertEquals(expectedTime, result.getTime());
+ }
+}
\ No newline at end of file
diff --git a/tests/src/com/android/email/mail/store/ImapStoreUnitTests.java b/tests/src/com/android/email/mail/store/ImapStoreUnitTests.java
index d2f76a1e8..f1ef6e46e 100644
--- a/tests/src/com/android/email/mail/store/ImapStoreUnitTests.java
+++ b/tests/src/com/android/email/mail/store/ImapStoreUnitTests.java
@@ -20,10 +20,15 @@ import com.android.email.mail.MessagingException;
import com.android.email.mail.Transport;
import com.android.email.mail.Folder.OpenMode;
import com.android.email.mail.internet.BinaryTempFileBody;
+import com.android.email.mail.store.ImapResponseParser;
import com.android.email.mail.transport.MockTransport;
+import java.util.Date;
+import java.util.Locale;
+
import android.test.AndroidTestCase;
import android.test.suitebuilder.annotation.SmallTest;
+import android.util.Log;
/**
* This is a series of unit tests for the ImapStore class. These tests must be locally
@@ -65,6 +70,38 @@ public class ImapStoreUnitTests extends AndroidTestCase {
// TODO: inject specific facts in the initial folder SELECT and check them here
}
+ /**
+ * Confirms that ImapList object correctly returns an appropriate Date object
+ * without throwning MessagingException when getKeyedDate() is called.
+ *
+ * Here, we try a same test twice using two locales, Locale.US and the other.
+ * ImapList uses Locale class internally, and as a result, there's a
+ * possibility in which it may throw a MessageException when Locale is
+ * not Locale.US. Locale.JAPAN is a typical locale which emits different
+ * date formats, which had caused a bug before.
+ * @throws MessagingException
+ */
+ public void testImapListWithUsLocale() throws MessagingException {
+ Locale savedLocale = Locale.getDefault();
+ Locale.setDefault(Locale.US);
+ doTestImapList();
+ Locale.setDefault(Locale.JAPAN);
+ doTestImapList();
+ Locale.setDefault(savedLocale);
+ }
+
+ private void doTestImapList() throws MessagingException {
+ ImapResponseParser parser = new ImapResponseParser(null);
+ ImapResponseParser.ImapList list = parser.new ImapList();
+ String key = "key";
+ String date = "01-Jan-2009 01:00:00 -0800";
+ list.add(key);
+ list.add(date);
+ Date result = list.getKeyedDate(key);
+ // "01-Jan-2009 09:00:00 +0000" => 1230800400000L
+ assertEquals(1230800400000L, result.getTime());
+ }
+
/**
* TODO: Test with SSL negotiation (faked)
* TODO: Test with SSL required but not supported