fix audio player time display + progress for long audio files

This commit is contained in:
Daniel Gultsch 2024-04-15 18:11:22 +02:00
parent c06f2d23f6
commit 3a489741e7
No known key found for this signature in database
GPG key ID: F43D18AD2A0982C2

View file

@ -22,6 +22,8 @@ import android.widget.TextView;
import androidx.core.app.ActivityCompat; import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat; import androidx.core.content.ContextCompat;
import com.google.common.primitives.Ints;
import eu.siacs.conversations.Config; import eu.siacs.conversations.Config;
import eu.siacs.conversations.R; import eu.siacs.conversations.R;
import eu.siacs.conversations.entities.Message; import eu.siacs.conversations.entities.Message;
@ -29,10 +31,10 @@ import eu.siacs.conversations.services.MediaPlayer;
import eu.siacs.conversations.ui.ConversationsActivity; import eu.siacs.conversations.ui.ConversationsActivity;
import eu.siacs.conversations.ui.adapter.MessageAdapter; import eu.siacs.conversations.ui.adapter.MessageAdapter;
import eu.siacs.conversations.ui.util.PendingItem; import eu.siacs.conversations.ui.util.PendingItem;
import eu.siacs.conversations.utils.TimeFrameUtils;
import eu.siacs.conversations.utils.WeakReferenceSet; import eu.siacs.conversations.utils.WeakReferenceSet;
import java.lang.ref.WeakReference; import java.lang.ref.WeakReference;
import java.util.Locale;
import java.util.concurrent.ExecutorService; import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors; import java.util.concurrent.Executors;
@ -78,12 +80,8 @@ public class AudioPlayer
} }
} }
private static String formatTime(int ms) { private static String formatTime(final int ms) {
return String.format( return TimeFrameUtils.formatElapsedTime(ms,false);
Locale.ENGLISH,
"%d:%02d",
ms / 60000,
Math.min(Math.round((ms % 60000) / 1000f), 59));
} }
private void initializeProximityWakeLock(Context context) { private void initializeProximityWakeLock(Context context) {
@ -189,7 +187,7 @@ public class AudioPlayer
messageAdapter.flagScreenOff(); messageAdapter.flagScreenOff();
releaseProximityWakeLock(); releaseProximityWakeLock();
viewHolder.playPause.setImageResource(R.drawable.ic_play_arrow_24dp); viewHolder.playPause.setImageResource(R.drawable.ic_play_arrow_24dp);
MessageAdapter.setImageTint(viewHolder.playPause,viewHolder.bubbleColor); MessageAdapter.setImageTint(viewHolder.playPause, viewHolder.bubbleColor);
viewHolder.playPause.setContentDescription(context.getString(R.string.play_audio)); viewHolder.playPause.setContentDescription(context.getString(R.string.play_audio));
} else { } else {
viewHolder.progress.setEnabled(true); viewHolder.progress.setEnabled(true);
@ -198,7 +196,7 @@ public class AudioPlayer
acquireProximityWakeLock(); acquireProximityWakeLock();
this.stopRefresher(true); this.stopRefresher(true);
viewHolder.playPause.setImageResource(R.drawable.ic_pause_24dp); viewHolder.playPause.setImageResource(R.drawable.ic_pause_24dp);
MessageAdapter.setImageTint(viewHolder.playPause,viewHolder.bubbleColor); MessageAdapter.setImageTint(viewHolder.playPause, viewHolder.bubbleColor);
viewHolder.playPause.setContentDescription(context.getString(R.string.pause_audio)); viewHolder.playPause.setContentDescription(context.getString(R.string.pause_audio));
} }
return false; return false;
@ -225,7 +223,7 @@ public class AudioPlayer
acquireProximityWakeLock(); acquireProximityWakeLock();
viewHolder.progress.setEnabled(true); viewHolder.progress.setEnabled(true);
viewHolder.playPause.setImageResource(R.drawable.ic_pause_24dp); viewHolder.playPause.setImageResource(R.drawable.ic_pause_24dp);
MessageAdapter.setImageTint(viewHolder.playPause,viewHolder.bubbleColor); MessageAdapter.setImageTint(viewHolder.playPause, viewHolder.bubbleColor);
viewHolder.playPause.setContentDescription( viewHolder.playPause.setContentDescription(
viewHolder.playPause.getContext().getString(R.string.pause_audio)); viewHolder.playPause.getContext().getString(R.string.pause_audio));
sensorManager.registerListener( sensorManager.registerListener(
@ -286,7 +284,7 @@ public class AudioPlayer
viewHolder.playPause.setContentDescription( viewHolder.playPause.setContentDescription(
viewHolder.playPause.getContext().getString(R.string.play_audio)); viewHolder.playPause.getContext().getString(R.string.play_audio));
viewHolder.playPause.setImageResource(R.drawable.ic_play_arrow_24dp); viewHolder.playPause.setImageResource(R.drawable.ic_play_arrow_24dp);
MessageAdapter.setImageTint(viewHolder.playPause,viewHolder.bubbleColor); MessageAdapter.setImageTint(viewHolder.playPause, viewHolder.bubbleColor);
if (message != null) { if (message != null) {
viewHolder.runtime.setText(formatTime(message.getFileParams().runtime)); viewHolder.runtime.setText(formatTime(message.getFileParams().runtime));
} }
@ -383,7 +381,8 @@ public class AudioPlayer
if (duration <= 0) { if (duration <= 0) {
viewHolder.progress.setProgress(100); viewHolder.progress.setProgress(100);
} else { } else {
viewHolder.progress.setProgress(current * 100 / duration); final var progress = current * 100L / duration;
viewHolder.progress.setProgress(Math.min(Ints.saturatedCast(progress), 100));
} }
viewHolder.runtime.setText( viewHolder.runtime.setText(
String.format("%s / %s", formatTime(current), formatTime(duration))); String.format("%s / %s", formatTime(current), formatTime(duration)));