Currently translated at 100.0% (740 of 740 strings)
Translated using Weblate (Swedish)
Currently translated at 100.0% (740 of 740 strings)
Translated using Weblate (Catalan)
Currently translated at 88.2% (653 of 740 strings)
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 90.4% (76 of 84 strings)
Translated using Weblate (Belarusian)
Currently translated at 100.0% (740 of 740 strings)
Translated using Weblate (Hindi)
Currently translated at 100.0% (84 of 84 strings)
Translated using Weblate (Punjabi)
Currently translated at 100.0% (84 of 84 strings)
Translated using Weblate (Belarusian)
Currently translated at 100.0% (740 of 740 strings)
Translated using Weblate (Punjabi)
Currently translated at 100.0% (740 of 740 strings)
Translated using Weblate (Hindi)
Currently translated at 100.0% (740 of 740 strings)
Translated using Weblate (Portuguese)
Currently translated at 100.0% (740 of 740 strings)
Translated using Weblate (Bulgarian)
Currently translated at 100.0% (740 of 740 strings)
Translated using Weblate (German)
Currently translated at 100.0% (740 of 740 strings)
Translated using Weblate (German)
Currently translated at 100.0% (740 of 740 strings)
Translated using Weblate (Bulgarian)
Currently translated at 100.0% (740 of 740 strings)
Translated using Weblate (Croatian)
Currently translated at 99.7% (738 of 740 strings)
Translated using Weblate (Russian)
Currently translated at 100.0% (740 of 740 strings)
Translated using Weblate (Indonesian)
Currently translated at 100.0% (740 of 740 strings)
Translated using Weblate (Belarusian)
Currently translated at 100.0% (740 of 740 strings)
Translated using Weblate (Belarusian)
Currently translated at 100.0% (740 of 740 strings)
Translated using Weblate (Belarusian)
Currently translated at 100.0% (740 of 740 strings)
Translated using Weblate (Italian)
Currently translated at 100.0% (84 of 84 strings)
Translated using Weblate (Czech)
Currently translated at 100.0% (84 of 84 strings)
Translated using Weblate (Portuguese)
Currently translated at 99.8% (739 of 740 strings)
Translated using Weblate (Ukrainian)
Currently translated at 100.0% (740 of 740 strings)
Translated using Weblate (Czech)
Currently translated at 100.0% (740 of 740 strings)
Translated using Weblate (Russian)
Currently translated at 100.0% (740 of 740 strings)
Translated using Weblate (Hungarian)
Currently translated at 100.0% (740 of 740 strings)
Translated using Weblate (French)
Currently translated at 100.0% (84 of 84 strings)
Translated using Weblate (Arabic)
Currently translated at 100.0% (84 of 84 strings)
Translated using Weblate (Arabic)
Currently translated at 100.0% (740 of 740 strings)
Translated using Weblate (Belarusian)
Currently translated at 99.5% (737 of 740 strings)
Translated using Weblate (Turkish)
Currently translated at 100.0% (740 of 740 strings)
Translated using Weblate (Hebrew)
Currently translated at 100.0% (740 of 740 strings)
Translated using Weblate (Icelandic)
Currently translated at 99.4% (736 of 740 strings)
Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (740 of 740 strings)
Translated using Weblate (Ukrainian)
Currently translated at 100.0% (740 of 740 strings)
Translated using Weblate (Greek)
Currently translated at 25.0% (21 of 84 strings)
Translated using Weblate (Greek)
Currently translated at 23.8% (20 of 84 strings)
Translated using Weblate (Estonian)
Currently translated at 100.0% (740 of 740 strings)
Translated using Weblate (Bulgarian)
Currently translated at 100.0% (740 of 740 strings)
Translated using Weblate (French)
Currently translated at 99.5% (737 of 740 strings)
Co-authored-by: 439JBYL80IGQTF25UXNR0X1BG <439JBYL80IGQTF25UXNR0X1BG@users.noreply.hosted.weblate.org>
Co-authored-by: Andrey F <firsan777@mail.ru>
Co-authored-by: Anonymous <noreply@weblate.org>
Co-authored-by: Antonin Del Fabbro <message@antonin.one>
Co-authored-by: Christian Eichert <c@zp1.net>
Co-authored-by: Drugi Sapog <dindrugi@users.noreply.hosted.weblate.org>
Co-authored-by: Eduardo Calixto <eduardogubertcalixto@gmail.com>
Co-authored-by: Emin Tufan Çetin <etcetin@gmail.com>
Co-authored-by: Fjuro <fjuro@users.noreply.hosted.weblate.org>
Co-authored-by: Ghost of Sparta <makesocialfoss32@keemail.me>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Igor Rückert <igorruckert@yahoo.com.br>
Co-authored-by: Ihor Hordiichuk <igor_ck@outlook.com>
Co-authored-by: Jan Layola <gilajan@protonmail.com>
Co-authored-by: Kevin Wang <wmk153024@gmail.com>
Co-authored-by: Linerly <linerly@proton.me>
Co-authored-by: Massimo Pissarello <mapi68@gmail.com>
Co-authored-by: Milo Ivir <mail@milotype.de>
Co-authored-by: Petr Kadlec <mormegil@centrum.cz>
Co-authored-by: Priit Jõerüüt <hwlate@joeruut.com>
Co-authored-by: Rex_sa <rex.sa@pm.me>
Co-authored-by: Sergio Marques <so.boston.android@gmail.com>
Co-authored-by: Sveinn í Felli <sv1@fellsnet.is>
Co-authored-by: XxVictoriaxX <evakonoob@gmail.com>
Co-authored-by: Yaron Shahrabani <sh.yaron@gmail.com>
Co-authored-by: bittin1ddc447d824349b2 <bittin@reimu.nl>
Co-authored-by: trunars <trunars@gmail.com>
Co-authored-by: whistlingwoods <72640314+whistlingwoods@users.noreply.github.com>
Co-authored-by: Максим Горпиніч <maksimgorpinic2005a@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/ar/
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/cs/
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/el/
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/fr/
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/hi/
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/it/
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/pa/
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/zh_Hans/
Translation: NewPipe/Metadata
<string name="share_playlist_with_titles_message">Share playlist with details such as playlist name and video titles or as a simple list of video URLs</string>
Share playlist with details such as playlist name and video titles or as a simple list of video URLs</string>
(Discussion: https://github.com/TeamNewPipe/NewPipe/pull/12065#discussion_r1994349485)
This is, again, a consequence of the commit "Drop some assumptions on how PlayerService is started and reused".
This commit notified VideoDetailFragment of player starting and stopping independently of the player.
Read the comments in the code changes for more information.
This bug started appearing because the way to close the player is now unified in PlayerHolder.stopService(), which causes the player to reach back to the video detail fragment with a notification of the shutdown (i.e. onServiceStopped() is called). This is fixed by adding a nullability check on the binding.
Fixes mini-player not appearing on app start if the player service is already playing something.
The PlayerService (and the player) may be started from an external intent that does not involve the MainActivity (e.g. RouterActivity or Android Auto's media browser interface).
This PR tries to bind to the PlayerService as soon as the MainActivity starts, but only does so in a passive way, i.e. if the service is not already running it is not started.
Once the connection between PlayerHolder and PlayerService is setup, the ACTION_PLAYER_STARTED broadcast is sent to MainActivity so that it can setup the bottom mini-player.
Another important thing this commit does is to check whether the player is open before actually adding the mini-player view, since the PlayerService could be bound even without a running player (e.g. Android Auto's media browser is being used). This is a consequence of commit "Drop some assumptions on how PlayerService is started and reused".
This commit is a consequence of the commit "Drop some assumptions on how PlayerService is started and reused". Since the assumptions on how the PlayerService is started and reused have changed, we also need to adapt the way it is stopped. This means allowing the service to remain alive even after the player is destroyed, in case the system is still accessing PlayerService e.g. through the media browser interface. The foreground service needs to be stopped and the notification removed in any case.
If a playbackPreparer is set, then instead of calling `player.prepare()`, the MediaSessionConnector will call `playbackPreparer.onPrepare(true)` instead, as seen below.
This commit makes it so that playbackPreparer.onPrepare(true) restores the original behavior of just calling player.prepare().
From MediaSessionConnector -> MediaSessionCompat.Callback implementation:
```java
@Override
public void onPlay() {
if (canDispatchPlaybackAction(PlaybackStateCompat.ACTION_PLAY)) {
if (player.getPlaybackState() == Player.STATE_IDLE) {
if (playbackPreparer != null) {
playbackPreparer.onPrepare(/* playWhenReady= */ true);
} else {
player.prepare();
}
} else if (player.getPlaybackState() == Player.STATE_ENDED) {
seekTo(player, player.getCurrentMediaItemIndex(), C.TIME_UNSET);
}
Assertions.checkNotNull(player).play();
}
}
```
This class implements the media browser service interface as a standalone class for clearer separation of concerns (otherwise everything would need to go in PlayerService, since PlayerService overrides MediaBrowserServiceCompat)
Co-authored-by: Haggai Eran <haggai.eran@gmail.com>
Co-authored-by: Profpatsch <mail@profpatsch.de>
This class will receive the media URLs generated by [MediaBrowserImpl] and will start playback of the corresponding streams or playlists.
Co-authored-by: Haggai Eran <haggai.eran@gmail.com>
Co-authored-by: Profpatsch <mail@profpatsch.de>