Skip to content

Commit ad4a19d

Browse files
authored
Merge pull request #858 from Infomaniak/leave-if-compose-init-fail
Display error & leave Compose screen if Draft init fails
2 parents 189c6ed + b951258 commit ad4a19d

File tree

9 files changed

+67
-25
lines changed

9 files changed

+67
-25
lines changed

app/src/main/java/com/infomaniak/mail/data/cache/mailboxContent/DraftController.kt

+6-2
Original file line numberDiff line numberDiff line change
@@ -108,12 +108,14 @@ object DraftController {
108108
//endregion
109109

110110
//region Open Draft
111-
fun Draft.setPreviousMessage(draftMode: DraftMode, message: Message, context: Context, realm: MutableRealm) {
111+
fun Draft.setPreviousMessage(draftMode: DraftMode, message: Message, context: Context, realm: MutableRealm): Boolean {
112+
113+
var isSuccess = true
112114

113115
val previousMessage = if (message.isFullyDownloaded) {
114116
message
115117
} else {
116-
realm.fetchIncompleteMessages(listOf(message))
118+
isSuccess = realm.fetchIncompleteMessages(listOf(message)).isEmpty()
117119
MessageController.getMessage(message.uid, realm)!!
118120
}
119121

@@ -151,6 +153,8 @@ object DraftController {
151153
}
152154
DraftMode.NEW_MAIL -> Unit
153155
}
156+
157+
return isSuccess
154158
}
155159

156160
private fun Context.replyQuote(message: Message): String {

app/src/main/java/com/infomaniak/mail/ui/main/newMessage/NewMessageFragment.kt

+10-7
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,7 @@ import android.view.View
3232
import android.view.ViewGroup
3333
import android.view.WindowManager
3434
import android.webkit.WebView
35-
import android.widget.ArrayAdapter
36-
import android.widget.ListPopupWindow
37-
import android.widget.PopupWindow
35+
import android.widget.*
3836
import androidx.core.net.MailTo
3937
import androidx.core.view.isGone
4038
import androidx.core.view.isVisible
@@ -93,7 +91,6 @@ class NewMessageFragment : Fragment() {
9391
initUi()
9492
initDraftAndViewModel()
9593

96-
focusCorrectView()
9794
setOnFocusChangedListeners()
9895

9996
doAfterSubjectChange()
@@ -140,23 +137,29 @@ class NewMessageFragment : Fragment() {
140137
private fun initDraftAndViewModel() {
141138
newMessageViewModel.initDraftAndViewModel(newMessageActivityArgs).observe(viewLifecycleOwner) { isSuccess ->
142139
if (isSuccess) {
140+
showKeyboardInCorrectView()
143141
populateViewModelWithExternalMailData()
144142
populateUiWithViewModel()
145143
} else {
144+
displayOpeningDraftErrorToast()
146145
requireActivity().finish()
147146
}
148147
}
149148
}
150149

151-
private fun focusCorrectView() = with(binding) {
150+
private fun showKeyboardInCorrectView() = with(binding) {
152151
when (newMessageActivityArgs.draftMode) {
153152
DraftMode.REPLY,
154-
DraftMode.REPLY_ALL -> bodyText.requestFocus()
153+
DraftMode.REPLY_ALL -> bodyText.showKeyboard()
155154
DraftMode.NEW_MAIL,
156-
DraftMode.FORWARD -> toField.requestFocus()
155+
DraftMode.FORWARD -> toField.showKeyboardInTextInput()
157156
}
158157
}
159158

159+
private fun displayOpeningDraftErrorToast() {
160+
Toast.makeText(requireActivity(), getString(R.string.failToOpenDraft), Toast.LENGTH_SHORT).show()
161+
}
162+
160163
private fun setOnFocusChangedListeners() = with(binding) {
161164
val listener = View.OnFocusChangeListener { _, hasFocus -> if (hasFocus) fieldGotFocus(null) }
162165
subjectTextField.onFocusChangeListener = listener

app/src/main/java/com/infomaniak/mail/ui/main/newMessage/NewMessageViewModel.kt

+7-6
Original file line numberDiff line numberDiff line change
@@ -101,13 +101,11 @@ class NewMessageViewModel(application: Application) : AndroidViewModel(applicati
101101
draft = if (draftExists) {
102102
getLatestDraft(draftLocalUuid, realm = this)
103103
?: fetchDraft(draftResource!!, messageUid!!)
104-
?: run {
105-
// TODO: Add Loader to block UI while waiting for `fetchDraft` API call to finish
106-
return@writeBlocking false
107-
}
104+
?: run { return@writeBlocking false }
108105
} else {
109106
isNewMessage = true
110107
createDraft(draftMode, previousMessageUid, recipient)
108+
?: run { return@writeBlocking false }
111109
}
112110

113111
if (draft.identityId.isNullOrBlank()) draft.addMissingSignatureData(realm = this)
@@ -139,7 +137,7 @@ class NewMessageViewModel(application: Application) : AndroidViewModel(applicati
139137
}
140138
}
141139

142-
private fun MutableRealm.createDraft(draftMode: DraftMode, previousMessageUid: String?, recipient: Recipient?): Draft {
140+
private fun MutableRealm.createDraft(draftMode: DraftMode, previousMessageUid: String?, recipient: Recipient?): Draft? {
143141
return Draft().apply {
144142
initLocalValues(priority = Priority.NORMAL, mimeType = ClipDescription.MIMETYPE_TEXT_HTML)
145143
initSignature(realm = this@createDraft)
@@ -148,7 +146,10 @@ class NewMessageViewModel(application: Application) : AndroidViewModel(applicati
148146
DraftMode.REPLY, DraftMode.REPLY_ALL, DraftMode.FORWARD -> {
149147
previousMessageUid
150148
?.let { uid -> MessageController.getMessage(uid, realm = this@createDraft) }
151-
?.let { message -> setPreviousMessage(draftMode, message, context, realm = this@createDraft) }
149+
?.let { message ->
150+
val isSuccess = setPreviousMessage(draftMode, message, context, realm = this@createDraft)
151+
if (!isSuccess) return null
152+
}
152153
}
153154
}
154155
}

app/src/main/java/com/infomaniak/mail/ui/main/newMessage/RecipientFieldView.kt

+4
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,10 @@ class RecipientFieldView @JvmOverloads constructor(
154154
}
155155
}
156156

157+
fun showKeyboardInTextInput() {
158+
binding.textInput.showKeyboard()
159+
}
160+
157161
private fun setupChipsRecyclerView() = with(binding) {
158162
chipsRecyclerView.adapter = contactChipAdapter
159163

app/src/main/res/values-de/strings.xml

+8-2
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,10 @@
5151
<string name="addUnknownRecipientTitle">Einen Empfänger hinzufügen</string>
5252
<string name="appSecurityDescription">Schützen Sie den Zugriff auf Ihre App, indem Sie Ihre Telefonsperre aktivieren.</string>
5353
<string name="archiveFolder">Archiviert</string>
54+
<string name="attachAddressDescription">Sie haben bereits eine Infomaniak-Mailadresse, loggen Sie sich jetzt ein.</string>
55+
<string name="attachAddressInputHint">Mailadresse hinzufügen</string>
56+
<string name="attachAddressPasswordInputHint">Passwort für die Mailadresse</string>
57+
<string name="attachAddressTitle">Mailadresse hinzufügen</string>
5458
<string name="attachmentActionCamera">Kamera</string>
5559
<string name="attachmentActionFile">Eine Datei anhängen</string>
5660
<string name="attachmentActionPhotoLibrary">Ein Foto aus der Fotobibliothek senden</string>
@@ -68,6 +72,7 @@
6872
<string name="buttonAccountSwitch">Konto ändern</string>
6973
<string name="buttonAddAccount">Account hinzufügen</string>
7074
<string name="buttonAddEmailAddress">Eine E-Mail-Adresse hinzufügen</string>
75+
<string name="buttonAttachEmailAddress">Mailadresse hinzufügen</string>
7176
<string name="buttonAttachment">Einen Anhang hinzufügen</string>
7277
<string name="buttonAvailableSoon">Bald verfügbar</string>
7378
<string name="buttonBold">Kühn</string>
@@ -131,6 +136,7 @@
131136
<string name="contentDescriptionButtonNext">Weiter</string>
132137
<string name="contentDescriptionButtonOpenSystemSettings">Öffnen Sie die Benachrichtigungseinstellungen des Systems</string>
133138
<string name="contentDescriptionButtonSettings">Einstellungen</string>
139+
<string name="contentDescriptionButtonShowPassword">Passwort anzeigen</string>
134140
<string name="contentDescriptionContactAlreadyUsed">Kontakt bereits als Empfänger verwendet</string>
135141
<string name="contentDescriptionDownloadIndicator">Herunterladen von</string>
136142
<string name="contentDescriptionIconAttachments">Hat Anhänge</string>
@@ -161,15 +167,15 @@
161167
<string name="emptyStateSearchTitle">Keine Ergebnisse</string>
162168
<string name="emptyStateTrashDescription">Verschieben Sie die Nachrichten in den Papierkorb. Sie werden nach 30 Tagen endgültig gelöscht.</string>
163169
<string name="emptyStateTrashTitle">Der Papierkorb ist leer</string>
170+
<string name="errorAttachAddressInput">Nur Infomaniak-Mailadressen werden unterstützt</string>
164171
<string name="errorLoginDescription">Die Verbindung ist fehlgeschlagen.</string>
165172
<string name="errorLoginTitle">Login-Fehler</string>
166173
<string name="errorNewFolderAlreadyExists">Ein Ordner mit diesem Namen existiert bereits</string>
167174
<string name="errorNewFolderNameTooLong">Der Ordnername sollte nicht länger als 255 Zeichen sein.</string>
175+
<string name="failToOpenDraft">Öffnen des Entwurfs fehlgeschlagen</string>
168176
<string name="favoritesFolder">Favoriten</string>
169177
<string name="fromTitle">Von:</string>
170178
<string name="googlePlayServicesAreRequired">Google Play Services sind erforderlich</string>
171-
<string name="helpChatbot">Chatbot</string>
172-
<string name="helpFAQ">FAQ</string>
173179
<string name="inboxFolder">Posteingang</string>
174180
<string name="loadingText">Laden…</string>
175181
<string name="menuDrawerAdvancedActions">Erweiterte Aktionen</string>

app/src/main/res/values-es/strings.xml

+8-2
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,10 @@
5151
<string name="addUnknownRecipientTitle">Añadir un destinatario</string>
5252
<string name="appSecurityDescription">Protege el acceso a tu aplicación activando el bloqueo del teléfono.</string>
5353
<string name="archiveFolder">Archivado</string>
54+
<string name="attachAddressDescription">Si ya dispone de una dirección de correo electrónico Infomaniak, conéctese ahora.</string>
55+
<string name="attachAddressInputHint">Dirección de correo electrónico que desea añadir</string>
56+
<string name="attachAddressPasswordInputHint">Contraseña de la dirección de correo electrónico</string>
57+
<string name="attachAddressTitle">Añadir dirección de correo electrónico</string>
5458
<string name="attachmentActionCamera">Cámara</string>
5559
<string name="attachmentActionFile">Adjuntar un archivo</string>
5660
<string name="attachmentActionPhotoLibrary">Enviar una foto desde la fototeca</string>
@@ -68,6 +72,7 @@
6872
<string name="buttonAccountSwitch">Cambiar de cuenta</string>
6973
<string name="buttonAddAccount">Añadir una cuenta</string>
7074
<string name="buttonAddEmailAddress">Añadir una dirección de correo electrónico</string>
75+
<string name="buttonAttachEmailAddress">Añadir dirección de correo electrónico</string>
7176
<string name="buttonAttachment">Añadir un archivo adjunto</string>
7277
<string name="buttonAvailableSoon">Disponible en breve</string>
7378
<string name="buttonBold">Negrita</string>
@@ -131,6 +136,7 @@
131136
<string name="contentDescriptionButtonNext">Siguiente</string>
132137
<string name="contentDescriptionButtonOpenSystemSettings">Abrir la configuración de notificaciones del sistema</string>
133138
<string name="contentDescriptionButtonSettings">Ajustes</string>
139+
<string name="contentDescriptionButtonShowPassword">Mostrar contraseña</string>
134140
<string name="contentDescriptionContactAlreadyUsed">Contacto ya utilizado como destinatario</string>
135141
<string name="contentDescriptionDownloadIndicator">Descargar</string>
136142
<string name="contentDescriptionIconAttachments">Tiene accesorios</string>
@@ -161,15 +167,15 @@
161167
<string name="emptyStateSearchTitle">Sin resultados</string>
162168
<string name="emptyStateTrashDescription">Mueve los mensajes a la papelera. Se borrarán definitivamente pasados 30 días.</string>
163169
<string name="emptyStateTrashTitle">La papelera está vacía</string>
170+
<string name="errorAttachAddressInput">Sólo se admiten las direcciones de correo electrónico Infomaniak</string>
164171
<string name="errorLoginDescription">La conexión ha fallado.</string>
165172
<string name="errorLoginTitle">Error de inicio de sesión</string>
166173
<string name="errorNewFolderAlreadyExists">Ya existe una carpeta con este nombre</string>
167174
<string name="errorNewFolderNameTooLong">El nombre de la carpeta no debe superar los 255 caracteres</string>
175+
<string name="failToOpenDraft">No se ha podido abrir el borrador</string>
168176
<string name="favoritesFolder">Favoritos</string>
169177
<string name="fromTitle">De:</string>
170178
<string name="googlePlayServicesAreRequired">Se requieren los servicios de Google Play</string>
171-
<string name="helpChatbot">Chatbot</string>
172-
<string name="helpFAQ">PREGUNTAS FRECUENTES</string>
173179
<string name="inboxFolder">Bandeja de entrada</string>
174180
<string name="loadingText">Cargando…</string>
175181
<string name="menuDrawerAdvancedActions">Acciones avanzadas</string>

app/src/main/res/values-fr/strings.xml

+8-2
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,10 @@
5151
<string name="addUnknownRecipientTitle">Ajoutez un destinataire</string>
5252
<string name="appSecurityDescription">Protégez l’accès à votre application en activant le verrouillage de votre téléphone.</string>
5353
<string name="archiveFolder">Archive</string>
54+
<string name="attachAddressDescription">Vous possédez déjà une adresse mail Infomaniak, connectez-vous dès maintenant.</string>
55+
<string name="attachAddressInputHint">Adresse mail à ajouter</string>
56+
<string name="attachAddressPasswordInputHint">Mot de passe de l’adresse mail</string>
57+
<string name="attachAddressTitle">Ajoutez une adresse mail</string>
5458
<string name="attachmentActionCamera">Appareil photo</string>
5559
<string name="attachmentActionFile">Joindre un fichier</string>
5660
<string name="attachmentActionPhotoLibrary">Envoyer une photo depuis la photothèque</string>
@@ -69,6 +73,7 @@
6973
<string name="buttonAccountSwitch">Changer de compte</string>
7074
<string name="buttonAddAccount">Ajouter un compte</string>
7175
<string name="buttonAddEmailAddress">Ajouter une adresse mail</string>
76+
<string name="buttonAttachEmailAddress">Ajouter l’adresse mail</string>
7277
<string name="buttonAttachment">Ajouter une pièce jointe</string>
7378
<string name="buttonAvailableSoon">Bientôt disponible</string>
7479
<string name="buttonBold">Gras</string>
@@ -132,6 +137,7 @@
132137
<string name="contentDescriptionButtonNext">Suivant</string>
133138
<string name="contentDescriptionButtonOpenSystemSettings">Ouvrir les paramètres de notification du système</string>
134139
<string name="contentDescriptionButtonSettings">Paramètres</string>
140+
<string name="contentDescriptionButtonShowPassword">Voir le mot de passe</string>
135141
<string name="contentDescriptionContactAlreadyUsed">Contact déjà utilisé comme destinataire</string>
136142
<string name="contentDescriptionDownloadIndicator">Téléchargement</string>
137143
<string name="contentDescriptionIconAttachments">Contient des pièces jointes</string>
@@ -162,15 +168,15 @@
162168
<string name="emptyStateSearchTitle">Aucun résultat</string>
163169
<string name="emptyStateTrashDescription">Déplacez les messages dans la corbeille. Ils seront supprimés définitivement au bout de 30 jours.</string>
164170
<string name="emptyStateTrashTitle">La corbeille est vide</string>
171+
<string name="errorAttachAddressInput">Seules les adresses mails Infomaniak sont supportées</string>
165172
<string name="errorLoginDescription">La connexion a échoué.</string>
166173
<string name="errorLoginTitle">Erreur de connexion</string>
167174
<string name="errorNewFolderAlreadyExists">Un dossier de ce nom existe déjà</string>
168175
<string name="errorNewFolderNameTooLong">Le nom du dossier ne doit pas dépasser 255 caractères</string>
176+
<string name="failToOpenDraft">Échec de l’ouverture du brouillon</string>
169177
<string name="favoritesFolder">Favoris</string>
170178
<string name="fromTitle">De :</string>
171179
<string name="googlePlayServicesAreRequired">Les Google Play Services sont requis</string>
172-
<string name="helpChatbot">Chatbot</string>
173-
<string name="helpFAQ">FAQ</string>
174180
<string name="inboxFolder">Boîte de réception</string>
175181
<string name="loadingText">Chargement…</string>
176182
<string name="menuDrawerAdvancedActions">Actions avancées</string>

app/src/main/res/values-it/strings.xml

+8-2
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,10 @@
5151
<string name="addUnknownRecipientTitle">Aggiungere un destinatario</string>
5252
<string name="appSecurityDescription">Proteggete l’accesso alla vostra applicazione attivando il blocco del telefono.</string>
5353
<string name="archiveFolder">Archiviato</string>
54+
<string name="attachAddressDescription">Se hai già un indirizzo e-mail Infomaniak, accedi ora.</string>
55+
<string name="attachAddressInputHint">Indirizzo e-mail da aggiungere</string>
56+
<string name="attachAddressPasswordInputHint">Password per l’indirizzo e-mail</string>
57+
<string name="attachAddressTitle">Aggiungi indirizzo e-mail</string>
5458
<string name="attachmentActionCamera">Macchina fotografica</string>
5559
<string name="attachmentActionFile">Allegare un file</string>
5660
<string name="attachmentActionPhotoLibrary">Inviare una foto dalla libreria fotografica</string>
@@ -68,6 +72,7 @@
6872
<string name="buttonAccountSwitch">Modifica del conto</string>
6973
<string name="buttonAddAccount">Aggiungere un account</string>
7074
<string name="buttonAddEmailAddress">Aggiungere un indirizzo e-mail</string>
75+
<string name="buttonAttachEmailAddress">Aggiungere l’indirizzo e-mail</string>
7176
<string name="buttonAttachment">Aggiungere un allegato</string>
7277
<string name="buttonAvailableSoon">Disponibile a breve</string>
7378
<string name="buttonBold">In grassetto</string>
@@ -131,6 +136,7 @@
131136
<string name="contentDescriptionButtonNext">Avanti</string>
132137
<string name="contentDescriptionButtonOpenSystemSettings">Aprire le impostazioni di notifica del sistema</string>
133138
<string name="contentDescriptionButtonSettings">Impostazioni</string>
139+
<string name="contentDescriptionButtonShowPassword">Mostra password</string>
134140
<string name="contentDescriptionContactAlreadyUsed">Contatto già utilizzato come destinatario</string>
135141
<string name="contentDescriptionDownloadIndicator">Scaricare</string>
136142
<string name="contentDescriptionIconAttachments">Dispone di allegati</string>
@@ -161,15 +167,15 @@
161167
<string name="emptyStateSearchTitle">Nessun risultato</string>
162168
<string name="emptyStateTrashDescription">Spostate i messaggi nel cestino. Verranno eliminati definitivamente dopo 30 giorni.</string>
163169
<string name="emptyStateTrashTitle">Il cestino è vuoto</string>
170+
<string name="errorAttachAddressInput">Sono supportati solo gli indirizzi e-mail Infomaniak</string>
164171
<string name="errorLoginDescription">La connessione non è riuscita.</string>
165172
<string name="errorLoginTitle">Errore di accesso</string>
166173
<string name="errorNewFolderAlreadyExists">Esiste già una cartella con questo nome</string>
167174
<string name="errorNewFolderNameTooLong">Il nome della cartella non deve superare i 255 caratteri</string>
175+
<string name="failToOpenDraft">Impossibile aprire la bozza</string>
168176
<string name="favoritesFolder">Preferiti</string>
169177
<string name="fromTitle">Da:</string>
170178
<string name="googlePlayServicesAreRequired">I servizi Google Play sono necessari</string>
171-
<string name="helpChatbot">Chatbot</string>
172-
<string name="helpFAQ">FAQ</string>
173179
<string name="inboxFolder">Posta in arrivo</string>
174180
<string name="loadingText">Caricamento…</string>
175181
<string name="menuDrawerAdvancedActions">Azioni avanzate</string>

0 commit comments

Comments
 (0)