Skip to content

Commit

Permalink
Merge pull request #138 from tobexyz/feat/issue104
Browse files Browse the repository at this point in the history
issue #104 support for fast forward and fast rewind
  • Loading branch information
tobexyz authored Dec 22, 2024
2 parents f364329 + c125f64 commit 7fd21ff
Show file tree
Hide file tree
Showing 20 changed files with 293 additions and 49 deletions.
13 changes: 13 additions & 0 deletions yaacc/src/main/java/de/yaacc/player/AVTransportPlayer.java
Original file line number Diff line number Diff line change
Expand Up @@ -449,6 +449,19 @@ public int getIconResourceId() {
return R.drawable.ic_baseline_devices_32;
}


public long getCurrentPosition() {
if (currentPositionInfo == null) {
getPositionInfo();
}
if (currentPositionInfo != null) {
Log.v(getClass().getName(), "Elapsed time: " + currentPositionInfo.getTrackElapsedSeconds() + " in millis: " + currentPositionInfo.getTrackRemainingSeconds() * 1000);
return currentPositionInfo.getTrackElapsedSeconds() * 1000;
}
return -1;

}

@Override
public void seekTo(long millisecondsFromStart) {
if (getDevice() == null) {
Expand Down
21 changes: 21 additions & 0 deletions yaacc/src/main/java/de/yaacc/player/AVTransportPlayerActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -197,6 +197,8 @@ protected void initialize() {
ImageButton btnPause = (ImageButton) findViewById(R.id.avtransportPlayerActivityControlPause);
ImageButton btnPlaylist = (ImageButton) findViewById(R.id.avtransportPlayerActivityControlPlaylist);
ImageButton btnExit = (ImageButton) findViewById(R.id.avtransportPlayerActivityControlExit);
ImageButton btnFf = (ImageButton) findViewById(R.id.avtransportPlayerActivityControlFastForward);
ImageButton btnFr = (ImageButton) findViewById(R.id.avtransportPlayerActivityControlFastRewind);
if (player == null) {
btnPrev.setActivated(false);
btnNext.setActivated(false);
Expand All @@ -205,6 +207,8 @@ protected void initialize() {
btnPause.setActivated(false);
btnExit.setActivated(false);
btnPlaylist.setActivated(false);
btnFf.setActivated(false);
btnFr.setActivated(false);
} else {
player.addPropertyChangeListener(event -> {
if (AbstractPlayer.PROPERTY_ITEM.equals(event.getPropertyName())) {
Expand All @@ -222,7 +226,24 @@ protected void initialize() {
btnPause.setActivated(true);
btnExit.setActivated(true);
btnPlaylist.setActivated(true);
btnFf.setActivated(true);
btnFr.setActivated(true);
}

btnFf.setOnClickListener(v -> {
Player ply = getPlayer();
if (ply != null) {
ply.fastForward(10);
}
});

btnFr.setOnClickListener(v -> {
Player ply = getPlayer();
if (ply != null) {
ply.fastRewind(10);
}
});

btnPrev.setOnClickListener(v -> {
Player p = getPlayer();
if (p != null) {
Expand Down
13 changes: 13 additions & 0 deletions yaacc/src/main/java/de/yaacc/player/AbstractPlayer.java
Original file line number Diff line number Diff line change
Expand Up @@ -740,6 +740,9 @@ protected void firePropertyChange(String property, Object oldValue,
this.pcs.firePropertyChange(property, oldValue, newValue);
}


public abstract long getCurrentPosition();

@Override
public String getDuration() {
return "";
Expand Down Expand Up @@ -847,5 +850,15 @@ public boolean hasActionGetMute() {
return true;
}

@Override
public void fastForward(int i) {

seekTo(getCurrentPosition() + (i * 1000));
}

@Override
public void fastRewind(int i) {
seekTo(getCurrentPosition() - (i * 1000));
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -269,9 +269,14 @@ public String getDuration() {

}

public long getCurrentPosition() {
if (!isMusicServiceBound()) return 0;
return getBackgroundService().getCurrentPosition();
}

public String getElapsedTime() {
if (!isMusicServiceBound()) return "";
return formatMillis(getBackgroundService().getCurrentPosition());
return formatMillis(getCurrentPosition());
}


Expand Down
15 changes: 15 additions & 0 deletions yaacc/src/main/java/de/yaacc/player/LocalImagePlayer.java
Original file line number Diff line number Diff line change
Expand Up @@ -475,6 +475,11 @@ public String getDuration() {
return "";
}

@Override
public long getCurrentPosition() {
return 0;
}

@Override
public String getElapsedTime() {
return "";
Expand Down Expand Up @@ -569,4 +574,14 @@ public void addItems(List<PlayableItem> playableItemList) {
public List<PlayableItem> getItems() {
return new ArrayList<>();
}

@Override
public void fastForward(int i) {
//Not implemented
}

@Override
public void fastRewind(int i) {
//Not implemented
}
}
7 changes: 7 additions & 0 deletions yaacc/src/main/java/de/yaacc/player/MultiContentPlayer.java
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,13 @@ protected void startItem(PlayableItem playableItem, Object loadedItem) {

}

@Override
public long getCurrentPosition() {
Log.d(getClass().getName(), "CurrentPosition not implemented");

return 0;
}


@Override
public URI getAlbumArt() {
Expand Down
20 changes: 20 additions & 0 deletions yaacc/src/main/java/de/yaacc/player/MusicPlayerActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,8 @@ protected void initialize() {
ImageButton btnPause = (ImageButton) findViewById(R.id.musicActivityControlPause);
ImageButton btnPlaylist = (ImageButton) findViewById(R.id.musicActivityControlPlaylist);
ImageButton btnExit = (ImageButton) findViewById(R.id.musicActivityControlExit);
ImageButton btnFf = (ImageButton) findViewById(R.id.musicActivityControlFastForward);
ImageButton btnFr = (ImageButton) findViewById(R.id.musicActivityControlFastRewind);
if (player == null) {
btnPrev.setActivated(false);
btnNext.setActivated(false);
Expand All @@ -95,6 +97,8 @@ protected void initialize() {
btnPause.setActivated(false);
btnPlaylist.setActivated(false);
btnExit.setActivated(false);
btnFf.setActivated(false);
btnFr.setActivated(false);
} else {
player.addPropertyChangeListener(event -> {
if (LocalBackgoundMusicPlayer.PROPERTY_ITEM.equals(event.getPropertyName())) {
Expand All @@ -111,7 +115,23 @@ protected void initialize() {
btnPause.setActivated(true);
btnPlaylist.setActivated(true);
btnExit.setActivated(true);
btnFf.setActivated(true);
btnFr.setActivated(true);
}
btnFf.setOnClickListener(v -> {
Player ply = getPlayer();
if (ply != null) {
ply.fastForward(10);
}
});

btnFr.setOnClickListener(v -> {
Player ply = getPlayer();
if (ply != null) {
ply.fastRewind(10);
}
});

btnPrev.setOnClickListener(v -> {
Player ply = getPlayer();
if (ply != null) {
Expand Down
20 changes: 20 additions & 0 deletions yaacc/src/main/java/de/yaacc/player/Player.java
Original file line number Diff line number Diff line change
Expand Up @@ -171,6 +171,13 @@ public interface Player {
*/
String getDuration();

/**
* returns the current position of the current item in millis
*
* @return the position
*/
long getCurrentPosition();

/**
* returns the elapsed time of the current item
*
Expand Down Expand Up @@ -230,4 +237,17 @@ public interface Player {

List<PlayableItem> getItems();

/**
* fast forward seconds
*
* @param i seconds
*/
void fastForward(int i);

/**
* fast rewind seconds
*
* @param i seconds
*/
void fastRewind(int i);
}
12 changes: 12 additions & 0 deletions yaacc/src/main/java/de/yaacc/player/SyncAVTransportPlayer.java
Original file line number Diff line number Diff line change
Expand Up @@ -245,6 +245,18 @@ public void success(ActionInvocation actioninvocation) {
getUpnpClient().getControlPoint().execute(actionCallback);
}

public long getCurrentPosition() {
if (currentPositionInfo == null) {
getPositionInfo();
}
if (currentPositionInfo != null) {
Log.v(getClass().getName(), "Elapsed time: " + currentPositionInfo.getTrackElapsedSeconds() + " in millis: " + currentPositionInfo.getTrackRemainingSeconds() * 1000);
return currentPositionInfo.getTrackElapsedSeconds() * 1000;
}
return -1;

}

/**
* Watchdog for async calls to complete
*/
Expand Down
5 changes: 5 additions & 0 deletions yaacc/src/main/res/drawable/ic_baseline_fast_forward_24.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:height="24dp" android:tint="#FFFFFF" android:viewportHeight="24" android:viewportWidth="24" android:width="24dp">

<path android:fillColor="@android:color/white" android:pathData="M4,18l8.5,-6L4,6v12zM13,6v12l8.5,-6L13,6z"/>

</vector>
5 changes: 5 additions & 0 deletions yaacc/src/main/res/drawable/ic_baseline_fast_forward_32.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:height="32dp" android:tint="#FFFFFF" android:viewportHeight="24" android:viewportWidth="24" android:width="32dp">

<path android:fillColor="@android:color/white" android:pathData="M4,18l8.5,-6L4,6v12zM13,6v12l8.5,-6L13,6z"/>

</vector>
5 changes: 5 additions & 0 deletions yaacc/src/main/res/drawable/ic_baseline_fast_forward_48.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:height="48dp" android:tint="#FFFFFF" android:viewportHeight="24" android:viewportWidth="24" android:width="48dp">

<path android:fillColor="@android:color/white" android:pathData="M4,18l8.5,-6L4,6v12zM13,6v12l8.5,-6L13,6z"/>

</vector>
5 changes: 5 additions & 0 deletions yaacc/src/main/res/drawable/ic_baseline_fast_rewind_24.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:height="24dp" android:tint="#FFFFFF" android:viewportHeight="24" android:viewportWidth="24" android:width="24dp">

<path android:fillColor="@android:color/white" android:pathData="M11,18L11,6l-8.5,6 8.5,6zM11.5,12l8.5,6L20,6l-8.5,6z"/>

</vector>
5 changes: 5 additions & 0 deletions yaacc/src/main/res/drawable/ic_baseline_fast_rewind_32.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:height="32dp" android:tint="#FFFFFF" android:viewportHeight="24" android:viewportWidth="24" android:width="32dp">

<path android:fillColor="@android:color/white" android:pathData="M11,18L11,6l-8.5,6 8.5,6zM11.5,12l8.5,6L20,6l-8.5,6z"/>

</vector>
5 changes: 5 additions & 0 deletions yaacc/src/main/res/drawable/ic_baseline_fast_rewind_48.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:height="48dp" android:tint="#FFFFFF" android:viewportHeight="24" android:viewportWidth="24" android:width="48dp">

<path android:fillColor="@android:color/white" android:pathData="M11,18L11,6l-8.5,6 8.5,6zM11.5,12l8.5,6L20,6l-8.5,6z"/>

</vector>
59 changes: 43 additions & 16 deletions yaacc/src/main/res/layout-land/activity_music_player.xml
Original file line number Diff line number Diff line change
Expand Up @@ -163,14 +163,6 @@
android:paddingRight="16dp">


<ImageButton
android:id="@+id/musicActivityControlPrev"
android:layout_width="48dp"
android:layout_height="48dp"
android:layout_marginStart="2dp"
android:contentDescription="@string/previous"
app:srcCompat="@drawable/ic_baseline_skip_previous_32" />

<ImageButton
android:id="@+id/musicActivityControlPlay"
android:layout_width="48dp"
Expand All @@ -196,13 +188,6 @@
android:contentDescription="@string/stop"
app:srcCompat="@drawable/ic_baseline_stop_32" />

<ImageButton
android:id="@+id/musicActivityControlNext"
android:layout_width="48dp"
android:layout_height="48dp"
android:layout_marginStart="2dp"
android:contentDescription="@string/next"
app:srcCompat="@drawable/ic_baseline_skip_next_32" />

<ImageButton
android:id="@+id/musicActivityControlPlaylist"
Expand All @@ -211,7 +196,7 @@
android:layout_marginStart="2dp"
android:contentDescription="@string/playlist"
app:srcCompat="@drawable/ic_baseline_playlist_play_32" />

<ImageButton
android:id="@+id/musicActivityControlExit"
android:layout_width="48dp"
Expand All @@ -221,6 +206,48 @@
app:srcCompat="@drawable/ic_baseline_cancel_32" />
</LinearLayout>

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="horizontal"
android:paddingLeft="16dp"
android:paddingRight="16dp">


<ImageButton
android:id="@+id/musicActivityControlPrev"
android:layout_width="48dp"
android:layout_height="48dp"
android:layout_marginStart="2dp"
android:contentDescription="@string/previous"
app:srcCompat="@drawable/ic_baseline_skip_previous_32" />

<ImageButton
android:id="@+id/musicActivityControlFastRewind"
android:layout_width="48dp"
android:layout_height="48dp"
android:layout_marginStart="2dp"
android:contentDescription="@string/fast_rewind"
app:srcCompat="@drawable/ic_baseline_fast_rewind_32" />

<ImageButton
android:id="@+id/musicActivityControlFastForward"
android:layout_width="48dp"
android:layout_height="48dp"
android:layout_marginStart="2dp"
android:contentDescription="@string/fast_forward"
app:srcCompat="@drawable/ic_baseline_fast_forward_32" />

<ImageButton
android:id="@+id/musicActivityControlNext"
android:layout_width="48dp"
android:layout_height="48dp"
android:layout_marginStart="2dp"
android:contentDescription="@string/next"
app:srcCompat="@drawable/ic_baseline_skip_next_32" />
</LinearLayout>

</LinearLayout>
</RelativeLayout>
</LinearLayout>
Loading

0 comments on commit 7fd21ff

Please sign in to comment.