Problème d'affichage du delayTextView avec le delai de 2 sec

#1

Bonjour à tous,

Je rencontre un petit bug d’affichage sur le delayTextView de la SettingsActivity du diaporama photo.
Si j’applique le délai minimum de 2 sec, que je kill l’application et la relance, voici l’affichage que j’obtiens :
capture
Si je refais bouger ma seekbar, le textview se remet à jour. Ce bug ne s’applique que pour la valeur min de 2. Pour les autres délais, je n’ai aucun problème.
J’ai peut-être un début d’explication sur le sujet mais j’aimerais avoir vos avis :slight_smile:
Pour qu’il y ait un affichage au niveau de la textview, il faut nécessairement passer par la fonction “.text”. Mais dans la fonction onStart, nous ne faisons que remettre à jour le delaySeekbar.progress à jour. Je suppose que le système une fois la mise à jour réalisée repasse par la fonction onProgressChanged et utilise la fonction .text pour mettre à jour le textview.
Dans le cas du delay à deux secondes, il ne repasserait pas par la fonction onProgressChanged puisque la valeur par défaut est deux secondes et que il n’y a eu aucune progression.
J’ai donc choisi de forcer l’affichage dans la fonction onStart avec la fonction .text :
delayTextView.text = “${delaySeekbar.progress} sec”
Cela résout mon problème mais je ne sais pas si c’est la meilleure manière d’appréhender le sujet. On est pas loin de la duplication de code :smiley:

Autre anomalie détectée : si j’enlève le paramètre android:min =2, la seekbar peut varier de 0 à 7. Si le paramètre est poussé à 0, ça fait planter l’application. Il faudrait pouvoir gérer le cas des utilisateurs qui serait en API 23 et qui n’auront pas ce paramètre en place. S’ils poussent la seekbar complètement à gauche, leur appli ne démarrera plus …

#2

En passant par le mode debug, on voit bien que lorsque le progress est mis à jour avec une valeur différente de 2, le listener appelle la fonction “onProgressChanged” avec le booléen fromUser = false.
Pour gérer ce cas là, il faut bien repasser par une initialisation du textview dans le onStart.

#3

Pour répondre aux utilisateurs API 23 et le bug de la seekbar à 0, j’ai ajouté ce bout de code pour forcer le diaporama à se positionner à un delay de 500 ms min :

var delay = (LocalPreferences(this).slideshowDelay * 1000).toLong()
if (delay < 1) {
delay = 500
}
countDownTimer = object :CountDownTimer(delay,delay){