We don't need to call ``updateRelativeTimeViews`` when the activity is paused, because the user likely won't notice it.
Despite that onResume already calls ``updateRelativeTimeViews`` so there is no need to do that twice.
Core team does not want to convert to Kotlin yet and sees Java as the easier to learn and more well adopted language.
This stance might of course change in the future. For example it could be reasonable to do a complete transition to Kotlin once it is decides that the minSdk is raised to 21 or higher, as we then could use Jetpack particularly Lifecycle and Compose.
Currently translated at 100.0% (672 of 672 strings)
Translated using Weblate (Polish)
Currently translated at 100.0% (672 of 672 strings)
Translated using Weblate (Polish)
Currently translated at 100.0% (672 of 672 strings)
Translated using Weblate (Polish)
Currently translated at 100.0% (672 of 672 strings)
Translated using Weblate (Polish)
Currently translated at 100.0% (672 of 672 strings)
Translated using Weblate (Polish)
Currently translated at 100.0% (672 of 672 strings)
Translated using Weblate (Polish)
Currently translated at 100.0% (672 of 672 strings)
Translated using Weblate (Polish)
Currently translated at 100.0% (672 of 672 strings)
Translated using Weblate (Polish)
Currently translated at 100.0% (672 of 672 strings)
Translated using Weblate (Polish)
Currently translated at 99.8% (671 of 672 strings)
Translated using Weblate (Polish)
Currently translated at 99.8% (671 of 672 strings)
Translated using Weblate (Bavarian)
Currently translated at 8.7% (59 of 672 strings)
Translated using Weblate (Bavarian)
Currently translated at 1.8% (1 of 53 strings)
Translated using Weblate (Polish)
Currently translated at 100.0% (672 of 672 strings)
Translated using Weblate (Ukrainian)
Currently translated at 100.0% (672 of 672 strings)
Co-authored-by: Agnieszka C <aga_04@o2.pl>
Co-authored-by: Bert <robert@it-aicher.de>
Co-authored-by: Evo <weblate@verahawk.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Ihor Hordiichuk <igor_ck@outlook.com>
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/bar/
Translation: NewPipe/Metadata
Currently translated at 100.0% (672 of 672 strings)
Translated using Weblate (Somali)
Currently translated at 100.0% (672 of 672 strings)
Translated using Weblate (Polish)
Currently translated at 100.0% (672 of 672 strings)
Co-authored-by: Agnieszka C <aga_04@o2.pl>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Nadir Nour <dudethatwascool2@gmail.com>
* Fix APK testing section
Correct the instructions to download a test APK
* Update .github/PULL_REQUEST_TEMPLATE.md
Co-authored-by: Mohammed Anas <32234660+mhmdanas@users.noreply.github.com>
Co-authored-by: Mohammed Anas <32234660+mhmdanas@users.noreply.github.com>
Currently translated at 100.0% (672 of 672 strings)
Translated using Weblate (Bavarian)
Currently translated at 6.6% (45 of 672 strings)
Translated using Weblate (Polish)
Currently translated at 100.0% (672 of 672 strings)
Added translation using Weblate (Bavarian)
Translated using Weblate (Somali)
Currently translated at 100.0% (672 of 672 strings)
Translated using Weblate (Polish)
Currently translated at 100.0% (672 of 672 strings)
Translated using Weblate (German)
Currently translated at 100.0% (672 of 672 strings)
Translated using Weblate (French)
Currently translated at 67.9% (36 of 53 strings)
Translated using Weblate (Polish)
Currently translated at 49.0% (26 of 53 strings)
Translated using Weblate (Ukrainian)
Currently translated at 52.8% (28 of 53 strings)
Translated using Weblate (Polish)
Currently translated at 100.0% (672 of 672 strings)
Translated using Weblate (Polish)
Currently translated at 100.0% (672 of 672 strings)
Translated using Weblate (Polish)
Currently translated at 100.0% (672 of 672 strings)
Translated using Weblate (Russian)
Currently translated at 100.0% (672 of 672 strings)
Translated using Weblate (Dutch)
Currently translated at 100.0% (672 of 672 strings)
Translated using Weblate (Ukrainian)
Currently translated at 18.8% (10 of 53 strings)
Co-authored-by: Agnieszka C <aga_04@o2.pl>
Co-authored-by: Bert <robert@it-aicher.de>
Co-authored-by: Evo <weblate@verahawk.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Igor Nedoboy <i.nedoboy@mail.ru>
Co-authored-by: Ihor Hordiichuk <igor_ck@outlook.com>
Co-authored-by: Nadir Nour <dudethatwascool2@gmail.com>
Co-authored-by: Terry Louwers <t.louwers@gmail.com>
Co-authored-by: VfBFan <drop0815@posteo.de>
Co-authored-by: Weblate <noreply@weblate.org>
Co-authored-by: translator <yasinoc375@advew.com>
Co-authored-by: webweblate <webweblate@riseup.net>
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/fr/
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/pl/
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/uk/
Translation: NewPipe/Metadata
See https://github.com/TeamNewPipe/NewPipe/issues/6577#issuecomment-876095378
java.lang.ClassCastException: android.widget.ImageButton cannot be cast to androidx.appcompat.widget.AppCompatImageButton
at org.schabi.newpipe.player.Player.onRepeatModeChanged(Player.java:2263)
at com.google.android.exoplayer2.ExoPlayerImpl.lambda$setRepeatMode$2(ExoPlayerImpl.java:564)
at com.google.android.exoplayer2.-$$Lambda$ExoPlayerImpl$rgrcbaqP9Y8LgzdByBnAfUO4ydU.invokeListener(lambda)
at com.google.android.exoplayer2.BasePlayer$ListenerHolder.invoke(BasePlayer.java:279)
at com.google.android.exoplayer2.ExoPlayerImpl.invokeAll(ExoPlayerImpl.java:1498)
at com.google.android.exoplayer2.ExoPlayerImpl.lambda$notifyListeners$6(ExoPlayerImpl.java:1318)
at com.google.android.exoplayer2.-$$Lambda$ExoPlayerImpl$b59raXxaB-trjwE5bgpZInm1QnU.run(lambda)
at com.google.android.exoplayer2.ExoPlayerImpl.notifyListeners(ExoPlayerImpl.java:1328)
at com.google.android.exoplayer2.ExoPlayerImpl.notifyListeners(ExoPlayerImpl.java:1318)
at com.google.android.exoplayer2.ExoPlayerImpl.setRepeatMode(ExoPlayerImpl.java:564)
at com.google.android.exoplayer2.SimpleExoPlayer.setRepeatMode(SimpleExoPlayer.java:1636)
at org.schabi.newpipe.player.Player.setRepeatMode(Player.java:2253)
at org.schabi.newpipe.player.Player.onRepeatClicked(Player.java:2232)
at org.schabi.newpipe.player.Player.onBroadcastReceived(Player.java:1123)
at org.schabi.newpipe.player.Player.access$200(Player.java:190)
at org.schabi.newpipe.player.Player$3.onReceive(Player.java:1060)
at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:1185)
... 7 more
Playing a video in VideoDetailFragment and rotating the screen to landscape (back and forth more often)
can trigger this error message. Especially if rotation for whatever reason takes long or
playing a high resolution (1080p) video.
The underlying logcat error messages:
05-12 16:38:38.251 24920 26037 E Surface : getSlotFromBufferLocked: unknown buffer: 0x923fc810
05-12 16:38:38.251 24920 26037 W ACodec : [OMX.qcom.video.decoder.avc] can not return buffer 35 to native window
The problem is that that Exoplayer is trying to write to our -- during rotation -- no longer existant
(VideoDetailFragment) SurfaceView.
Solution:
Implementing SurfaceHolder.Callback and using DummySurface we can now handle the lifecycle of the Surface.
How?: In case we are no longer able to write to the Surface eg. through rotation/putting in
background we can set a DummySurface. Although it only works on API >= 23.
Result: we get a little video interruption (audio is still fine) but we won't get the
'Unrecoverable player error occurred' error message.
This implementation is based on and more background information:
'ExoPlayer stuck in buffering after re-adding the surface view a few time 2703'
-> exoplayer fix suggestion link
https://github.com/google/ExoPlayer/issues/2703#issuecomment-300599981
- bugfix: have ServiceConnection created only once!
- select the context within the PlayerHolder to start, stop, bind or unbind the service
-> we have to make sure the Service is started AND stopped within the same context
-> so let PlayerHolder be the one to select the context
- remove removeListener() and replace the call with setListener(null)
- Compatibility: use ContextCompat.startForegroundService instead of startService()