How can I provide ending text view the song duration that gets an increment whenever it gets a new song, it is just showing the total duration of the first song it gets, for all the songs.
What I have tried:
package com.example.lec8;
import androidx.appcompat.app.AppCompatActivity;
import android.drm.DrmStore;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.os.Handler;
import android.view.View;
import android.widget.Button;
import android.widget.SeekBar;
import android.widget.TextView;
import android.widget.Toast;
import java.util.concurrent.TimeUnit;
public class MainActivity extends AppCompatActivity {
int [] song_list = {R.raw.b,R.raw.k,R.raw.n};
int c_pos = 0;
Button foward,p,rewind,stop;
TextView starting,ending;
SeekBar sb;
CountDownTimer t;
MediaPlayer mp;
private static int sTime =0;
private Handler hdlr = new Handler();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
foward = findViewById(R.id.btfoward);
rewind = findViewById(R.id.btrewind);
stop = findViewById(R.id.btpause);
p = findViewById(R.id.btplay);
starting = findViewById(R.id.startduration);
ending = findViewById(R.id.lastduration);
sb = findViewById(R.id.skbar);
mp = MediaPlayer.create(this, song_list[c_pos++]);
mp.start();
int s_duration = mp.getDuration();
sTime = mp.getCurrentPosition();
ending.setText(String.format("%d min, %d sec", TimeUnit.MILLISECONDS.toMinutes((long) s_duration), TimeUnit.MILLISECONDS.toSeconds((long) s_duration) -
TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes((long)s_duration))));
*/
starting.setText(String.format("%d min, %d sec", TimeUnit.MILLISECONDS.toMinutes(sTime),
TimeUnit.MILLISECONDS.toSeconds(sTime) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(sTime))));
sb.setProgress(sTime);
hdlr.postDelayed(UpdateSongTime, 100);
sb.setMax(s_duration);
t = new CountDownTimer(s_duration, 250) {
@Override
public void onTick(long millisUntilFinished) {
sb.setProgress((mp.getCurrentPosition()));
}
@Override
public void onFinish() {
Toast.makeText(MainActivity.this, "Song Completed", Toast.LENGTH_SHORT).show();
}
};
sb.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
mp.seekTo(seekBar.getProgress());
}
});
t.start();
foward.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (c_pos <= 1) {
c_pos++;
mp.reset();
mp = MediaPlayer.create(getApplicationContext(), song_list[c_pos]);
mp.start();
} else {
Toast.makeText(getApplicationContext(), "No more songs", Toast.LENGTH_LONG).show();
}
}
});
rewind.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (c_pos >= 1) {
c_pos--;
mp.reset();
mp = MediaPlayer.create(getApplicationContext(), song_list[c_pos]);
mp.start();
} else {
Toast.makeText(getApplicationContext(), "No more songs", Toast.LENGTH_LONG).show();
}
}
});
stop.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mp.pause();
stop.setVisibility(Button.INVISIBLE);
p.setVisibility(Button.VISIBLE);
}
});
p.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mp.start();
p.setVisibility(Button.INVISIBLE);
stop.setVisibility(Button.VISIBLE);
}
});
}
private Runnable UpdateSongTime = new Runnable() {
@Override
public void run() {
sTime = mp.getCurrentPosition();
starting.setText(String.format("%d min, %d sec", TimeUnit.MILLISECONDS.toMinutes(sTime),
TimeUnit.MILLISECONDS.toSeconds(sTime) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(sTime))) );
sb.setProgress(sTime);
hdlr.postDelayed(this, 100);
}
};
}