Task 10
Task 10
java
package com.example.musicplayer;
import android.annotation.SuppressLint;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.SeekBar;
import android.widget.TextView;
import android.widget.Toast;
import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;
import java.util.ArrayList;
import java.util.concurrent.TimeUnit;
public class MusicActivity extends AppCompatActivity {
MediaPlayer mediaPlayer;
private int currentIndex = 0;
ImageButton
ivsongprevious,ivsongback,ivsongplay,ivsongforward,ivsongnext;
ImageView ivsongimage;
private static int stime,btime=5000,ftime=5000;
TextView tvsongname,tvsongtime1,tvsongtime2;
SeekBar seekBar;
ArrayList<Integer> songArrayList = new ArrayList<>();
ArrayList<String> songTitleList = new ArrayList<>();
ArrayList<Integer> songposterarray = new ArrayList<>();
Handler h = new Handler();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
EdgeToEdge.enable(this);
setContentView(R.layout.activity_music);
ivsongimage = findViewById(R.id.iventertainmentSongImage);
tvsongname = findViewById(R.id.tventertainmentSongName);
tvsongtime1 = findViewById(R.id.tvmusicsongtime1);
tvsongtime2 = findViewById(R.id.tvmusicsongtime2);
ivsongprevious = findViewById(R.id.iventertainmentSongprevious);
ivsongback = findViewById(R.id.iventertainmentSongback);
ivsongplay = findViewById(R.id.iventertainmentSongplay);
ivsongforward = findViewById(R.id.iventertainmentSongforword);
ivsongnext = findViewById(R.id.iventertainmentSongnext);
seekBar = findViewById(R.id.sbentertainmentbar);
songArrayList.add(R.raw.gallangoodiyaan);
songArrayList.add(R.raw.kabira);
songArrayList.add(R.raw.nightchanges);
songposterarray.add(R.drawable.gallangoodiyaan);
songTitleList.add("GallanGoodiyaan");
songposterarray.add(R.drawable.kabira);
songTitleList.add("Kabira");
songposterarray.add(R.drawable.onedirection);
songTitleList.add("Night Changes");
ivsongplay.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(mediaPlayer != null && mediaPlayer.isPlaying()){
mediaPlayer.pause();
ivsongplay.setImageResource(R.drawable.icon_play);
}else {
mediaPlayer.start();
ivsongplay.setImageResource(R.drawable.icon_pause);
}
}
});
seekBar.setOnSeekBarChangeListener(new
SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
if (fromUser)
{
mediaPlayer.seekTo(progress);
seekBar.setProgress(progress);
}
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
mediaPlayer = MediaPlayer.create(MusicActivity.this,
songArrayList.get(currentIndex));
ivsongplay.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mediaPlayer != null && mediaPlayer.isPlaying()) {
mediaPlayer.pause();
ivsongplay.setImageResource(R.drawable.icon_play);
} else {
tvsongname.setText(songTitleList.get(currentIndex));
ivsongimage.setImageResource(songposterarray.get(currentIndex));
seekBar.setMax(mediaPlayer.getDuration());
tvsongtime2.setText(formatTime(mediaPlayer.getDuration()));
mediaPlayer.start();
ivsongplay.setImageResource(R.drawable.icon_pause);
}
}
});
ivsongnext.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
nextSong();
}
});
ivsongprevious.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
previousSong();
}
});
ivsongforward.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
forwardSong();
}
});
ivsongback.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
backwardSong();
}
});
mediaPlayer.setOnCompletionListener(new
MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
nextSong();
}
});
// Update the SeekBar position
h.postDelayed(updateSeekBar, 1000);
}
private void setupMediaPlayer() {
if (mediaPlayer != null) {
mediaPlayer.release();
}
mediaPlayer = MediaPlayer.create(MusicActivity.this,
songArrayList.get(currentIndex));
tvsongname.setText(songTitleList.get(currentIndex));
ivsongimage.setImageResource(songposterarray.get(currentIndex));
seekBar.setMax(mediaPlayer.getDuration());
tvsongtime2.setText(formatTime(mediaPlayer.getDuration()));
mediaPlayer.start();
ivsongplay.setImageResource(R.drawable.icon_pause);
mediaPlayer.setOnCompletionListener(new
MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
nextSong();
}
});
}
private void nextSong() {
currentIndex = (currentIndex + 1) % songArrayList.size();
setupMediaPlayer();
}
private void previousSong() {
currentIndex = (currentIndex - 1 < 0) ? (songArrayList.size() - 1)
: (currentIndex - 1);
setupMediaPlayer();
}
private void forwardSong() {
if (mediaPlayer != null) {
int newPosition = mediaPlayer.getCurrentPosition() + 5000;
//forward by 10 seconds
if (newPosition < mediaPlayer.getDuration())
{
mediaPlayer.seekTo(newPosition);
} else
{
Toast.makeText(this, "Cannot forward the song",
Toast.LENGTH_SHORT).show();
// nextsong();
}
}
}
private void backwardSong() {
if (mediaPlayer != null) {
int newPosition = mediaPlayer.getCurrentPosition() - 10000;
//backward by 10 seconds
if (newPosition > 0) {
mediaPlayer.seekTo(newPosition);
} else {
Toast.makeText(this, "Cannot backward the song",
Toast.LENGTH_SHORT).show();
// mediaPlayer.seekTo(0);
}
}
}
private Runnable updateSeekBar = new Runnable() {
@Override
public void run() {
if (mediaPlayer != null) {
seekBar.setProgress(mediaPlayer.getCurrentPosition());
tvsongtime1.setText(formatTime(mediaPlayer.getCurrentPosition()));
h.postDelayed(this, 1000);
}
}
};
private String formatTime(int millis) {
return String.format("%02d:%02d",
TimeUnit.MILLISECONDS.toMinutes(millis) %
TimeUnit.HOURS.toMinutes(1),
TimeUnit.MILLISECONDS.toSeconds(millis) %
TimeUnit.MINUTES.toSeconds(1));
}
}
activity_music
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/main"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="@color/black">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_margin="70sp"
android:gravity="center">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fontFamily="sans-serif-thin"
android:text="Now Playing:"
android:textColor="@color/white"
android:textSize="16sp"
android:textStyle="bold" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/tventertainmentSongName"
android:textSize="16sp"
android:textColor="@color/white"
android:textStyle="bold"
android:fontFamily="sans-serif-thin"
android:layout_marginLeft="8dp"/>
</LinearLayout>
<ImageView
android:id="@+id/iventertainmentSongImage"
android:layout_width="250dp"
android:layout_height="228dp"
android:layout_marginLeft="80dp"
android:layout_marginTop="70dp"
android:src="@drawable/music2"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_marginTop="40dp">
<SeekBar
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="2"
android:id="@+id/sbentertainmentbar"
android:thumbTint="@color/pich"
android:progressTint="@color/pich"
android:layout_marginLeft="30dp"
android:layout_marginRight="30dp"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="24dp"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="left"
android:id="@+id/tvmusicsongtime1"
android:layout_marginLeft="10dp"
android:fontFamily="sans-serif-thin"
android:text="00.00"
android:textColor="@color/white"
android:textSize="15dp"
android:textStyle="bold" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right"
android:id="@+id/tvmusicsongtime2"
android:layout_marginLeft="290dp"
android:fontFamily="sans-serif-thin"
android:text="00.00"
android:textColor="@color/white"
android:textSize="15dp"
android:textStyle="bold" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="50sp"
android:layout_marginTop="20dp"
android:gravity="center"
android:orientation="horizontal"
android:weightSum="5">
<ImageButton
android:id="@+id/iventertainmentSongprevious"
android:layout_width="0dp"
android:layout_height="40dp"
android:layout_weight="1"
android:src="@drawable/icon_previous" />
<ImageButton
android:id="@+id/iventertainmentSongback"
android:layout_width="0dp"
android:layout_height="40dp"
android:layout_weight="1"
android:src="@drawable/icon_back" />
<ImageButton
android:id="@+id/iventertainmentSongplay"
android:layout_width="0dp"
android:layout_height="40dp"
android:layout_weight="1"
android:src="@drawable/icon_play" />
<ImageButton
android:id="@+id/iventertainmentSongforword"
android:layout_width="0dp"
android:layout_height="40dp"
android:layout_weight="1"
android:src="@drawable/icon_forward" />
<ImageButton
android:id="@+id/iventertainmentSongnext"
android:layout_width="0dp"
android:layout_height="40dp"
android:layout_weight="1"
android:src="@drawable/icon_next" />
</LinearLayout>
</LinearLayout>