Skip to content

Commit 9ffcf15

Browse files
authored
Merge pull request #234 from tobexyz/feat/issue225
Feat/issue225
2 parents f857a5d + ff85d37 commit 9ffcf15

4 files changed

Lines changed: 33 additions & 2 deletions

File tree

yaacc/src/main/java/de/yaacc/Yaacc.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ public void onCreate() {
7171
super.onCreate();
7272
YaaccLogger.initialize(this);
7373
createNotificationChannel();
74+
PreferenceManager.setDefaultValues(this, R.xml.preference, false);
7475
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
7576
boolean darkMode = preferences.getBoolean(getString(R.string.settings_dark_mode_key), true);
7677
if (darkMode) {

yaacc/src/main/java/de/yaacc/player/LocalMediaSessionPlayer.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ public class LocalMediaSessionPlayer extends AbstractPlayer {
5555
private URI albumArtUri;
5656
private PlayableItem pendingItem; // Queue item if service not ready
5757
private int pendingIndex;
58+
private volatile boolean pendingPlay;
5859

5960
public LocalMediaSessionPlayer(UpnpClient upnpClient, String name, String shortName) {
6061
this(upnpClient);
@@ -180,9 +181,15 @@ public void onServiceConnected(ComponentName className, IBinder binder) {
180181
if (pendingItem != null) {
181182
YaaccLogger.d(getClass().getName(), "Playing pending item: " + pendingItem.getTitle());
182183
PlayableItem item = pendingItem;
183-
startItem(item, null, pendingIndex);
184+
int idx = pendingIndex;
184185
pendingItem = null;
185186
pendingIndex = -1;
187+
pendingPlay = false;
188+
startItem(item, null, idx);
189+
} else if (pendingPlay) {
190+
YaaccLogger.d(getClass().getName(), "Pending play flag set, calling play()");
191+
pendingPlay = false;
192+
play();
186193
}
187194
}
188195
}
@@ -240,6 +247,7 @@ protected void startItem(PlayableItem playableItem, Object loadedItem, int index
240247
YaaccLogger.w(getClass().getName(), "ExoPlayer not ready, queuing item");
241248
pendingItem = playableItem;
242249
pendingIndex = index;
250+
pendingPlay = true;
243251
return;
244252
}
245253

yaacc/src/main/java/de/yaacc/upnp/server/YaaccUpnpServerService.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -682,6 +682,15 @@ public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, Strin
682682
SAFCacheManager.getInstance(getApplicationContext()).preloadSafDurations();
683683
}
684684

685+
// Notify content directory change when media-type serving preferences change
686+
if (getApplicationContext().getString(R.string.settings_local_server_serve_images_chkbx).equals(key) ||
687+
getApplicationContext().getString(R.string.settings_local_server_serve_video_chkbx).equals(key) ||
688+
getApplicationContext().getString(R.string.settings_local_server_serve_music_chkbx).equals(key) ||
689+
getApplicationContext().getString(R.string.settings_local_server_serve_saf_chkbx).equals(key)) {
690+
YaaccLogger.d(this.getClass().getName(), "Media serving preference changed, recreating device");
691+
createUpnpDevice();
692+
}
693+
685694
// Handle live streaming toggles (Android 10+)
686695
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.Q) {
687696
if (getApplicationContext().getString(R.string.settings_local_server_serve_system_audio_chkbx).equals(key)) {

yaacc/src/main/java/de/yaacc/upnp/server/avtransport/AvTransportMediaRendererPlaying.java

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,20 @@ public void onEntry() {
7373
|| getTransport().getPositionInfo().getTrackURI().equals("")) {
7474
return;
7575
}
76-
players = upnpClient.initializePlayers(getTransport());
76+
// Try to get existing players if resuming from pause
77+
players = upnpClient.getCurrentPlayers(getTransport());
78+
boolean hasPausedPlayer = false;
79+
if (players != null && !players.isEmpty()) {
80+
for (Player player : players) {
81+
if (player != null && player.isPaused()) {
82+
hasPausedPlayer = true;
83+
break;
84+
}
85+
}
86+
}
87+
if (!hasPausedPlayer) {
88+
players = upnpClient.initializePlayers(getTransport());
89+
}
7790
for (Player player : players) {
7891
player.play();
7992
}

0 commit comments

Comments
 (0)