merged upstream/dev

This commit is contained in:
Ritvik Saraf 2018-12-04 23:19:57 +05:30
commit 9b84046865
126 changed files with 4459 additions and 1420 deletions

View File

@ -5,11 +5,14 @@ PLEASE READ THESE GUIDELINES CAREFULLY BEFORE ANY CONTRIBUTION!
## Crash reporting
Do not report crashes in the GitHub issue tracker. NewPipe has an automated crash report system that will ask you to send a report via e-mail when a crash occurs. This contains all the data we need for debugging, and allows you to even add a comment to it. You'll see exactly what is sent, the system is 100% transparent.
Do not report crashes in the GitHub issue tracker. NewPipe has an automated crash report system that will ask you to
send a report via e-mail when a crash occurs. This contains all the data we need for debugging, and allows you to even
add a comment to it. You'll see exactly what is sent, the system is 100% transparent.
## Issue reporting/feature requests
* Search the [existing issues](https://github.com/TeamNewPipe/NewPipe/issues) first to make sure your issue/feature hasn't been reported/requested before
* Search the [existing issues](https://github.com/TeamNewPipe/NewPipe/issues) first to make sure your issue/feature
hasn't been reported/requested before
* Check whether your issue/feature is already fixed/implemented
* Check if the issue still exists in the latest release/beta version
* If you are an Android/Java developer, you are always welcome to fix/implement an issue/a feature yourself. PRs welcome!
@ -19,30 +22,47 @@ Do not report crashes in the GitHub issue tracker. NewPipe has an automated cras
* Issues that only contain a generated bug report, but no describtion might be closed.
## Bug Fixing
* If you want to help NewPipe to become free of bugs (this is our utopic goal for NewPipe), you can send us an email to tnp@newpipe.schabi.org to let me know that you intend to help. We'll send you further instructions. You may, on request, register at our [Sentry](https://sentry.schabi.org) instance (see section "Crash reporting" for more information.
* If you want to help NewPipe to become free of bugs (this is our utopic goal for NewPipe), you can send us an email to
tnp@newpipe.schabi.org to let me know that you intend to help. We'll send you further instructions. You may, on request,
register at our [Sentry](https://sentry.schabi.org) instance (see section "Crash reporting" for more information.
## Translation
* NewPipe can be translated via [Weblate](https://hosted.weblate.org/projects/newpipe/strings/). You can log in there with your GitHub account.
* NewPipe can be translated via [Weblate](https://hosted.weblate.org/projects/newpipe/strings/). You can log in there
with your GitHub account.
## Code contribution
* Stick to NewPipe's style conventions (well, just look the other code and then do it the same way :))
* Do not bring non-free software (e.g., binary blobs) into the project. Also, make sure you do not introduce Google libraries.
* Do not bring non-free software (e.g., binary blobs) into the project. Also, make sure you do not introduce Google
libraries.
* Stick to [F-Droid contribution guidelines](https://f-droid.org/wiki/page/Inclusion_Policy)
* Make changes on a separate branch, not on the master branch. This is commonly known as *feature branch workflow*. You may then send your changes as a pull request on GitHub. Patches to the email address mentioned in this document might not be considered, GitHub is the primary platform. (This only affects you if you are a member of TeamNewPipe)
* When submitting changes, you confirm that your code is licensed under the terms of the [GNU General Public License v3](https://www.gnu.org/licenses/gpl-3.0.html).
* Please test (compile and run) your code before you submit changes! Ideally, provide test feedback in the PR description. Untested code will **not** be merged!
* Make changes on a separate branch, not on the master branch. This is commonly known as *feature branch workflow*. You
may then send your changes as a pull request on GitHub. Patches to the email address mentioned in this document might
not be considered, GitHub is the primary platform. (This only affects you if you are a member of TeamNewPipe)
* When submitting changes, you confirm that your code is licensed under the terms of the
[GNU General Public License v3](https://www.gnu.org/licenses/gpl-3.0.html).
* Please test (compile and run) your code before you submit changes! Ideally, provide test feedback in the PR
description. Untested code will **not** be merged!
* Try to figure out yourself why builds on our CI fail.
* Make sure your PR is up-to-date with the rest of the code. Often, a simple click on "Update branch" will do the job, but if not, you are asked to merge the master branch manually and resolve the problems on your own. That will make the maintainers' jobs way easier.
* Please show intention to maintain your features and code after you contributed it. Unmaintained code is a hassle for the core developers, and just adds work. If you do not intend to maintain features you contributed, please think again about submission, or clearly state that in the description of your PR.
* Make sure your PR is up-to-date with the rest of the code. Often, a simple click on "Update branch" will do the job,
but if not, you are asked to merge the master branch manually and resolve the problems on your own. That will make the
maintainers' jobs way easier.
* Please show intention to maintain your features and code after you contributed it. Unmaintained code is a hassle for
the core developers, and just adds work. If you do not intend to maintain features you contributed, please think again
about submission, or clearly state that in the description of your PR.
* Respond yourselves if someone requests changes or otherwise raises issues about your PRs.
* Check if your contributions align with the [fdroid inclusion guidelines](https://f-droid.org/en/docs/Inclusion_Policy/).
* Check if your submission can be build with the current fdroid build server setup.
* Send PR that only cover one specific issue/solution/bug. Do not send PRs that are huge and consists of multiple
independent solutions.
## Communication
* WE DO NOW HAVE A MAILING LIST: [newpipe@list.schabi.org](https://list.schabi.org/cgi-bin/mailman/listinfo/newpipe).
* There is an IRC channel on Freenode which is regularly visited by the core team and other developers: [#newpipe](irc:irc.freenode.net/newpipe). [Click here for Webchat](https://webchat.freenode.net/?channels=newpipe)!
* If you want to get in touch with the core team or one of our other contributors you can send an email to tnp(at)schabi.org. Please do not send issue reports, they will be ignored and remain unanswered! Use the GitHub issue tracker described above!
* There is an IRC channel on Freenode which is regularly visited by the core team and other developers:
[#newpipe](irc:irc.freenode.net/newpipe). [Click here for Webchat](https://webchat.freenode.net/?channels=newpipe)!
* If you want to get in touch with the core team or one of our other contributors you can send an email to
tnp(at)schabi.org. Please do not send issue reports, they will be ignored and remain unanswered! Use the GitHub issue
tracker described above!
* Feel free to post suggestions, changes, ideas etc. on GitHub, IRC or the mailing list!

View File

@ -5,13 +5,13 @@ android:
components:
# The BuildTools version used by NewPipe
- tools
- build-tools-27.0.3
- build-tools-28.0.3
# The SDK version used to compile NewPipe
- android-27
- android-28
before_install:
- yes | sdkmanager "platforms;android-27"
- yes | sdkmanager "platforms;android-28"
script: ./gradlew -Dorg.gradle.jvmargs=-Xmx1536m assembleDebug lintDebug testDebugUnitTest
licenses:

View File

@ -1,74 +1,77 @@
<p align="center"><a href="https://newpipe.schabi.org"><img src="assets/new_pipe_icon_5.png" width="150"/></a></p>
<p align="center"><a href="https://newpipe.schabi.org"><img src="assets/new_pipe_icon_5.png" width="150"></a></p>
<h2 align="center"><b>NewPipe</b></h2>
<h4 align="center">A free lightweight YouTube frontend for Android.</h4>
<p align="center"><a href="https://f-droid.org/packages/org.schabi.newpipe/"><img src="https://f-droid.org/wiki/images/0/06/F-Droid-button_get-it-on.png"/></a></p>
<h4 align="center">A libre lightweight streaming frontend for Android.</h4>
<p align="center"><a href="https://f-droid.org/packages/org.schabi.newpipe/"><img src="https://f-droid.org/wiki/images/0/06/F-Droid-button_get-it-on.png"></a></p>
<p align="center">
<a href="https://github.com/TeamNewPipe/NewPipe" alt="GitHub release"><img src="https://img.shields.io/github/release/TeamNewPipe/NewPipe.svg" /></a>
<a href="https://www.gnu.org/licenses/gpl-3.0" alt="License: GPL v3"><img src="https://img.shields.io/badge/License-GPL%20v3-blue.svg" /></a>
<a href="https://travis-ci.org/TeamNewPipe/NewPipe" alt="Build Status"><img src="https://travis-ci.org/TeamNewPipe/NewPipe.svg" /></a>
<a href="https://hosted.weblate.org/engage/NewPipe/" alt="Translation Status"><img src="https://hosted.weblate.org/widgets/NewPipe/-/svg-badge.svg" /></a>
<a href="http://webchat.freenode.net/?channels=%23newpipe" alt="IRC channel: #newpipe"><img src="https://img.shields.io/badge/IRC%20chat-%23newpipe-brightgreen.svg" /></a>
<a href="https://www.bountysource.com/teams/newpipe" alt="Bountysource bounties"><img src="https://img.shields.io/bountysource/team/newpipe/activity.svg?colorB=cd201f"/></a>
<a href="https://github.com/TeamNewPipe/NewPipe" alt="GitHub release"><img src="https://img.shields.io/github/release/TeamNewPipe/NewPipe.svg" ></a>
<a href="https://www.gnu.org/licenses/gpl-3.0" alt="License: GPLv3"><img src="https://img.shields.io/badge/License-GPL%20v3-blue.svg"></a>
<a href="https://travis-ci.org/TeamNewPipe/NewPipe" alt="Build Status"><img src="https://travis-ci.org/TeamNewPipe/NewPipe.svg"></a>
<a href="https://hosted.weblate.org/engage/NewPipe/" alt="Translation Status"><img src="https://hosted.weblate.org/widgets/NewPipe/-/svg-badge.svg"></a>
<a href="http://webchat.freenode.net/?channels=%23newpipe" alt="IRC channel: #newpipe"><img src="https://img.shields.io/badge/IRC%20chat-%23newpipe-brightgreen.svg"></a>
<a href="https://www.bountysource.com/teams/newpipe" alt="Bountysource bounties"><img src="https://img.shields.io/bountysource/team/newpipe/activity.svg?colorB=cd201f"></a>
</p>
<hr />
<hr>
<p align="center"><a href="#screenshots">Screenshots</a> &bull; <a href="#description">Description</a> &bull; <a href="#features">Features</a> &bull; <a href="#contribution">Contribution</a> &bull; <a href="#donate">Donate</a> &bull; <a href="#license">License</a></p>
<p align="center"><a href="https://newpipe.schabi.org">Website</a> &bull; <a href="https://newpipe.schabi.org/blog/">Blog</a> &bull; <a href="https://newpipe.schabi.org/press/">Press</a></p>
<hr />
WARNING: PUTTING NEWPIPE OR ANY FORK OF IT INTO GOOGLE PLAYSTORE VIOLATES THEIR TERMS OF CONDITIONS.
<hr>
<b>WARNING: PUTTING NEWPIPE OR ANY FORK OF IT INTO GOOGLE PLAYSTORE VIOLATES THEIR TERMS OF CONDITIONS.</b>
## Screenshots
[<img src="fastlane/metadata/android/en-US/images/phoneScreenshots/shot_1.png" width=160>](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_1.png)
[<img src="fastlane/metadata/android/en-US/images/phoneScreenshots/shot_2.png" width=160>](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_2.png)
[<img src="fastlane/metadata/android/en-US/images/phoneScreenshots/shot_3.png" width=160>](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_3.png)
[<img src="fastlane/metadata/android/en-US/images/phoneScreenshots/shot_4.png" width=160>](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_4.png)
[<img src="fastlane/metadata/android/en-US/images/phoneScreenshots/shot_5.png" width=160>](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_5.png)
[<img src="fastlane/metadata/android/en-US/images/phoneScreenshots/shot_6.png" width=160>](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_6.png)
[<img src="fastlane/metadata/android/en-US/images/phoneScreenshots/shot_7.png" width=160>](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_7.png)
[<img src="fastlane/metadata/android/en-US/images/phoneScreenshots/shot_8.png" width=160>](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_8.png)
[<img src="fastlane/metadata/android/en-US/images/phoneScreenshots/shot_9.png" width=160>](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_9.png)
[<img src="fastlane/metadata/android/en-US/images/phoneScreenshots/shot_01.png" width=160>](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_01.png)
[<img src="fastlane/metadata/android/en-US/images/phoneScreenshots/shot_02.png" width=160>](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_02.png)
[<img src="fastlane/metadata/android/en-US/images/phoneScreenshots/shot_03.png" width=160>](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_03.png)
[<img src="fastlane/metadata/android/en-US/images/phoneScreenshots/shot_04.png" width=160>](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_04.png)
[<img src="fastlane/metadata/android/en-US/images/phoneScreenshots/shot_05.png" width=160>](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_05.png)
[<img src="fastlane/metadata/android/en-US/images/phoneScreenshots/shot_06.png" width=160>](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_06.png)
[<img src="fastlane/metadata/android/en-US/images/phoneScreenshots/shot_07.png" width=160>](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_07.png)
[<img src="fastlane/metadata/android/en-US/images/phoneScreenshots/shot_08.png" width=160>](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_08.png)
[<img src="fastlane/metadata/android/en-US/images/phoneScreenshots/shot_09.png" width=160>](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_09.png)
[<img src="fastlane/metadata/android/en-US/images/phoneScreenshots/shot_10.png" width=160>](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_10.png)
[<img src="fastlane/metadata/android/en-US/images/tenInchScreenshots/shot_11.png" width=405>](fastlane/metadata/android/en-US/images/tenInchScreenshots/shot_11.png)
[<img src="fastlane/metadata/android/en-US/images/tenInchScreenshots/shot_12.png" width=405>](fastlane/metadata/android/en-US/images/tenInchScreenshots/shot_12.png)
## Description
NewPipe does not use any Google framework libraries, or the YouTube API. It only parses the website in order to gain the information it needs. Therefore this app can be used on devices without Google Services installed. Also, you don't need a YouTube account to use NewPipe, and it's FLOSS.
NewPipe does not use any Google framework libraries, nor the YouTube API. Websites are only parsed to fetch required info, so this app can be used on devices without Google services installed. Also, you don't need a YouTube account to use NewPipe, which is copylefted libre software.
### Features
* Search videos
* Display general information about a video
* Display general info about videos
* Watch YouTube videos
* Listen to YouTube videos
* Popup mode (floating player)
* Select the streaming player to watch the video with
* Download videos
* Select streaming player to watch video with
* Download videos
* Download audio only
* Open a video in Kodi
* Show Next/Related videos
* Show next/related videos
* Search YouTube in a specific language
* Watch/Block age restricted material
* Display general information about channels
* Display general info about channels
* Search channels
* Watch videos from a channel
* Orbot/Tor support (not yet directly)
* 1080p/2k/4k support
* 1080p/2K/4K support
* View history
* Subscribe to channels
* Search history
* Search/Watch Playlists
* Watch as queues Playlists
* Queuing videos
* Search/watch playlists
* Watch as enqueued playlists
* Enqueue videos
* Local playlists
* Subtitles
* Multi-service support (eg. SoundCloud in NewPipe Beta)
* Multi-service support (e.g. SoundCloud \[beta\])
* Livestream support
### Coming Features
* Livestream support
* Cast to UPnP and Cast
* Show comments
* ... and many more
* and many more
## Contribution
Whether you have ideas, translations, design changes, code cleaning, or real heavy code changes, help is always welcome.
@ -77,26 +80,31 @@ The more is done the better it gets!
If you'd like to get involved, check our [contribution notes](.github/CONTRIBUTING.md).
## Donate
If you like NewPipe we'd be happy about a donation. You can either donate via Bitcoin, Bountysource or Liberapay. For further information about donating to NewPipe, please visit our [website](https://newpipe.schabi.org/donate).
If you like NewPipe we'd be happy about a donation. You can either send bitcoin or donate via Bountysource or Liberapay. For further info on donating to NewPipe, please visit our [website](https://newpipe.schabi.org/donate).
<table>
<tr>
<td><img src="https://bitcoin.org/img/icons/logotop.svg" alt="Bitcoin" /></td>
<td><img src="assets/bitcoin_qr_code.png" alt="Bitcoin QR Code" width="100px"/></td>
<td><img src="https://bitcoin.org/img/icons/logotop.svg" alt="Bitcoin"></td>
<td><img src="assets/bitcoin_qr_code.png" alt="Bitcoin QR code" width="100px"></td>
<td><samp>16A9J59ahMRqkLSZjhYj33n9j3fMztFxnh</samp></td>
</tr>
<tr>
<td><a href="https://liberapay.com/TeamNewPipe/"><img src="https://upload.wikimedia.org/wikipedia/commons/2/27/Liberapay_logo_v2_white-on-yellow.svg" alt="Liberapay" width="80px" /></a></td>
<td><a href="https://liberapay.com/TeamNewPipe/"><img src="assets/liberapay_qr_code.png" alt="Visit NewPipe at liberapay.com" width="100px"/></a></td>
<td><a href="https://liberapay.com/TeamNewPipe/donate"><img src="assets/liberapay_donate_button.svg" alt="Donate via Liberapay" height="35px" /></a></td>
<td><a href="https://liberapay.com/TeamNewPipe/"><img src="https://upload.wikimedia.org/wikipedia/commons/2/27/Liberapay_logo_v2_white-on-yellow.svg" alt="Liberapay" width="80px" ></a></td>
<td><a href="https://liberapay.com/TeamNewPipe/"><img src="assets/liberapay_qr_code.png" alt="Visit NewPipe at liberapay.com" width="100px"></a></td>
<td><a href="https://liberapay.com/TeamNewPipe/donate"><img src="assets/liberapay_donate_button.svg" alt="Donate via Liberapay" height="35px"></a></td>
</tr>
<tr>
<td><a href="https://www.bountysource.com/teams/newpipe"><img src="https://upload.wikimedia.org/wikipedia/commons/thumb/2/22/Bountysource.png/320px-Bountysource.png" alt="Bountysource" width="190px" /></a></td>
<td><a href="https://www.bountysource.com/teams/newpipe"><img src="assets/bountysource_qr_code.png" alt="Visit NewPipe at bountysource.com" width="100px"/></a></td>
<td><a href="https://www.bountysource.com/teams/newpipe/issues"><img src="https://img.shields.io/bountysource/team/newpipe/activity.svg?colorB=cd201f" height="30px" alt="Check out how many bounties you can earn." /></a></td>
<td><a href="https://www.bountysource.com/teams/newpipe"><img src="https://upload.wikimedia.org/wikipedia/commons/thumb/2/22/Bountysource.png/320px-Bountysource.png" alt="Bountysource" width="190px"></a></td>
<td><a href="https://www.bountysource.com/teams/newpipe"><img src="assets/bountysource_qr_code.png" alt="Visit NewPipe at bountysource.com" width="100px"></a></td>
<td><a href="https://www.bountysource.com/teams/newpipe/issues"><img src="https://img.shields.io/bountysource/team/newpipe/activity.svg?colorB=cd201f" height="30px" alt="Check out how many bounties you can earn."></a></td>
</tr>
</table>
## Privacy Policy
The NewPipe project aims to provide a private, anonymous experience for using media web services.
Therefore, the app does not collect any data without your consent. NewPipe's privacy policy explains in detail what data is sent and stored when you send a crash report, or comment in our blog. You can find the document [here](https://newpipe.schabi.org/legal/privacy/).
## License
[![GNU GPLv3 Image](https://www.gnu.org/graphics/gplv3-127x51.png)](http://www.gnu.org/licenses/gpl-3.0.en.html)

View File

@ -1,15 +1,15 @@
apply plugin: 'com.android.application'
android {
compileSdkVersion 27
buildToolsVersion '27.0.3'
compileSdkVersion 28
buildToolsVersion '28.0.3'
defaultConfig {
applicationId "org.schabi.newpipe"
minSdkVersion 15
targetSdkVersion 27
versionCode 68
versionName "0.14.1"
minSdkVersion 19
targetSdkVersion 28
versionCode 69
versionName "0.14.2"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
vectorDrawables.useSupportLibrary = true
@ -22,7 +22,6 @@ android {
}
debug {
multiDexEnabled true
debuggable true
applicationIdSuffix ".debug"
}
@ -41,62 +40,61 @@ android {
}
ext {
supportLibVersion = '27.1.1'
exoPlayerLibVersion = '2.8.2'
supportLibVersion = '28.0.0'
exoPlayerLibVersion = '2.8.4' //2.9.0
roomDbLibVersion = '1.1.1'
leakCanaryLibVersion = '1.5.4'
okHttpLibVersion = '3.10.0'
leakCanaryLibVersion = '1.5.4' //1.6.1
okHttpLibVersion = '3.11.0'
icepickLibVersion = '3.2.0'
stethoLibVersion = '1.5.0'
}
dependencies {
androidTestImplementation('com.android.support.test.espresso:espresso-core:2.2.2') {
androidTestImplementation('com.android.support.test.espresso:espresso-core:3.0.2', {
exclude module: 'support-annotations'
}
})
implementation 'com.github.yausername:NewPipeExtractor:d1ff1c7'
implementation 'com.github.yausername:NewPipeExtractor:4c49a34'
testImplementation 'junit:junit:4.12'
testImplementation 'org.mockito:mockito-core:2.8.9'
testImplementation 'org.mockito:mockito-core:2.23.0'
implementation "com.android.support:appcompat-v7:$supportLibVersion"
implementation "com.android.support:support-v4:$supportLibVersion"
implementation "com.android.support:design:$supportLibVersion"
implementation "com.android.support:recyclerview-v7:$supportLibVersion"
implementation "com.android.support:preference-v14:$supportLibVersion"
implementation "com.android.support:appcompat-v7:${supportLibVersion}"
implementation "com.android.support:support-v4:${supportLibVersion}"
implementation "com.android.support:design:${supportLibVersion}"
implementation "com.android.support:recyclerview-v7:${supportLibVersion}"
implementation "com.android.support:preference-v14:${supportLibVersion}"
implementation "com.android.support:cardview-v7:${supportLibVersion}"
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
implementation 'ch.acra:acra:4.9.2'
implementation 'ch.acra:acra:4.9.2' //4.11
implementation 'com.nostra13.universalimageloader:universal-image-loader:1.9.5'
implementation 'de.hdodenhof:circleimageview:2.2.0'
implementation 'com.github.nirhart:ParallaxScroll:dd53d1f9d1'
implementation 'com.nononsenseapps:filepicker:4.2.1'
implementation "com.google.android.exoplayer:exoplayer:$exoPlayerLibVersion"
implementation "com.google.android.exoplayer:extension-mediasession:$exoPlayerLibVersion"
implementation "com.google.android.exoplayer:exoplayer:${exoPlayerLibVersion}"
implementation "com.google.android.exoplayer:extension-mediasession:${exoPlayerLibVersion}"
debugImplementation "com.facebook.stetho:stetho:$stethoLibVersion"
debugImplementation "com.facebook.stetho:stetho-urlconnection:$stethoLibVersion"
debugImplementation "com.facebook.stetho:stetho:${stethoLibVersion}"
debugImplementation "com.facebook.stetho:stetho-urlconnection:${stethoLibVersion}"
debugImplementation 'com.android.support:multidex:1.0.3'
implementation 'io.reactivex.rxjava2:rxjava:2.1.14'
implementation 'io.reactivex.rxjava2:rxandroid:2.0.2'
implementation 'io.reactivex.rxjava2:rxjava:2.2.2'
implementation 'io.reactivex.rxjava2:rxandroid:2.1.0'
implementation 'com.jakewharton.rxbinding2:rxbinding:2.1.1'
implementation "android.arch.persistence.room:runtime:$roomDbLibVersion"
implementation "android.arch.persistence.room:rxjava2:$roomDbLibVersion"
annotationProcessor "android.arch.persistence.room:compiler:$roomDbLibVersion"
implementation "android.arch.persistence.room:runtime:${roomDbLibVersion}"
implementation "android.arch.persistence.room:rxjava2:${roomDbLibVersion}"
annotationProcessor "android.arch.persistence.room:compiler:${roomDbLibVersion}"
implementation "frankiesardo:icepick:$icepickLibVersion"
annotationProcessor "frankiesardo:icepick-processor:$icepickLibVersion"
implementation "frankiesardo:icepick:${icepickLibVersion}"
annotationProcessor "frankiesardo:icepick-processor:${icepickLibVersion}"
debugImplementation "com.squareup.leakcanary:leakcanary-android:$leakCanaryLibVersion"
releaseImplementation "com.squareup.leakcanary:leakcanary-android-no-op:$leakCanaryLibVersion"
debugImplementation "com.squareup.leakcanary:leakcanary-android:${leakCanaryLibVersion}"
releaseImplementation "com.squareup.leakcanary:leakcanary-android-no-op:${leakCanaryLibVersion}"
implementation "com.squareup.okhttp3:okhttp:$okHttpLibVersion"
debugImplementation "com.facebook.stetho:stetho-okhttp3:$stethoLibVersion"
implementation 'com.android.support.constraint:constraint-layout:1.1.2'
implementation 'com.android.support:cardview-v7:27.1.1'
implementation "com.squareup.okhttp3:okhttp:${okHttpLibVersion}"
debugImplementation "com.facebook.stetho:stetho-okhttp3:${stethoLibVersion}"
}

View File

@ -9,6 +9,7 @@
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
<application
android:name=".App"
@ -238,4 +239,4 @@
android:name=".RouterActivity$FetcherService"
android:exported="false"/>
</application>
</manifest>
</manifest>

View File

@ -2,8 +2,8 @@ package android.support.design.widget;
import android.animation.ValueAnimator;
import android.content.Context;
import android.os.Parcelable;
import android.support.annotation.NonNull;
import android.support.design.animation.AnimationUtils;
import android.util.AttributeSet;
import android.view.View;
@ -20,11 +20,6 @@ public final class FlingBehavior extends AppBarLayout.Behavior {
super(context, attrs);
}
@Override
public boolean onStartNestedScroll(CoordinatorLayout parent, AppBarLayout child, View directTargetChild, View target, int nestedScrollAxes, int type) {
return super.onStartNestedScroll(parent, child, directTargetChild, target, nestedScrollAxes, type);
}
@Override
public void onNestedPreScroll(CoordinatorLayout coordinatorLayout, AppBarLayout child, View target, int dx, int dy, int[] consumed, int type) {
if (dy != 0) {
@ -43,31 +38,6 @@ public final class FlingBehavior extends AppBarLayout.Behavior {
}
}
@Override
public void onNestedScroll(CoordinatorLayout coordinatorLayout, AppBarLayout child, View target, int dxConsumed, int dyConsumed, int dxUnconsumed, int dyUnconsumed, int type) {
super.onNestedScroll(coordinatorLayout, child, target, dxConsumed, dyConsumed, dxUnconsumed, dyUnconsumed, type);
}
@Override
public void onStopNestedScroll(CoordinatorLayout coordinatorLayout, AppBarLayout abl, View target, int type) {
super.onStopNestedScroll(coordinatorLayout, abl, target, type);
}
@Override
public boolean onMeasureChild(CoordinatorLayout parent, AppBarLayout child, int parentWidthMeasureSpec, int widthUsed, int parentHeightMeasureSpec, int heightUsed) {
return super.onMeasureChild(parent, child, parentWidthMeasureSpec, widthUsed, parentHeightMeasureSpec, heightUsed);
}
@Override
public Parcelable onSaveInstanceState(CoordinatorLayout parent, AppBarLayout abl) {
return super.onSaveInstanceState(parent, abl);
}
@Override
public void onRestoreInstanceState(CoordinatorLayout parent, AppBarLayout appBarLayout, Parcelable state) {
super.onRestoreInstanceState(parent, appBarLayout, state);
}
@Override
public boolean onNestedPreFling(@NonNull CoordinatorLayout coordinatorLayout, @NonNull AppBarLayout child, @NonNull View target, float velocityX, float velocityY) {

View File

@ -5,6 +5,7 @@ import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.content.Context;
import android.os.Build;
import android.preference.PreferenceManager;
import android.support.annotation.Nullable;
import android.util.Log;
@ -21,6 +22,7 @@ import org.acra.config.ConfigurationBuilder;
import org.acra.sender.ReportSenderFactory;
import org.schabi.newpipe.extractor.Downloader;
import org.schabi.newpipe.extractor.NewPipe;
import org.schabi.newpipe.extractor.utils.Localization;
import org.schabi.newpipe.report.AcraReportSenderFactory;
import org.schabi.newpipe.report.ErrorActivity;
import org.schabi.newpipe.report.UserAction;
@ -65,7 +67,8 @@ public class App extends Application {
private RefWatcher refWatcher;
@SuppressWarnings("unchecked")
private static final Class<? extends ReportSenderFactory>[] reportSenderFactoryClasses = new Class[]{AcraReportSenderFactory.class};
private static final Class<? extends ReportSenderFactory>[]
reportSenderFactoryClasses = new Class[]{AcraReportSenderFactory.class};
@Override
protected void attachBaseContext(Context base) {
@ -88,7 +91,8 @@ public class App extends Application {
// Initialize settings first because others inits can use its values
SettingsActivity.initSettings(this);
NewPipe.init(getDownloader());
NewPipe.init(getDownloader(),
org.schabi.newpipe.util.Localization.getPreferredExtractorLocal(this));
StateSaver.init(this);
initNotificationChannel();
@ -180,7 +184,11 @@ public class App extends Application {
ACRA.init(this, acraConfig);
} catch (ACRAConfigurationException ace) {
ace.printStackTrace();
ErrorActivity.reportError(this, ace, null, null, ErrorActivity.ErrorInfo.make(UserAction.SOMETHING_ELSE, "none",
ErrorActivity.reportError(this,
ace,
null,
null,
ErrorActivity.ErrorInfo.make(UserAction.SOMETHING_ELSE, "none",
"Could not initialize ACRA crash report", R.string.app_ui_crash));
}
}
@ -200,7 +208,8 @@ public class App extends Application {
NotificationChannel mChannel = new NotificationChannel(id, name, importance);
mChannel.setDescription(description);
NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
NotificationManager mNotificationManager =
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
mNotificationManager.createNotificationChannel(mChannel);
}

View File

@ -6,6 +6,7 @@ import android.text.TextUtils;
import org.schabi.newpipe.extractor.DownloadRequest;
import org.schabi.newpipe.extractor.DownloadResponse;
import org.schabi.newpipe.extractor.exceptions.ReCaptchaException;
import org.schabi.newpipe.extractor.utils.Localization;
import java.io.IOException;
import java.io.InputStream;
@ -109,13 +110,13 @@ public class Downloader implements org.schabi.newpipe.extractor.Downloader {
* but set the HTTP header field "Accept-Language" to the supplied string.
*
* @param siteUrl the URL of the text file to return the contents of
* @param language the language (usually a 2-character code) to set as the preferred language
* @param localization the language and country (usually a 2-character code) to set
* @return the contents of the specified text file
*/
@Override
public String download(String siteUrl, String language) throws IOException, ReCaptchaException {
public String download(String siteUrl, Localization localization) throws IOException, ReCaptchaException {
Map<String, String> requestProperties = new HashMap<>();
requestProperties.put("Accept-Language", language);
requestProperties.put("Accept-Language", localization.getLanguage());
return download(siteUrl, requestProperties);
}

View File

@ -542,8 +542,7 @@ public class RouterActivity extends AppCompatActivity {
final SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
boolean isExtVideoEnabled = preferences.getBoolean(getString(R.string.use_external_video_player_key), false);
boolean isExtAudioEnabled = preferences.getBoolean(getString(R.string.use_external_audio_player_key), false);
boolean useOldVideoPlayer = PlayerHelper.isUsingOldPlayer(this);
boolean isExtAudioEnabled = preferences.getBoolean(getString(R.string.use_external_audio_player_key), false);;
PlayQueue playQueue;
String playerChoice = choice.playerChoice;
@ -555,9 +554,6 @@ public class RouterActivity extends AppCompatActivity {
} else if (playerChoice.equals(videoPlayerKey) && isExtVideoEnabled) {
NavigationHelper.playOnExternalVideoPlayer(this, (StreamInfo) info);
} else if (playerChoice.equals(videoPlayerKey) && useOldVideoPlayer) {
NavigationHelper.playOnOldVideoPlayer(this, (StreamInfo) info);
} else {
playQueue = new SinglePlayQueue((StreamInfo) info);

View File

@ -73,8 +73,6 @@ import org.schabi.newpipe.local.dialog.PlaylistAppendDialog;
import org.schabi.newpipe.local.history.HistoryRecordManager;
import org.schabi.newpipe.player.MainVideoPlayer;
import org.schabi.newpipe.player.PopupVideoPlayer;
import org.schabi.newpipe.player.helper.PlayerHelper;
import org.schabi.newpipe.player.old.PlayVideoActivity;
import org.schabi.newpipe.player.playqueue.PlayQueue;
import org.schabi.newpipe.player.playqueue.SinglePlayQueue;
import org.schabi.newpipe.report.ErrorActivity;
@ -154,6 +152,7 @@ public class VideoDetailFragment
private View videoTitleRoot;
private TextView videoTitleTextView;
@Nullable
private ImageView videoTitleToggleArrow;
private TextView videoCountView;
@ -420,14 +419,16 @@ public class VideoDetailFragment
}
private void toggleTitleAndDescription() {
if (videoDescriptionRootLayout.getVisibility() == View.VISIBLE) {
videoTitleTextView.setMaxLines(1);
videoDescriptionRootLayout.setVisibility(View.GONE);
videoTitleToggleArrow.setImageResource(R.drawable.arrow_down);
} else {
videoTitleTextView.setMaxLines(10);
videoDescriptionRootLayout.setVisibility(View.VISIBLE);
videoTitleToggleArrow.setImageResource(R.drawable.arrow_up);
if (videoTitleToggleArrow != null) { //it is null for tablets
if (videoDescriptionRootLayout.getVisibility() == View.VISIBLE) {
videoTitleTextView.setMaxLines(1);
videoDescriptionRootLayout.setVisibility(View.GONE);
videoTitleToggleArrow.setImageResource(R.drawable.arrow_down);
} else {
videoTitleTextView.setMaxLines(10);
videoDescriptionRootLayout.setVisibility(View.VISIBLE);
videoTitleToggleArrow.setImageResource(R.drawable.arrow_up);
}
}
}
@ -581,6 +582,7 @@ public class VideoDetailFragment
}
}
/*//////////////////////////////////////////////////////////////////////////
// Menu
//////////////////////////////////////////////////////////////////////////*/
@ -872,7 +874,7 @@ public class VideoDetailFragment
.getBoolean(this.getString(R.string.use_external_video_player_key), false)) {
startOnExternalPlayer(activity, currentInfo, selectedVideoStream);
} else {
openNormalPlayer(selectedVideoStream);
openNormalPlayer();
}
}
@ -885,24 +887,13 @@ public class VideoDetailFragment
}
}
private void openNormalPlayer(VideoStream selectedVideoStream) {
private void openNormalPlayer() {
Intent mIntent;
boolean useOldPlayer = PlayerHelper.isUsingOldPlayer(activity) || (Build.VERSION.SDK_INT < 16);
if (!useOldPlayer) {
// ExoPlayer
final PlayQueue playQueue = new SinglePlayQueue(currentInfo);
mIntent = NavigationHelper.getPlayerIntent(activity,
MainVideoPlayer.class,
playQueue,
getSelectedVideoStream().getResolution());
} else {
// Internal Player
mIntent = new Intent(activity, PlayVideoActivity.class)
.putExtra(PlayVideoActivity.VIDEO_TITLE, currentInfo.getName())
.putExtra(PlayVideoActivity.STREAM_URL, selectedVideoStream.getUrl())
.putExtra(PlayVideoActivity.VIDEO_URL, currentInfo.getUrl())
.putExtra(PlayVideoActivity.START_POSITION, currentInfo.getStartPosition());
}
final PlayQueue playQueue = new SinglePlayQueue(currentInfo);
mIntent = NavigationHelper.getPlayerIntent(activity,
MainVideoPlayer.class,
playQueue,
getSelectedVideoStream().getResolution());
startActivity(mIntent);
}
@ -1042,8 +1033,12 @@ public class VideoDetailFragment
animateView(videoTitleTextView, true, 0);
videoDescriptionRootLayout.setVisibility(View.GONE);
videoTitleToggleArrow.setImageResource(R.drawable.arrow_down);
videoTitleToggleArrow.setVisibility(View.GONE);
if (videoTitleToggleArrow != null) { //phone
videoTitleToggleArrow.setImageResource(R.drawable.arrow_down);
videoTitleToggleArrow.setVisibility(View.GONE);
} else { //tablet
//TODO make comments/related streams fragment invisible
}
videoTitleRoot.setClickable(false);
imageLoader.cancelDisplayTask(thumbnailImageView);
@ -1124,11 +1119,15 @@ public class VideoDetailFragment
detailDurationView.setVisibility(View.GONE);
}
videoTitleRoot.setClickable(true);
videoTitleToggleArrow.setVisibility(View.VISIBLE);
videoTitleToggleArrow.setImageResource(R.drawable.arrow_down);
videoDescriptionView.setVisibility(View.GONE);
videoDescriptionRootLayout.setVisibility(View.GONE);
if (videoTitleToggleArrow != null) {
videoTitleRoot.setClickable(true);
videoTitleToggleArrow.setVisibility(View.VISIBLE);
videoTitleToggleArrow.setImageResource(R.drawable.arrow_down);
videoDescriptionRootLayout.setVisibility(View.GONE);
} else {
videoDescriptionRootLayout.setVisibility(View.VISIBLE);
}
if (!TextUtils.isEmpty(info.getUploadDate())) {
videoUploadDateView.setText(Localization.localizeDate(activity, info.getUploadDate()));
}

View File

@ -3,10 +3,15 @@ package org.schabi.newpipe.fragments.list;
import android.app.Activity;
import android.content.Context;
import android.content.DialogInterface;
import android.content.SharedPreferences;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.support.annotation.NonNull;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
@ -37,7 +42,7 @@ import java.util.Queue;
import static org.schabi.newpipe.util.AnimationUtils.animateView;
public abstract class BaseListFragment<I, N> extends BaseStateFragment<I> implements ListViewContract<I, N>, StateSaver.WriteRead {
public abstract class BaseListFragment<I, N> extends BaseStateFragment<I> implements ListViewContract<I, N>, StateSaver.WriteRead, SharedPreferences.OnSharedPreferenceChangeListener {
/*//////////////////////////////////////////////////////////////////////////
// Views
@ -45,6 +50,9 @@ public abstract class BaseListFragment<I, N> extends BaseStateFragment<I> implem
protected InfoListAdapter infoListAdapter;
protected RecyclerView itemsList;
private int updateFlags = 0;
private static final int LIST_MODE_UPDATE_FLAG = 0x32;
/*//////////////////////////////////////////////////////////////////////////
// LifeCycle
@ -60,12 +68,31 @@ public abstract class BaseListFragment<I, N> extends BaseStateFragment<I> implem
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
PreferenceManager.getDefaultSharedPreferences(activity)
.registerOnSharedPreferenceChangeListener(this);
}
@Override
public void onDestroy() {
super.onDestroy();
StateSaver.onDestroy(savedState);
PreferenceManager.getDefaultSharedPreferences(activity)
.unregisterOnSharedPreferenceChangeListener(this);
}
@Override
public void onResume() {
super.onResume();
if (updateFlags != 0) {
if ((updateFlags & LIST_MODE_UPDATE_FLAG) != 0) {
final boolean useGrid = isGridLayout();
itemsList.setLayoutManager(useGrid ? getGridLayoutManager() : getListLayoutManager());
infoListAdapter.setGridItemVariants(useGrid);
infoListAdapter.notifyDataSetChanged();
}
updateFlags = 0;
}
}
/*//////////////////////////////////////////////////////////////////////////
@ -120,13 +147,25 @@ public abstract class BaseListFragment<I, N> extends BaseStateFragment<I> implem
return new LinearLayoutManager(activity);
}
protected RecyclerView.LayoutManager getGridLayoutManager() {
final Resources resources = activity.getResources();
int width = resources.getDimensionPixelSize(R.dimen.video_item_grid_thumbnail_image_width);
width += (24 * resources.getDisplayMetrics().density);
final int spanCount = (int) Math.floor(resources.getDisplayMetrics().widthPixels / (double)width);
final GridLayoutManager lm = new GridLayoutManager(activity, spanCount);
lm.setSpanSizeLookup(infoListAdapter.getSpanSizeLookup(spanCount));
return lm;
}
@Override
protected void initViews(View rootView, Bundle savedInstanceState) {
super.initViews(rootView, savedInstanceState);
final boolean useGrid = isGridLayout();
itemsList = rootView.findViewById(R.id.items_list);
itemsList.setLayoutManager(getListLayoutManager());
itemsList.setLayoutManager(useGrid ? getGridLayoutManager() : getListLayoutManager());
infoListAdapter.setGridItemVariants(useGrid);
infoListAdapter.setFooter(getListFooter());
infoListAdapter.setHeader(getListHeader());
@ -316,4 +355,22 @@ public abstract class BaseListFragment<I, N> extends BaseStateFragment<I> implem
public void handleNextItems(N result) {
isLoading.set(false);
}
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
if (key.equals(getString(R.string.list_view_mode_key))) {
updateFlags |= LIST_MODE_UPDATE_FLAG;
}
}
protected boolean isGridLayout() {
final String list_mode = PreferenceManager.getDefaultSharedPreferences(activity).getString(getString(R.string.list_view_mode_key), getString(R.string.list_view_mode_value));
if ("auto".equals(list_mode)) {
final Configuration configuration = getResources().getConfiguration();
return configuration.orientation == Configuration.ORIENTATION_LANDSCAPE
&& configuration.isLayoutSizeAtLeast(Configuration.SCREENLAYOUT_SIZE_LARGE);
} else {
return "grid".equals(list_mode);
}
}
}

View File

@ -128,26 +128,16 @@ public class KioskFragment extends BaseListInfoFragment<KioskInfo> {
@Override
public Single<KioskInfo> loadResult(boolean forceReload) {
String contentCountry = PreferenceManager
.getDefaultSharedPreferences(activity)
.getString(getString(R.string.content_country_key),
getString(R.string.default_country_value));
return ExtractorHelper.getKioskInfo(serviceId,
url,
contentCountry,
forceReload);
}
@Override
public Single<ListExtractor.InfoItemsPage> loadMoreItemsLogic() {
String contentCountry = PreferenceManager
.getDefaultSharedPreferences(activity)
.getString(getString(R.string.content_country_key),
getString(R.string.default_country_value));
return ExtractorHelper.getMoreKioskItems(serviceId,
url,
currentNextPageUrl,
contentCountry);
currentNextPageUrl);
}
/*//////////////////////////////////////////////////////////////////////////

View File

@ -626,7 +626,7 @@ public class SearchFragment
}
final Observable<List<SuggestionItem>> network = ExtractorHelper
.suggestionsFor(serviceId, query, contentCountry)
.suggestionsFor(serviceId, query)
.toObservable()
.map(strings -> {
List<SuggestionItem> result = new ArrayList<>();
@ -726,8 +726,7 @@ public class SearchFragment
searchDisposable = ExtractorHelper.searchFor(serviceId,
searchString,
Arrays.asList(contentFilter),
sortFilter,
contentCountry)
sortFilter)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.doOnEvent((searchResult, throwable) -> isLoading.set(false))
@ -745,8 +744,7 @@ public class SearchFragment
searchString,
asList(contentFilter),
sortFilter,
nextPageUrl,
contentCountry)
nextPageUrl)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.doOnEvent((nextItemsResult, throwable) -> isLoading.set(false))

View File

@ -1,6 +1,7 @@
package org.schabi.newpipe.info_list;
import android.app.Activity;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.View;
@ -15,9 +16,12 @@ import org.schabi.newpipe.info_list.holder.ChannelInfoItemHolder;
import org.schabi.newpipe.info_list.holder.ChannelMiniInfoItemHolder;
import org.schabi.newpipe.info_list.holder.CommentsInfoItemHolder;
import org.schabi.newpipe.info_list.holder.CommentsMiniInfoItemHolder;
import org.schabi.newpipe.info_list.holder.ChannelGridInfoItemHolder;
import org.schabi.newpipe.info_list.holder.InfoItemHolder;
import org.schabi.newpipe.info_list.holder.PlaylistGridInfoItemHolder;
import org.schabi.newpipe.info_list.holder.PlaylistInfoItemHolder;
import org.schabi.newpipe.info_list.holder.PlaylistMiniInfoItemHolder;
import org.schabi.newpipe.info_list.holder.StreamGridInfoItemHolder;
import org.schabi.newpipe.info_list.holder.StreamInfoItemHolder;
import org.schabi.newpipe.info_list.holder.StreamMiniInfoItemHolder;
import org.schabi.newpipe.util.FallbackViewHolder;
@ -55,16 +59,20 @@ public class InfoListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolde
private static final int MINI_STREAM_HOLDER_TYPE = 0x100;
private static final int STREAM_HOLDER_TYPE = 0x101;
private static final int GRID_STREAM_HOLDER_TYPE = 0x102;
private static final int MINI_CHANNEL_HOLDER_TYPE = 0x200;
private static final int CHANNEL_HOLDER_TYPE = 0x201;
private static final int GRID_CHANNEL_HOLDER_TYPE = 0x202;
private static final int MINI_PLAYLIST_HOLDER_TYPE = 0x300;
private static final int PLAYLIST_HOLDER_TYPE = 0x301;
private static final int GRID_PLAYLIST_HOLDER_TYPE = 0x302;
private static final int MINI_COMMENT_HOLDER_TYPE = 0x400;
private static final int COMMENT_HOLDER_TYPE = 0x401;
private final InfoItemBuilder infoItemBuilder;
private final ArrayList<InfoItem> infoItemList;
private boolean useMiniVariant = false;
private boolean useGridVariant = false;
private boolean showFooter = false;
private View header = null;
private View footer = null;
@ -103,6 +111,10 @@ public class InfoListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolde
this.useMiniVariant = useMiniVariant;
}
public void setGridItemVariants(boolean useGridVariant) {
this.useGridVariant = useGridVariant;
}
public void addInfoItemList(List<InfoItem> data) {
if (data != null) {
if (DEBUG) {
@ -215,11 +227,11 @@ public class InfoListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolde
final InfoItem item = infoItemList.get(position);
switch (item.getInfoType()) {
case STREAM:
return useMiniVariant ? MINI_STREAM_HOLDER_TYPE : STREAM_HOLDER_TYPE;
return useGridVariant ? GRID_STREAM_HOLDER_TYPE : useMiniVariant ? MINI_STREAM_HOLDER_TYPE : STREAM_HOLDER_TYPE;
case CHANNEL:
return useMiniVariant ? MINI_CHANNEL_HOLDER_TYPE : CHANNEL_HOLDER_TYPE;
return useGridVariant ? GRID_CHANNEL_HOLDER_TYPE : useMiniVariant ? MINI_CHANNEL_HOLDER_TYPE : CHANNEL_HOLDER_TYPE;
case PLAYLIST:
return useMiniVariant ? MINI_PLAYLIST_HOLDER_TYPE : PLAYLIST_HOLDER_TYPE;
return useGridVariant ? GRID_PLAYLIST_HOLDER_TYPE : useMiniVariant ? MINI_PLAYLIST_HOLDER_TYPE : PLAYLIST_HOLDER_TYPE;
case COMMENT:
return useMiniVariant ? MINI_COMMENT_HOLDER_TYPE : COMMENT_HOLDER_TYPE;
default:
@ -241,14 +253,20 @@ public class InfoListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolde
return new StreamMiniInfoItemHolder(infoItemBuilder, parent);
case STREAM_HOLDER_TYPE:
return new StreamInfoItemHolder(infoItemBuilder, parent);
case GRID_STREAM_HOLDER_TYPE:
return new StreamGridInfoItemHolder(infoItemBuilder, parent);
case MINI_CHANNEL_HOLDER_TYPE:
return new ChannelMiniInfoItemHolder(infoItemBuilder, parent);
case CHANNEL_HOLDER_TYPE:
return new ChannelInfoItemHolder(infoItemBuilder, parent);
case GRID_CHANNEL_HOLDER_TYPE:
return new ChannelGridInfoItemHolder(infoItemBuilder, parent);
case MINI_PLAYLIST_HOLDER_TYPE:
return new PlaylistMiniInfoItemHolder(infoItemBuilder, parent);
case PLAYLIST_HOLDER_TYPE:
return new PlaylistInfoItemHolder(infoItemBuilder, parent);
case GRID_PLAYLIST_HOLDER_TYPE:
return new PlaylistGridInfoItemHolder(infoItemBuilder, parent);
case MINI_COMMENT_HOLDER_TYPE:
return new CommentsMiniInfoItemHolder(infoItemBuilder, parent);
case COMMENT_HOLDER_TYPE:
@ -273,4 +291,14 @@ public class InfoListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolde
((HFHolder) holder).view = footer;
}
}
public GridLayoutManager.SpanSizeLookup getSpanSizeLookup(final int spanCount) {
return new GridLayoutManager.SpanSizeLookup() {
@Override
public int getSpanSize(int position) {
final int type = getItemViewType(position);
return type == HEADER_TYPE || type == FOOTER_TYPE ? spanCount : 1;
}
};
}
}

View File

@ -0,0 +1,13 @@
package org.schabi.newpipe.info_list.holder;
import android.view.ViewGroup;
import org.schabi.newpipe.R;
import org.schabi.newpipe.info_list.InfoItemBuilder;
public class ChannelGridInfoItemHolder extends ChannelMiniInfoItemHolder {
public ChannelGridInfoItemHolder(InfoItemBuilder infoItemBuilder, ViewGroup parent) {
super(infoItemBuilder, R.layout.list_channel_grid_item, parent);
}
}

View File

@ -47,6 +47,13 @@ public class ChannelMiniInfoItemHolder extends InfoItemHolder {
itemBuilder.getOnChannelSelectedListener().selected(item);
}
});
itemView.setOnLongClickListener(view -> {
if (itemBuilder.getOnChannelSelectedListener() != null) {
itemBuilder.getOnChannelSelectedListener().held(item);
}
return true;
});
}
protected String getDetailLine(final ChannelInfoItem item) {

View File

@ -0,0 +1,13 @@
package org.schabi.newpipe.info_list.holder;
import android.view.ViewGroup;
import org.schabi.newpipe.R;
import org.schabi.newpipe.info_list.InfoItemBuilder;
public class PlaylistGridInfoItemHolder extends PlaylistMiniInfoItemHolder {
public PlaylistGridInfoItemHolder(InfoItemBuilder infoItemBuilder, ViewGroup parent) {
super(infoItemBuilder, R.layout.list_playlist_grid_item, parent);
}
}

View File

@ -0,0 +1,13 @@
package org.schabi.newpipe.info_list.holder;
import android.view.ViewGroup;
import org.schabi.newpipe.R;
import org.schabi.newpipe.info_list.InfoItemBuilder;
public class StreamGridInfoItemHolder extends StreamMiniInfoItemHolder {
public StreamGridInfoItemHolder(InfoItemBuilder infoItemBuilder, ViewGroup parent) {
super(infoItemBuilder, R.layout.list_stream_grid_item, parent);
}
}

View File

@ -1,8 +1,13 @@
package org.schabi.newpipe.local;
import android.content.SharedPreferences;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.support.v4.app.Fragment;
import android.support.v7.app.ActionBar;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
@ -25,7 +30,7 @@ import static org.schabi.newpipe.util.AnimationUtils.animateView;
* called and is memory efficient when in backstack.
* */
public abstract class BaseLocalListFragment<I, N> extends BaseStateFragment<I>
implements ListViewContract<I, N> {
implements ListViewContract<I, N>, SharedPreferences.OnSharedPreferenceChangeListener {
/*//////////////////////////////////////////////////////////////////////////
// Views
@ -36,6 +41,9 @@ public abstract class BaseLocalListFragment<I, N> extends BaseStateFragment<I>
protected LocalItemListAdapter itemListAdapter;
protected RecyclerView itemsList;
private int updateFlags = 0;
private static final int LIST_MODE_UPDATE_FLAG = 0x32;
/*//////////////////////////////////////////////////////////////////////////
// Lifecycle - Creation
@ -45,6 +53,29 @@ public abstract class BaseLocalListFragment<I, N> extends BaseStateFragment<I>
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
PreferenceManager.getDefaultSharedPreferences(activity)
.registerOnSharedPreferenceChangeListener(this);
}
@Override
public void onDestroy() {
super.onDestroy();
PreferenceManager.getDefaultSharedPreferences(activity)
.unregisterOnSharedPreferenceChangeListener(this);
}
@Override
public void onResume() {
super.onResume();
if (updateFlags != 0) {
if ((updateFlags & LIST_MODE_UPDATE_FLAG) != 0) {
final boolean useGrid = isGridLayout();
itemsList.setLayoutManager(useGrid ? getGridLayoutManager() : getListLayoutManager());
itemListAdapter.setGridItemVariants(useGrid);
itemListAdapter.notifyDataSetChanged();
}
updateFlags = 0;
}
}
/*//////////////////////////////////////////////////////////////////////////
@ -59,6 +90,16 @@ public abstract class BaseLocalListFragment<I, N> extends BaseStateFragment<I>
return activity.getLayoutInflater().inflate(R.layout.pignate_footer, itemsList, false);
}
protected RecyclerView.LayoutManager getGridLayoutManager() {
final Resources resources = activity.getResources();
int width = resources.getDimensionPixelSize(R.dimen.video_item_grid_thumbnail_image_width);
width += (24 * resources.getDisplayMetrics().density);
final int spanCount = (int) Math.floor(resources.getDisplayMetrics().widthPixels / (double)width);
final GridLayoutManager lm = new GridLayoutManager(activity, spanCount);
lm.setSpanSizeLookup(itemListAdapter.getSpanSizeLookup(spanCount));
return lm;
}
protected RecyclerView.LayoutManager getListLayoutManager() {
return new LinearLayoutManager(activity);
}
@ -67,10 +108,13 @@ public abstract class BaseLocalListFragment<I, N> extends BaseStateFragment<I>
protected void initViews(View rootView, Bundle savedInstanceState) {
super.initViews(rootView, savedInstanceState);
itemsList = rootView.findViewById(R.id.items_list);
itemsList.setLayoutManager(getListLayoutManager());
itemListAdapter = new LocalItemListAdapter(activity);
final boolean useGrid = isGridLayout();
itemsList = rootView.findViewById(R.id.items_list);
itemsList.setLayoutManager(useGrid ? getGridLayoutManager() : getListLayoutManager());
itemListAdapter.setGridItemVariants(useGrid);
itemListAdapter.setHeader(headerRootView = getListHeader());
itemListAdapter.setFooter(footerRootView = getListFooter());
@ -174,4 +218,22 @@ public abstract class BaseLocalListFragment<I, N> extends BaseStateFragment<I>
resetFragment();
return super.onError(exception);
}
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
if (key.equals(getString(R.string.list_view_mode_key))) {
updateFlags |= LIST_MODE_UPDATE_FLAG;
}
}
protected boolean isGridLayout() {
final String list_mode = PreferenceManager.getDefaultSharedPreferences(activity).getString(getString(R.string.list_view_mode_key), getString(R.string.list_view_mode_value));
if ("auto".equals(list_mode)) {
final Configuration configuration = getResources().getConfiguration();
return configuration.orientation == Configuration.ORIENTATION_LANDSCAPE
&& configuration.isLayoutSizeAtLeast(Configuration.SCREENLAYOUT_SIZE_LARGE);
} else {
return "grid".equals(list_mode);
}
}
}

View File

@ -1,18 +1,21 @@
package org.schabi.newpipe.local;
import android.app.Activity;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import org.schabi.newpipe.database.LocalItem;
import org.schabi.newpipe.local.HeaderFooterHolder;
import org.schabi.newpipe.local.LocalItemBuilder;
import org.schabi.newpipe.local.holder.LocalItemHolder;
import org.schabi.newpipe.local.holder.LocalPlaylistGridItemHolder;
import org.schabi.newpipe.local.holder.LocalPlaylistItemHolder;
import org.schabi.newpipe.local.holder.LocalPlaylistStreamGridItemHolder;
import org.schabi.newpipe.local.holder.LocalPlaylistStreamItemHolder;
import org.schabi.newpipe.local.holder.LocalStatisticStreamGridItemHolder;
import org.schabi.newpipe.local.holder.LocalStatisticStreamItemHolder;
import org.schabi.newpipe.local.holder.RemotePlaylistGridItemHolder;
import org.schabi.newpipe.local.holder.RemotePlaylistItemHolder;
import org.schabi.newpipe.util.FallbackViewHolder;
import org.schabi.newpipe.util.Localization;
@ -52,14 +55,19 @@ public class LocalItemListAdapter extends RecyclerView.Adapter<RecyclerView.View
private static final int STREAM_STATISTICS_HOLDER_TYPE = 0x1000;
private static final int STREAM_PLAYLIST_HOLDER_TYPE = 0x1001;
private static final int STREAM_STATISTICS_GRID_HOLDER_TYPE = 0x1002;
private static final int STREAM_PLAYLIST_GRID_HOLDER_TYPE = 0x1004;
private static final int LOCAL_PLAYLIST_HOLDER_TYPE = 0x2000;
private static final int REMOTE_PLAYLIST_HOLDER_TYPE = 0x2001;
private static final int LOCAL_PLAYLIST_GRID_HOLDER_TYPE = 0x2002;
private static final int REMOTE_PLAYLIST_GRID_HOLDER_TYPE = 0x2004;
private final LocalItemBuilder localItemBuilder;
private final ArrayList<LocalItem> localItems;
private final DateFormat dateFormat;
private boolean showFooter = false;
private boolean useGridVariant = false;
private View header = null;
private View footer = null;
@ -134,6 +142,10 @@ public class LocalItemListAdapter extends RecyclerView.Adapter<RecyclerView.View
notifyDataSetChanged();
}
public void setGridItemVariants(boolean useGridVariant) {
this.useGridVariant = useGridVariant;
}
public void setHeader(View header) {
boolean changed = header != this.header;
this.header = header;
@ -195,11 +207,11 @@ public class LocalItemListAdapter extends RecyclerView.Adapter<RecyclerView.View
final LocalItem item = localItems.get(position);
switch (item.getLocalItemType()) {
case PLAYLIST_LOCAL_ITEM: return LOCAL_PLAYLIST_HOLDER_TYPE;
case PLAYLIST_REMOTE_ITEM: return REMOTE_PLAYLIST_HOLDER_TYPE;
case PLAYLIST_LOCAL_ITEM: return useGridVariant ? LOCAL_PLAYLIST_GRID_HOLDER_TYPE : LOCAL_PLAYLIST_HOLDER_TYPE;
case PLAYLIST_REMOTE_ITEM: return useGridVariant ? REMOTE_PLAYLIST_GRID_HOLDER_TYPE : REMOTE_PLAYLIST_HOLDER_TYPE;
case PLAYLIST_STREAM_ITEM: return STREAM_PLAYLIST_HOLDER_TYPE;
case STATISTIC_STREAM_ITEM: return STREAM_STATISTICS_HOLDER_TYPE;
case PLAYLIST_STREAM_ITEM: return useGridVariant ? STREAM_PLAYLIST_GRID_HOLDER_TYPE : STREAM_PLAYLIST_HOLDER_TYPE;
case STATISTIC_STREAM_ITEM: return useGridVariant ? STREAM_STATISTICS_GRID_HOLDER_TYPE : STREAM_STATISTICS_HOLDER_TYPE;
default:
Log.e(TAG, "No holder type has been considered for item: [" +
item.getLocalItemType() + "]");
@ -218,12 +230,20 @@ public class LocalItemListAdapter extends RecyclerView.Adapter<RecyclerView.View
return new HeaderFooterHolder(footer);
case LOCAL_PLAYLIST_HOLDER_TYPE:
return new LocalPlaylistItemHolder(localItemBuilder, parent);
case LOCAL_PLAYLIST_GRID_HOLDER_TYPE:
return new LocalPlaylistGridItemHolder(localItemBuilder, parent);
case REMOTE_PLAYLIST_HOLDER_TYPE:
return new RemotePlaylistItemHolder(localItemBuilder, parent);
case REMOTE_PLAYLIST_GRID_HOLDER_TYPE:
return new RemotePlaylistGridItemHolder(localItemBuilder, parent);
case STREAM_PLAYLIST_HOLDER_TYPE:
return new LocalPlaylistStreamItemHolder(localItemBuilder, parent);
case STREAM_PLAYLIST_GRID_HOLDER_TYPE:
return new LocalPlaylistStreamGridItemHolder(localItemBuilder, parent);
case STREAM_STATISTICS_HOLDER_TYPE:
return new LocalStatisticStreamItemHolder(localItemBuilder, parent);
case STREAM_STATISTICS_GRID_HOLDER_TYPE:
return new LocalStatisticStreamGridItemHolder(localItemBuilder, parent);
default:
Log.e(TAG, "No view type has been considered for holder: [" + type + "]");
return new FallbackViewHolder(new View(parent.getContext()));
@ -247,4 +267,14 @@ public class LocalItemListAdapter extends RecyclerView.Adapter<RecyclerView.View
((HeaderFooterHolder) holder).view = footer;
}
}
public GridLayoutManager.SpanSizeLookup getSpanSizeLookup(final int spanCount) {
return new GridLayoutManager.SpanSizeLookup() {
@Override
public int getSpanSize(int position) {
final int type = getItemViewType(position);
return type == HEADER_TYPE || type == FOOTER_TYPE ? spanCount : 1;
}
};
}
}

View File

@ -1,9 +1,11 @@
package org.schabi.newpipe.local.dialog;
import android.app.Dialog;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.DialogFragment;
import android.view.Window;
import org.schabi.newpipe.database.stream.model.StreamEntity;
import org.schabi.newpipe.util.StateSaver;
@ -41,6 +43,18 @@ public abstract class PlaylistDialog extends DialogFragment implements StateSave
StateSaver.onDestroy(savedState);
}
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
final Dialog dialog = super.onCreateDialog(savedInstanceState);
//remove title
final Window window = dialog.getWindow();
if (window != null) {
window.requestFeature(Window.FEATURE_NO_TITLE);
}
return dialog;
}
/*//////////////////////////////////////////////////////////////////////////
// State Saving
//////////////////////////////////////////////////////////////////////////*/

View File

@ -0,0 +1,13 @@
package org.schabi.newpipe.local.holder;
import android.view.ViewGroup;
import org.schabi.newpipe.R;
import org.schabi.newpipe.local.LocalItemBuilder;
public class LocalPlaylistGridItemHolder extends LocalPlaylistItemHolder {
public LocalPlaylistGridItemHolder(LocalItemBuilder infoItemBuilder, ViewGroup parent) {
super(infoItemBuilder, R.layout.list_playlist_grid_item, parent);
}
}

View File

@ -16,6 +16,10 @@ public class LocalPlaylistItemHolder extends PlaylistItemHolder {
super(infoItemBuilder, parent);
}
LocalPlaylistItemHolder(LocalItemBuilder infoItemBuilder, int layoutId, ViewGroup parent) {
super(infoItemBuilder, layoutId, parent);
}
@Override
public void updateFromItem(final LocalItem localItem, final DateFormat dateFormat) {
if (!(localItem instanceof PlaylistMetadataEntry)) return;

View File

@ -0,0 +1,13 @@
package org.schabi.newpipe.local.holder;
import android.view.ViewGroup;
import org.schabi.newpipe.R;
import org.schabi.newpipe.local.LocalItemBuilder;
public class LocalPlaylistStreamGridItemHolder extends LocalPlaylistStreamItemHolder {
public LocalPlaylistStreamGridItemHolder(LocalItemBuilder infoItemBuilder, ViewGroup parent) {
super(infoItemBuilder, R.layout.list_stream_playlist_grid_item, parent); //TODO
}
}

View File

@ -0,0 +1,13 @@
package org.schabi.newpipe.local.holder;
import android.view.ViewGroup;
import org.schabi.newpipe.R;
import org.schabi.newpipe.local.LocalItemBuilder;
public class LocalStatisticStreamGridItemHolder extends LocalStatisticStreamItemHolder {
public LocalStatisticStreamGridItemHolder(LocalItemBuilder infoItemBuilder, ViewGroup parent) {
super(infoItemBuilder, R.layout.list_stream_grid_item, parent);
}
}

View File

@ -1,5 +1,6 @@
package org.schabi.newpipe.local.holder;
import android.support.annotation.Nullable;
import android.support.v4.content.ContextCompat;
import android.view.View;
import android.view.ViewGroup;
@ -42,10 +43,15 @@ public class LocalStatisticStreamItemHolder extends LocalItemHolder {
public final TextView itemVideoTitleView;
public final TextView itemUploaderView;
public final TextView itemDurationView;
@Nullable
public final TextView itemAdditionalDetails;
public LocalStatisticStreamItemHolder(LocalItemBuilder infoItemBuilder, ViewGroup parent) {
super(infoItemBuilder, R.layout.list_stream_item, parent);
public LocalStatisticStreamItemHolder(LocalItemBuilder itemBuilder, ViewGroup parent) {
this(itemBuilder, R.layout.list_stream_item, parent);
}
LocalStatisticStreamItemHolder(LocalItemBuilder infoItemBuilder, int layoutId, ViewGroup parent) {
super(infoItemBuilder, layoutId, parent);
itemThumbnailView = itemView.findViewById(R.id.itemThumbnailView);
itemVideoTitleView = itemView.findViewById(R.id.itemVideoTitleView);
@ -80,7 +86,9 @@ public class LocalStatisticStreamItemHolder extends LocalItemHolder {
itemDurationView.setVisibility(View.GONE);
}
itemAdditionalDetails.setText(getStreamInfoDetailLine(item, dateFormat));
if (itemAdditionalDetails != null) {
itemAdditionalDetails.setText(getStreamInfoDetailLine(item, dateFormat));
}
// Default thumbnail is shown on error, while loading and if the url is empty
itemBuilder.displayImage(item.thumbnailUrl, itemThumbnailView,

View File

@ -0,0 +1,13 @@
package org.schabi.newpipe.local.holder;
import android.view.ViewGroup;
import org.schabi.newpipe.R;
import org.schabi.newpipe.local.LocalItemBuilder;
public class RemotePlaylistGridItemHolder extends RemotePlaylistItemHolder {
public RemotePlaylistGridItemHolder(LocalItemBuilder infoItemBuilder, ViewGroup parent) {
super(infoItemBuilder, R.layout.list_playlist_grid_item, parent);
}
}

View File

@ -16,6 +16,10 @@ public class RemotePlaylistItemHolder extends PlaylistItemHolder {
super(infoItemBuilder, parent);
}
RemotePlaylistItemHolder(LocalItemBuilder infoItemBuilder, int layoutId, ViewGroup parent) {
super(infoItemBuilder, layoutId, parent);
}
@Override
public void updateFromItem(final LocalItem localItem, final DateFormat dateFormat) {
if (!(localItem instanceof PlaylistRemoteEntity)) return;

View File

@ -459,7 +459,11 @@ public class LocalPlaylistFragment extends BaseLocalListFragment<List<PlaylistSt
private ItemTouchHelper.SimpleCallback getItemTouchCallback() {
return new ItemTouchHelper.SimpleCallback(ItemTouchHelper.UP | ItemTouchHelper.DOWN,
int directions = ItemTouchHelper.UP | ItemTouchHelper.DOWN;
if (isGridLayout()) {
directions |= ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT;
}
return new ItemTouchHelper.SimpleCallback(directions,
ItemTouchHelper.ACTION_STATE_IDLE) {
@Override
public int interpolateOutOfBoundsScroll(RecyclerView recyclerView, int viewSize,

View File

@ -1,21 +1,30 @@
package org.schabi.newpipe.local.subscription;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.graphics.Color;
import android.graphics.PorterDuff;
import android.os.Bundle;
import android.os.Environment;
import android.os.Parcelable;
import android.preference.PreferenceManager;
import android.support.annotation.DrawableRes;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.FragmentManager;
import android.support.v4.content.LocalBroadcastManager;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
@ -42,6 +51,8 @@ import org.schabi.newpipe.info_list.InfoListAdapter;
import org.schabi.newpipe.report.UserAction;
import org.schabi.newpipe.local.subscription.services.SubscriptionsExportService;
import org.schabi.newpipe.local.subscription.services.SubscriptionsImportService;
import org.schabi.newpipe.report.ErrorActivity;
import org.schabi.newpipe.report.UserAction;
import org.schabi.newpipe.util.FilePickerActivityHelper;
import org.schabi.newpipe.util.NavigationHelper;
import org.schabi.newpipe.util.OnClickGesture;
@ -70,7 +81,7 @@ import static org.schabi.newpipe.local.subscription.services.SubscriptionsImport
import static org.schabi.newpipe.util.AnimationUtils.animateRotation;
import static org.schabi.newpipe.util.AnimationUtils.animateView;
public class SubscriptionFragment extends BaseStateFragment<List<SubscriptionEntity>> {
public class SubscriptionFragment extends BaseStateFragment<List<SubscriptionEntity>> implements SharedPreferences.OnSharedPreferenceChangeListener {
private static final int REQUEST_EXPORT_CODE = 666;
private static final int REQUEST_IMPORT_CODE = 667;
@ -78,6 +89,9 @@ public class SubscriptionFragment extends BaseStateFragment<List<SubscriptionEnt
@State
protected Parcelable itemsListState;
private InfoListAdapter infoListAdapter;
private int updateFlags = 0;
private static final int LIST_MODE_UPDATE_FLAG = 0x32;
private View whatsNewItemListHeader;
private View importExportListHeader;
@ -97,6 +111,8 @@ public class SubscriptionFragment extends BaseStateFragment<List<SubscriptionEnt
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
PreferenceManager.getDefaultSharedPreferences(activity)
.registerOnSharedPreferenceChangeListener(this);
}
@Override
@ -124,6 +140,15 @@ public class SubscriptionFragment extends BaseStateFragment<List<SubscriptionEnt
public void onResume() {
super.onResume();
setupBroadcastReceiver();
if (updateFlags != 0) {
if ((updateFlags & LIST_MODE_UPDATE_FLAG) != 0) {
final boolean useGrid = isGridLayout();
itemsList.setLayoutManager(useGrid ? getGridLayoutManager() : getListLayoutManager());
infoListAdapter.setGridItemVariants(useGrid);
infoListAdapter.notifyDataSetChanged();
}
updateFlags = 0;
}
}
@Override
@ -150,9 +175,25 @@ public class SubscriptionFragment extends BaseStateFragment<List<SubscriptionEnt
disposables = null;
subscriptionService = null;
PreferenceManager.getDefaultSharedPreferences(activity)
.unregisterOnSharedPreferenceChangeListener(this);
super.onDestroy();
}
protected RecyclerView.LayoutManager getListLayoutManager() {
return new LinearLayoutManager(activity);
}
protected RecyclerView.LayoutManager getGridLayoutManager() {
final Resources resources = activity.getResources();
int width = resources.getDimensionPixelSize(R.dimen.video_item_grid_thumbnail_image_width);
width += (24 * resources.getDisplayMetrics().density);
final int spanCount = (int) Math.floor(resources.getDisplayMetrics().widthPixels / (double)width);
final GridLayoutManager lm = new GridLayoutManager(activity, spanCount);
lm.setSpanSizeLookup(infoListAdapter.getSpanSizeLookup(spanCount));
return lm;
}
/*/////////////////////////////////////////////////////////////////////////
// Menu
/////////////////////////////////////////////////////////////////////////*/
@ -284,9 +325,10 @@ public class SubscriptionFragment extends BaseStateFragment<List<SubscriptionEnt
protected void initViews(View rootView, Bundle savedInstanceState) {
super.initViews(rootView, savedInstanceState);
final boolean useGrid = isGridLayout();
infoListAdapter = new InfoListAdapter(getActivity());
itemsList = rootView.findViewById(R.id.items_list);
itemsList.setLayoutManager(new LinearLayoutManager(activity));
itemsList.setLayoutManager(useGrid ? getGridLayoutManager() : getListLayoutManager());
View headerRootLayout;
infoListAdapter.setHeader(headerRootLayout = activity.getLayoutInflater().inflate(R.layout.subscription_header, itemsList, false));
@ -295,6 +337,7 @@ public class SubscriptionFragment extends BaseStateFragment<List<SubscriptionEnt
importExportOptions = headerRootLayout.findViewById(R.id.import_export_options);
infoListAdapter.useMiniItemVariants(true);
infoListAdapter.setGridItemVariants(useGrid);
itemsList.setAdapter(infoListAdapter);
setupImportFromItems(headerRootLayout.findViewById(R.id.import_from_options));
@ -318,7 +361,7 @@ public class SubscriptionFragment extends BaseStateFragment<List<SubscriptionEnt
super.initListeners();
infoListAdapter.setOnChannelSelectedListener(new OnClickGesture<ChannelInfoItem>() {
@Override
public void selected(ChannelInfoItem selectedItem) {
final FragmentManager fragmentManager = getFM();
NavigationHelper.openChannelFragment(fragmentManager,
@ -326,6 +369,11 @@ public class SubscriptionFragment extends BaseStateFragment<List<SubscriptionEnt
selectedItem.getUrl(),
selectedItem.getName());
}
public void held(ChannelInfoItem selectedItem) {
showLongTapDialog(selectedItem);
}
});
//noinspection ConstantConditions
@ -336,6 +384,85 @@ public class SubscriptionFragment extends BaseStateFragment<List<SubscriptionEnt
importExportListHeader.setOnClickListener(v -> importExportOptions.switchState());
}
private void showLongTapDialog(ChannelInfoItem selectedItem) {
final Context context = getContext();
final Activity activity = getActivity();
if (context == null || context.getResources() == null || getActivity() == null) return;
final String[] commands = new String[]{
context.getResources().getString(R.string.share),
context.getResources().getString(R.string.unsubscribe)
};
final DialogInterface.OnClickListener actions = (dialogInterface, i) -> {
switch (i) {
case 0:
shareChannel(selectedItem);
break;
case 1:
deleteChannel(selectedItem);
break;
default:
break;
}
};
final View bannerView = View.inflate(activity, R.layout.dialog_title, null);
bannerView.setSelected(true);
TextView titleView = bannerView.findViewById(R.id.itemTitleView);
titleView.setText(selectedItem.getName());
TextView detailsView = bannerView.findViewById(R.id.itemAdditionalDetails);
detailsView.setVisibility(View.GONE);
new AlertDialog.Builder(activity)
.setCustomTitle(bannerView)
.setItems(commands, actions)
.create()
.show();
}
private void shareChannel (ChannelInfoItem selectedItem) {
shareUrl(selectedItem.getName(), selectedItem.getUrl());
}
@SuppressLint("CheckResult")
private void deleteChannel (ChannelInfoItem selectedItem) {
subscriptionService.subscriptionTable()
.getSubscription(selectedItem.getServiceId(), selectedItem.getUrl())
.toObservable()
.observeOn(Schedulers.io())
.subscribe(getDeleteObserver());
Toast.makeText(activity, getString(R.string.channel_unsubscribed), Toast.LENGTH_SHORT).show();
}
private Observer<List<SubscriptionEntity>> getDeleteObserver(){
return new Observer<List<SubscriptionEntity>>() {
@Override
public void onSubscribe(Disposable d) {
disposables.add(d);
}
@Override
public void onNext(List<SubscriptionEntity> subscriptionEntities) {
subscriptionService.subscriptionTable().delete(subscriptionEntities);
}
@Override
public void onError(Throwable exception) {
SubscriptionFragment.this.onError(exception);
}
@Override
public void onComplete() { }
};
}
private void resetFragment() {
if (disposables != null) disposables.clear();
if (infoListAdapter != null) infoListAdapter.clearStreamItemList();
@ -445,4 +572,22 @@ public class SubscriptionFragment extends BaseStateFragment<List<SubscriptionEnt
R.string.general_error);
return true;
}
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
if (key.equals(getString(R.string.list_view_mode_key))) {
updateFlags |= LIST_MODE_UPDATE_FLAG;
}
}
protected boolean isGridLayout() {
final String list_mode = PreferenceManager.getDefaultSharedPreferences(activity).getString(getString(R.string.list_view_mode_key), getString(R.string.list_view_mode_value));
if ("auto".equals(list_mode)) {
final Configuration configuration = getResources().getConfiguration();
return configuration.orientation == Configuration.ORIENTATION_LANDSCAPE
&& configuration.isLayoutSizeAtLeast(Configuration.SCREENLAYOUT_SIZE_LARGE);
} else {
return "grid".equals(list_mode);
}
}
}

View File

@ -98,35 +98,54 @@ public abstract class BasePlayer implements
Player.EventListener, PlaybackListener, ImageLoadingListener {
public static final boolean DEBUG = !BuildConfig.BUILD_TYPE.equals("release");
@NonNull public static final String TAG = "BasePlayer";
@NonNull
public static final String TAG = "BasePlayer";
@NonNull final protected Context context;
@NonNull
final protected Context context;
@NonNull final protected BroadcastReceiver broadcastReceiver;
@NonNull final protected IntentFilter intentFilter;
@NonNull
final protected BroadcastReceiver broadcastReceiver;
@NonNull
final protected IntentFilter intentFilter;
@NonNull final protected HistoryRecordManager recordManager;
@NonNull
final protected HistoryRecordManager recordManager;
@NonNull final protected CustomTrackSelector trackSelector;
@NonNull final protected PlayerDataSource dataSource;
@NonNull
final protected CustomTrackSelector trackSelector;
@NonNull
final protected PlayerDataSource dataSource;
@NonNull final private LoadControl loadControl;
@NonNull final private RenderersFactory renderFactory;
@NonNull
final private LoadControl loadControl;
@NonNull
final private RenderersFactory renderFactory;
@NonNull final private SerialDisposable progressUpdateReactor;
@NonNull final private CompositeDisposable databaseUpdateReactor;
@NonNull
final private SerialDisposable progressUpdateReactor;
@NonNull
final private CompositeDisposable databaseUpdateReactor;
/*//////////////////////////////////////////////////////////////////////////
// Intent
//////////////////////////////////////////////////////////////////////////*/
@NonNull public static final String REPEAT_MODE = "repeat_mode";
@NonNull public static final String PLAYBACK_PITCH = "playback_pitch";
@NonNull public static final String PLAYBACK_SPEED = "playback_speed";
@NonNull public static final String PLAYBACK_SKIP_SILENCE = "playback_skip_silence";
@NonNull public static final String PLAYBACK_QUALITY = "playback_quality";
@NonNull public static final String PLAY_QUEUE_KEY = "play_queue_key";
@NonNull public static final String APPEND_ONLY = "append_only";
@NonNull public static final String SELECT_ON_APPEND = "select_on_append";
@NonNull
public static final String REPEAT_MODE = "repeat_mode";
@NonNull
public static final String PLAYBACK_PITCH = "playback_pitch";
@NonNull
public static final String PLAYBACK_SPEED = "playback_speed";
@NonNull
public static final String PLAYBACK_SKIP_SILENCE = "playback_skip_silence";
@NonNull
public static final String PLAYBACK_QUALITY = "playback_quality";
@NonNull
public static final String PLAY_QUEUE_KEY = "play_queue_key";
@NonNull
public static final String APPEND_ONLY = "append_only";
@NonNull
public static final String SELECT_ON_APPEND = "select_on_append";
/*//////////////////////////////////////////////////////////////////////////
// Playback
@ -137,13 +156,18 @@ public abstract class BasePlayer implements
protected PlayQueue playQueue;
protected PlayQueueAdapter playQueueAdapter;
@Nullable protected MediaSourceManager playbackManager;
@Nullable
protected MediaSourceManager playbackManager;
@Nullable private PlayQueueItem currentItem;
@Nullable private MediaSourceTag currentMetadata;
@Nullable private Bitmap currentThumbnail;
@Nullable
private PlayQueueItem currentItem;
@Nullable
private MediaSourceTag currentMetadata;
@Nullable
private Bitmap currentThumbnail;
@Nullable protected Toast errorToast;
@Nullable
protected Toast errorToast;
/*//////////////////////////////////////////////////////////////////////////
// Player
@ -213,7 +237,8 @@ public abstract class BasePlayer implements
registerBroadcastReceiver();
}
public void initListeners() {}
public void initListeners() {
}
public void handleIntent(Intent intent) {
if (DEBUG) Log.d(TAG, "handleIntent() called with: intent = [" + intent + "]");
@ -230,7 +255,8 @@ public abstract class BasePlayer implements
int sizeBeforeAppend = playQueue.size();
playQueue.append(queue.getStreams());
if (intent.getBooleanExtra(SELECT_ON_APPEND, false) &&
if ((intent.getBooleanExtra(SELECT_ON_APPEND, false) ||
getCurrentState() == STATE_COMPLETED) &&
queue.getStreams().size() > 0) {
playQueue.setIndex(sizeBeforeAppend);
}
@ -296,7 +322,6 @@ public abstract class BasePlayer implements
databaseUpdateReactor.clear();
progressUpdateReactor.set(null);
simpleExoPlayer = null;
}
/*//////////////////////////////////////////////////////////////////////////
@ -424,13 +449,15 @@ public abstract class BasePlayer implements
if (!isProgressLoopRunning()) startProgressLoop();
}
public void onBuffering() {}
public void onBuffering() {
}
public void onPaused() {
if (isProgressLoopRunning()) stopProgressLoop();
}
public void onPausedSeek() {}
public void onPausedSeek() {
}
public void onCompleted() {
if (DEBUG) Log.d(TAG, "onCompleted() called");
@ -601,19 +628,19 @@ public abstract class BasePlayer implements
/**
* Processes the exceptions produced by {@link com.google.android.exoplayer2.ExoPlayer ExoPlayer}.
* There are multiple types of errors: <br><br>
*
* <p>
* {@link ExoPlaybackException#TYPE_SOURCE TYPE_SOURCE}: <br><br>
*
* <p>
* {@link ExoPlaybackException#TYPE_UNEXPECTED TYPE_UNEXPECTED}: <br><br>
* If a runtime error occurred, then we can try to recover it by restarting the playback
* after setting the timestamp recovery. <br><br>
*
* <p>
* {@link ExoPlaybackException#TYPE_RENDERER TYPE_RENDERER}: <br><br>
* If the renderer failed, treat the error as unrecoverable.
*
* @see #processSourceError(IOException)
* @see Player.EventListener#onPlayerError(ExoPlaybackException)
* */
*/
@Override
public void onPlayerError(ExoPlaybackException error) {
if (DEBUG) Log.d(TAG, "ExoPlayer - onPlayerError() called with: " +
@ -899,8 +926,8 @@ public abstract class BasePlayer implements
if (DEBUG) Log.d(TAG, "onPlayPrevious() called");
/* If current playback has run for PLAY_PREV_ACTIVATION_LIMIT_MILLIS milliseconds,
* restart current track. Also restart the track if the current track
* is the first in a queue.*/
* restart current track. Also restart the track if the current track
* is the first in a queue.*/
if (simpleExoPlayer.getCurrentPosition() > PLAY_PREV_ACTIVATION_LIMIT_MILLIS ||
playQueue.getIndex() == 0) {
seekToDefault();
@ -1009,8 +1036,8 @@ public abstract class BasePlayer implements
try {
metadata = (MediaSourceTag) simpleExoPlayer.getCurrentTag();
} catch (IndexOutOfBoundsException | ClassCastException error) {
if(DEBUG) Log.d(TAG, "Could not update metadata: " + error.getMessage());
if(DEBUG) error.printStackTrace();
if (DEBUG) Log.d(TAG, "Could not update metadata: " + error.getMessage());
if (DEBUG) error.printStackTrace();
return;
}
@ -1074,7 +1101,9 @@ public abstract class BasePlayer implements
currentThumbnail;
}
/** Checks if the current playback is a livestream AND is playing at or beyond the live edge */
/**
* Checks if the current playback is a livestream AND is playing at or beyond the live edge
*/
@SuppressWarnings("BooleanMethodIsAlwaysInverted")
public boolean isLiveEdge() {
if (simpleExoPlayer == null || !isLive()) return false;
@ -1098,13 +1127,14 @@ public abstract class BasePlayer implements
} catch (@NonNull IndexOutOfBoundsException ignored) {
// Why would this even happen =(
// But lets log it anyway. Save is save
if(DEBUG) Log.d(TAG, "Could not update metadata: " + ignored.getMessage());
if(DEBUG) ignored.printStackTrace();
if (DEBUG) Log.d(TAG, "Could not update metadata: " + ignored.getMessage());
if (DEBUG) ignored.printStackTrace();
return false;
}
}
public boolean isPlaying() {
if (simpleExoPlayer == null) return false;
final int state = simpleExoPlayer.getPlaybackState();
return (state == Player.STATE_READY || state == Player.STATE_BUFFERING)
&& simpleExoPlayer.getPlayWhenReady();
@ -1112,7 +1142,9 @@ public abstract class BasePlayer implements
@Player.RepeatMode
public int getRepeatMode() {
return simpleExoPlayer == null ? Player.REPEAT_MODE_OFF : simpleExoPlayer.getRepeatMode();
return simpleExoPlayer == null
? Player.REPEAT_MODE_OFF
: simpleExoPlayer.getRepeatMode();
}
public void setRepeatMode(@Player.RepeatMode final int repeatMode) {
@ -1178,4 +1210,8 @@ public abstract class BasePlayer implements
if (DEBUG) Log.d(TAG, "Setting recovery, queue: " + queuePos + ", pos: " + windowPos);
playQueue.setRecovery(queuePos, windowPos);
}
public boolean gotDestroyed() {
return simpleExoPlayer == null;
}
}

View File

@ -175,6 +175,10 @@ public final class MainVideoPlayer extends AppCompatActivity
setLandscape(lastOrientationWasLandscape);
}
final int lastResizeMode = defaultPreferences.getInt(
getString(R.string.last_resize_mode), AspectRatioFrameLayout.RESIZE_MODE_FIT);
playerImpl.setResizeMode(lastResizeMode);
// Upon going in or out of multiwindow mode, isInMultiWindow will always be false,
// since the first onResume needs to restore the player.
// Subsequent onResume calls while multiwindow mode remains the same and the player is
@ -213,10 +217,9 @@ public final class MainVideoPlayer extends AppCompatActivity
if (playerImpl == null) return;
playerImpl.setRecovery();
playerState = new PlayerState(playerImpl.getPlayQueue(), playerImpl.getRepeatMode(),
playerImpl.getPlaybackSpeed(), playerImpl.getPlaybackPitch(),
playerImpl.getPlaybackQuality(), playerImpl.getPlaybackSkipSilence(),
playerImpl.isPlaying());
if(!playerImpl.gotDestroyed()) {
playerState = createPlayerState();
}
StateSaver.tryToSave(isChangingConfigurations(), null, outState, this);
}
@ -231,6 +234,7 @@ public final class MainVideoPlayer extends AppCompatActivity
if (!isBackPressed) {
playerImpl.minimize();
}
playerState = createPlayerState();
playerImpl.destroy();
isInMultiWindow = false;
@ -241,6 +245,13 @@ public final class MainVideoPlayer extends AppCompatActivity
// State Saving
//////////////////////////////////////////////////////////////////////////*/
private PlayerState createPlayerState() {
return new PlayerState(playerImpl.getPlayQueue(), playerImpl.getRepeatMode(),
playerImpl.getPlaybackSpeed(), playerImpl.getPlaybackPitch(),
playerImpl.getPlaybackQuality(), playerImpl.getPlaybackSkipSilence(),
playerImpl.isPlaying());
}
@Override
public String generateSuffix() {
return "." + UUID.randomUUID().toString() + ".player";
@ -705,14 +716,27 @@ public final class MainVideoPlayer extends AppCompatActivity
@Override
protected int nextResizeMode(int currentResizeMode) {
final int newResizeMode;
switch (currentResizeMode) {
case AspectRatioFrameLayout.RESIZE_MODE_FIT:
return AspectRatioFrameLayout.RESIZE_MODE_FILL;
newResizeMode = AspectRatioFrameLayout.RESIZE_MODE_FILL;
break;
case AspectRatioFrameLayout.RESIZE_MODE_FILL:
return AspectRatioFrameLayout.RESIZE_MODE_ZOOM;
newResizeMode = AspectRatioFrameLayout.RESIZE_MODE_ZOOM;
break;
default:
return AspectRatioFrameLayout.RESIZE_MODE_FIT;
newResizeMode = AspectRatioFrameLayout.RESIZE_MODE_FIT;
break;
}
storeResizeMode(newResizeMode);
return newResizeMode;
}
private void storeResizeMode(@AspectRatioFrameLayout.ResizeMode int resizeMode) {
defaultPreferences.edit()
.putInt(getString(R.string.last_resize_mode), resizeMode)
.apply();
}
@Override
@ -876,6 +900,11 @@ public final class MainVideoPlayer extends AppCompatActivity
public void onMove(int sourceIndex, int targetIndex) {
if (playQueue != null) playQueue.move(sourceIndex, targetIndex);
}
@Override
public void onSwiped(int index) {
if(index != -1) playQueue.remove(index);
}
};
}
@ -989,12 +1018,14 @@ public final class MainVideoPlayer extends AppCompatActivity
private static final int MOVEMENT_THRESHOLD = 40;
private final boolean isPlayerGestureEnabled = PlayerHelper.isPlayerGestureEnabled(getApplicationContext());
private final boolean isVolumeGestureEnabled = PlayerHelper.isVolumeGestureEnabled(getApplicationContext());
private final boolean isBrightnessGestureEnabled = PlayerHelper.isBrightnessGestureEnabled(getApplicationContext());
private final int maxVolume = playerImpl.getAudioReactor().getMaxVolume();
@Override
public boolean onScroll(MotionEvent initialEvent, MotionEvent movingEvent, float distanceX, float distanceY) {
if (!isPlayerGestureEnabled) return false;
if (!isVolumeGestureEnabled && !isBrightnessGestureEnabled) return false;
//noinspection PointlessBooleanExpression
if (DEBUG && false) Log.d(TAG, "MainVideoPlayer.onScroll = " +
@ -1010,7 +1041,11 @@ public final class MainVideoPlayer extends AppCompatActivity
isMoving = true;
if (initialEvent.getX() > playerImpl.getRootView().getWidth() / 2) {
boolean acceptAnyArea = isVolumeGestureEnabled != isBrightnessGestureEnabled;
boolean acceptVolumeArea = acceptAnyArea || initialEvent.getX() > playerImpl.getRootView().getWidth() / 2;
boolean acceptBrightnessArea = acceptAnyArea || !acceptVolumeArea;
if (isVolumeGestureEnabled && acceptVolumeArea) {
playerImpl.getVolumeProgressBar().incrementProgressBy((int) distanceY);
float currentProgressPercent =
(float) playerImpl.getVolumeProgressBar().getProgress() / playerImpl.getMaxGestureLength();
@ -1035,7 +1070,7 @@ public final class MainVideoPlayer extends AppCompatActivity
if (playerImpl.getBrightnessRelativeLayout().getVisibility() == View.VISIBLE) {
playerImpl.getBrightnessRelativeLayout().setVisibility(View.GONE);
}
} else {
} else if (isBrightnessGestureEnabled && acceptBrightnessArea) {
playerImpl.getBrightnessProgressBar().incrementProgressBy((int) distanceY);
float currentProgressPercent =
(float) playerImpl.getBrightnessProgressBar().getProgress() / playerImpl.getMaxGestureLength();

View File

@ -68,7 +68,6 @@ import org.schabi.newpipe.extractor.stream.VideoStream;
import org.schabi.newpipe.player.event.PlayerEventListener;
import org.schabi.newpipe.player.helper.LockManager;
import org.schabi.newpipe.player.helper.PlayerHelper;
import org.schabi.newpipe.player.old.PlayVideoActivity;
import org.schabi.newpipe.player.resolver.MediaSourceTag;
import org.schabi.newpipe.player.resolver.VideoPlaybackResolver;
import org.schabi.newpipe.util.ListHelper;
@ -80,7 +79,6 @@ import java.util.List;
import static org.schabi.newpipe.player.BasePlayer.STATE_PLAYING;
import static org.schabi.newpipe.player.VideoPlayer.DEFAULT_CONTROLS_DURATION;
import static org.schabi.newpipe.player.VideoPlayer.DEFAULT_CONTROLS_HIDE_TIME;
import static org.schabi.newpipe.player.helper.PlayerHelper.isUsingOldPlayer;
import static org.schabi.newpipe.util.AnimationUtils.animateView;
/**
@ -554,27 +552,17 @@ public final class PopupVideoPlayer extends Service {
if (DEBUG) Log.d(TAG, "onFullScreenButtonClicked() called");
setRecovery();
Intent intent;
if (!isUsingOldPlayer(getApplicationContext())) {
intent = NavigationHelper.getPlayerIntent(
context,
MainVideoPlayer.class,
this.getPlayQueue(),
this.getRepeatMode(),
this.getPlaybackSpeed(),
this.getPlaybackPitch(),
this.getPlaybackSkipSilence(),
this.getPlaybackQuality()
);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
} else {
intent = new Intent(PopupVideoPlayer.this, PlayVideoActivity.class)
.putExtra(PlayVideoActivity.VIDEO_TITLE, getVideoTitle())
.putExtra(PlayVideoActivity.STREAM_URL, getSelectedVideoStream().getUrl())
.putExtra(PlayVideoActivity.VIDEO_URL, getVideoUrl())
.putExtra(PlayVideoActivity.START_POSITION, Math.round(getPlayer().getCurrentPosition() / 1000f));
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
}
final Intent intent = NavigationHelper.getPlayerIntent(
context,
MainVideoPlayer.class,
this.getPlayQueue(),
this.getRepeatMode(),
this.getPlaybackSpeed(),
this.getPlaybackPitch(),
this.getPlaybackSkipSilence(),
this.getPlaybackQuality()
);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
closePopup();
}

View File

@ -375,6 +375,11 @@ public abstract class ServicePlayerActivity extends AppCompatActivity
public void onMove(int sourceIndex, int targetIndex) {
if (player != null) player.getPlayQueue().move(sourceIndex, targetIndex);
}
@Override
public void onSwiped(int index) {
if (index != -1) player.getPlayQueue().remove(index);
}
};
}

View File

@ -683,12 +683,17 @@ public abstract class VideoPlayer extends BasePlayer
if (getAspectRatioFrameLayout() != null) {
final int currentResizeMode = getAspectRatioFrameLayout().getResizeMode();
final int newResizeMode = nextResizeMode(currentResizeMode);
getAspectRatioFrameLayout().setResizeMode(newResizeMode);
getResizeView().setText(PlayerHelper.resizeTypeOf(context, newResizeMode));
setResizeMode(newResizeMode);
}
}
protected void setResizeMode(@AspectRatioFrameLayout.ResizeMode final int resizeMode) {
getAspectRatioFrameLayout().setResizeMode(resizeMode);
getResizeView().setText(PlayerHelper.resizeTypeOf(context, resizeMode));
}
protected abstract int nextResizeMode(@AspectRatioFrameLayout.ResizeMode final int resizeMode);
/*//////////////////////////////////////////////////////////////////////////
// SeekBar Listener
//////////////////////////////////////////////////////////////////////////*/

View File

@ -19,11 +19,11 @@ import com.google.android.exoplayer2.util.MimeTypes;
import org.schabi.newpipe.R;
import org.schabi.newpipe.extractor.InfoItem;
import org.schabi.newpipe.extractor.Subtitles;
import org.schabi.newpipe.extractor.MediaFormat;
import org.schabi.newpipe.extractor.stream.AudioStream;
import org.schabi.newpipe.extractor.stream.StreamInfo;
import org.schabi.newpipe.extractor.stream.StreamInfoItem;
import org.schabi.newpipe.extractor.stream.SubtitlesFormat;
import org.schabi.newpipe.extractor.stream.SubtitlesStream;
import org.schabi.newpipe.extractor.stream.VideoStream;
import org.schabi.newpipe.player.playqueue.PlayQueue;
import org.schabi.newpipe.player.playqueue.PlayQueueItem;
@ -87,7 +87,7 @@ public class PlayerHelper {
return pitchFormatter.format(pitch);
}
public static String mimeTypesOf(final SubtitlesFormat format) {
public static String mimeTypesOf(final MediaFormat format) {
switch (format) {
case VTT: return MimeTypes.TEXT_VTT;
case TTML: return MimeTypes.APPLICATION_TTML;
@ -97,7 +97,7 @@ public class PlayerHelper {
@NonNull
public static String captionLanguageOf(@NonNull final Context context,
@NonNull final Subtitles subtitles) {
@NonNull final SubtitlesStream subtitles) {
final String displayName = subtitles.getLocale().getDisplayName(subtitles.getLocale());
return displayName + (subtitles.isAutoGenerated() ? " (" + context.getString(R.string.caption_auto_generated)+ ")" : "");
}
@ -169,12 +169,12 @@ public class PlayerHelper {
return isResumeAfterAudioFocusGain(context, false);
}
public static boolean isPlayerGestureEnabled(@NonNull final Context context) {
return isPlayerGestureEnabled(context, true);
public static boolean isVolumeGestureEnabled(@NonNull final Context context) {
return isVolumeGestureEnabled(context, true);
}
public static boolean isUsingOldPlayer(@NonNull final Context context) {
return isUsingOldPlayer(context, false);
public static boolean isBrightnessGestureEnabled(@NonNull final Context context) {
return isBrightnessGestureEnabled(context, true);
}
public static boolean isRememberingPopupDimensions(@NonNull final Context context) {
@ -306,12 +306,12 @@ public class PlayerHelper {
return getPreferences(context).getBoolean(context.getString(R.string.resume_on_audio_focus_gain_key), b);
}
private static boolean isPlayerGestureEnabled(@NonNull final Context context, final boolean b) {
return getPreferences(context).getBoolean(context.getString(R.string.player_gesture_controls_key), b);
private static boolean isVolumeGestureEnabled(@NonNull final Context context, final boolean b) {
return getPreferences(context).getBoolean(context.getString(R.string.volume_gesture_control_key), b);
}
private static boolean isUsingOldPlayer(@NonNull final Context context, final boolean b) {
return getPreferences(context).getBoolean(context.getString(R.string.use_old_player_key), b);
private static boolean isBrightnessGestureEnabled(@NonNull final Context context, final boolean b) {
return getPreferences(context).getBoolean(context.getString(R.string.brightness_gesture_control_key), b);
}
private static boolean isRememberingPopupDimensions(@NonNull final Context context, final boolean b) {

View File

@ -1,369 +0,0 @@
package org.schabi.newpipe.player.old;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.ActivityInfo;
import android.content.res.Configuration;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.Display;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.MediaController;
import android.widget.ProgressBar;
import android.widget.VideoView;
import org.schabi.newpipe.R;
/*
* Copyright (C) Christian Schabesberger 2015 <chris.schabesberger@mailbox.org>
* PlayVideoActivity.java is part of NewPipe.
*
* NewPipe is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* NewPipe is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with NewPipe. If not, see <http://www.gnu.org/licenses/>.
*/
public class PlayVideoActivity extends AppCompatActivity {
//// TODO: 11.09.15 add "choose stream" menu
private static final String TAG = PlayVideoActivity.class.toString();
public static final String VIDEO_URL = "video_url";
public static final String STREAM_URL = "stream_url";
public static final String VIDEO_TITLE = "video_title";
private static final String POSITION = "position";
public static final String START_POSITION = "start_position";
private static final long HIDING_DELAY = 3000;
private String videoUrl = "";
private ActionBar actionBar;
private VideoView videoView;
private int position;
private MediaController mediaController;
private ProgressBar progressBar;
private View decorView;
private boolean uiIsHidden;
private static long lastUiShowTime;
private boolean isLandscape = true;
private boolean hasSoftKeys;
private SharedPreferences prefs;
private static final String PREF_IS_LANDSCAPE = "is_landscape";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_play_video);
setVolumeControlStream(AudioManager.STREAM_MUSIC);
//set background arrow style
getSupportActionBar().setHomeAsUpIndicator(R.drawable.ic_arrow_back_white_24dp);
isLandscape = checkIfLandscape();
hasSoftKeys = checkIfHasSoftKeys();
actionBar = getSupportActionBar();
assert actionBar != null;
actionBar.setDisplayHomeAsUpEnabled(true);
Intent intent = getIntent();
if(mediaController == null) {
//prevents back button hiding media controller controls (after showing them)
//instead of exiting video
//see http://stackoverflow.com/questions/6051825
//also solves https://github.com/theScrabi/NewPipe/issues/99
mediaController = new MediaController(this) {
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
int keyCode = event.getKeyCode();
final boolean uniqueDown = event.getRepeatCount() == 0
&& event.getAction() == KeyEvent.ACTION_DOWN;
if (keyCode == KeyEvent.KEYCODE_BACK) {
if (uniqueDown)
{
if (isShowing()) {
finish();
} else {
hide();
}
}
return true;
}
return super.dispatchKeyEvent(event);
}
};
}
position = intent.getIntExtra(START_POSITION, 0)*1000;//convert from seconds to milliseconds
videoView = findViewById(R.id.video_view);
progressBar = findViewById(R.id.play_video_progress_bar);
try {
videoView.setMediaController(mediaController);
videoView.setVideoURI(Uri.parse(intent.getStringExtra(STREAM_URL)));
} catch (Exception e) {
e.printStackTrace();
}
videoView.requestFocus();
videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
progressBar.setVisibility(View.GONE);
videoView.seekTo(position);
if (position <= 0) {
videoView.start();
showUi();
} else {
videoView.pause();
}
}
});
videoUrl = intent.getStringExtra(VIDEO_URL);
Button button = findViewById(R.id.content_button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(uiIsHidden) {
showUi();
} else {
hideUi();
}
}
});
decorView = getWindow().getDecorView();
decorView.setOnSystemUiVisibilityChangeListener(new View.OnSystemUiVisibilityChangeListener() {
@Override
public void onSystemUiVisibilityChange(int visibility) {
if (visibility == View.VISIBLE && uiIsHidden) {
showUi();
}
}
});
if (android.os.Build.VERSION.SDK_INT >= 17) {
decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
}
prefs = getPreferences(Context.MODE_PRIVATE);
if(prefs.getBoolean(PREF_IS_LANDSCAPE, false) && !isLandscape) {
toggleOrientation();
}
}
@Override
public boolean onCreatePanelMenu(int featured, Menu menu) {
super.onCreatePanelMenu(featured, menu);
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.video_player, menu);
return true;
}
@Override
public void onPause() {
super.onPause();
videoView.pause();
}
@Override
public void onResume() {
super.onResume();
}
@Override
protected void onDestroy() {
super.onDestroy();
prefs = getPreferences(Context.MODE_PRIVATE);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
switch(id) {
case android.R.id.home:
finish();
break;
case R.id.menu_item_share:
Intent intent = new Intent();
intent.setAction(Intent.ACTION_SEND);
intent.putExtra(Intent.EXTRA_TEXT, videoUrl);
intent.setType("text/plain");
startActivity(Intent.createChooser(intent, getString(R.string.share_dialog_title)));
break;
case R.id.menu_item_screen_rotation:
toggleOrientation();
break;
default:
Log.e(TAG, "Error: MenuItem not known");
return false;
}
return true;
}
@Override
public void onConfigurationChanged(Configuration config) {
super.onConfigurationChanged(config);
if (config.orientation == Configuration.ORIENTATION_LANDSCAPE) {
isLandscape = true;
adjustMediaControlMetrics();
} else if (config.orientation == Configuration.ORIENTATION_PORTRAIT){
isLandscape = false;
adjustMediaControlMetrics();
}
}
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
super.onSaveInstanceState(savedInstanceState);
//savedInstanceState.putInt(POSITION, videoView.getCurrentPosition());
//videoView.pause();
}
@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
position = savedInstanceState.getInt(POSITION);
//videoView.seekTo(position);
}
private void showUi() {
try {
uiIsHidden = false;
mediaController.show(100000);
actionBar.show();
adjustMediaControlMetrics();
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
if ((System.currentTimeMillis() - lastUiShowTime) >= HIDING_DELAY) {
hideUi();
}
}
}, HIDING_DELAY);
lastUiShowTime = System.currentTimeMillis();
}catch(Exception e) {
e.printStackTrace();
}
}
private void hideUi() {
uiIsHidden = true;
actionBar.hide();
mediaController.hide();
if (android.os.Build.VERSION.SDK_INT >= 17) {
decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_FULLSCREEN
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
}
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
}
private void adjustMediaControlMetrics() {
MediaController.LayoutParams mediaControllerLayout
= new MediaController.LayoutParams(MediaController.LayoutParams.MATCH_PARENT,
MediaController.LayoutParams.WRAP_CONTENT);
if(!hasSoftKeys) {
mediaControllerLayout.setMargins(20, 0, 20, 20);
} else {
int width = getNavigationBarWidth();
int height = getNavigationBarHeight();
mediaControllerLayout.setMargins(width + 20, 0, width + 20, height + 20);
}
mediaController.setLayoutParams(mediaControllerLayout);
}
private boolean checkIfHasSoftKeys(){
return Build.VERSION.SDK_INT >= 17 ||
getNavigationBarHeight() != 0 ||
getNavigationBarWidth() != 0;
}
private int getNavigationBarHeight() {
if(Build.VERSION.SDK_INT >= 17) {
Display d = getWindowManager().getDefaultDisplay();
DisplayMetrics realDisplayMetrics = new DisplayMetrics();
d.getRealMetrics(realDisplayMetrics);
DisplayMetrics displayMetrics = new DisplayMetrics();
d.getMetrics(displayMetrics);
int realHeight = realDisplayMetrics.heightPixels;
int displayHeight = displayMetrics.heightPixels;
return realHeight - displayHeight;
} else {
return 50;
}
}
private int getNavigationBarWidth() {
if(Build.VERSION.SDK_INT >= 17) {
Display d = getWindowManager().getDefaultDisplay();
DisplayMetrics realDisplayMetrics = new DisplayMetrics();
d.getRealMetrics(realDisplayMetrics);
DisplayMetrics displayMetrics = new DisplayMetrics();
d.getMetrics(displayMetrics);
int realWidth = realDisplayMetrics.widthPixels;
int displayWidth = displayMetrics.widthPixels;
return realWidth - displayWidth;
} else {
return 50;
}
}
private boolean checkIfLandscape() {
DisplayMetrics displayMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
return displayMetrics.heightPixels < displayMetrics.widthPixels;
}
private void toggleOrientation() {
if(isLandscape) {
isLandscape = false;
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
} else {
isLandscape = true;
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);
}
SharedPreferences.Editor editor = prefs.edit();
editor.putBoolean(PREF_IS_LANDSCAPE, isLandscape);
editor.apply();
}
}

View File

@ -8,11 +8,13 @@ public abstract class PlayQueueItemTouchCallback extends ItemTouchHelper.SimpleC
private static final int MAXIMUM_INITIAL_DRAG_VELOCITY = 25;
public PlayQueueItemTouchCallback() {
super(ItemTouchHelper.UP | ItemTouchHelper.DOWN, 0);
super(ItemTouchHelper.UP | ItemTouchHelper.DOWN, ItemTouchHelper.RIGHT);
}
public abstract void onMove(final int sourceIndex, final int targetIndex);
public abstract void onSwiped(int index);
@Override
public int interpolateOutOfBoundsScroll(RecyclerView recyclerView, int viewSize,
int viewSizeOutOfBounds, int totalSize,
@ -44,9 +46,11 @@ public abstract class PlayQueueItemTouchCallback extends ItemTouchHelper.SimpleC
@Override
public boolean isItemViewSwipeEnabled() {
return false;
return true;
}
@Override
public void onSwiped(RecyclerView.ViewHolder viewHolder, int swipeDir) {}
public void onSwiped(RecyclerView.ViewHolder viewHolder, int swipeDir) {
onSwiped(viewHolder.getAdapterPosition());
}
}

View File

@ -10,9 +10,9 @@ import com.google.android.exoplayer2.source.MediaSource;
import com.google.android.exoplayer2.source.MergingMediaSource;
import org.schabi.newpipe.extractor.MediaFormat;
import org.schabi.newpipe.extractor.Subtitles;
import org.schabi.newpipe.extractor.stream.AudioStream;
import org.schabi.newpipe.extractor.stream.StreamInfo;
import org.schabi.newpipe.extractor.stream.SubtitlesStream;
import org.schabi.newpipe.extractor.stream.VideoStream;
import org.schabi.newpipe.player.helper.PlayerDataSource;
import org.schabi.newpipe.player.helper.PlayerHelper;
@ -93,8 +93,8 @@ public class VideoPlaybackResolver implements PlaybackResolver {
// Below are auxiliary media sources
// Create subtitle sources
for (final Subtitles subtitle : info.getSubtitles()) {
final String mimeType = PlayerHelper.mimeTypesOf(subtitle.getFileType());
for (final SubtitlesStream subtitle : info.getSubtitles()) {
final String mimeType = PlayerHelper.mimeTypesOf(subtitle.getFormat());
if (mimeType == null) continue;
final Format textFormat = Format.createTextSampleFormat(null, mimeType,

View File

@ -17,6 +17,8 @@ import com.nononsenseapps.filepicker.Utils;
import com.nostra13.universalimageloader.core.ImageLoader;
import org.schabi.newpipe.R;
import org.schabi.newpipe.extractor.NewPipe;
import org.schabi.newpipe.extractor.utils.Localization;
import org.schabi.newpipe.report.ErrorActivity;
import org.schabi.newpipe.report.UserAction;
import org.schabi.newpipe.util.FilePickerActivityHelper;
@ -106,6 +108,20 @@ public class ContentSettingsFragment extends BasePreferenceFragment {
startActivityForResult(i, REQUEST_EXPORT_PATH);
return true;
});
Preference setPreferredLanguage = findPreference(getString(R.string.content_language_key));
setPreferredLanguage.setOnPreferenceChangeListener((Preference p, Object newLanguage) -> {
Localization oldLocal = org.schabi.newpipe.util.Localization.getPreferredExtractorLocal(getActivity());
NewPipe.setLocalization(new Localization(oldLocal.getCountry(), (String) newLanguage));
return true;
});
Preference setPreferredCountry = findPreference(getString(R.string.content_country_key));
setPreferredCountry.setOnPreferenceChangeListener((Preference p, Object newCountry) -> {
Localization oldLocal = org.schabi.newpipe.util.Localization.getPreferredExtractorLocal(getActivity());
NewPipe.setLocalization(new Localization((String) newCountry, oldLocal.getLanguage()));
return true;
});
}
@Override

View File

@ -69,42 +69,37 @@ public final class ExtractorHelper {
public static Single<SearchInfo> searchFor(final int serviceId,
final String searchString,
final List<String> contentFilter,
final String sortFilter,
final String contentCountry) {
final String sortFilter) {
checkServiceId(serviceId);
return Single.fromCallable(() ->
SearchInfo.getInfo(NewPipe.getService(serviceId),
NewPipe.getService(serviceId)
.getSearchQHFactory()
.fromQuery(searchString, contentFilter, sortFilter),
contentCountry));
.fromQuery(searchString, contentFilter, sortFilter)));
}
public static Single<InfoItemsPage> getMoreSearchItems(final int serviceId,
final String searchString,
final List<String> contentFilter,
final String sortFilter,
final String pageUrl,
final String contentCountry) {
final String pageUrl) {
checkServiceId(serviceId);
return Single.fromCallable(() ->
SearchInfo.getMoreItems(NewPipe.getService(serviceId),
NewPipe.getService(serviceId)
.getSearchQHFactory()
.fromQuery(searchString, contentFilter, sortFilter),
contentCountry,
pageUrl));
}
public static Single<List<String>> suggestionsFor(final int serviceId,
final String query,
final String contentCountry) {
final String query) {
checkServiceId(serviceId);
return Single.fromCallable(() ->
NewPipe.getService(serviceId)
.getSuggestionExtractor()
.suggestionList(query, contentCountry));
.suggestionList(query));
}
public static Single<StreamInfo> getStreamInfo(final int serviceId,
@ -165,19 +160,17 @@ public final class ExtractorHelper {
public static Single<KioskInfo> getKioskInfo(final int serviceId,
final String url,
final String contentCountry,
boolean forceLoad) {
return checkCache(forceLoad, serviceId, url, InfoItem.InfoType.PLAYLIST, Single.fromCallable(() ->
KioskInfo.getInfo(NewPipe.getService(serviceId), url, contentCountry)));
KioskInfo.getInfo(NewPipe.getService(serviceId), url)));
}
public static Single<InfoItemsPage> getMoreKioskItems(final int serviceId,
final String url,
final String nextStreamsUrl,
final String contentCountry) {
final String url,
final String nextStreamsUrl) {
return Single.fromCallable(() ->
KioskInfo.getMoreItems(NewPipe.getService(serviceId),
url, nextStreamsUrl, contentCountry));
url, nextStreamsUrl));
}
/*//////////////////////////////////////////////////////////////////////////

View File

@ -110,7 +110,8 @@ public final class ListHelper {
: context.getString(R.string.best_resolution_key);
String maxResolution = getResolutionLimit(context);
if (maxResolution != null && compareVideoStreamResolution(maxResolution, resolution) < 1){
if (maxResolution != null && (resolution.equals(context.getString(R.string.best_resolution_key))
|| compareVideoStreamResolution(maxResolution, resolution) < 1)) {
resolution = maxResolution;
}
return resolution;

View File

@ -69,10 +69,23 @@ public class Localization {
return stringBuilder.toString();
}
public static org.schabi.newpipe.extractor.utils.Localization getPreferredExtractorLocal(Context context) {
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context);
String languageCode = sp.getString(context.getString(R.string.content_language_key),
context.getString(R.string.default_language_value));
String countryCode = sp.getString(context.getString(R.string.content_country_key),
context.getString(R.string.default_country_value));
return new org.schabi.newpipe.extractor.utils.Localization(countryCode, languageCode);
}
public static Locale getPreferredLocale(Context context) {
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context);
String languageCode = sp.getString(context.getString(R.string.search_language_key), context.getString(R.string.default_language_value));
String languageCode = sp.getString(context.getString(R.string.content_language_key),
context.getString(R.string.default_language_value));
try {
if (languageCode.length() == 2) {

View File

@ -50,7 +50,6 @@ import org.schabi.newpipe.player.MainVideoPlayer;
import org.schabi.newpipe.player.PopupVideoPlayer;
import org.schabi.newpipe.player.PopupVideoPlayerActivity;
import org.schabi.newpipe.player.VideoPlayer;
import org.schabi.newpipe.player.old.PlayVideoActivity;
import org.schabi.newpipe.player.playqueue.PlayQueue;
import org.schabi.newpipe.settings.SettingsActivity;
@ -118,26 +117,6 @@ public class NavigationHelper {
context.startActivity(playerIntent);
}
public static void playOnOldVideoPlayer(Context context, StreamInfo info) {
ArrayList<VideoStream> videoStreamsList = new ArrayList<>(ListHelper.getSortedStreamVideosList(context, info.getVideoStreams(), null, false));
int index = ListHelper.getDefaultResolutionIndex(context, videoStreamsList);
if (index == -1) {
Toast.makeText(context, R.string.video_streams_empty, Toast.LENGTH_SHORT).show();
return;
}
VideoStream videoStream = videoStreamsList.get(index);
Intent intent = new Intent(context, PlayVideoActivity.class)
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
.putExtra(PlayVideoActivity.VIDEO_TITLE, info.getName())
.putExtra(PlayVideoActivity.STREAM_URL, videoStream.getUrl())
.putExtra(PlayVideoActivity.VIDEO_URL, info.getUrl())
.putExtra(PlayVideoActivity.START_POSITION, info.getStartPosition());
context.startActivity(intent);
}
public static void playOnPopupPlayer(final Context context, final PlayQueue queue) {
if (!PermissionHelper.isPopupEnabled(context)) {
PermissionHelper.showPopupEnablementToast(context);

View File

@ -96,12 +96,12 @@ public class MissionAdapter extends RecyclerView.Adapter<MissionAdapter.ViewHold
}
});
/*h.itemView.setOnClickListener(new View.OnClickListener() {
h.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showDetail(h);
if(h.mission.finished) viewFile(h);
}
});*/
});
return h;
}
@ -200,14 +200,12 @@ public class MissionAdapter extends RecyclerView.Adapter<MissionAdapter.ViewHold
Menu menu = popup.getMenu();
MenuItem start = menu.findItem(R.id.start);
MenuItem pause = menu.findItem(R.id.pause);
MenuItem view = menu.findItem(R.id.view);
MenuItem delete = menu.findItem(R.id.delete);
MenuItem checksum = menu.findItem(R.id.checksum);
// Set to false first
start.setVisible(false);
pause.setVisible(false);
view.setVisible(false);
delete.setVisible(false);
checksum.setVisible(false);
@ -222,7 +220,6 @@ public class MissionAdapter extends RecyclerView.Adapter<MissionAdapter.ViewHold
pause.setVisible(true);
}
} else {
view.setVisible(true);
delete.setVisible(true);
checksum.setVisible(true);
}
@ -241,27 +238,6 @@ public class MissionAdapter extends RecyclerView.Adapter<MissionAdapter.ViewHold
mBinder.onMissionRemoved(mItemList.get(h.position));
h.lastTimeStamp = -1;
h.lastDone = -1;
return true;
case R.id.view:
File f = new File(h.mission.location, h.mission.name);
String ext = Utility.getFileExt(h.mission.name);
Log.d(TAG, "Viewing file: " + f.getAbsolutePath() + " ext: " + ext);
if (ext == null) {
Log.w(TAG, "Can't view file because it has no extension: " +
h.mission.name);
return false;
}
String mime = MimeTypeMap.getSingleton().getMimeTypeFromExtension(ext.substring(1));
Log.v(TAG, "Mime: " + mime + " package: " + mContext.getApplicationContext().getPackageName() + ".provider");
if (f.exists()) {
viewFileWithFileProvider(f, mime);
} else {
Log.w(TAG, "File doesn't exist");
}
return true;
case R.id.delete:
mDeleteDownloadManager.add(h.mission);
@ -282,6 +258,28 @@ public class MissionAdapter extends RecyclerView.Adapter<MissionAdapter.ViewHold
popup.show();
}
private boolean viewFile(ViewHolder h) {
File f = new File(h.mission.location, h.mission.name);
String ext = Utility.getFileExt(h.mission.name);
Log.d(TAG, "Viewing file: " + f.getAbsolutePath() + " ext: " + ext);
if (ext == null) {
Log.w(TAG, "Can't view file because it has no extension: " +
h.mission.name);
return true;
}
String mime = MimeTypeMap.getSingleton().getMimeTypeFromExtension(ext.substring(1));
Log.v(TAG, "Mime: " + mime + " package: " + mContext.getApplicationContext().getPackageName() + ".provider");
if (f.exists()) {
viewFileWithFileProvider(f, mime);
} else {
Log.w(TAG, "File doesn't exist");
}
return false;
}
private void viewFileWithFileProvider(File file, String mimetype) {
String ourPackage = mContext.getApplicationContext().getPackageName();
Uri uri = FileProvider.getUriForFile(mContext, ourPackage + ".provider", file);

View File

@ -16,6 +16,8 @@ import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
@ -144,17 +146,21 @@ public abstract class MissionsFragment extends Fragment {
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
return super.onOptionsItemSelected(item);
public void onPrepareOptionsMenu(Menu menu) {
mSwitch = menu.findItem(R.id.switch_mode);
super.onPrepareOptionsMenu(menu);
}
/*switch (item.getItemId()) {
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.switch_mode:
mLinear = !mLinear;
updateList();
return true;
default:
return super.onOptionsItemSelected(item);
}*/
}
}
public void notifyChange() {

View File

@ -0,0 +1,581 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:gravity="center">
<com.google.android.exoplayer2.ui.AspectRatioFrameLayout
android:id="@+id/aspectRatioLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerInParent="true"
android:layout_gravity="center">
<SurfaceView
android:id="@+id/surfaceView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"/>
<View
android:id="@+id/surfaceForeground"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/black"/>
</com.google.android.exoplayer2.ui.AspectRatioFrameLayout>
<com.google.android.exoplayer2.ui.SubtitleView
android:id="@+id/subtitleView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerInParent="true"
android:layout_gravity="center"/>
<ImageView
android:id="@+id/endScreen"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:visibility="gone"
tools:background="@android:color/white"
tools:ignore="ContentDescription"
tools:visibility="visible"/>
<RelativeLayout
android:id="@+id/playQueuePanel"
android:layout_width="380dp"
android:layout_height="match_parent"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:visibility="invisible"
android:background="?attr/queue_background_color"
tools:visibility="visible">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="60dp"
android:id="@+id/playQueueControl">
<ImageButton
android:id="@+id/playQueueClose"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_centerVertical="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:layout_marginRight="40dp"
android:layout_marginEnd="40dp"
android:padding="10dp"
android:clickable="true"
android:focusable="true"
android:scaleType="fitXY"
android:tint="?attr/colorAccent"
android:src="@drawable/ic_close_white_24dp"
android:background="?android:selectableItemBackground"
tools:ignore="ContentDescription"/>
<ImageButton
android:id="@+id/repeatButton"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_centerVertical="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_marginLeft="40dp"
android:layout_marginStart="40dp"
android:padding="10dp"
android:clickable="true"
android:focusable="true"
android:scaleType="fitXY"
android:tint="?attr/colorAccent"
android:src="@drawable/exo_controls_repeat_off"
android:background="?android:selectableItemBackground"
tools:ignore="ContentDescription,RtlHardcoded"/>
<ImageButton
android:id="@+id/shuffleButton"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_centerVertical="true"
android:layout_toRightOf="@id/repeatButton"
android:padding="10dp"
android:clickable="true"
android:focusable="true"
android:scaleType="fitXY"
android:tint="?attr/colorAccent"
android:src="@drawable/ic_shuffle_white_24dp"
android:background="?android:selectableItemBackground"
tools:ignore="ContentDescription,RtlHardcoded"/>
</RelativeLayout>
<android.support.v7.widget.RecyclerView
android:id="@+id/playQueue"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@id/playQueueControl"
android:scrollbars="vertical"
app:layoutManager="LinearLayoutManager"
tools:listitem="@layout/play_queue_item"/>
</RelativeLayout>
<RelativeLayout
android:id="@+id/playbackControlRoot"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/video_overlay_color"
android:visibility="gone"
tools:visibility="visible">
<RelativeLayout
android:id="@+id/playbackWindowRoot"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">
<RelativeLayout
android:id="@+id/topControls"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:background="@drawable/player_top_controls_bg"
android:gravity="top"
android:paddingTop="10dp"
android:paddingBottom="10dp"
android:paddingLeft="5dp"
android:paddingRight="5dp"
tools:ignore="RtlHardcoded">
<LinearLayout
android:id="@+id/metadataView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_toLeftOf="@+id/qualityTextView"
android:gravity="top"
android:orientation="vertical"
android:paddingLeft="8dp"
android:paddingRight="8dp"
tools:ignore="RtlHardcoded">
<TextView
android:id="@+id/titleTextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="marquee"
android:fadingEdge="horizontal"
android:marqueeRepeatLimit="marquee_forever"
android:scrollHorizontally="true"
android:singleLine="true"
android:textColor="@android:color/white"
android:textSize="15sp"
android:textStyle="bold"
android:clickable="true"
android:focusable="true"
tools:ignore="RtlHardcoded"
tools:text="The Video Title LONG very LONG"/>
<TextView
android:id="@+id/channelTextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="marquee"
android:fadingEdge="horizontal"
android:marqueeRepeatLimit="marquee_forever"
android:scrollHorizontally="true"
android:singleLine="true"
android:textColor="@android:color/white"
android:textSize="12sp"
android:clickable="true"
android:focusable="true"
tools:text="The Video Artist LONG very LONG very Long"/>
</LinearLayout>
<TextView
android:id="@+id/qualityTextView"
android:layout_width="wrap_content"
android:layout_height="35dp"
android:layout_marginLeft="2dp"
android:layout_marginRight="2dp"
android:layout_toLeftOf="@+id/playbackSpeed"
android:gravity="center"
android:minWidth="50dp"
android:text="720p"
android:textColor="@android:color/white"
android:textStyle="bold"
android:background="?attr/selectableItemBackground"
tools:ignore="HardcodedText,RtlHardcoded"/>
<TextView
android:id="@+id/playbackSpeed"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="2dp"
android:layout_toLeftOf="@+id/queueButton"
android:gravity="center"
android:minHeight="35dp"
android:minWidth="40dp"
android:textColor="@android:color/white"
android:textStyle="bold"
android:background="?attr/selectableItemBackground"
tools:ignore="RtlHardcoded,RtlSymmetry"
tools:text="1x" />
<ImageButton
android:id="@+id/queueButton"
android:layout_width="30dp"
android:layout_height="35dp"
android:layout_marginLeft="2dp"
android:layout_marginRight="2dp"
android:layout_toLeftOf="@+id/moreOptionsButton"
android:clickable="true"
android:focusable="true"
android:padding="5dp"
android:scaleType="fitXY"
android:src="@drawable/list"
android:background="?attr/selectableItemBackground"
tools:ignore="ContentDescription,RtlHardcoded"/>
<ImageButton
android:id="@+id/moreOptionsButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_marginLeft="2dp"
android:padding="5dp"
android:clickable="true"
android:focusable="true"
android:scaleType="fitXY"
android:src="@drawable/ic_expand_more_white_24dp"
android:background="?attr/selectableItemBackgroundBorderless"
tools:ignore="ContentDescription,RtlHardcoded"/>
</RelativeLayout>
<RelativeLayout
android:id="@+id/secondaryControls"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/topControls"
android:gravity="top"
android:paddingLeft="5dp"
android:paddingRight="5dp"
android:visibility="invisible"
tools:ignore="RtlHardcoded"
tools:visibility="visible">
<TextView
android:id="@+id/resizeTextView"
android:layout_width="wrap_content"
android:layout_height="35dp"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:layout_alignParentLeft="true"
android:gravity="center"
android:minWidth="50dp"
android:textColor="@android:color/white"
android:textStyle="bold"
android:background="?attr/selectableItemBackground"
tools:ignore="HardcodedText,RtlHardcoded"
tools:text="FIT"/>
<TextView
android:id="@+id/captionTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:layout_toLeftOf="@id/switchBackground"
android:layout_toRightOf="@id/resizeTextView"
android:gravity="center|left"
android:minHeight="35dp"
android:minWidth="40dp"
android:paddingLeft="2dp"
android:paddingRight="2dp"
android:textColor="@android:color/white"
android:textStyle="bold"
android:background="?attr/selectableItemBackground"
tools:ignore="RelativeOverlap,RtlHardcoded"
tools:text="English" />
<ImageButton
android:id="@+id/toggleOrientation"
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_marginLeft="4dp"
android:layout_marginRight="2dp"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:clickable="true"
android:focusable="true"
android:padding="5dp"
android:scaleType="fitXY"
android:src="@drawable/ic_screen_rotation_white"
android:background="?attr/selectableItemBackground"
android:contentDescription="@string/toggle_orientation"
tools:ignore="RtlHardcoded"/>
<ImageButton
android:id="@+id/switchPopup"
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_marginLeft="4dp"
android:layout_marginRight="4dp"
android:layout_toLeftOf="@id/toggleOrientation"
android:layout_centerVertical="true"
android:clickable="true"
android:focusable="true"
android:scaleType="fitXY"
android:src="@drawable/ic_fullscreen_exit_white"
android:background="?attr/selectableItemBackground"
android:contentDescription="@string/switch_to_popup"
tools:ignore="RtlHardcoded"/>
<ImageButton
android:id="@+id/switchBackground"
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_marginLeft="4dp"
android:layout_marginRight="4dp"
android:layout_toLeftOf="@id/switchPopup"
android:layout_centerVertical="true"
android:clickable="true"
android:focusable="true"
android:padding="5dp"
android:scaleType="fitXY"
android:src="@drawable/ic_headset_white_24dp"
android:background="?attr/selectableItemBackground"
android:contentDescription="@string/switch_to_background"
tools:ignore="RtlHardcoded"/>
</RelativeLayout>
<LinearLayout
android:id="@+id/bottomControls"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:background="@drawable/player_controls_bg"
android:gravity="center"
android:orientation="horizontal"
android:paddingLeft="16dp"
android:paddingRight="16dp">
<TextView
android:id="@+id/playbackCurrentTime"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="center"
android:minHeight="40dp"
android:text="-:--:--"
android:textColor="@android:color/white"
tools:ignore="HardcodedText"
tools:text="1:06:29"/>
<android.support.v7.widget.AppCompatSeekBar
android:id="@+id/playbackSeekBar"
style="@style/Widget.AppCompat.SeekBar"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:paddingBottom="4dp"
android:paddingTop="8dp"
tools:progress="25"
tools:secondaryProgress="50"/>
<TextView
android:id="@+id/playbackEndTime"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="center"
android:text="-:--:--"
android:textColor="@android:color/white"
tools:ignore="HardcodedText"
tools:text="1:23:49"/>
<TextView
android:id="@+id/playbackLiveSync"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:paddingLeft="4dp"
android:paddingRight="4dp"
android:gravity="center"
android:text="@string/duration_live_button"
android:textAllCaps="true"
android:textColor="@android:color/white"
android:maxLength="4"
android:visibility="gone"
android:background="?attr/selectableItemBackground"
tools:ignore="HardcodedText,RtlHardcoded,RtlSymmetry" />
</LinearLayout>
</RelativeLayout>
<ImageButton
android:id="@+id/playPauseButton"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_centerInParent="true"
android:clickable="true"
android:focusable="true"
android:background="?attr/selectableItemBackgroundBorderless"
android:scaleType="fitXY"
android:src="@drawable/ic_pause_white"
tools:ignore="ContentDescription"/>
<ImageButton
android:id="@+id/playPreviousButton"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_marginRight="30dp"
android:layout_marginEnd="30dp"
android:layout_centerInParent="true"
android:layout_toLeftOf="@id/playPauseButton"
android:layout_toStartOf="@id/playPauseButton"
android:clickable="true"
android:focusable="true"
android:background="?attr/selectableItemBackgroundBorderless"
android:scaleType="fitXY"
android:src="@drawable/exo_controls_previous"
tools:ignore="ContentDescription"/>
<ImageButton
android:id="@+id/playNextButton"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_marginLeft="30dp"
android:layout_marginStart="30dp"
android:layout_centerInParent="true"
android:layout_toRightOf="@id/playPauseButton"
android:layout_toEndOf="@id/playPauseButton"
android:clickable="true"
android:focusable="true"
android:background="?attr/selectableItemBackgroundBorderless"
android:scaleType="fitXY"
android:src="@drawable/exo_controls_next"
tools:ignore="ContentDescription"/>
</RelativeLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical">
<ImageView
android:id="@+id/controlAnimationView"
android:layout_width="100dp"
android:layout_height="100dp"
android:background="@drawable/background_oval_black_transparent"
android:visibility="gone"
tools:ignore="ContentDescription"
tools:src="@drawable/ic_action_av_fast_rewind"
tools:visibility="visible" />
</LinearLayout>
<RelativeLayout
android:id="@+id/loading_panel"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/black"
tools:visibility="gone">
<ProgressBar
android:id="@+id/progressBarLoadingPanel"
style="?android:attr/progressBarStyleLargeInverse"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:indeterminate="true"/>
</RelativeLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentTop="true"
android:layout_gravity="center"
android:layout_toEndOf="@+id/loading_panel"
android:layout_toRightOf="@+id/loading_panel"
tools:ignore="RtlHardcoded">
<RelativeLayout
android:id="@+id/volumeRelativeLayout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:background="@drawable/background_oval_black_transparent"
android:visibility="gone"
tools:visibility="visible">
<ProgressBar
android:id="@+id/volumeProgressBar"
style="?android:progressBarStyleHorizontal"
android:layout_width="128dp"
android:layout_height="128dp"
android:indeterminate="false"
android:progressDrawable="@drawable/progress_circular_white" />
<ImageView
android:id="@+id/volumeImageView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
tools:ignore="ContentDescription"
tools:src="@drawable/ic_volume_up_white_72dp" />
</RelativeLayout>
<RelativeLayout
android:id="@+id/brightnessRelativeLayout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:background="@drawable/background_oval_black_transparent"
android:visibility="gone"
tools:visibility="visible">
<ProgressBar
android:id="@+id/brightnessProgressBar"
style="?android:progressBarStyleHorizontal"
android:layout_width="128dp"
android:layout_height="128dp"
android:indeterminate="false"
android:progressDrawable="@drawable/progress_circular_white" />
<ImageView
android:id="@+id/brightnessImageView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
tools:ignore="ContentDescription"
tools:src="@drawable/ic_brightness_high_white_72dp" />
</RelativeLayout>
<TextView
android:id="@+id/currentDisplaySeek"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_marginBottom="58dp"
android:background="#64000000"
android:paddingBottom="10dp"
android:paddingLeft="30dp"
android:paddingRight="30dp"
android:paddingTop="10dp"
android:textColor="@android:color/white"
android:textSize="26sp"
android:textStyle="bold"
android:visibility="gone"
tools:ignore="RtlHardcoded"
tools:text="1:06:29"
tools:visibility="visible" />
</RelativeLayout>
</RelativeLayout>

View File

@ -0,0 +1,491 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/video_item_detail"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:focusableInTouchMode="true"
android:orientation="horizontal">
<com.nirhart.parallaxscroll.views.ParallaxScrollView
android:id="@+id/detail_main_content"
app:parallax_factor="1.9"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="5">
<!--WRAPPER-->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<!-- THUMBNAIL -->
<FrameLayout
android:id="@+id/detail_thumbnail_root_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@android:color/black"
android:clickable="true"
android:focusable="true"
android:foreground="?attr/selectableItemBackground">
<ImageView
android:id="@+id/detail_thumbnail_image_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@android:color/transparent"
android:contentDescription="@string/detail_thumbnail_view_description"
android:scaleType="fitCenter"
tools:ignore="RtlHardcoded"
tools:layout_height="200dp"
tools:src="@drawable/dummy_thumbnail" />
<ImageView
android:id="@+id/detail_thumbnail_play_button"
android:layout_width="64dp"
android:layout_height="64dp"
android:layout_gravity="center"
android:background="@android:color/transparent"
android:src="@drawable/new_play_arrow"
android:visibility="invisible"
tools:ignore="ContentDescription"
tools:visibility="visible" />
<TextView
android:id="@+id/touch_append_detail"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:background="#64000000"
android:paddingBottom="10dp"
android:paddingLeft="30dp"
android:paddingRight="30dp"
android:paddingTop="10dp"
android:text="@string/hold_to_append"
android:textColor="@android:color/white"
android:textSize="20sp"
android:textStyle="bold"
android:visibility="gone"
tools:ignore="RtlHardcoded"
tools:visibility="visible" />
<TextView
android:id="@+id/detail_duration_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|right"
android:layout_marginBottom="8dp"
android:layout_marginLeft="12dp"
android:layout_marginRight="12dp"
android:layout_marginTop="8dp"
android:alpha=".6"
android:background="#23000000"
android:gravity="center"
android:paddingBottom="2dp"
android:paddingLeft="6dp"
android:paddingRight="6dp"
android:paddingTop="2dp"
android:textAllCaps="true"
android:textColor="@android:color/white"
android:textSize="12sp"
android:textStyle="bold"
android:visibility="gone"
tools:ignore="RtlHardcoded"
tools:text="12:38"
tools:visibility="visible" />
</FrameLayout>
<!-- CONTENT -->
<RelativeLayout
android:id="@+id/detail_content_root_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="?android:windowBackground">
<!-- TITLE -->
<FrameLayout
android:id="@+id/detail_title_root_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="12dp"
android:paddingRight="12dp">
<TextView
android:id="@+id/detail_video_title_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginRight="20dp"
android:ellipsize="end"
android:maxLines="1"
android:paddingBottom="8dp"
android:paddingTop="12dp"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textSize="@dimen/video_item_detail_title_text_size"
tools:ignore="RtlHardcoded"
tools:text="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed a ultricies ex. Integer sit amet sodales risus. Duis non mi et urna pretium bibendum. Nunc eleifend est quis ipsum porttitor egestas. Sed facilisis, nisl quis eleifend pellentesque, orci metus egestas dolor, at accumsan eros metus quis libero." />
</FrameLayout>
<!-- LOADING INDICATOR-->
<ProgressBar
android:id="@+id/loading_progress_bar"
style="@style/Widget.AppCompat.ProgressBar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/detail_title_root_layout"
android:layout_marginTop="@dimen/video_item_detail_error_panel_margin"
android:indeterminate="true"
android:visibility="gone"
tools:visibility="visible" />
<!--ERROR PANEL-->
<include
android:id="@+id/error_panel"
layout="@layout/error_retry"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/detail_title_root_layout"
android:layout_marginTop="@dimen/video_item_detail_error_panel_margin"
android:visibility="gone"
tools:visibility="visible" />
<!--HIDING ROOT-->
<LinearLayout
android:id="@+id/detail_content_root_hiding"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/detail_title_root_layout"
android:orientation="vertical"
android:visibility="gone"
tools:visibility="visible">
<!--DETAIL-->
<RelativeLayout
android:id="@+id/detail_root"
android:layout_width="match_parent"
android:layout_height="55dp"
android:layout_marginLeft="12dp"
android:layout_marginRight="12dp"
android:layout_marginTop="6dp"
android:baselineAligned="false"
android:orientation="horizontal">
<!--UPLOADER-->
<LinearLayout
android:id="@+id/detail_uploader_root_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_toLeftOf="@id/details_panel"
android:layout_toStartOf="@id/details_panel"
android:background="?attr/selectableItemBackground"
android:gravity="center_vertical"
android:orientation="horizontal"
android:padding="6dp">
<de.hdodenhof.circleimageview.CircleImageView
android:id="@+id/detail_uploader_thumbnail_view"
android:layout_width="@dimen/video_item_detail_uploader_image_size"
android:layout_height="@dimen/video_item_detail_uploader_image_size"
android:contentDescription="@string/detail_uploader_thumbnail_view_description"
android:src="@drawable/buddy"
tools:ignore="RtlHardcoded" />
<TextView
android:id="@+id/detail_uploader_text_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="15dp"
android:ellipsize="marquee"
android:fadingEdge="horizontal"
android:marqueeRepeatLimit="marquee_forever"
android:scrollHorizontally="true"
android:singleLine="true"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textSize="@dimen/video_item_detail_uploader_text_size"
android:textStyle="bold"
tools:ignore="RtlHardcoded"
tools:text="Uploader" />
<!--<Button
android:id="@+id/detail_uploader_subscribe"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical|right"
android:layout_marginRight="12dp"
android:text="@string/rss_button_title"
android:textSize="12sp"
android:theme="@style/RedButton"
android:drawableLeft="@drawable/ic_rss_feed_white_24dp"
tools:ignore="RtlHardcoded"
android:visibility="gone"/>-->
</LinearLayout>
<!-- VIEW & THUMBS -->
<RelativeLayout
android:id="@+id/details_panel"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:paddingLeft="6dp"
android:paddingRight="6dp">
<TextView
android:id="@+id/detail_view_count_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_marginBottom="6dp"
android:layout_marginTop="6dp"
android:lines="1"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textSize="@dimen/video_item_detail_views_text_size"
tools:ignore="RtlHardcoded"
tools:text="2,816,821,505 views" />
<ImageView
android:id="@+id/detail_thumbs_up_img_view"
android:layout_width="@dimen/video_item_detail_like_image_width"
android:layout_height="@dimen/video_item_detail_like_image_height"
android:layout_below="@id/detail_view_count_view"
android:contentDescription="@string/detail_likes_img_view_description"
android:src="?attr/thumbs_up" />
<TextView
android:id="@+id/detail_thumbs_up_count_view"
android:layout_width="wrap_content"
android:layout_height="@dimen/video_item_detail_like_image_height"
android:layout_below="@id/detail_view_count_view"
android:layout_marginLeft="@dimen/video_item_detail_like_margin"
android:layout_toRightOf="@id/detail_thumbs_up_img_view"
android:gravity="center_vertical"
android:lines="1"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textSize="@dimen/video_item_detail_likes_text_size"
tools:ignore="RtlHardcoded"
tools:text="12M" />
<ImageView
android:id="@+id/detail_thumbs_down_img_view"
android:layout_width="@dimen/video_item_detail_like_image_width"
android:layout_height="@dimen/video_item_detail_like_image_height"
android:layout_below="@id/detail_view_count_view"
android:layout_marginLeft="12dp"
android:layout_toRightOf="@id/detail_thumbs_up_count_view"
android:contentDescription="@string/detail_dislikes_img_view_description"
android:src="?attr/thumbs_down"
tools:ignore="RtlHardcoded" />
<TextView
android:id="@+id/detail_thumbs_down_count_view"
android:layout_width="wrap_content"
android:layout_height="@dimen/video_item_detail_like_image_height"
android:layout_below="@id/detail_view_count_view"
android:layout_marginLeft="@dimen/video_item_detail_like_margin"
android:layout_toRightOf="@id/detail_thumbs_down_img_view"
android:gravity="center_vertical"
android:lines="1"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textSize="@dimen/video_item_detail_likes_text_size"
tools:ignore="RtlHardcoded"
tools:text="10K" />
<TextView
android:id="@+id/detail_thumbs_disabled_view"
android:layout_width="wrap_content"
android:layout_height="@dimen/video_item_detail_like_image_height"
android:layout_below="@id/detail_view_count_view"
android:layout_marginLeft="12dp"
android:layout_toRightOf="@id/detail_thumbs_down_img_view"
android:gravity="center_vertical"
android:text="@string/disabled"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textSize="@dimen/video_item_detail_likes_text_size"
android:textStyle="bold"
android:visibility="gone"
tools:ignore="RtlHardcoded"
tools:visibility="visible" />
</RelativeLayout>
</RelativeLayout>
<LinearLayout
android:id="@+id/detail_control_panel"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:padding="6dp">
<!-- CONTROLS -->
<TextView
android:id="@+id/detail_controls_playlist_append"
android:layout_width="80dp"
android:layout_height="55dp"
android:layout_gravity="center_vertical"
android:layout_weight="1"
android:background="?attr/selectableItemBackgroundBorderless"
android:clickable="true"
android:contentDescription="@string/append_playlist"
android:drawableTop="?attr/ic_playlist_add"
android:focusable="true"
android:gravity="center"
android:paddingBottom="6dp"
android:paddingTop="6dp"
android:text="@string/controls_add_to_playlist_title"
android:textSize="12sp" />
<TextView
android:id="@+id/detail_controls_background"
android:layout_width="80dp"
android:layout_height="55dp"
android:layout_gravity="center_vertical"
android:layout_weight="1"
android:background="?attr/selectableItemBackgroundBorderless"
android:clickable="true"
android:contentDescription="@string/play_audio"
android:drawableTop="?attr/audio"
android:focusable="true"
android:gravity="center"
android:paddingBottom="6dp"
android:paddingTop="6dp"
android:text="@string/controls_background_title"
android:textSize="12sp" />
<TextView
android:id="@+id/detail_controls_popup"
android:layout_width="80dp"
android:layout_height="55dp"
android:layout_gravity="center_vertical"
android:layout_weight="1"
android:background="?attr/selectableItemBackgroundBorderless"
android:clickable="true"
android:contentDescription="@string/open_in_popup_mode"
android:drawableTop="?attr/popup"
android:focusable="true"
android:gravity="center"
android:paddingBottom="6dp"
android:paddingTop="6dp"
android:text="@string/controls_popup_title"
android:textSize="12sp" />
<TextView
android:id="@+id/detail_controls_download"
android:layout_width="80dp"
android:layout_height="55dp"
android:layout_gravity="center_vertical"
android:layout_weight="1"
android:background="?attr/selectableItemBackgroundBorderless"
android:clickable="true"
android:contentDescription="@string/controls_download_desc"
android:drawableTop="?attr/download"
android:focusable="true"
android:gravity="center"
android:paddingBottom="6dp"
android:paddingTop="6dp"
android:text="@string/download"
android:textSize="12sp" />
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="1px"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:background="?attr/separator_color" />
<!--DESCRIPTIONS-->
<LinearLayout
android:id="@+id/detail_description_root_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:orientation="vertical">
<TextView
android:id="@+id/detail_upload_date_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="12dp"
android:layout_marginRight="12dp"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textSize="@dimen/video_item_detail_upload_date_text_size"
android:textStyle="bold"
tools:text="Published on Oct 2, 2009" />
<TextView
android:id="@+id/detail_description_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:layout_marginLeft="12dp"
android:layout_marginRight="12dp"
android:layout_marginTop="3dp"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textIsSelectable="true"
android:textSize="@dimen/video_item_detail_description_text_size"
tools:text="Description Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed a ultricies ex. Integer sit amet sodales risus. Duis non mi et urna pretium bibendum." />
<View
android:layout_width="match_parent"
android:layout_height="1px"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:background="?attr/separator_color" />
</LinearLayout>
</LinearLayout>
</RelativeLayout>
</LinearLayout>
</com.nirhart.parallaxscroll.views.ParallaxScrollView>
<ScrollView
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="3">
<!--NEXT AND RELATED VIDEOS-->
<LinearLayout
android:id="@+id/detail_related_streams_root_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:paddingTop="14dp"
android:paddingBottom="8dp"
android:orientation="vertical">
<TextView
android:id="@+id/detail_next_stream_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="12dp"
android:text="@string/next_video_title"
android:textAllCaps="true"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textSize="@dimen/video_item_detail_next_text_size"
tools:ignore="RtlHardcoded" />
<LinearLayout
android:id="@+id/detail_related_streams_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="2dp"
android:orientation="vertical"
tools:minHeight="50dp" />
<ImageButton
android:id="@+id/detail_related_streams_expand"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/selectableItemBackground"
android:paddingBottom="10dp"
android:paddingTop="4dp"
android:src="?attr/expand"
android:textAlignment="center"
android:textAllCaps="true"
tools:ignore="ContentDescription" />
</LinearLayout>
</ScrollView>
</LinearLayout>

View File

@ -11,7 +11,6 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scrollbars="vertical"
app:layoutManager="LinearLayoutManager"
android:visibility="gone"
tools:listitem="@layout/list_channel_item"
tools:visibility="visible"/>

View File

@ -0,0 +1,48 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/itemRoot"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/selectableItemBackground"
android:clickable="true"
android:focusable="true"
android:padding="@dimen/video_item_search_padding">
<de.hdodenhof.circleimageview.CircleImageView
android:id="@+id/itemThumbnailView"
android:layout_width="@dimen/video_item_grid_thumbnail_image_height"
android:layout_height="@dimen/video_item_grid_thumbnail_image_height"
android:layout_centerHorizontal="true"
android:padding="2dp"
android:contentDescription="@string/list_thumbnail_view_description"
android:src="@drawable/buddy_channel_item"
tools:ignore="RtlHardcoded"/>
<TextView
android:id="@+id/itemTitleView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/itemThumbnailView"
android:ellipsize="end"
android:lines="1"
android:gravity="center_horizontal"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textSize="@dimen/video_item_search_title_text_size"
tools:ignore="RtlHardcoded"
tools:text="Channel Title, Lorem ipsum"/>
<TextView
android:id="@+id/itemAdditionalDetails"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/itemTitleView"
android:layout_centerHorizontal="true"
android:lines="1"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textSize="@dimen/video_item_search_upload_date_text_size"
tools:ignore="RtlHardcoded"
tools:text="10M subscribers"/>
</RelativeLayout>

View File

@ -0,0 +1,72 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/itemRoot"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/selectableItemBackground"
android:clickable="true"
android:focusable="true"
android:padding="@dimen/video_item_search_padding">
<ImageView
android:id="@+id/itemThumbnailView"
android:layout_width="@dimen/video_item_grid_thumbnail_image_width"
android:layout_height="@dimen/video_item_grid_thumbnail_image_height"
android:layout_centerHorizontal="true"
android:layout_alignParentTop="true"
android:layout_marginRight="@dimen/video_item_search_image_right_margin"
android:contentDescription="@string/list_thumbnail_view_description"
android:scaleType="centerCrop"
android:src="@drawable/dummy_thumbnail_playlist"
tools:ignore="RtlHardcoded"/>
<TextView
android:id="@+id/itemStreamCountView"
android:layout_width="@dimen/playlist_item_thumbnail_stream_count_width"
android:layout_height="match_parent"
android:layout_alignBottom="@id/itemThumbnailView"
android:layout_alignRight="@id/itemThumbnailView"
android:layout_alignTop="@id/itemThumbnailView"
android:background="@color/playlist_stream_count_background_color"
android:drawableTop="@drawable/ic_playlist_play_white_24dp"
android:gravity="center"
android:paddingBottom="14dp"
android:paddingTop="16dp"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textColor="@color/duration_text_color"
android:textSize="@dimen/video_item_search_duration_text_size"
android:textStyle="bold"
tools:ignore="RtlHardcoded"
tools:text="314159"/>
<TextView
android:id="@+id/itemTitleView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/itemThumbnailView"
android:layout_alignLeft="@id/itemThumbnailView"
android:layout_alignRight="@id/itemThumbnailView"
android:layout_marginTop="2dp"
android:ellipsize="end"
android:maxLines="2"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textSize="@dimen/video_item_search_title_text_size"
tools:ignore="RtlHardcoded"
tools:text="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc tristique vitae sem vitae blanditLorem ipsumLorem ipsumLorem ipsumLorem ipsumLorem ipsumLorem ipsumLorem ipsum"/>
<TextView
android:id="@+id/itemUploaderView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/itemTitleView"
android:layout_alignLeft="@id/itemThumbnailView"
android:layout_alignRight="@id/itemThumbnailView"
android:lines="1"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textSize="@dimen/video_item_search_uploader_text_size"
tools:ignore="RtlHardcoded"
tools:text="Uploader"/>
</RelativeLayout>

View File

@ -0,0 +1,69 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/itemRoot"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/selectableItemBackground"
android:clickable="true"
android:focusable="true"
android:padding="@dimen/video_item_search_padding">
<ImageView
android:id="@+id/itemThumbnailView"
android:layout_centerHorizontal="true"
android:layout_width="@dimen/video_item_grid_thumbnail_image_width"
android:layout_height="@dimen/video_item_grid_thumbnail_image_height"
android:layout_alignParentTop="true"
android:contentDescription="@string/list_thumbnail_view_description"
android:scaleType="centerCrop"
android:src="@drawable/dummy_thumbnail"
tools:ignore="RtlHardcoded"/>
<TextView
android:id="@+id/itemDurationView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@id/itemThumbnailView"
android:layout_alignRight="@id/itemThumbnailView"
android:layout_marginBottom="@dimen/video_item_search_duration_margin"
android:layout_marginRight="@dimen/video_item_search_duration_margin"
android:background="@color/duration_background_color"
android:paddingBottom="@dimen/video_item_search_duration_vertical_padding"
android:paddingLeft="@dimen/video_item_search_duration_horizontal_padding"
android:paddingRight="@dimen/video_item_search_duration_horizontal_padding"
android:paddingTop="@dimen/video_item_search_duration_vertical_padding"
android:textAllCaps="true"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textColor="@color/duration_text_color"
android:textSize="@dimen/video_item_search_duration_text_size"
tools:ignore="RtlHardcoded"
tools:text="1:09:10"/>
<TextView
android:id="@+id/itemVideoTitleView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/itemThumbnailView"
android:layout_alignLeft="@id/itemThumbnailView"
android:layout_alignRight="@id/itemThumbnailView"
android:ellipsize="end"
android:maxLines="2"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textSize="@dimen/video_item_search_title_text_size"
tools:text="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc tristique vitae sem vitae blanditLorem ipsumLorem ipsumLorem ipsumLorem ipsumLorem ipsumLorem ipsumLorem ipsum"
android:layout_alignEnd="@id/itemThumbnailView" />
<TextView
android:id="@+id/itemUploaderView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/itemVideoTitleView"
android:layout_alignLeft="@id/itemVideoTitleView"
android:layout_alignRight="@id/itemVideoTitleView"
android:lines="1"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textSize="@dimen/video_item_search_uploader_text_size"
tools:text="Uploader"/>
</RelativeLayout>

View File

@ -0,0 +1,84 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/itemRoot"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/selectableItemBackground"
android:clickable="true"
android:focusable="true"
android:padding="@dimen/video_item_search_padding">
<ImageView
android:id="@+id/itemThumbnailView"
android:layout_width="@dimen/video_item_grid_thumbnail_image_width"
android:layout_height="@dimen/video_item_grid_thumbnail_image_height"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginRight="@dimen/video_item_search_image_right_margin"
android:contentDescription="@string/list_thumbnail_view_description"
android:scaleType="centerCrop"
android:src="@drawable/dummy_thumbnail"
tools:ignore="RtlHardcoded" />
<TextView
android:id="@+id/itemDurationView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@id/itemThumbnailView"
android:layout_alignRight="@id/itemThumbnailView"
android:layout_marginBottom="@dimen/video_item_search_duration_margin"
android:layout_marginRight="@dimen/video_item_search_duration_margin"
android:background="@color/duration_background_color"
android:paddingBottom="@dimen/video_item_search_duration_vertical_padding"
android:paddingLeft="@dimen/video_item_search_duration_horizontal_padding"
android:paddingRight="@dimen/video_item_search_duration_horizontal_padding"
android:paddingTop="@dimen/video_item_search_duration_vertical_padding"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textColor="@color/duration_text_color"
android:textSize="@dimen/video_item_search_duration_text_size"
tools:ignore="RtlHardcoded"
tools:text="1:09:10" />
<ImageView
android:id="@+id/itemHandle"
android:layout_width="wrap_content"
android:layout_height="55dp"
android:layout_alignParentRight="true"
android:layout_alignParentBottom="true"
android:contentDescription="@string/detail_drag_description"
android:paddingLeft="@dimen/video_item_search_image_right_margin"
android:scaleType="center"
android:src="?attr/drag_handle"
tools:ignore="RtlHardcoded,RtlSymmetry" />
<TextView
android:id="@+id/itemVideoTitleView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignEnd="@id/itemThumbnailView"
android:layout_alignLeft="@id/itemThumbnailView"
android:layout_alignRight="@id/itemThumbnailView"
android:layout_alignStart="@id/itemThumbnailView"
android:layout_below="@id/itemThumbnailView"
android:ellipsize="end"
android:maxLines="2"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textSize="@dimen/video_item_search_title_text_size"
tools:text="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc tristique..." />
<TextView
android:id="@+id/itemAdditionalDetails"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignEnd="@id/itemThumbnailView"
android:layout_alignLeft="@id/itemThumbnailView"
android:layout_alignRight="@id/itemThumbnailView"
android:layout_alignStart="@id/itemThumbnailView"
android:layout_below="@+id/itemVideoTitleView"
android:lines="1"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textSize="@dimen/video_item_search_uploader_text_size"
tools:text="Uploader" />
</RelativeLayout>

View File

@ -9,7 +9,7 @@
android:layout_width="match_parent"
android:layout_margin="2dp"
android:background="@color/bluegray">
<ImageView
android:id="@+id/item_icon"
android:layout_width="72dp"
@ -19,59 +19,52 @@
android:gravity="center"
android:padding="15dp"
android:contentDescription="TODO" />
<LinearLayout
android:id="@+id/item_name_and_size"
<TextView
android:id="@+id/item_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_toLeftOf="@+id/item_more"
android:layout_toRightOf="@id/item_icon"
android:layout_toLeftOf="@+id/item_status"
android:layout_centerVertical="true"
android:orientation="vertical">
android:ellipsize="end"
android:padding="6dp"
android:text="XXX.xx"
android:textColor="@color/white"
android:textSize="16sp"
android:textStyle="bold" />
<TextView
android:id="@+id/item_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="6dp"
android:singleLine="true"
android:ellipsize="end"
android:text="XXX.xx"
android:textSize="16sp"
android:textStyle="bold"
android:textColor="@color/white"/>
<TextView
android:id="@+id/item_size"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="6dp"
android:singleLine="true"
android:text="100.00MB"
android:textSize="12sp"
android:textColor="@color/white"/>
</LinearLayout>
<TextView
android:id="@+id/item_size"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/item_icon"
android:layout_below="@+id/item_name"
android:padding="6dp"
android:singleLine="true"
android:text="100.00MB"
android:textSize="12sp"
android:textColor="@color/white"/>
<TextView
android:id="@+id/item_status"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toLeftOf="@+id/item_more"
android:layout_centerVertical="true"
android:layout_below="@+id/item_name"
android:layout_marginLeft="6dp"
android:layout_marginRight="6dp"
android:layout_marginRight="5dp"
android:layout_toLeftOf="@+id/item_more"
android:layout_toRightOf="@id/item_size"
android:padding="6dp"
android:singleLine="true"
android:text="0%"
android:textSize="20sp"
android:textColor="@color/white"/>
android:textColor="@color/white"
android:textSize="12sp" />
<ImageView
style="?attr/buttonBarButtonStyle"
android:id="@+id/item_more"
android:layout_width="36dp"
android:layout_height="36dp"
android:layout_width="49dp"
android:layout_height="49dp"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_marginRight="4dp"

View File

@ -5,4 +5,7 @@
<item android:id="@+id/action_settings"
app:showAsAction="never"
android:title="@string/settings"/>
<item android:id="@+id/switch_mode"
app:showAsAction="ifRoom"
android:title="@string/switch_view"/>
</menu>

View File

@ -7,11 +7,7 @@
<item
android:id="@+id/pause"
android:title="@string/pause"/>
<item
android:id="@+id/view"
android:title="@string/view"/>
<item
android:id="@+id/delete"
android:title="@string/delete"/>

View File

@ -28,13 +28,13 @@
<string name="network_error">خطأ في الشبكة</string>
<string name="next_video_title">الفيديو التالي</string>
<string name="no_player_found">لا يوجد مشغل فيديو. هل تريد تثبيت VLC ؟</string>
<string name="open_in_browser">فتح في المتصفح</string>
<string name="open_in_browser">افتح في المتصفح</string>
<string name="play_audio">الصوت</string>
<string name="play_btn_text">تشغيل</string>
<string name="play_with_kodi_title">تشغيل بواسطة Kodi</string>
<string name="play_with_kodi_title">تشغيل بواسطة كودي</string>
<string name="screen_rotation">التدوير</string>
<string name="search">بحث</string>
<string name="search_language_title">اللغة الإفتراضية للمحتوى</string>
<string name="content_language_title">اللغة الإفتراضية للمحتوى</string>
<string name="settings">الإعدادات</string>
<string name="settings_category_appearance_title">المظهر</string>
<string name="settings_category_other_title">اخرى</string>
@ -42,8 +42,8 @@
<string name="share">مشاركة</string>
<string name="share_dialog_title">مشاركة بواسطة</string>
<string name="show_next_and_similar_title">عرض الفديوهات \'التالية\'و\'المماثلة\'</string>
<string name="show_play_with_kodi_summary">عرض خيار لتشغيل الفيديو بواسطة Kodi Media Center</string>
<string name="show_play_with_kodi_title">عرض خيار التشغيل بواسطة Kodi</string>
<string name="show_play_with_kodi_summary">عرض خيار لتشغيل الفيديو بواسطة مشغل كودي</string>
<string name="show_play_with_kodi_title">عرض خيار التشغيل بواسطة كودي</string>
<string name="theme_title">السمة</string>
<string name="upload_date_text">تم النشر يوم %1$s</string>
<string name="url_not_supported_toast">الرابط غير مدعوم</string>
@ -66,30 +66,30 @@
<string name="fragment_whats_new">ما الجديد</string>
<string name="controls_background_title">الخلفية</string>
<string name="controls_background_title">في الخلفية</string>
<string name="autoplay_by_calling_app_title">تشغيل تلقائي</string>
<string name="black_theme_title">اسود</string>
<string name="enable_watch_history_title">التاريخ وذاكرة التخزين المؤقت</string>
<string name="settings_category_history_title">التاريخ و ذاكرة التخزين المؤقتة</string>
<string name="settings_category_history_title">التاريخ و التخزين المؤقت</string>
<string name="content">المحتوى</string>
<string name="downloads">التنزيلات</string>
<string name="downloads_title">التنزيلات</string>
<string name="all">الكل</string>
<string name="channel">القناة</string>
<string name="video">فيديو</string>
<string name="video">الفيديو</string>
<string name="settings_category_downloads_title">التنزيل</string>
<string name="action_about">عن التطبيق</string>
<string name="tab_about">عن التطبيق</string>
<string name="title_activity_history">التاريخ</string>
<string name="action_history">التاريخ</string>
<string name="open_in_popup_mode">فتح في وضع النافذة المنبثقة</string>
<string name="open_in_popup_mode">افتح في وضع النافذة المنبثقة</string>
<string name="use_external_video_player_summary">"بعض الخيارات الدقة لن تحتوي على صوت عند تمكين هذا الخيار "</string>
<string name="popup_mode_share_menu_title">وضع النوافذ المنبثقة NewPipe</string>
<string name="channel_unsubscribed">تم إلغاء الاشتراك في القناة</string>
<string name="subscription_change_failed">تعذر تغيير حالة الاشتراك</string>
<string name="subscription_update_failed">تعذر تحديث الاشتراك</string>
<string name="controls_popup_title">نافذة</string>
<string name="controls_popup_title">نافذة المنبثقة</string>
<string name="autoplay_by_calling_app_summary">تشغيل مقطع الفيديو عند إستدعاء NewPipe من تطبيق آخر</string>
<string name="default_popup_resolution_title">الدقة الافتراضية لنوافذ المنبثقة</string>
@ -107,11 +107,11 @@
<string name="enable_watch_history_summary">تتبع مقاطع الفيديو التي تمت مشاهدتها</string>
<string name="resume_on_audio_focus_gain_title">استئناف عند اكتساب التركيز</string>
<string name="resume_on_audio_focus_gain_summary">متابعة التشغيل بعد المقاطعات (مثل المكالمات الهاتفية)</string>
<string name="show_hold_to_append_title">عرض\"عقد لإلحاق\"عنوان</string>
<string name="show_hold_to_append_summary">عرض تلميح أو زر منبثق عند الضغط على خلفية على صفحة تفاصيل الفيديو</string>
<string name="show_hold_to_append_title">عرض تلميح \"اضغط للتجاهل\"</string>
<string name="show_hold_to_append_summary">عرض تلميح على صفحة التفاصيل عند استخدام وضع مشغل الخلفية أو النافذة المنبثقة</string>
<string name="settings_category_player_title">المشغل</string>
<string name="settings_category_player_behavior_title">السلوك</string>
<string name="settings_category_popup_title">المنبثق</string>
<string name="settings_category_popup_title">الوضع المنبثق</string>
<string name="popup_playing_toast">يتم التشغيل في الوضع المنبثق</string>
<string name="background_player_append">تم وضعه على قائمة الانتظار في مشغل الخلفية</string>
<string name="popup_playing_append">تم وضعه على قائمة الانتظار في مشغل النافذة المنبثقة</string>
@ -165,8 +165,6 @@
<string name="audio">الصوت</string>
<string name="retry">إعادة المحاولة</string>
<string name="storage_permission_denied">تم رفض إذن الوصول إلى التخزين</string>
<string name="use_old_player_title">استخدام المشغل القديم</string>
<string name="use_old_player_summary">المشغل القديم المدمج في إطار Mediaframework</string>
<string name="short_thousand">ألف</string>
<string name="short_million">مليون</string>
@ -177,9 +175,9 @@
<item quantity="zero">صفر مشترِك</item>
<item quantity="one">%s مشترِك</item>
<item quantity="two">مشترِكان</item>
<item quantity="few">%s مشترك</item>
<item quantity="few">%s مشتركين</item>
<item quantity="many">%s مشترك</item>
<item quantity="other">%s مشتركون</item>
<item quantity="other">%s مشترك</item>
</plurals>
<string name="no_views">دون مشاهدات</string>
@ -194,7 +192,7 @@
<string name="finish">حسناً</string>
<string name="msg_name">اسم الملف</string>
<string name="msg_threads">الخيوط</string>
<string name="msg_threads">التقسيم</string>
<string name="msg_error">الخطأ</string>
<string name="msg_server_unsupported">الخادم غير معتمد</string>
<string name="msg_exists">الملف موجود مسبقا</string>
@ -208,8 +206,8 @@
\nللفتح في وضع النافذة المنبثقة</string>
<string name="reCaptchaActivity">اختبار reCAPTCHA</string>
<string name="settings_file_charset_title">الأحرف المسموح بها في أسماء الملفات</string>
<string name="settings_file_replacement_character_summary">يتم استبدال الأحرف غير الصالحة بهذه القيمة</string>
<string name="settings_file_charset_title">السماح بالرموز في أسماء الملفات</string>
<string name="settings_file_replacement_character_summary">يتم استبدال الرموز غير المسموح بها بهذه القيمة</string>
<string name="settings_file_replacement_character_title">استبدال الحرف</string>
<string name="charset_letters_and_digits">الحروف والأرقام</string>
@ -222,7 +220,7 @@
<string name="action_open_website">فتح الموقع</string>
<string name="tab_contributors">المساهمون</string>
<string name="tab_licenses">التراخيص</string>
<string name="app_description">تطبيق حُر و خفيف لالتقاط البث على نظام الأندرويد.</string>
<string name="app_description">تطبيق حُر و خفيف لتشغيل اليوتيوب على نظام الأندرويد.</string>
<string name="contribution_title">ساهم</string>
<string name="contribution_encouragement">إذا كانت لديك أفكار؛ أو ترجمة، أو تغييرات تخص التصميم، أو تنظيف و تحسين الشفرة البرمجية ، أو تعديلات عميقة عليها، فتذكر أنّ مساعدتك دائما موضع ترحيب. وكلما أتممنا شيئا كلما كان ذلك أفضل !</string>
<string name="view_on_github">عرض على GitHub</string>
@ -258,17 +256,17 @@
<string name="play_queue_remove">حذف</string>
<string name="play_queue_stream_detail">التفاصيل</string>
<string name="play_queue_audio_settings">الإعدادات الصوتية</string>
<string name="start_here_on_main">ابدء التشغيل هنا</string>
<string name="start_here_on_main">تشغيل هنا</string>
<string name="start_here_on_popup">تشغيل هنا في وضع النافذة المنبثقة</string>
<string name="reCaptcha_title">تحدي ريكابتشا</string>
<string name="hold_to_append">اضغط للإدراج في قائمة الانتظار</string>
<plurals name="views">
<item quantity="zero">لاتوجد مشاهدة</item>
<item quantity="zero">بدون مشاهدات</item>
<item quantity="one">%s مشاهدة</item>
<item quantity="two">مشاهدتين</item>
<item quantity="few">%s مشاهدات كثيرة</item>
<item quantity="many">%s عدد المشاهدات</item>
<item quantity="other">%s أقصى مشاهدات</item>
<item quantity="few">%s مشاهدات</item>
<item quantity="many">%s مشاهدات</item>
<item quantity="other">%s مشاهدة</item>
</plurals>
<plurals name="videos">
@ -289,7 +287,7 @@
<string name="kiosk">الكشك</string>
<string name="enqueue_on_background">إدراج في قائمة الانتظار في الخلفية</string>
<string name="enqueue_on_popup">إدراج في قائمة الانتظار على المنبثقة</string>
<string name="start_here_on_background">ابدأ هنا في الخلفية</string>
<string name="start_here_on_background">تشغيل في الخلفية</string>
<string name="default_content_country_title">المحتوى الإفتراضي حسب البلد</string>
<string name="toggle_orientation">تغيير الإتجاه</string>
<string name="switch_to_background">الإنتقال إلى التشغيل في الخلفية</string>
@ -375,7 +373,7 @@
<string name="resize_fit">تناسب مع الشاشة</string>
<string name="caption_auto_generated">توليد تلقائي</string>
<string name="import_export_title">إستيراد وتصدير</string>
<string name="import_export_title">إستيراد او تصدير</string>
<string name="import_title">إستيراد</string>
<string name="import_from">إستعادة مِن</string>
<string name="export_to">تصدير إلى</string>
@ -419,7 +417,7 @@
<string name="external_player_unsupported_link_type">المشغل الخارجي لا يدعم هذه الأنواع من الروابط</string>
<string name="invalid_source">ملف غير صالح / محتوى غير صالح</string>
<string name="invalid_file">الملف غير موجود أو ليس لديك الإذن الكافي للقراءة أو الكتابة فيه</string>
<string name="no_streams_available_download">لا توجد تدفقات متاحة للتنزيل</string>
<string name="no_streams_available_download">لا يوجد بث متاح للتنزيل</string>
<string name="one_item_deleted">تم حذف عنصر واحد.</string>
@ -438,7 +436,7 @@
<string name="background_player">مشغل الخلفية</string>
<string name="popup_player">المشغل المنبثق</string>
<string name="previous_export">التصدير السابق</string>
<string name="previous_export">نسخة احتياطية</string>
<string name="subscriptions_import_unsuccessful">تعذر استيراد الاشتراكات</string>
<string name="subscriptions_export_unsuccessful">لا يمكن تصدير الاشتراكات</string>

View File

@ -41,7 +41,7 @@
<string name="next_video_title">Videu siguiente</string>
<string name="show_next_and_similar_title">Amosar vídeos siguientes y asemeyaos</string>
<string name="url_not_supported_toast">URL non sofitada</string>
<string name="search_language_title">Llingua por defeutu del conteníu</string>
<string name="content_language_title">Llingua por defeutu del conteníu</string>
<string name="settings_category_video_audio_title">Videu y audiu</string>
<string name="settings_category_appearance_title">Aspeutu</string>
<string name="settings_category_other_title">Otru</string>

View File

@ -95,7 +95,7 @@
<string name="url_not_supported_toast">URL не падтрымліваецца</string>
<string name="default_content_country_title">Краіна кантэнту па змаўчанні</string>
<string name="service_title">Сэрвіс</string>
<string name="search_language_title">Мова кантэнту па змаўчанні</string>
<string name="content_language_title">Мова кантэнту па змаўчанні</string>
<string name="settings_category_player_title">Плэер</string>
<string name="settings_category_player_behavior_title">Павядзенне</string>
<string name="settings_category_video_audio_title">Відэа і аўдыё</string>

View File

@ -74,7 +74,7 @@
<string name="show_next_and_similar_title">Показвай „следващ“ и „подобни“</string>
<string name="show_hold_to_append_title">Показвай съвет „задръж за добавяне“</string>
<string name="url_not_supported_toast">Непознат URL</string>
<string name="search_language_title">Език на съдържанието по подразбиране</string>
<string name="content_language_title">Език на съдържанието по подразбиране</string>
<string name="settings_category_player_title">Плейър</string>
<string name="settings_category_player_behavior_title">Поведение</string>
<string name="settings_category_video_audio_title">Видео &amp; Аудио</string>
@ -288,7 +288,7 @@
<string name="clear_views_history_summary">Изтрива историята на възпроизвежданите стриймове</string>
<string name="video_streams_empty">Не са намерени видео стриймове</string>
<string name="audio_streams_empty">Не са намерени аудио стриймове</string>
<string name="info_labels">"Какво:\\nЗаявка:\\nЕзик на съдържанието:\\nУслуга:\\nВреме по GMT:\\nПакет:\\nВерсия:\\nОС версия: "</string>
<string name="info_labels">Какво:\\nЗаявка:\\nЕзик на съдържанието:\\nУслуга:\\nВреме по GMT:\\nПакет:\\nВерсия:\\nОС версия:</string>
<string name="list_thumbnail_view_description">Миниатюра на видео</string>
<string name="user_report">Потребителски доклад</string>
<string name="detail_drag_description">Пренареди чрез плъзгане</string>
@ -461,4 +461,5 @@
<string name="users">Потребители</string>
<string name="playback_reset">Възстанови</string>
<string name="playback_step">Стъпка</string>
</resources>

View File

@ -57,7 +57,7 @@
<string name="next_video_title">পরবর্তী ভিডিও</string>
<string name="show_next_and_similar_title">পরবর্তী এবং অনুরূপ ভিডিওগুলি দেখাও</string>
<string name="url_not_supported_toast">URL সমর্থিত নয়</string>
<string name="search_language_title">কন্টেন্ট এর জন্য পছন্দসই ভাষা</string>
<string name="content_language_title">কন্টেন্ট এর জন্য পছন্দসই ভাষা</string>
<string name="settings_category_video_audio_title">ভিডিও এবং অডিও</string>
<string name="settings_category_popup_title">পপআপ</string>
<string name="settings_category_appearance_title">অ্যাপিয়ারেন্স</string>

View File

@ -177,7 +177,7 @@
<string name="next_video_title">Vídeo següent</string>
<string name="show_next_and_similar_title">Mostra el vídeo següent i similars</string>
<string name="default_content_country_title">País per defecte dels continguts</string>
<string name="search_language_title">Llengua per defecte dels continguts</string>
<string name="content_language_title">Llengua per defecte dels continguts</string>
<string name="settings_category_popup_title">Emergent</string>
<string name="background_player_playing_toast">S\'està reproduint en segon pla</string>
<string name="popup_playing_toast">S\'està reproduint en mode emergent</string>

View File

@ -1,22 +1,22 @@
<?xml version='1.0' encoding='UTF-8'?>
<resources><string name="main_bg_subtitle">按搜索即可开始</string>
<string name="view_count_text">%1$s 意见</string>
<string name="upload_date_text">发布 %1$s</string>
<string name="no_player_found">找不到流播放器。你想安装VLC吗?</string>
<string name="no_player_found_toast">找不到流播放器您可以安装VLC播放</string>
<resources><string name="main_bg_subtitle">击搜索按钮即可开始使用</string>
<string name="view_count_text">%1$s 次观看</string>
<string name="upload_date_text">发布 %1$s</string>
<string name="no_player_found">找不到流媒体播放器。您想安装 VLC 吗?</string>
<string name="no_player_found_toast">找不到流媒体播放器(您可以安装 VLC播放)</string>
<string name="install">安装</string>
<string name="cancel">取消</string>
<string name="open_in_browser">在浏览器中打开</string>
<string name="open_in_popup_mode">弹出模式下打开</string>
<string name="open_in_popup_mode">悬浮窗模式下打开</string>
<string name="share">分享</string>
<string name="download">下载</string>
<string name="controls_download_desc">下载流文件.</string>
<string name="controls_download_desc">下载流媒体文件。</string>
<string name="search">搜索</string>
<string name="settings">设置</string>
<string name="did_you_mean">你的意思是: %1$s ?</string>
<string name="share_dialog_title">与某人分享</string>
<string name="did_you_mean">您是不是要找: %1$s ?</string>
<string name="share_dialog_title">分享</string>
<string name="choose_browser">选择浏览器</string>
<string name="screen_rotation"></string>
<string name="screen_rotation"></string>
<string name="use_external_video_player_title">使用外部视频播放器</string>
<string name="use_external_video_player_summary">启用此选项时,某些分辨率将不会有音频</string>
<string name="use_external_audio_player_title">使用外部音频播放器</string>
@ -65,7 +65,7 @@
<string name="black_theme_title">黑色</string>
<string name="popup_remember_size_pos_title">记住弹出窗口的尺寸与位置</string>
<string name="popup_remember_size_pos_summary">记住上一次弹出窗口的位置以及大小</string>
<string name="thumbnail_cache_wipe_complete_notice">清理照片内</string>
<string name="thumbnail_cache_wipe_complete_notice">已清除图像缓</string>
<string name="minimize_on_exit_popup_description">最小化弹出播放器</string>
@ -120,4 +120,11 @@
<string name="minimize_on_exit_summary">从主视频播放器切换到其他应用程序时的操作 - %s</string>
<string name="minimize_on_exit_none_description">没有</string>
<string name="minimize_on_exit_background_description">最小化背景播放器</string>
<string name="webm_description">WebM — 自由视频格式</string>
<string name="use_inexact_seek_title">使用快速粗略定位</string>
<string name="use_inexact_seek_summary">粗略定位功能允许播放器以略低的精确度为代价换取更快的定位速度</string>
<string name="download_thumbnail_title">下载缩略图</string>
<string name="metadata_cache_wipe_title">清除缓存的元数据</string>
<string name="metadata_cache_wipe_summary">移除所有缓存的网页数据</string>
<string name="metadata_cache_wipe_complete_notice">已清除缓存的元数据</string>
</resources>

View File

@ -40,7 +40,7 @@
<string name="next_video_title">Další videa</string>
<string name="show_next_and_similar_title">Zobrazovat \'další\' a \'podobná\' videa</string>
<string name="url_not_supported_toast">URL není podporováno</string>
<string name="search_language_title">Preferovaný jazyk obsahu</string>
<string name="content_language_title">Preferovaný jazyk obsahu</string>
<string name="settings_category_video_audio_title">Video a zvuk</string>
<string name="settings_category_appearance_title">Vzhled</string>
<string name="settings_category_other_title">Ostatní</string>
@ -372,7 +372,7 @@ otevření ve vyskakovacím okně</string>
<string name="playlist_thumbnail_change_success">Náhled playlistu změněn</string>
<string name="playlist_delete_failure">Playlist nelze smazat</string>
<string name="caption_none">Žádné poznámky</string>
<string name="caption_none">Žádné titulky</string>
<string name="resize_fit">Přizpůsobit</string>
<string name="resize_fill">Vyplnit</string>
@ -457,8 +457,8 @@ otevření ve vyskakovacím okně</string>
<string name="preferred_open_action_settings_title">Preferovaná \'otevřít\' akce</string>
<string name="preferred_open_action_settings_summary">Výchozí chování při otevírání obsahu — %s</string>
<string name="caption_setting_title">Poznámky</string>
<string name="caption_setting_description">Upravuje velikost textu poznámek a styly pozadí. Změny se projeví po restartu aplikace</string>
<string name="caption_setting_title">Titulky</string>
<string name="caption_setting_description">Upravuje velikost textu titulků a styly pozadí. Změny se projeví po restartu aplikace</string>
<string name="toast_no_player">K přehrání tohoto souboru chybí vhodná aplikace</string>
@ -473,4 +473,31 @@ otevření ve vyskakovacím okně</string>
<string name="one_item_deleted">Jedna položka smazána.</string>
<string name="app_license">NewPipe je copyleft libre software: Můžete jej používat, sdílet a vylepšovat dle vaší vůle. Redistribuovat a/nebo upravovat lze za podmínek GNU General Public Licence zveřejňované nadací Free Software Foundation, a to buď za podmínek licence verze 3 nebo (dle vaší volby) jakékoli pozdější verze.</string>
</resources>
<string name="channels">kanály</string>
<string name="playlists">Playlisty</string>
<string name="tracks">Stopy</string>
<string name="users">Uživatelé</string>
<string name="privacy_policy_title">Zásady ochrany soukromí v NewPipe</string>
<string name="privacy_policy_encouragement">Projekt NewPipe bere vaše soukromí velice vážně. Proto aplikace neshromažďuje žádné údaje bez vašeho souhlasu.
\nZásady ochrany soukromí NewPipe podrobně vysvětlují, jaké údaje jsou odesílány a ukládány, když odešlete zprávu o pádu aplikace.</string>
<string name="read_privacy_policy">Přečíst zásady ochrany soukromí</string>
<string name="import_settings">Chcete také přenést nastavení?</string>
<string name="skip_silence_checkbox">Zrychleně vpřed během ticha</string>
<string name="playback_step">Krok</string>
<string name="playback_reset">Reset</string>
<string name="start_accept_privacy_policy">Abychom vyhověli Obecnému nařízení o ochraně osobních údajů (GDPR), upozorňujeme vás na zásady ochrany soukromí v NewPipe. Přečtěte si je prosím pozorně.
\nJe potřeba je odsouhlasit, abyste nám mohli odeslat hlášení chyb.</string>
<string name="accept">Přijmout</string>
<string name="decline">Odmítnout</string>
<string name="limit_data_usage_none_description">Bez omezení</string>
<string name="limit_mobile_data_usage_title">Omezit rozlišení při použití mobilních dat</string>
<string name="minimize_on_exit_title">Minimalizovat při přepínání aplikací</string>
<string name="minimize_on_exit_summary">Akce při přepínání aplikací z hlavního přehrávače videa - %s</string>
<string name="minimize_on_exit_none_description">Žádná</string>
<string name="minimize_on_exit_background_description">Minimalizovat přehrávač na pozadí</string>
<string name="minimize_on_exit_popup_description">Minimalizovat přehrávač do vyskakovacího okna</string>
</resources>

View File

@ -10,7 +10,7 @@
<string name="download">Download</string>
<string name="search">Suchen</string>
<string name="settings">Einstellungen</string>
<string name="did_you_mean">Meintest du: %1$s ?</string>
<string name="did_you_mean">Meintest du: %1$s\?</string>
<string name="share_dialog_title">Teilen mit</string>
<string name="choose_browser">Browser auswählen</string>
<string name="screen_rotation">Drehen des Geräts</string>
@ -29,7 +29,7 @@
<string name="show_next_and_similar_title">\'Nächste\' und \'ähnliche\' Videos anzeigen</string>
<string name="url_not_supported_toast">URL wird nicht unterstützt</string>
<string name="settings_category_video_audio_title">Video &amp; Audio</string>
<string name="search_language_title">Bevorzugte Sprache des Inhalts</string>
<string name="content_language_title">Bevorzugte Sprache des Inhalts</string>
<string name="list_thumbnail_view_description">Video-Vorschaubild</string>
<string name="detail_thumbnail_view_description">Video-Vorschaubild</string>
<string name="detail_uploader_thumbnail_view_description">Nutzerbild</string>

View File

@ -42,7 +42,7 @@
<string name="next_video_title">Επόμενο βίντεο</string>
<string name="show_next_and_similar_title">Εμφάνιση \"επόμενου\" και \"σχετικών\" βίντεο</string>
<string name="url_not_supported_toast">Δεν υποστηρίζεται η διεύθυνση URL</string>
<string name="search_language_title">Προεπιλεγμένη γλώσσα περιεχομένου</string>
<string name="content_language_title">Προεπιλεγμένη γλώσσα περιεχομένου</string>
<string name="settings_category_video_audio_title">Βίντεο &amp; Ήχος</string>
<string name="settings_category_appearance_title">Εμφάνιση</string>
<string name="settings_category_other_title">Άλλα</string>
@ -217,7 +217,7 @@
<string name="invalid_url_toast">Μη έγκυρο URL</string>
<string name="video_streams_empty">Δε βρέθηκαν ροές βίντεο</string>
<string name="audio_streams_empty">Δε βρέθηκαν ροές ήχου</string>
<string name="invalid_directory">Μη έγκυρη τοποθεσία</string>
<string name="invalid_directory">Μη έγκυρη διεύθυνση</string>
<string name="invalid_source">Μη έγκυρο αρχείο ή πηγή περιεχομένου</string>
<string name="invalid_file">Το αρχείο δεν υπάρχει ή δεν έχουμε επαρκή εξουσιοδότηση για να διαβάσουμε ή να γράψουμε σε αυτό</string>
<string name="file_name_empty_error">Το όνομα αρχείου δεν μπορεί να είναι κενό</string>
@ -301,7 +301,7 @@
<string name="error_unable_to_load_license">Δεν ήταν δυνατή η φόρτωση της άδειας</string>
<string name="tab_about">Περί</string>
<string name="tab_contributors">Συνεισφέροντες</string>
<string name="app_description">Ελέυθερη και ελαφριά εφαρμογή αναπαραγωγής ροών στο Android.</string>
<string name="app_description">Ανοιχτού κώδικα, ελαφριά εφαρμογή του Android, για την αναπαραγωγή πολυμεσων από το ίντερνετ.</string>
<string name="contribution_title">Συνεισφέρετε</string>
<string name="contribution_encouragement">Αν έχετε ιδέες για μετάφραση, αλλαγή σχεδιασμού, εκκαθάριση ή ριζικές αλλαγές κώδικα της εφαρμογής—η βοήθεια σας είναι πάντα ευπρόσδεκτη. Όσο περισσότερη έχουμε, τόσο καλύτεροι γινόμαστε!</string>
<string name="view_on_github">Δείτε το στο GitHub</string>
@ -405,7 +405,7 @@
<string name="caption_setting_description">Τροποποίηση του μεγέθους και του φόντου των υπότιτλων. Απαιτεί επανεκκίνηση της εφαρμογής</string>
<string name="enable_leak_canary_title">Ενεργοποίηση του LeakCanary</string>
<string name="enable_leak_canary_summary">Η παρακολούθηση των διαρροών μνήμης μπορεί να κάνει την εφαρμογή να μην αποκρίνεται κατά το heap dumping</string>
<string name="enable_leak_canary_summary">Η παρακολούθηση των διαρροών μνήμης μπορεί να προκαλέσει την διακοπή της εφαρμογής</string>
<string name="enable_disposed_exceptions_summary"/>
@ -442,7 +442,7 @@
<string name="playback_tempo">Τέμπο</string>
<string name="playback_pitch">Τόνος</string>
<string name="minimize_on_exit_summary">Ενέργεια κατά τη μετάβαση σε άλλη εφαρμογή — %s</string>
<string name="feed_page_summary">Σελίδαρ Ροής</string>
<string name="feed_page_summary">Σελίδα Ροής</string>
<string name="trending">Δημοφιλή</string>
<string name="enable_disposed_exceptions_title">Αναφορά σφαλμάτων εκτός κύκλου ζωής</string>
<string name="import_soundcloud_instructions_hint">Το όνομα χρήστη σας, soundcloud.com/όνομαχρήστη</string>
@ -450,7 +450,7 @@
<string name="unhook_checkbox">Αποσύνδεση (μπορεί να προκαλέσει παραμόρφωση)</string>
<string name="skip_silence_checkbox">Επιτάχυνση αναπαραγωγής κατά τη διάρκεια σιωπής</string>
<string name="playback_step">Βήμα</string>
<string name="playback_reset">Μηδενισμός</string>
<string name="playback_reset">Επαναφορά</string>
<string name="start_accept_privacy_policy">Προς συμμόρφωση με τον Ευρωπαϊκό Γενικό Κανονισμό για την Προστασία Δεδομένων (GDPR), σας επιστούμε την προσοχή στην πολιτική προστασίας προσωπικών δεδομένων του NewPipe. Παραλούμε, διαβάστε την προσεκτικά.
\nΘα πρέπει να την αποδεχτέιτε προκειμένου να μας αποστείλετε την αναφορά σφάλματος.</string>

View File

@ -28,7 +28,7 @@
<string name="download_dialog_title">Elŝuti</string>
<string name="next_video_title">Sekva video</string>
<string name="url_not_supported_toast">Ligilo ne subtenita</string>
<string name="search_language_title">Preferata enhavlingvo</string>
<string name="content_language_title">Preferata enhavlingvo</string>
<string name="settings_category_video_audio_title">Video kaj sono</string>
<string name="settings_category_appearance_title">Apero</string>
<string name="settings_category_other_title">Alia</string>

View File

@ -57,7 +57,7 @@
<string name="youtube_signature_decryption_error">No se pudo descifrar la URL del vídeo</string>
<string name="parsing_error">No se pudo analizar el sitio web</string>
<string name="show_next_and_similar_title">Mostrar vídeos \'siguientes\' y \'similares\'</string>
<string name="search_language_title">Idioma del contenido por defecto</string>
<string name="content_language_title">Idioma del contenido por defecto</string>
<string name="list_thumbnail_view_description">Vista previa del vídeo</string>
<string name="detail_thumbnail_view_description">Vista previa del vídeo</string>
<string name="detail_likes_img_view_description">Me gusta</string>

View File

@ -92,7 +92,7 @@
<string name="url_not_supported_toast">URL pole toetatud</string>
<string name="default_content_country_title">Sisu vaikimisi riik</string>
<string name="service_title">Teenus</string>
<string name="search_language_title">Sisu vaikimisi keel</string>
<string name="content_language_title">Sisu vaikimisi keel</string>
<string name="settings_category_player_title">Pleier</string>
<string name="settings_category_player_behavior_title">Käitumine</string>
<string name="settings_category_video_audio_title">Heli ja pilt</string>

View File

@ -26,7 +26,7 @@
<string name="next_video_title">Hurrengo bideoa</string>
<string name="show_next_and_similar_title">Erakutsi \'hurrengo\' eta \'antzeko\' bideoak</string>
<string name="url_not_supported_toast">URLak ez du euskarririk</string>
<string name="search_language_title">Edukiaren hizkuntz lehenetsia</string>
<string name="content_language_title">Edukiaren hizkuntz lehenetsia</string>
<string name="settings_category_video_audio_title">Bideoa eta Audioa</string>
<string name="play_btn_text">Erreproduzitu</string>

View File

@ -43,7 +43,7 @@
<string name="next_video_title">ویدیوی بعدی</string>
<string name="show_next_and_similar_title">نماش ویدیوهای بعدی و مشابه</string>
<string name="url_not_supported_toast">نشانی اینترنتی پشتیبانی نمی‌شود</string>
<string name="search_language_title">زبان محتوای ترجیحی</string>
<string name="content_language_title">زبان محتوای ترجیحی</string>
<string name="settings_category_video_audio_title">ویدیو و صدا</string>
<string name="settings_category_appearance_title">ظاهر</string>
<string name="settings_category_other_title">دیگر</string>
@ -117,4 +117,21 @@
<string name="msg_copied">در حافظه رونوشت شد.</string>
<string name="no_available_dir">لطفاً یک شاخهٔ بارگیری موجود را برگزینید.</string>
</resources>
<string name="no_player_found_toast">هیچ پخش کننده استریمی پیدا نشد (شما می‌توانید برنامه وی‌ال‌سی را برای پخش آن نصب نمایید)</string>
<string name="controls_download_desc">بارگیری پرونده جریان.</string>
<string name="use_external_video_player_summary">هنگامی که این گزینه فعال باشد، برخی از کیفیت‌ها فاقد صدا خواهند بود</string>
<string name="subscribe_button_title">اشتراک</string>
<string name="subscribed_button_title">مشترک شده</string>
<string name="channel_unsubscribed">اشتراک کانال لغو شد</string>
<string name="subscription_change_failed">ناتوانی در تغییر وضعیت اشتراک</string>
<string name="subscription_update_failed">ناتوانی در به‌روزرسانی اشتراک</string>
<string name="show_info">نمایش اطلاعات</string>
<string name="tab_main">اصلی</string>
<string name="tab_subscriptions">اشتراک‌ها</string>
<string name="tab_bookmarks">نشان‌گذاری‌ها</string>
<string name="fragment_whats_new">موارد جدید</string>
<string name="controls_background_title">پس زمینه</string>
</resources>

View File

@ -42,7 +42,7 @@
<string name="download_path_audio_dialog_title">Aseta sijainti minne äänitiedostot tallennetaan</string>
<string name="autoplay_by_calling_app_title">Automaattitoisto</string>
<string name="autoplay_by_calling_app_summary">Toistaa automaattisesti videon, kun NewPipe sovellusta kutsutaan toisesta sovelluksesta</string>
<string name="autoplay_by_calling_app_summary">Toistaa automaattisesti videon, kun NewPipe avataan toisesta ohjelmasta</string>
<string name="default_resolution_title">Oletusresoluutio</string>
<string name="default_popup_resolution_title">Ponnahdusikkunan oletusresoluutio</string>
<string name="show_higher_resolutions_title">Näytä korkeampia resoluutioita</string>
@ -66,18 +66,18 @@
<string name="show_search_suggestions_summary">Näytä ehdotuksia hakiessa</string>
<string name="enable_search_history_title">Hakuhistoria</string>
<string name="enable_search_history_summary">Tallentaa hakutietokannan paikallisesti</string>
<string name="enable_watch_history_title">Historia</string>
<string name="enable_watch_history_title">Historia ja Välimuisti</string>
<string name="enable_watch_history_summary">Pidä muistissa katsotut videot</string>
<string name="resume_on_audio_focus_gain_summary">Jatka toistoa keskeytysten jälkeen (esim. puhelut)</string>
<string name="download_dialog_title">Lataus</string>
<string name="next_video_title">Seuraava video</string>
<string name="show_next_and_similar_title">Näytä seuraavia ja samankaltaisia videoita</string>
<string name="url_not_supported_toast">URL ei tueta</string>
<string name="search_language_title">Oletus-sisällon kieli</string>
<string name="content_language_title">Oletus-sisällon kieli</string>
<string name="settings_category_player_title">Soitin</string>
<string name="settings_category_player_behavior_title">Käyttäytyminen</string>
<string name="settings_category_video_audio_title">Video &amp; Ääni</string>
<string name="settings_category_history_title">Historia</string>
<string name="settings_category_history_title">Historia ja välimuisti</string>
<string name="settings_category_popup_title">Ponnahdusikkuna</string>
<string name="settings_category_appearance_title">Ulkoasu</string>
<string name="settings_category_other_title">Muu</string>
@ -170,7 +170,7 @@
<string name="no_videos">Ei videoita</string>
<plurals name="videos">
<item quantity="one">%s video</item>
<item quantity="other">%s videota</item>
<item quantity="other">%s videoita</item>
</plurals>
<string name="start">Aloita</string>
@ -216,7 +216,7 @@
<string name="tab_about">Tietoja</string>
<string name="tab_contributors">Hyväntekijät</string>
<string name="tab_licenses">Lisenssit</string>
<string name="app_description">Vapaa kevyt Android YouTube-frontend.</string>
<string name="app_description">Vapaa ja kevyt nettivideo- ja audiostriimitoistin Androidille.</string>
<string name="view_on_github">Näytä GitHub:ssa</string>
<string name="app_license_title">NewPipe:n Lisenssi</string>
<string name="contribution_encouragement">Olkoon sinulla ideoita; käännöksistä, design muutoksista, koodin siivoamisesta tai raskaista koodimuutoksista—apu on aina tervetullutta. Mitä enemmän saadaan tehtyä, sen paremmaksi sovellus tulee!</string>
@ -232,7 +232,7 @@
<string name="history_cleared">Historia pyyhitty</string>
<string name="item_deleted">Poistettu</string>
<string name="delete_item_search_history">Haluatko poistaa tämän hakuhistoriasta?</string>
<string name="resume_on_audio_focus_gain_title">Jatka toistoa</string>
<string name="resume_on_audio_focus_gain_title">Jatka keskeytyksen jälkeen</string>
<string name="what_device_headline">Info:</string>
<string name="info_labels">Mikä:\\nPyyntö:\\nSisällön kieli:\\nPalvelu:\\nGMT Aika:\\nPaketti:\\nVersio:\\nOS versio:</string>
<string name="copyright" formatted="true">© %1$s %2$s %3$s alla</string>
@ -255,7 +255,7 @@
<string name="popup_playing_append">Lisätty ikkunajonoon</string>
<string name="play_all">Toista kaikki</string>
<string name="player_stream_failure">Toisto epäonnistui</string>
<string name="player_stream_failure">Tätä ei voitu toistaa</string>
<string name="player_unrecoverable_failure">Palautuskelvoton soittimen virhe</string>
<string name="player_recoverable_failure">Palaudutaan soittimen virheestä</string>
@ -265,7 +265,7 @@
<string name="play_queue_stream_detail">Yksityiskohdat</string>
<string name="play_queue_audio_settings">Ääniasetukset</string>
<string name="hold_to_append">Pidä pohjassa lisätäksesi jonoon</string>
<string name="show_hold_to_append_title">Näytä vihje soittolistalle</string>
<string name="show_hold_to_append_title">"Näytä vihje soittolistaan lisäämiseen "</string>
<string name="unknown_content">[Tuntematon]</string>
<string name="enqueue_on_background">Lisää taustatoistojonoon</string>
@ -274,8 +274,192 @@
<string name="start_here_on_background">Aloita toisto taustalla</string>
<string name="start_here_on_popup">Aloita toisto ikkunassa</string>
<string name="donation_title">Lahjoita</string>
<string name="donation_encouragement">NewPipe kehitetään vapaaehtoisten toimesta, jotka käyttävät vapaa-aikaansa tuottaakseen parhaimman kokemuksen sinulle. Nyt on aika antaa takaisin, jotta kehittäjät voivat tehdä NewPipe:sta vielä paremman nauttiessaan kupin kahvia!</string>
<string name="donation_encouragement">NewPipe kehitetään vapaaehtoisten toimesta, jotka käyttävät vapaa-aikaansa tuottaakseen parhaan mahdollisen käyttökokemuksen sinulle. Nyt on aika antaa takaisin, jotta kehittäjät voivat tehdä NewPipe:sta vielä paremman nauttiessaan kupin kahvia!</string>
<string name="give_back">Anna takaisin</string>
<string name="website_title">Websivu</string>
<string name="website_encouragement">Käy verkkosivuillamme saadaksesi lisää tietoa ja uusimmat uutiset NewPipe:sta.</string>
</resources>
<string name="website_encouragement">Käy verkkosivuillamme saadaksesi lisää tietoa ja uusimmat uutiset NewPipe:stä.</string>
<string name="no_player_found_toast">Soitinta ei löytynyt (voit asentaa VLC:n toistaaksesi)</string>
<string name="controls_download_desc">Lataa toistotiedosto.</string>
<string name="show_info">Näytä lisätietoja</string>
<string name="tab_bookmarks">Kirjanmerkit</string>
<string name="controls_add_to_playlist_title">Lisää soittolistaan</string>
<string name="use_inexact_seek_title">Käytä nopeampaa epätarkkaa pikakelausta</string>
<string name="use_inexact_seek_summary">Epätarkka kelaus mahdollistaa videon kelauksen nopeammin, huonommalla tarkkuudella</string>
<string name="download_thumbnail_title">Näytä videoiden pikkukuvat</string>
<string name="download_thumbnail_summary">Poista käytöstä lopettaaksesi kaikkien pikkukuvien lataus säästääksesi mobiilidataa ja muistinkäyttöä. Tämän asetuksen muuttaminen poistaa kaikki pikkukuvat välimuistista</string>
<string name="thumbnail_cache_wipe_complete_notice">Kuvavälimuisti tyhjennetty</string>
<string name="metadata_cache_wipe_title">Poista tallennettu metatieto</string>
<string name="metadata_cache_wipe_summary">Poista kaikki tallennettu sivutieto</string>
<string name="metadata_cache_wipe_complete_notice">Metatiedot poistettu</string>
<string name="auto_queue_summary">Automaattisesti lisää seuraavan youtuben ehdottaman videon soittolistaan, sen viimeisen kappaleen soidessa (Youtuben Autoplay)</string>
<string name="default_content_country_title">Sisällön oletusmaa</string>
<string name="service_title">Palvelu</string>
<string name="settings_category_debug_title">"Virheenkorjaus "</string>
<string name="channels">Kanavat</string>
<string name="playlists">Soittolistat</string>
<string name="tracks">Ääniraidat</string>
<string name="users">Käyttäjät</string>
<string name="always">Aina</string>
<string name="just_once">Vain kerran</string>
<string name="file">Tiedosto</string>
<string name="toggle_orientation">Muuta näytön suuntausta</string>
<string name="switch_to_background">Vaihda taustalle</string>
<string name="switch_to_popup">Vaihda ponnahdusikkunatoistoon</string>
<string name="switch_to_main">Vaihda normaalitoistoon</string>
<string name="import_data_title">Tuo tietokanta</string>
<string name="export_data_title">Vie tietokanta</string>
<string name="import_data_summary">Kirjoittaa yli tämänhetkisen historian ja tilaukset</string>
<string name="export_data_summary">Vie historia, tilaukset tai soittolistat</string>
<string name="clear_views_history_title">Poista katseluhistoria</string>
<string name="clear_views_history_summary">Poistaa toistohistorian</string>
<string name="delete_view_history_alert">Poista koko katseluhistoria.</string>
<string name="view_history_deleted">Katseluhistoria onnistuneesti poistettu.</string>
<string name="clear_search_history_title">Poista hakuhistoria</string>
<string name="clear_search_history_summary">Poistaa historian haetuista videoista</string>
<string name="delete_search_history_alert">Poista koko hakuhistoria.</string>
<string name="search_history_deleted">Hakuhistoria onnistuneesti poistettu.</string>
<string name="external_player_unsupported_link_type">Ulkoiset soittimet eivät tue tämänkaltaisia linkkejä</string>
<string name="invalid_url_toast">Viallinen osoite</string>
<string name="video_streams_empty">Videojonoja ei löytynyt</string>
<string name="audio_streams_empty">Audiojonoja ei löytynyt</string>
<string name="invalid_directory">Virheellinen kansio</string>
<string name="invalid_source">Virheellinen tiedosto/lähde</string>
<string name="invalid_file">Tiedosta ei löydy tai sen kirjoittamiseen/lukemiseen ei ole lupaa</string>
<string name="file_name_empty_error">Tiedostonimi ei voi olla tyhjä</string>
<string name="error_occurred_detail">Hups! Tapahtui virhe: %1$s</string>
<string name="detail_drag_description">Vedä järjestelläksesi</string>
<string name="create">Luo</string>
<string name="delete_one">Poista yksi</string>
<string name="delete_all">Poista kaikki</string>
<string name="dismiss">Hylkää</string>
<string name="rename">Nimeä uudelleen</string>
<string name="one_item_deleted">1 poistettu.</string>
<string name="toast_no_player">Ohjelmaa tämän toistamiseen ei ole asennettu</string>
<string name="privacy_policy_title">NewPipen tietosuojakäytäntö</string>
<string name="privacy_policy_encouragement">NewPipe ottaa yksityisyytesi tosissaan. Siksi se ei kerää sinulta mitään tietoja ilman lupaasi. NewPipen tietosuojakäytännössä selitetään tarkasti mitä tietoja lähetetään tai tallennetaan virheraportin yhteydessä.</string>
<string name="read_privacy_policy">Lue tietosuojakäytäntö</string>
<string name="auto_queue_title">Automaattisesti lisää ehdotettu video soittolistaan</string>
<string name="no_streams_available_download">Videostriimejä ei löytynyt ladattavaksi</string>
<string name="app_license">NewPipe on vapaata softaa. Voit käyttää sitä, katsella sekä muokata sen koodia ja parannella sitä ilmaiseksi mielesi mukaan. Tarkemmin sanottuna, voit jakaa sitä edelleen ja/tai muokata sitä Free Software Foundationin julkaiseman GNU GPL:n, joko versio kolmosen (GPLv3), tai uudemman, ehdoilla.</string>
<string name="delete_stream_history_prompt">Haluatko poistaa tämän katseluhistoriasta?</string>
<string name="delete_all_history_prompt">Oletko varma että haluat poistaa kaiken katseluhistoriasta?</string>
<string name="title_last_played">Viimeksi toistettu</string>
<string name="title_most_played">Eniten toistetut</string>
<string name="export_complete_toast">Vienti valmis</string>
<string name="import_complete_toast">Tuonti valmis</string>
<string name="no_valid_zip_file">Virheellinen ZIP-tiedosto</string>
<string name="could_not_import_all_files">Varoitus: Ei voitu tuoda kaikkia tiedostoja.</string>
<string name="override_current_data">Tämä nollaa nykyiset asetuksesi.</string>
<string name="import_settings">Haluatko myös tuoda asetukset?</string>
<string name="drawer_open">Avaa alasvetovalikko</string>
<string name="drawer_close">Sulje alasvetovalikko</string>
<string name="drawer_header_action_paceholder_text">Tähän tulee jotain jossainvaiheessa ;D</string>
<string name="preferred_open_action_settings_title">Ensisijainen avaustapa</string>
<string name="preferred_open_action_settings_summary">Oletustoiminto avatessa sisältöä — %s</string>
<string name="video_player">Videosoitin</string>
<string name="background_player">Taustasoitin</string>
<string name="popup_player">Ponnahdusikkunasoitin</string>
<string name="always_ask_open_action">Kysy aina</string>
<string name="preferred_player_fetcher_notification_title">Haetaan infoa…</string>
<string name="preferred_player_fetcher_notification_message">Ladataan pyydettyä sisältöä</string>
<string name="create_playlist">Luo uusi soittolista</string>
<string name="delete_playlist">Poista soittolista</string>
<string name="rename_playlist">Uudelleennimeä soittolista</string>
<string name="playlist_name_input">Nimi</string>
<string name="append_playlist">Lisää soittolistaan</string>
<string name="set_as_playlist_thumbnail">Aseta soittolistan kuvakkeeksi</string>
<string name="bookmark_playlist">Tallenna soittolista kirjanmerkkeihin</string>
<string name="unbookmark_playlist">Poista kirjanmerkki</string>
<string name="delete_playlist_prompt">Haluatko poistaa tämän soittolistan?</string>
<string name="playlist_creation_success">Soittolista luotu</string>
<string name="playlist_add_stream_success">Lisätty soittolistaan</string>
<string name="playlist_thumbnail_change_success">Soittolistan kuvake muutettu</string>
<string name="playlist_delete_failure">Soittolistaa ei voitu poistaa</string>
<string name="caption_none">Ei tekstityksiä</string>
<string name="resize_fit">Sovita</string>
<string name="resize_fill">Täytä</string>
<string name="resize_zoom">Suurenna</string>
<string name="caption_auto_generated">Automaattisesti luotu</string>
<string name="caption_setting_title">Tekstitykset</string>
<string name="caption_setting_description">Muokkaa tekstitysten kokoa ja taustaa. Asetusten päivittämiseksi sinun tulee käynnistää ohjelma uudelleen</string>
<string name="enable_leak_canary_title">Laita päälle LeakCanary-muistivuodonpaljastin (virheenkorjausta varten)</string>
<string name="enable_leak_canary_summary">Muistivuotojen valvonta voi aiheuttaa ohjelman hidastumisen virhetilanteissa</string>
<string name="enable_disposed_exceptions_title">Raportoi yhteensopimattomuusvirheitä jotka aiheutuvat vanhoista ohjelmista</string>
<string name="enable_disposed_exceptions_summary">Pakota raportointi kuljetuskelvottomille Rx-poikkeuksille jotka ovat muistisirpaleiden tai aktiviteettielämänkaaren ulkopuolella poiston jälkeen</string>
<string name="import_export_title">Tuo/Vie</string>
<string name="import_title">Tuo</string>
<string name="import_from">Tuo kohteesta</string>
<string name="export_to">Vie kohteeseen</string>
<string name="import_ongoing">Tuodaan…</string>
<string name="export_ongoing">Viedään…</string>
<string name="import_file_title">Tuo tiedosto</string>
<string name="previous_export">Edellinen vienti</string>
<string name="subscriptions_import_unsuccessful">Tilauksia ei voitu tuoda</string>
<string name="subscriptions_export_unsuccessful">Tilauksia ei voitu viedä</string>
<string name="import_youtube_instructions">Tuo youtube-tilaukset lataamalla ensin tilauslistatiedostosi:
\n
\n1. Mene osoitteeseen: %1$s
\n2. Kirjaudu sisään kun niin vaaditaan
\n3. Latauksen pitäisi alkaa (se on se tiedosto)</string>
<string name="import_soundcloud_instructions">Tuo SoundCloud-profiili kirjoittamalla joko osoite tai ID:si:
\n
\n1. Laita päälle työpöytämoodi selaimessasi (tai käytä tietokonetta, tämä sivu ei toimi mobiilisivuna)
\n2. Mene tähän osoitteeseen: %1$s
\n3. Kirjaudu sisään kysyttäessä.
\n4. Kopioi se nettiosoite johon sinut ohjattiin.</string>
<string name="import_soundcloud_instructions_hint">sinun käyttäjänimesi, soundcloud.com/&lt;sinun käyttäjänimesi&gt;</string>
<string name="import_network_expensive_warning">Ota huomioon että tämä operaatio voi käyttää paljon dataa.
\nHaluatko jatkaa?</string>
<string name="playback_speed_control">Toiston nopeuden säätimet</string>
<string name="playback_tempo">Musiikkitempo</string>
<string name="playback_pitch">Sävelkorkeus</string>
<string name="unhook_checkbox">Irroita tempo ja nopeus toisistaan (saattaa aiheuttaa säröä äänessä)</string>
<string name="skip_silence_checkbox">Kelaa eteenpäin hiljaisissa kohdissa</string>
<string name="playback_step">Askel</string>
<string name="playback_reset">Nollaa</string>
<string name="start_accept_privacy_policy">Jotta olisimme kelpoisia EU:n uuden yleisen tietosuoja-asetuksen (GDPR) kannalta, meidän pitää muistuttaa sinua lukemaan NewPipen tietosuojakäytäntö. Lue se oikeasti. Sinun pitää myös hyväksyä se jotta voit lähettää virheraportin.</string>
<string name="accept">Hyväksy</string>
<string name="decline">Hylkää</string>
<string name="limit_data_usage_none_description">Ei rajaa</string>
<string name="limit_mobile_data_usage_title">Rajoita resoluutiota kun mobiilidata on käytössä</string>
<string name="minimize_on_exit_title">Pienennä vaihtaessa ohjelmaa</string>
<string name="minimize_on_exit_summary">Toiminto kun vaihdetaan toiseen ohjelmaan päävideosoittimesta — %s</string>
<string name="minimize_on_exit_none_description">Ei koskaan</string>
<string name="minimize_on_exit_background_description">Pienennä taustasoittimeksi</string>
<string name="minimize_on_exit_popup_description">Muuta ponnahdusikkunaksi</string>
</resources>

View File

@ -35,7 +35,7 @@
<string name="detail_thumbnail_view_description">Miniature daperçu vidéo</string>
<string name="detail_dislikes_img_view_description">Je naime pas</string>
<string name="detail_likes_img_view_description">Jaime</string>
<string name="search_language_title">Langue du contenu par défaut</string>
<string name="content_language_title">Langue du contenu par défaut</string>
<string name="detail_uploader_thumbnail_view_description">Miniature de lavatar de lutilisateur</string>
<string name="use_external_video_player_title">Utiliser un lecteur vidéo externe</string>
<string name="use_external_audio_player_title">Utiliser un lecteur audio externe</string>
@ -431,14 +431,12 @@
\n1. Suivez ce lien : %1$s
\n2. Connectez-vous à votre compte lorsque ce sera demandé
\n3. Un téléchargement va démarrer (ce sera celui du fichier nécessaire à l\'importation des abonnements)"</string>
<string name="import_soundcloud_instructions">Pour importer vos abonnements SoundCloud, vous devez connaitre l\'URL de votre profil ou votre identifiant (id). Si vous le savez, tapez-le ci-dessous.
<string name="import_soundcloud_instructions">Importez un profil SoundCloud avec l\'URL de votre profil ou votre identifiant (id) :
\n
\nSi vous ne le connaissez pas, veuillez suivre les étapes suivantes :
\n
\n1. Activer le \"mode bureau\" dans votre navigateur (le site n\'est pas accesible en mode mobile)
\n1. Activer le \"mode bureau\" dans votre navigateur (le site n\'est pas accessible en mode mobile)
\n2. Suivez cette URL : %1$s
\n3. Connectez-vous à votre compte
\n4. Copier l\'URL vers lequel vous venez d\'être redirigé (qui est l\'URL de votre profil)</string>
\n4. Copier l\'URL vers lequel vous venez d\'être redirigé (qui est l\'URL de votre profil).</string>
<string name="import_soundcloud_instructions_hint">votreID, soundcloud.com/votreid</string>
<string name="import_network_expensive_warning">Cette opération peut consommer beaucoup de données mobiles.
@ -495,7 +493,7 @@
<string name="minimize_on_exit_title">Minimiser lors du changement d\'application</string>
<string name="minimize_on_exit_summary">Action lors du changement d\'applications depuis le lecteur vidéo —%s</string>
<string name="minimize_on_exit_none_description">Aucune</string>
<string name="minimize_on_exit_background_description">Lecture en arrière plan</string>
<string name="minimize_on_exit_popup_description">Mettre en lecteur popup</string>
<string name="minimize_on_exit_background_description">Minimiser pour lire en arrière plan</string>
<string name="minimize_on_exit_popup_description">Minimiser vers lecteur PopUp</string>
</resources>

View File

@ -0,0 +1,464 @@
<?xml version='1.0' encoding='UTF-8'?>
<resources><string name="main_bg_subtitle">Toque em «Procurar» para comezar</string>
<string name="view_count_text">%1$s visualizacións</string>
<string name="upload_date_text">Publicado o día %1$s</string>
<string name="no_player_found">Non foi encontrado ningún reprodutor. Desexa instalar o VLC?</string>
<string name="no_player_found_toast">Non foi encontrado ningún reprodutor (pode instalar o VLC para o reproducir)</string>
<string name="install">Instalar</string>
<string name="cancel">Cancelar</string>
<string name="open_in_browser">Abrir no navegador</string>
<string name="open_in_popup_mode">Abrir no modo popup</string>
<string name="share">Compartillar</string>
<string name="download">Descarregar</string>
<string name="controls_download_desc">Descarregar o ficheiro de emisión.</string>
<string name="search">Procurar</string>
<string name="settings">Opcións</string>
<string name="did_you_mean">Non querería dicir «%1$s»?</string>
<string name="share_dialog_title">Compartillar con</string>
<string name="choose_browser">Escoller un navegador</string>
<string name="screen_rotation">rotación</string>
<string name="use_external_video_player_title">Usar un reprodutor de vídeo externo</string>
<string name="use_external_video_player_summary">Podería NON haber audio con algunhas resolucións se esta opción estiver activa</string>
<string name="use_external_audio_player_title">Usar un reprodutor externo de audio</string>
<string name="popup_mode_share_menu_title">Modo popup do NewPipe</string>
<string name="subscribe_button_title">Subscribir</string>
<string name="subscribed_button_title">Subscrito</string>
<string name="channel_unsubscribed">Xa non está subscrito ao canal</string>
<string name="subscription_change_failed">Non foi posíbel modificar a subscrición</string>
<string name="subscription_update_failed">Non foi posíbel actualizar a subscrición</string>
<string name="show_info">Mostrar información</string>
<string name="tab_main">Principal</string>
<string name="tab_subscriptions">Subscricións</string>
<string name="tab_bookmarks">Favoritos</string>
<string name="fragment_whats_new">Novidades</string>
<string name="controls_background_title">Segundo plano</string>
<string name="controls_popup_title">Modo popup</string>
<string name="controls_add_to_playlist_title">Engadir a</string>
<string name="download_path_title">Ruta de descarga de vídeos</string>
<string name="download_path_summary">Ruta onde gardar os vídeos descarregados</string>
<string name="download_path_dialog_title">Introduza a ruta de descarga de vídeos</string>
<string name="download_path_audio_title">Ruta de descarga de audio</string>
<string name="download_path_audio_summary">Ruta onde gardar o audio descarregado</string>
<string name="download_path_audio_dialog_title">Introduza a ruta de descarga dos ficheiros de audio</string>
<string name="autoplay_by_calling_app_title">Reproducir automaticamente</string>
<string name="autoplay_by_calling_app_summary">Reproducir o vídeo pedido cando o NewPipe sexa invocado por outro aplicativo</string>
<string name="default_resolution_title">Resolución predeterminada</string>
<string name="default_popup_resolution_title">Resolución predeterminada do popup</string>
<string name="show_higher_resolutions_title">Mostrar resolucións máis altas</string>
<string name="show_higher_resolutions_summary">Moitos dispositivos non permiten reproducir vídeos en 2K/4K</string>
<string name="play_with_kodi_title">Reproducir co Kodi</string>
<string name="kore_not_found">O aplicativo Kore non foi encontrado. Desexa instalalo?</string>
<string name="show_play_with_kodi_title">Mostrar a opción «Reproducir co Kodi»</string>
<string name="show_play_with_kodi_summary">Mostrar unha opción para reproducir o vídeo co Kodi Media Center</string>
<string name="play_audio">Audio</string>
<string name="default_audio_format_title">Formato de audio predeterminado</string>
<string name="default_video_format_title">Formato de vídeo predeterminado</string>
<string name="webm_description">WebM — formato libre</string>
<string name="m4a_description">M4A — mellor calidade</string>
<string name="theme_title">Tema</string>
<string name="light_theme_title">Claro</string>
<string name="dark_theme_title">Escuro</string>
<string name="black_theme_title">Negro</string>
<string name="popup_remember_size_pos_title">Lembrar o tamaño e a posición do «popup»</string>
<string name="popup_remember_size_pos_summary">Lembrar o tamaño e a posición anteriores do «popup»</string>
<string name="use_inexact_seek_title">Usar un salto inexacto mais inexacto</string>
<string name="use_inexact_seek_summary">O salto inexacto permite saltar a posicións máis rápido, mais con menos precisión</string>
<string name="download_thumbnail_title">Carregar miniaturas</string>
<string name="download_thumbnail_summary">Desactíveo para evitar a carga de miniaturas e poupar datos e memoria. Modificar esta opción limpa a caché de imaxes da memoria e do disco</string>
<string name="thumbnail_cache_wipe_complete_notice">A caché de imaxes foi limpada</string>
<string name="metadata_cache_wipe_title">Os metadatos da caché foron eliminados</string>
<string name="metadata_cache_wipe_summary">Eliminar todos os datos de páxinas en caché</string>
<string name="metadata_cache_wipe_complete_notice">Os metadatos da caché foron eliminados</string>
<string name="auto_queue_title">Colocar a seguinte emisión na cola automaticamente</string>
<string name="auto_queue_summary">Engadir automaticamente unha emisión ao reproducir a última emisión nunha cola sen repetición</string>
<string name="player_gesture_controls_title">Controis de xesto do reprodutor</string>
<string name="player_gesture_controls_summary">Usar xestos para controlar o brillo e volume do reprodutor</string>
<string name="show_search_suggestions_title">Suxestións de procura</string>
<string name="show_search_suggestions_summary">Mostrar suxestións ao procurar</string>
<string name="enable_search_history_title">Historial de procura</string>
<string name="enable_search_history_summary">Gardar os termos de pesquisa localmente</string>
<string name="enable_watch_history_title">Historial e caché</string>
<string name="enable_watch_history_summary">Gardar historial de vídeos vistos</string>
<string name="resume_on_audio_focus_gain_title">Retormar o vídeo ao enfocar</string>
<string name="resume_on_audio_focus_gain_summary">Continuar a reprodución após interrupcións (como chamadas)</string>
<string name="download_dialog_title">Descarregar</string>
<string name="next_video_title">Vídeo seguinte</string>
<string name="show_next_and_similar_title">Mostrar vídeos «seguintes» e «semellantes»</string>
<string name="show_hold_to_append_title">Mostrar a suxestión «Manteña presionado para engadir á cola»</string>
<string name="show_hold_to_append_summary">Mostrar unha suxestión ao premer o botón de segundo plano ou o de popup na páxina de detalles do vídeo</string>
<string name="url_not_supported_toast">Este URL non está soportado</string>
<string name="default_content_country_title">País predeterminado para o contido</string>
<string name="service_title">Servizo</string>
<string name="search_language_title">Idioma predeterminado do contido</string>
<string name="settings_category_player_title">Reprodutor</string>
<string name="settings_category_player_behavior_title">Comportamento</string>
<string name="settings_category_video_audio_title">Vídeo e audio</string>
<string name="settings_category_history_title">Historial e caché</string>
<string name="settings_category_popup_title">Popup</string>
<string name="settings_category_appearance_title">Aparencia</string>
<string name="settings_category_other_title">Outros</string>
<string name="settings_category_debug_title">Depuración</string>
<string name="background_player_playing_toast">Reproducindo en segundo plano</string>
<string name="popup_playing_toast">Reproducindo en modo «popup»</string>
<string name="background_player_append">Na cola do reprodutor en segundo plano</string>
<string name="popup_playing_append">Na cola do reprodutor popup</string>
<string name="play_btn_text">Reproducir</string>
<string name="content">Contido</string>
<string name="show_age_restricted_content_title">Mostrar contido con restrición de idade</string>
<string name="video_is_age_restricted">Vídeo con restrición de idade. Pode permitir a reprodución deste material nas Opcións.</string>
<string name="duration_live">en directo</string>
<string name="downloads">Descargas</string>
<string name="downloads_title">Descargas</string>
<string name="error_report_title">Relatorio de erro</string>
<string name="all">Todo</string>
<string name="channel">Canal</string>
<string name="channels">Canais</string>
<string name="playlist">Lista de reprodución</string>
<string name="playlists">Listas de reprodución</string>
<string name="tracks">Pistas</string>
<string name="users">Usuarios</string>
<string name="yes">Si</string>
<string name="later">Máis tarde</string>
<string name="disabled">Desactivado</string>
<string name="filter">Filtro</string>
<string name="refresh">Actualizar</string>
<string name="clear">Limpar</string>
<string name="popup_resizing_indicator_title">Redimensionando</string>
<string name="best_resolution">Mellor resolución</string>
<string name="undo">Desfacer</string>
<string name="play_all">Reproducilos todos</string>
<string name="always">Sempre</string>
<string name="just_once">Só unha vez</string>
<string name="file">Ficheiro</string>
<string name="notification_channel_name">Notificación do NewPipe</string>
<string name="notification_channel_description">Notificacións para o NewPipe e os reprodutores «popup»</string>
<string name="unknown_content">[Descoñecido]</string>
<string name="toggle_orientation">Mudar a orientación</string>
<string name="switch_to_background">Mudar para o segundo plano</string>
<string name="switch_to_popup">Mudar para o «popup»</string>
<string name="switch_to_main">Mudar para principal</string>
<string name="import_data_title">Importar base de datos</string>
<string name="export_data_title">Exportar base de datos</string>
<string name="import_data_summary">Isto vai sobreescribir o seu historial e as súas subscricións actuais</string>
<string name="export_data_summary">Exportar historial, subscricións e listas de reprodución</string>
<string name="clear_views_history_title">Limpar historial de reproducións</string>
<string name="clear_views_history_summary">Elimina o historial de emisións reproducidas</string>
<string name="delete_view_history_alert">Elimina todo o historial de reproducións.</string>
<string name="view_history_deleted">O historial de reproducións foi eliminado.</string>
<string name="clear_search_history_title">Limpar o historial de procura</string>
<string name="clear_search_history_summary">Elimina o historial de termos procurados</string>
<string name="delete_search_history_alert">Elimina todo o historial de procura.</string>
<string name="search_history_deleted">O historial de procuras foi eliminado.</string>
<string name="general_error">Erro</string>
<string name="network_error">Erro de rede</string>
<string name="could_not_load_thumbnails">Non foi posíbel carregar todas as miniaturas</string>
<string name="youtube_signature_decryption_error">Non foi posíbel descifrar a asinatura do vídeo</string>
<string name="parsing_error">Non foi posíbel procesar o sitio web</string>
<string name="light_parsing_error">Non foi posíbel procesar o sitio web por completo</string>
<string name="content_not_available">O contido non está dispoñíbel
\n</string>
<string name="blocked_by_gema">Bloqueado pola GEMA</string>
<string name="could_not_setup_download_menu">Non foi posíbel configurar o menú de descargas</string>
<string name="live_streams_not_supported">Isto é unha emisión en directo, polo que aínda non está soportado.</string>
<string name="could_not_get_stream">Non foi posíbel obter unha emisión</string>
<string name="could_not_load_image">Non foi posíbel carregar a imaxe</string>
<string name="app_ui_crash">O aplicativo pechouse</string>
<string name="player_stream_failure">Non foi posíbel reproducir este vídeo</string>
<string name="player_unrecoverable_failure">Ocorreu un erro irrecuperábel co reprodutor</string>
<string name="player_recoverable_failure">Recuperándose dun erro do reprodutor</string>
<string name="external_player_unsupported_link_type">Os reprodutores externos non soportan estes tipos de ligazóns</string>
<string name="invalid_url_toast">URL inválido</string>
<string name="video_streams_empty">Non foi encontrada ningunha emisión de vídeo</string>
<string name="audio_streams_empty">Non foi encontrada ningunha emisión de audio</string>
<string name="invalid_directory">Directorio inválido</string>
<string name="invalid_source">A fonte do ficheiro ou contido é inválida</string>
<string name="invalid_file">O ficheiro non existe ou non ten permisos suficientes para o ler ou escribir</string>
<string name="file_name_empty_error">O nome do ficheiro non pode estar vacío</string>
<string name="error_occurred_detail">Ocorreu un erro: %1$s</string>
<string name="no_streams_available_download">Non hai emisións para descargar</string>
<string name="sorry_string">Deculpe, isto non debería ter acontecido.</string>
<string name="error_report_button_text">Informar do erro por correo electrónico</string>
<string name="error_snackbar_message">Desculpe, ocorreron algúns erros.</string>
<string name="error_snackbar_action">Relatorio</string>
<string name="what_device_headline">Información:</string>
<string name="what_happened_headline">Que ocorreu:</string>
<string name="info_labels">Problema:\\nPetición:\\nIdioma do contido:\\nServizo:\\nHora GMT:\\nPaquete:\\nVersión:\\nVersión do SO:</string>
<string name="your_comment">O teu comentario (en inglés):</string>
<string name="error_details_headline">Detalles:</string>
<string name="list_thumbnail_view_description">Miniatura do vídeo</string>
<string name="detail_thumbnail_view_description">Miniatura do vídeo</string>
<string name="detail_uploader_thumbnail_view_description">Miniatura do avatar do autor</string>
<string name="detail_likes_img_view_description">Gosto</string>
<string name="detail_dislikes_img_view_description">Non gosto</string>
<string name="use_tor_title">Usar o Tor</string>
<string name="use_tor_summary">(Experimental) Redirixir o tráfico polo Tor para aumentar a privacidade (as emisións aínda non están soportadas).</string>
<string name="report_error">Informar dun erro</string>
<string name="user_report">Relatorio do usuario</string>
<string name="search_no_results">Non hai resultados</string>
<string name="empty_subscription_feed_subtitle">Nada que ver</string>
<string name="detail_drag_description">Arrastre para reordenar</string>
<string name="err_dir_create">Non foi posíbel crear o directorio «%1$s»</string>
<string name="info_dir_created">O directorio de descargas «%1$s» foi creado</string>
<string name="video">Vídeo</string>
<string name="audio">Audio</string>
<string name="retry">Tentar de novo</string>
<string name="storage_permission_denied">A permisión de acceso ao almacenamento foi denegada</string>
<string name="use_old_player_title">Usar o reprodutor antigo</string>
<string name="use_old_player_summary">Versión interna anticuada do reprodutor Mediaframework</string>
<string name="short_thousand">K</string>
<string name="short_million">M</string>
<string name="short_billion">MM</string>
<string name="no_subscribers">Ningún subscrito</string>
<plurals name="subscribers">
<item quantity="one">%s subscrito</item>
<item quantity="other">%s subscritos</item>
</plurals>
<string name="no_views">Ningunha visualización</string>
<plurals name="views">
<item quantity="one">%s visualización</item>
<item quantity="other">%s visualizacións</item>
</plurals>
<string name="no_videos">Ningún vídeo</string>
<plurals name="videos">
<item quantity="one">%s vídeo</item>
<item quantity="other">%s vídeos</item>
</plurals>
<string name="start">Comezar</string>
<string name="pause">Pausar</string>
<string name="view">Reproducir</string>
<string name="create">Crear</string>
<string name="delete">Eliminar</string>
<string name="delete_one">Eliminar un</string>
<string name="delete_all">Eliminalos todos</string>
<string name="checksum">Suma de comprobación</string>
<string name="dismiss">Descartar</string>
<string name="rename">Renomear</string>
<string name="add">Nova misión</string>
<string name="finish">OK</string>
<string name="msg_name">Nome do ficheiro</string>
<string name="msg_threads">Fios</string>
<string name="msg_error">Erro</string>
<string name="msg_server_unsupported">O servidor non está soportado</string>
<string name="msg_exists">O ficheiro xa existe</string>
<string name="msg_url_malform">O URL está mal formado ou a Internet non está dispoñíbel</string>
<string name="msg_running">Descarga do NewPipe</string>
<string name="msg_running_detail">Toque para ver detalles</string>
<string name="msg_wait">Por favor, agarde…</string>
<string name="msg_copied">Copiado para o portarretallos</string>
<string name="no_available_dir">Por favor, seleccione o directorio para descargas</string>
<string name="msg_popup_permission">Esta permisión é necesaria
\npara abrir o vídeo no modo «popup»</string>
<string name="one_item_deleted">1 elemento foi eliminado.</string>
<string name="reCaptchaActivity">reCAPTCHA</string>
<string name="reCaptcha_title">Desafío reCAPTCHA</string>
<string name="recaptcha_request_toast">Desafío reCAPTCHA solicitado</string>
<string name="settings_category_downloads_title">Descarregar</string>
<string name="settings_file_charset_title">Caracteres permitidos nos nomes de ficheiros</string>
<string name="settings_file_replacement_character_summary">Os caracteres inválidos serán substituídos por este valor</string>
<string name="settings_file_replacement_character_title">Carácter de substitución</string>
<string name="charset_letters_and_digits">Letras e díxitos</string>
<string name="charset_most_special_characters">A maioría dos caracteres especiais</string>
<string name="toast_no_player">Non hai ningún aplicativo instalado para reproducir este ficheiro</string>
<string name="title_activity_about">Sobre o NewPipe</string>
<string name="action_settings">Opcións</string>
<string name="action_about">Sobre</string>
<string name="title_licenses">Licenzas de terceiros</string>
<string name="copyright" formatted="true">© %1$s de %2$s, so %3$s</string>
<string name="error_unable_to_load_license">Non foi posíbel carregar a licenza</string>
<string name="action_open_website">Abrir o sitio web</string>
<string name="tab_about">Sobre</string>
<string name="tab_contributors">Colaboradores</string>
<string name="tab_licenses">Licenzas</string>
<string name="app_description">Reprodutor lixeiro e libre para Android.</string>
<string name="contribution_title">Colaborar</string>
<string name="contribution_encouragement">Se ten ideas de tradución, mudanzas ao deseño, limpeza de código ou mudanzas serias deste—a axuda sempre é benvida. Canto máis fixermos, tanto máis vai mellorar!</string>
<string name="view_on_github">Ver no GitHub</string>
<string name="donation_title">Doar</string>
<string name="donation_encouragement">O NewPipe é desenvolvido por voluntarios que empregan o seu tempo libre para lle ofrecer a mellor experiencia. Pode retribuír e así axudar os desenvolvedores a tornaren o NewPipe aínda mellor en canto desfrutan dunha cunca de café.</string>
<string name="give_back">Retribuír</string>
<string name="website_title">Sitio web</string>
<string name="website_encouragement">Visite o sitio web do NewPipe para saber máis e ver noticias sobre o proxecto.</string>
<string name="privacy_policy_title">Política de privacidade do NewPipe</string>
<string name="privacy_policy_encouragement">O proxecto NewPipe dá moita importancia á súa privacidade. Por tanto, non recolle ningún dato sen o seu consentimento.
\nA política de privacidade do NewPipe explica con máis detalle que datos son enviados e gardados cando envía un relatorio de erros.</string>
<string name="read_privacy_policy">Ler a política de privacidade</string>
<string name="app_license_title">Licenza do NewPipe</string>
<string name="app_license">O NewPipe é software copyleft libre: pode usalo, estudalo, compartillalo e melloralo como quixer. En concreto, pode redistribuílo e/ou modificalo so os termos da Licenza Pública Xeral GNU, publicada pola Free Software Foundation, quer a versión 3 da Licenza, ou calquera outra versión posterior da súa escolla.</string>
<string name="read_full_license">Ler a licenza</string>
<string name="title_activity_history">Historial</string>
<string name="title_history_search">Procurado</string>
<string name="title_history_view">Visto</string>
<string name="history_disabled">O historial está desactivado</string>
<string name="action_history">Historial</string>
<string name="history_empty">O historial está vacío</string>
<string name="history_cleared">O historial foi limpado</string>
<string name="item_deleted">O elemento foi eliminado</string>
<string name="delete_item_search_history">Desexa eliminar este elemento do historial de procura?</string>
<string name="delete_stream_history_prompt">Desexa eliminar este elemento do historial de visualizacións?</string>
<string name="delete_all_history_prompt">Ten a certeza de querer eliminar todos os elementos do historial?</string>
<string name="title_last_played">Última reprodución</string>
<string name="title_most_played">Máis reproducido</string>
<string name="main_page_content">Contido da páxina principal</string>
<string name="blank_page_summary">Páxina en branco</string>
<string name="kiosk_page_summary">Páxina do «kiosk»</string>
<string name="subscription_page_summary">Páxina de subscricións</string>
<string name="feed_page_summary">Páxina da fonte</string>
<string name="channel_page_summary">Páxina do canal</string>
<string name="select_a_channel">Seleccione un canal</string>
<string name="no_channel_subscribed_yet">Non subscribiu ningún canal</string>
<string name="select_a_kiosk">Seleccione un «kiosk»</string>
<string name="export_complete_toast">Exportación completa</string>
<string name="import_complete_toast">Importación completada</string>
<string name="no_valid_zip_file">Ficheiro ZIP inválido</string>
<string name="could_not_import_all_files">Aviso: non todos os ficheiros foron importados.</string>
<string name="override_current_data">Isto vai reescribir a súa configuración actual.</string>
<string name="import_settings">Desexa importar tamén as opcións?</string>
<string name="kiosk">Kiosk</string>
<string name="trending">Tendencias</string>
<string name="top_50">Top 50</string>
<string name="new_and_hot">Novo e popular</string>
<string name="title_activity_background_player">Reprodutor en segundo plano</string>
<string name="title_activity_popup_player">Reprodutor «popup»</string>
<string name="play_queue_remove">Eliminar</string>
<string name="play_queue_stream_detail">Detalles</string>
<string name="play_queue_audio_settings">Opcións de audio</string>
<string name="hold_to_append">Manteña para colocar na cola</string>
<string name="enqueue_on_background">Colocar na cola de segundo plano</string>
<string name="enqueue_on_popup">Colocar na cola de popup</string>
<string name="start_here_on_main">Comezar a reprodución aquí</string>
<string name="start_here_on_background">Comezar aquí en segundo plano</string>
<string name="start_here_on_popup">Comezar aquí en popup</string>
<string name="drawer_open">Abrir o menú</string>
<string name="drawer_close">Fechar o menú</string>
<string name="drawer_header_action_paceholder_text">Algo vai xurdir aquí en breve ;D</string>
<string name="preferred_open_action_settings_title">Acción «abrir» preferida</string>
<string name="preferred_open_action_settings_summary">Acción predeterminada ao abrir o contido — %s</string>
<string name="video_player">Reprodutor de vídeo</string>
<string name="background_player">Reprodutor en segundo plano</string>
<string name="popup_player">Reprodutor en popup</string>
<string name="always_ask_open_action">Preguntar sempre</string>
<string name="preferred_player_fetcher_notification_title">Obtendo información…</string>
<string name="preferred_player_fetcher_notification_message">Carregando o contido solicitado</string>
<string name="create_playlist">Crear unha nova lista de reprodución</string>
<string name="delete_playlist">Eliminar a lista de reprodución</string>
<string name="rename_playlist">Renomear a lista de reprodución</string>
<string name="playlist_name_input">Nome</string>
<string name="append_playlist">Engadir á lista de reprodución</string>
<string name="set_as_playlist_thumbnail">Estabelecer como miniatura da lista de reprodución</string>
<string name="bookmark_playlist">Gardar a lista de reprodución nos marcadores</string>
<string name="unbookmark_playlist">Eliminar o marcador</string>
<string name="delete_playlist_prompt">Desexa eliminar esta lista de reprodución?</string>
<string name="playlist_creation_success">A lista de reprodución foi creada</string>
<string name="playlist_add_stream_success">O vídeo foi engadido á lista de reprodución</string>
<string name="playlist_thumbnail_change_success">A miniatura da lista de reprodución foi modificada</string>
<string name="playlist_delete_failure">Non foi posíbel eliminar a lista de reprodución</string>
<string name="caption_none">Sen lenda</string>
<string name="resize_fit">Axustar</string>
<string name="resize_fill">Encher</string>
<string name="resize_zoom">Zoom</string>
<string name="caption_auto_generated">Xerado automaticamente</string>
<string name="caption_setting_title">Lenda</string>
<string name="caption_setting_description">Modificar a escala de texto da lenda e os estilos de segundo plano do reprodutor. Para ter efecto, é preciso reiniciar o aplicativo</string>
<string name="enable_leak_canary_title">Activar LeakCanary</string>
<string name="enable_leak_canary_summary">A monitorización de fugas de memoria pode facer que o aplicativo deixe de responder cando hai vertedura da pila</string>
<string name="enable_disposed_exceptions_title">Informar de erros de fóra do ciclo de vida</string>
<string name="enable_disposed_exceptions_summary">Forzar a comunicación de excepcións Rx non entregábeis fóra do ciclo de vida do fragmento ou actividade após o descarte</string>
<string name="import_export_title">Importar/Exportar</string>
<string name="import_title">Importar</string>
<string name="import_from">Importar de</string>
<string name="export_to">Exportar a</string>
<string name="import_ongoing">Importando…</string>
<string name="export_ongoing">Exportando…</string>
<string name="import_file_title">Importar un ficheiro</string>
<string name="previous_export">Exportación anterior</string>
<string name="subscriptions_import_unsuccessful">Non foi posíbel importar as subscricións</string>
<string name="subscriptions_export_unsuccessful">Non foi posíbel exportar as subscricións</string>
<string name="import_youtube_instructions">Pode importar as súas subscricións de YouTube descarregando o ficheiro de exportacións:
\n
\n1. Acceda ao URL %1$s
\n2. Inicie a sesión cando lle for solicitado
\n3. Ha comezar unha descarga (a do ficheiro de exportación)</string>
<string name="import_soundcloud_instructions">Pode importar un perfil do SoundCloud escribindo o URL ou o seu ID:
\n
\n1. Active o «modo desktop» nun navegador da Internet (o sitio non está dispoñíbel para dispositivos móbiles)
\n2. Acceda ao URL %1$s
\n3. Inicie a sesión cando lle for solicitado
\n4. Copie o URL de perfil a que foi redirixido.</string>
<string name="import_soundcloud_instructions_hint">oseuID, soundcloud.com/oseuid</string>
<string name="import_network_expensive_warning">Teña en conta que esta operación pode consumir moitos recursos de rede.
\n
\nDesexa continuar?</string>
<string name="playback_speed_control">Controis de velocidade da reprodución</string>
<string name="playback_tempo">Tempo</string>
<string name="playback_pitch">Ton</string>
<string name="unhook_checkbox">Desvincular (pode causar distorsión)</string>
<string name="skip_silence_checkbox">Avanzar rápido durante os momentos de silencio</string>
<string name="playback_step">Paso</string>
<string name="playback_reset">Reiniciar</string>
<string name="start_accept_privacy_policy">Para cumprirmos co Regulamento Xeral Europeo de Protección de Datos (GDPR), chamamos a súa atención sobre a nova política de privacidade do NewPipe. Por favor, léao con coidado.
\nDebe aceptalo para nos enviar un relatorio de erro.</string>
<string name="accept">Aceptar</string>
<string name="decline">Recusar</string>
<string name="limit_data_usage_none_description">Sen límite</string>
<string name="limit_mobile_data_usage_title">Limitar a resolución ao usar datos móbiles</string>
<string name="minimize_on_exit_title">Minimizar ao mudar de aplicativo</string>
<string name="minimize_on_exit_summary">Acción ao mudar de aplicativo desde o reprodutor orixinal — %s</string>
<string name="minimize_on_exit_none_description">Ningunha</string>
<string name="minimize_on_exit_background_description">Minimizar ao reprodutor en segundo plano</string>
<string name="minimize_on_exit_popup_description">Minimizar o reprodutor popup</string>
</resources>

View File

@ -59,7 +59,7 @@
<string name="next_video_title">הסרטון הבא</string>
<string name="show_next_and_similar_title">הראה את הסרטונים הבאים וסרטונים דומים</string>
<string name="url_not_supported_toast">כתובת URL לא נתמכת</string>
<string name="search_language_title">שפת התוכן המועדפת</string>
<string name="content_language_title">שפת התוכן המועדפת</string>
<string name="settings_category_video_audio_title">סרטים ושמע</string>
<string name="settings_category_popup_title">חלון צץ</string>
<string name="settings_category_appearance_title">תצוגה</string>

View File

@ -104,7 +104,7 @@
<string name="show_hold_to_append_title">\"संलग्न करने के लिए पकड़ें रहे\" दिखाए</string>
<string name="show_hold_to_append_summary">जब बैकग्राउंड और पॉपअप बटन विडियो के विवरण पन्ने में दबाई जाए तो tip को दिखाए</string>
<string name="url_not_supported_toast">ये वाला URL इसमें नहीं चलेगा</string>
<string name="search_language_title">डिफ़ॉल्ट विषय की भाषा</string>
<string name="content_language_title">डिफ़ॉल्ट विषय की भाषा</string>
<string name="settings_category_player_title">प्लेयर</string>
<string name="settings_category_player_behavior_title">चाल चलन</string>
<string name="settings_category_popup_title">पॉपअप</string>
@ -247,7 +247,7 @@
<string name="copyright" formatted="true">%2$s के द्वारा © %1$s जो %3$s के अधीन आते है</string>
<string name="error_unable_to_load_license">लाइसेंस load नहीं हो रहा</string>
<string name="tab_contributors">सहयोगकर्ता</string>
<string name="app_description">एंड्राइड के लिए हल्का और मुफ्त स्ट्रीमिंग</string>
<string name="app_description">एंड्राइड के लिए हल्का और मुफ्त स्ट्रीमिंग एप्लिकेशन|</string>
<string name="contribution_encouragement">अगर आपके पास कोई सुझाव हो जैसे -अनुवाद , डिजाईन में बदलाव ,code को साफ़ रखना , या फिर code में जायदा बदलाव लाना हो तो - साहयता के लिए आपका स्वागत है . जितना ज्यादा होगा उतना बेहतर होगा !</string>
<string name="delete_item_search_history">क्या आप इसको खोज इतिहास के मिटाना चाहते है ?</string>
@ -295,7 +295,7 @@
<string name="import_data_title">डेटाबेस आयात करें</string>
<string name="export_data_title">डेटाबेस निर्यात करें</string>
<string name="import_data_summary">आपके वर्तमान इतिहास और सब्सक्रिप्शन को ओवरराइड करेगा</string>
<string name="export_data_summary">इतिहास, सब्सक्रिप्शन और प्लेलिस्ट निर्यात करें</string>
<string name="export_data_summary">इतिहास, सब्सक्रिप्शन और प्लेलिस्ट निर्यात करें</string>
<string name="external_player_unsupported_link_type">एक्सटर्नल प्लेयर इन प्रकार के लिंक सपोर्ट नहीं करता</string>
<string name="invalid_url_toast">अमान्य URL</string>
<string name="video_streams_empty">कोई वीडियो स्ट्रीम नहीं मिला</string>
@ -383,7 +383,7 @@
<string name="metadata_cache_wipe_summary">सभी कैश किए गए वेबपृष्ठ डेटा हटाएं</string>
<string name="metadata_cache_wipe_complete_notice">मेटाडाटा कैश मिटा दिया गया</string>
<string name="auto_queue_title">अगली स्ट्रीम को स्वचालित रूप से जोड़ें</string>
<string name="auto_queue_summary">गैर-दोहराने वाली कतार में अंतिम स्ट्रीम चलाते समय संबंधित स्ट्रीम को स्वतः संलग्न करें</string>
<string name="auto_queue_summary">गैर-दोहराने वाली कतार में अंतिम स्ट्रीम चलाते समय संबंधित स्ट्रीम को स्वतः संलग्न करें</string>
<string name="file">फाइल</string>
<string name="channels">चेनल्स</string>
@ -416,7 +416,7 @@
<string name="import_settings">क्या आप सेटिंग्स भी आयात करना चाहते है?</string>
<string name="preferred_open_action_settings_title">पसंदीदा \'खोलने पर\' करवाई</string>
<string name="preferred_open_action_settings_summary">सामग्री खोलते समय डिफ़ॉल्ट कारवाही</string>
<string name="preferred_open_action_settings_summary">सामग्री खोलते समय डिफ़ॉल्ट कारवाही — %s</string>
<string name="caption_setting_title">केप्सन</string>
<string name="caption_setting_description">प्लेयर केप्शन के शब्दों का परिमाण और पृष्ठभूमि शैलियो को बदले। लागू करने के लिए ऐप को पुनः प्रारम्भ करना जरूरी है।</string>

View File

@ -42,7 +42,7 @@
<string name="download_path_audio_dialog_title">Unesi put za preuzimanje zvučne datoteke</string>
<string name="autoplay_by_calling_app_title">Auto. reprod. kada je NewPipe pozvan iz druge apl.</string>
<string name="autoplay_by_calling_app_summary">Automatski reproduciraj videozapis kad je NewPipe pozvan iz druge aplikacije</string>
<string name="autoplay_by_calling_app_summary">Reproducira videozapis kad je NewPipe pozvan iz druge aplikacije</string>
<string name="default_resolution_title">Zadana razlučivost</string>
<string name="default_popup_resolution_title">Zadana razlučivost skočnog prozora</string>
<string name="show_higher_resolutions_title">Prikaži veće razlučivosti</string>
@ -77,7 +77,7 @@
<string name="next_video_title">Sljedeći videozapis</string>
<string name="show_next_and_similar_title">Prikaži sljedeće i slične videozapise</string>
<string name="url_not_supported_toast">URL nije podržan</string>
<string name="search_language_title">Zadani jezik sadržaja</string>
<string name="content_language_title">Zadani jezik sadržaja</string>
<string name="settings_category_video_audio_title">Video i zvuk</string>
<string name="settings_category_popup_title">Skočni prozor</string>
<string name="settings_category_appearance_title">Izgled</string>
@ -116,7 +116,7 @@
<string name="could_not_get_stream">Nije moguće dobaviti stream</string>
<string name="could_not_load_image">Nije moguće učitati sliku</string>
<string name="app_ui_crash">Aplikacija/UI se srušio</string>
<string name="sorry_string">Oprostitee, ovo se nije trebalo dogoditi.</string>
<string name="sorry_string">Oprostite, ovo se nije trebalo dogoditi.</string>
<string name="error_report_button_text">Prijavi pogrešku putem e-maila</string>
<string name="error_snackbar_message">Oprostite, neke greške su se dogodile.</string>
<string name="error_snackbar_action">PRIJAVI</string>
@ -284,7 +284,7 @@
<string name="website_title">Web stranica</string>
<string name="start_here_on_main">Ovdje započni reprodukciju</string>
<string name="start_here_on_background">Ovdje započni repr. u pozadini</string>
<string name="enqueue_on_background">Dadaj na red čekanja u pozadini</string>
<string name="enqueue_on_background">Dodaj na red čekanja u pozadini</string>
<string name="enqueue_on_popup">Dodaj na red u skočnom prozoru</string>
<string name="start_here_on_popup">Započni ovdje u Skočnom prozoru</string>
@ -333,4 +333,109 @@
<string name="enable_leak_canary_summary">Monitoring curenja memorije može uzrokovati greške u radu aplikacije prilikom odlaganje gomile</string>
<string name="enable_disposed_exceptions_title">Izvijestite o pogreškama izvan životnog ciklusa</string>
<string name="show_info">Prikaži informacije</string>
<string name="tab_bookmarks">Oznake</string>
<string name="controls_add_to_playlist_title">Dodaj u</string>
<string name="download_thumbnail_title">Učitaj slike</string>
<string name="thumbnail_cache_wipe_complete_notice">Slikovna predmemorija obrisana</string>
<string name="metadata_cache_wipe_title">Obriši predmemorijsku metupodataka</string>
<string name="service_title">Usluga</string>
<string name="channels">Kanali</string>
<string name="playlists">Playliste</string>
<string name="tracks">Pjesme</string>
<string name="users">Korisnici</string>
<string name="always">Uvijek</string>
<string name="just_once">Samo jednom</string>
<string name="file">Datoteka</string>
<string name="switch_to_background">Prijeđi na pozadinu</string>
<string name="switch_to_popup">Prijeđi na skočni prozor</string>
<string name="switch_to_main">Prijeđi na glavni</string>
<string name="import_data_title">Uvoz baze podataka</string>
<string name="export_data_title">Izvoz baze podataka</string>
<string name="import_data_summary">Poništava vašu trenutnu povijest i pretplate</string>
<string name="export_data_summary">Izvoz povijesti, pretplata i playlisti</string>
<string name="clear_views_history_title">Očisti povijest gledanja</string>
<string name="clear_views_history_summary">Briše povijest reproduciranih streamova</string>
<string name="delete_view_history_alert">Obriši cijelu povijest gledanja.</string>
<string name="view_history_deleted">Povijest gledanja izbrisana.</string>
<string name="clear_search_history_title">Obriši povijest pretraživanja</string>
<string name="delete_search_history_alert">Obriši cijelu povijest pretraživanja.</string>
<string name="search_history_deleted">Povijest pretraživanja obrisana.</string>
<string name="invalid_url_toast">Neispravan URL</string>
<string name="invalid_directory">Nevažeći direktorij</string>
<string name="file_name_empty_error">Naziv datoteke ne može biti prazan</string>
<string name="error_occurred_detail">Dogodila se greška: %1$s</string>
<string name="detail_drag_description">Povucite za promjenu redoslijeda</string>
<string name="create">Stvori</string>
<string name="delete_one">Izbriši jedan</string>
<string name="delete_all">Izbriši sve</string>
<string name="dismiss">Odbaci</string>
<string name="rename">Preimenuj</string>
<string name="one_item_deleted">1 stavka izbrisana.</string>
<string name="toast_no_player">Nijedna aplikacija nije instalirana za reprodukciju te datoteke</string>
<string name="give_back">Vrati</string>
<string name="website_encouragement">Posjetite web stranicu NewPipe za više informacija i vijesti.</string>
<string name="privacy_policy_title">NewPipeova pravila o privatnosti</string>
<string name="read_privacy_policy">Pročitajte pravila o privatnosti</string>
<string name="delete_stream_history_prompt">Želite li izbrisati ovu stavku iz povijesti gledanja?</string>
<string name="delete_all_history_prompt">Jeste li sigurni da želite izbrisati sve stavke iz povijesti?</string>
<string name="title_last_played">Zadnje svirano</string>
<string name="title_most_played">Najviše svirano</string>
<string name="export_complete_toast">Izvoz završen</string>
<string name="import_complete_toast">Uvoz završen</string>
<string name="no_valid_zip_file">Nema važeće ZIP datoteke</string>
<string name="could_not_import_all_files">Upozorenje: Nije moguće uvesti sve datoteke.</string>
<string name="override_current_data">Ovo će poništiti vaše trenutne postavke.</string>
<string name="import_settings">Želite li također uvesti postavke?</string>
<string name="import_export_title">Uvoz/Izvoz</string>
<string name="import_title">Uvoz</string>
<string name="import_from">Uvoz iz</string>
<string name="export_to">Izvoz u</string>
<string name="import_ongoing">Uvoz…</string>
<string name="export_ongoing">Izvoz…</string>
<string name="import_file_title">Uvoz datoteke</string>
<string name="previous_export">Prethodni izvozi</string>
<string name="subscriptions_import_unsuccessful">Nije moguće uvesti pretplatnike</string>
<string name="subscriptions_export_unsuccessful">Nije moguće izvesti pretplatnike</string>
<string name="import_youtube_instructions">Uvezite YouTube pretplatnike preuzimanjem izvozne datoteke:
\n
\n1. Idite na ovaj URL: %1%s
\n2. Ulogirajte se
\n3. Preuzimanje bi trebalo početi (to je izvozna datoteka)</string>
<string name="import_soundcloud_instructions_hint">vašID, soundcloud.com/vašID</string>
<string name="import_network_expensive_warning">Uzmite u obzir da ova operacija može uzrokovat veliku potrošnju prometa.
\n
\nŽelite li nastaviti?</string>
<string name="playback_speed_control">Kontrole brzine reprodukcije</string>
<string name="skip_silence_checkbox">Premotaj naprijed tijekom šutnje</string>
<string name="playback_step">Korak</string>
<string name="playback_reset">Resetiraj</string>
<string name="accept">Prihvati</string>
<string name="decline">Odbij</string>
<string name="limit_data_usage_none_description">Bez ograničenja</string>
<string name="limit_mobile_data_usage_title">Ograniči rezoluciju tijekom korištenja mobilnih podataka</string>
<string name="minimize_on_exit_none_description">Nijedan</string>
<string name="no_player_found_toast">Reproduktor za stream nije pronađen (možete instalirati VLC za reprodukciju)</string>
<string name="controls_download_desc">Preuzmite datoteku za stream.</string>
<string name="use_inexact_seek_title">Koristi brzo netočno premotavanje</string>
<string name="use_inexact_seek_summary">Netočno premotavanje omogućava reproduktoru da premota na mjesto brže uz manju preciznost</string>
</resources>

View File

@ -2,7 +2,7 @@
<resources>
<string name="view_count_text">%1$s megtekintés</string>
<string name="upload_date_text">Közzétéve: %1$s</string>
<string name="no_player_found">Nem található megfelelő lejátszó. Feltelepíti a VLC lejátszót?</string>
<string name="no_player_found">Nem található megfelelő lejátszó. Telepíted a VLC lejátszót?</string>
<string name="install">Telepítés</string>
<string name="cancel">Mégse</string>
<string name="open_in_browser">Megnyitás böngészőben</string>
@ -15,22 +15,24 @@
<string name="choose_browser">Válasszon böngészőt</string>
<string name="screen_rotation">forgatás</string>
<string name="download_path_title">Videófájlok letöltési helye</string>
<string name="download_path_summary">Útvonal a letöltött videók tárolásához.</string>
<string name="download_path_summary">Útvonal a letöltött videók tárolásához</string>
<string name="download_path_dialog_title">Adja meg a videófájlok letöltési helyét</string>
<string name="default_resolution_title">Alapértelmezett felbontás</string>
<string name="play_with_kodi_title">Lejátszás Kodi-val</string>
<string name="kore_not_found">A Kore alkalmazás nem található. Feltelepíti a Kore lejátszót?</string>
<string name="kore_not_found">A Kore alkalmazás nem található. Telepíted a Kore lejátszót?</string>
<string name="show_play_with_kodi_title">\"Lejátszás Kodi-val\" opció mutatása</string>
<string name="show_play_with_kodi_summary">Mutat egy opciót a videók Kodi médiaközponttal való lejátszására.</string>
<string name="show_play_with_kodi_summary">Opció mutatása a videók Kodi médiaközponttal való lejátszására</string>
<string name="play_audio">Hang</string>
<string name="default_audio_format_title">Alapértelmezett hang formátum</string>
<string name="webm_description">WebM — szabad formátum</string>
<string name="m4a_description">M4A — jobb minőség</string>
<string name="download_dialog_title">Letöltés</string>
<string name="next_video_title">Következő videó</string>
<string name="url_not_supported_toast">A webcím nem támogatott</string>
<string name="use_external_video_player_title">Külső videólejátszó használata</string>
<string name="use_external_audio_player_title">Külső hanglejátszó használata</string>
<string name="download_path_audio_dialog_title">Adja meg a hangfájlok letöltési helyét.</string>
<string name="download_path_audio_dialog_title">Add meg a hangfájlok letöltési helyét</string>
<string name="use_tor_title">Tor használata</string>
<string name="use_tor_summary">(Kísérleti) Adatforgalom Tor-on keresztüli kényszerítése a biztonság fokozása érdekében (a videó stream-elés még nem támogatott).</string>
@ -41,7 +43,7 @@
<string name="background_player_playing_toast">Lejátszás háttérben</string>
<string name="settings_category_video_audio_title">Videó és audio</string>
<string name="settings_category_appearance_title">Megjelenés</string>
<string name="search_language_title">Tartalom preferált nyelve</string>
<string name="content_language_title">Tartalom preferált nyelve</string>
<string name="settings_category_other_title">További beállítások</string>
<string name="show_next_and_similar_title">Következő hasonló videók mutatása</string>
<string name="dark_theme_title">Sötét</string>
@ -60,12 +62,12 @@
<string name="content">Tartalom</string>
<string name="show_age_restricted_content_title">Korhatáros tartalom mutatása</string>
<string name="general_error">Hiba</string>
<string name="content_not_available">A tartalom nem elérhető.</string>
<string name="blocked_by_gema">GEMA által blokkolt.</string>
<string name="live_streams_not_supported">Ez egy élö közvetités. Még nem támogatva.</string>
<string name="autoplay_by_calling_app_title">Automatikus lejátszás külső indítás esetén</string>
<string name="autoplay_by_calling_app_summary">Videók automatikus lejátszása a NewPipe külső indításakor.</string>
<string name="video_is_age_restricted">A video korhatáros. A megtekintéséhez engedélyezze a korhatáros videókat.</string>
<string name="content_not_available">A tartalom nem elérhető</string>
<string name="blocked_by_gema">GEMA által blokkolt</string>
<string name="live_streams_not_supported">Ez egy élő közvetítés, amely még nem támogatott.</string>
<string name="autoplay_by_calling_app_title">Automatikus lejátszás</string>
<string name="autoplay_by_calling_app_summary">Videók automatikus lejátszása, ha a NewPipe egy másik alkalmazásból lett indítva</string>
<string name="video_is_age_restricted">Korhatáros videó. A megtekintéséhez engedélyezze a korhatáros videókat a Beállításokban.</string>
<string name="duration_live">élő</string>
<string name="error_snackbar_action">JELENTÉS</string>
@ -76,11 +78,11 @@
<string name="error_snackbar_message">Sajnos hiba történt.</string>
<string name="sorry_string">Ennek nem kellett volna megtörténnie.</string>
<string name="error_report_button_text">Hibajelentés emailben</string>
<string name="could_not_get_stream">A stream nem elérhető.</string>
<string name="could_not_setup_download_menu">Nem sikerült a letöltés menü beállítása.</string>
<string name="youtube_signature_decryption_error">Nem sikerült a video url aláírás azonosítása.</string>
<string name="sorry_string">Elnézést, ennek nem kellett volna megtörténnie.</string>
<string name="error_report_button_text">Hibajelentés e-mailben</string>
<string name="could_not_get_stream">A stream nem elérhető</string>
<string name="could_not_setup_download_menu">Nem sikerült a letöltés menü beállítása</string>
<string name="youtube_signature_decryption_error">Nem sikerült a videó URL aláírás azonosítása</string>
<string name="storage_permission_denied">Háttértárhoz való hozzáférés megtagadva</string>
<string name="retry">Újra</string>
<string name="report_error">Hibajelentés</string>
@ -90,21 +92,21 @@
<string name="audio">Audio</string>
<string name="main_bg_subtitle">A kezdéshez koppints a keresésre</string>
<string name="could_not_load_thumbnails">Nem sikerült az összes előnézeti kép betöltése</string>
<string name="parsing_error">Nem sikerült a weblap betöltése.</string>
<string name="light_parsing_error">Nem sikerült a weblap teljes betöltése.</string>
<string name="parsing_error">Nem sikerült a weblap betöltése</string>
<string name="light_parsing_error">Nem sikerült a weblap teljes betöltése</string>
<string name="downloads">Letöltések</string>
<string name="downloads_title">Letöltések</string>
<string name="error_report_title">Hibabejelentés</string>
<string name="start">Indít</string>
<string name="pause">Szünet</string>
<string name="view">Megtekintés</string>
<string name="view">Lejátszás</string>
<string name="delete">Törlés</string>
<string name="checksum">Ellenőrző összeg</string>
<string name="finish">Ok</string>
<string name="finish">Rendben</string>
<string name="msg_name">Filenév</string>
<string name="msg_name">Fájlnév</string>
<string name="msg_threads">Threadek</string>
<string name="msg_error">Hiba</string>
<string name="msg_exists">A file már létezik</string>
@ -146,12 +148,12 @@
<string name="show_search_suggestions_title">Keresési javaslatok</string>
<string name="show_search_suggestions_summary">Mutasson javaslatokat keresés közben</string>
<string name="enable_search_history_title">Keresési előzmények</string>
<string name="enable_watch_history_title">Előzmények</string>
<string name="enable_watch_history_title">Előzmények és gyorsítótár</string>
<string name="enable_watch_history_summary">Megnézett videók nyomon követése</string>
<string name="resume_on_audio_focus_gain_summary">"Lejátszás folytatása félbeszakítás után (pl.: telefonhívás) "</string>
<string name="settings_category_player_title">Lejátszó</string>
<string name="settings_category_player_behavior_title">Működés</string>
<string name="settings_category_history_title">Előzmények</string>
<string name="settings_category_history_title">Előzmények és gyorsítótár</string>
<string name="settings_category_popup_title">Felugró ablak</string>
<string name="settings_category_debug_title">Hibaelhárítás</string>
<string name="popup_playing_toast">Lejátszás felugró ablakban</string>
@ -180,7 +182,7 @@
<string name="import_data_title">Adatbázis importálása</string>
<string name="export_data_title">Adatbázis exportálása</string>
<string name="import_data_summary">Felül fogja írni a jelenlegi előzményeket és feliratkozásokat</string>
<string name="export_data_summary">Előzmények,Feliratkozások és lejátszási listák exportálása.</string>
<string name="export_data_summary">Előzmények, feliratkozások és lejátszási listák exportálása</string>
<string name="could_not_load_image">Kép betöltése sikertelen</string>
<string name="app_ui_crash">Alkalmazás/Kezelő felület összeomlott</string>
<string name="player_stream_failure">Videó lejátszása sikertelen</string>
@ -192,4 +194,242 @@
<string name="info_labels">Mi:\\nKérés:\\nTartalom nyelve:\\nSzolgáltatás:\\nGMT Idő:\\nCsomag:\\nVerzió:\\nOperációs Rendszer verzió:</string>
<string name="search_no_results">Nincs találat</string>
<string name="use_old_player_title">Régi lejátszó használata</string>
</resources>
<string name="controls_download_desc">Adatfolyam fájl letöltése.</string>
<string name="controls_add_to_playlist_title">Hozzáadás</string>
<string name="use_inexact_seek_title">Gyorsabb, de pontatlan tekerés használata</string>
<string name="use_inexact_seek_summary">A pontatlan tekerés lehetővé teszi, hogy gyorsabban ugorjon a pozíciókra, de kevesebb pontossággal</string>
<string name="download_thumbnail_title">Bélyegképek betöltése</string>
<string name="download_thumbnail_summary">Kapcsold ki, hogy a bélyegképek ne legyenek betöltve és mentve, így csökkentve az adat és memória használatot. Ennek az értéknek a megváltoztatása törli a memóriában és a meghajtón lévő bélyegkép gyorsítótárat</string>
<string name="thumbnail_cache_wipe_complete_notice">A bélyegkép gyorsítótár törölve</string>
<string name="metadata_cache_wipe_title">Gyorsítótárazott metaadat törlése</string>
<string name="metadata_cache_wipe_summary">Minden gyorsítótárazott weboldal adat törlése</string>
<string name="metadata_cache_wipe_complete_notice">A metaadat gyorsítótár törölve lett</string>
<string name="auto_queue_title">Következő videó automatikus lejátszása</string>
<string name="enable_search_history_summary">Keresési előzmények tárolása az eszközön</string>
<string name="service_title">Szolgáltatás</string>
<string name="channels">Csatornák</string>
<string name="playlists">Lejátszási listák</string>
<string name="tracks">Zeneszámok</string>
<string name="users">Felhasználók</string>
<string name="file">Fájl</string>
<string name="switch_to_background">Folytatás a háttérben</string>
<string name="switch_to_popup">Folytatás felugró ablakban</string>
<string name="clear_views_history_title">Megtekintési előzmények törlése</string>
<string name="clear_views_history_summary">Eltávolítja a megtekintési előzményeket</string>
<string name="delete_view_history_alert">Összes megtekintési előzmény törlése.</string>
<string name="view_history_deleted">Megtekintési előzmények törölve.</string>
<string name="clear_search_history_title">Keresési előzmények törlése</string>
<string name="clear_search_history_summary">Eltávolítja a kereséshez használt kifejezéseket az előzményekből</string>
<string name="delete_search_history_alert">Összes keresési előzmény törlése.</string>
<string name="search_history_deleted">Keresési előzmények törölve.</string>
<string name="player_unrecoverable_failure">Lejátszási hiba történt</string>
<string name="player_recoverable_failure">Lejátszási hiba helyreállítása</string>
<string name="invalid_directory">Érvénytelen könyvtár</string>
<string name="invalid_source">Érvénytelen fájl vagy tartalom forrás</string>
<string name="invalid_file">A fájl nem létezik vagy jogosultsági hiba lépett fel</string>
<string name="file_name_empty_error">A fájl neve nem lehet üres</string>
<string name="error_occurred_detail">Hiba történt: %1$s</string>
<string name="no_streams_available_download">Nincs letölthető adatforrás</string>
<string name="empty_subscription_feed_subtitle">Itt nincs semmi</string>
<string name="detail_drag_description">Húzza az átrendezéshez</string>
<string name="use_old_player_summary">Régi beépített Mediaframework lejátszó</string>
<string name="short_thousand">e</string>
<string name="short_million">M</string>
<string name="short_billion">Mrd</string>
<string name="no_subscribers">Nincs feliratkozó</string>
<plurals name="subscribers">
<item quantity="one">%s feliratkozó</item>
<item quantity="other">%s feliratkozó</item>
</plurals>
<string name="no_views">Nincs megtekintés</string>
<plurals name="views">
<item quantity="one">%s megtekintés</item>
<item quantity="other">%s megtekintés</item>
</plurals>
<string name="no_videos">Nincs videó</string>
<plurals name="videos">
<item quantity="one">%s videó</item>
<item quantity="other">%s videó</item>
</plurals>
<string name="create">Létrehozás</string>
<string name="delete_one">Egy törlése</string>
<string name="delete_all">Összes törlése</string>
<string name="rename">Átnevezés</string>
<string name="msg_popup_permission">Ez az engedély szükséges a felugró ablakban történő megnyitáshoz</string>
<string name="one_item_deleted">1 elem törölve.</string>
<string name="reCaptchaActivity">reCAPTCHA</string>
<string name="reCaptcha_title">reCAPTCHA rejtvény</string>
<string name="recaptcha_request_toast">reCAPTCHA rejtvény igényelve</string>
<string name="settings_category_downloads_title">Letöltés</string>
<string name="settings_file_charset_title">Fájlnevekben engedélyezett karakterek</string>
<string name="settings_file_replacement_character_summary">Érvénytelen karakterek ezzel az értékkel kerülnek helyettesítésre</string>
<string name="settings_file_replacement_character_title">Csere karakter</string>
<string name="charset_letters_and_digits">Betűk és számok</string>
<string name="charset_most_special_characters">Legtöbb speciális karakter</string>
<string name="toast_no_player">Nincs a fájl lejátszásához szükséges alkalmazás telepítve</string>
<string name="title_activity_about">A NewPipe alkalmazásról</string>
<string name="action_settings">Beállítások</string>
<string name="action_about">Az alkalmazásról</string>
<string name="error_unable_to_load_license">Engedély betöltése sikertelen</string>
<string name="action_open_website">Honlap megnyitása</string>
<string name="tab_about">Az alkalmazásról</string>
<string name="tab_contributors">Közreműködők</string>
<string name="tab_licenses">Engedélyek</string>
<string name="app_description">Ingyenes, egyszerű streamelés Androidon.</string>
<string name="contribution_title">Közreműködés</string>
<string name="contribution_encouragement">Legyen ötleted a fordítással, a megjelenéssel, a forrás kód tisztításával vagy komolyabb átszervezésével kapcsolatban, bármilyen segítséget szívesen fogadunk. Járulj hozzá az alkalmazás fejlesztéséhez!</string>
<string name="view_on_github">Megtekintés GitHubon</string>
<string name="donation_title">Adományozás</string>
<string name="donation_encouragement">A NewPipe alkalmazást önkéntesek fejlesztik szabadidejükben, hogy a lehető legjobb élményt hozzák el neked. Járulj hozzá a fejlesztők kávéjához, hogy tovább dolgozhassanak az alkalmazáson!</string>
<string name="give_back">Hozzájárulás</string>
<string name="website_title">Honlap</string>
<string name="website_encouragement">Látogasd meg a NewPipe honlapját további információkért és hírekért!</string>
<string name="privacy_policy_title">A NewPipe adatvédelmi irányelvei</string>
<string name="privacy_policy_encouragement">A NewPipe projekt komolyan veszi az adataid védelmét. Az alkalmazás nem gyűjt semmilyen adatot a beleegyezésed nélkül.
\nA NewPipe adatvédelmi irányelve részletesen elmagyarázza, mely adatok kerülnek elküldésre és tárolásra az alkalmazás összeomlásának jelentésekor.</string>
<string name="read_privacy_policy">Az adatvédelmi irányelvek elolvasása</string>
<string name="app_license_title">A NewPipe engedélye</string>
<string name="read_full_license">Engedély elolvasása</string>
<string name="title_activity_history">Előzmények</string>
<string name="title_history_search">Keresési előzmények</string>
<string name="title_history_view">Megtekintési előzmények</string>
<string name="history_disabled">Előzmények kikapcsolva</string>
<string name="action_history">Előzmények</string>
<string name="history_empty">Nincsenek előzmények</string>
<string name="history_cleared">Előzmények törölve</string>
<string name="item_deleted">Elem törölve</string>
<string name="delete_item_search_history">Törölni kívánja ezt az elemet a keresési előzmények közül\?</string>
<string name="delete_stream_history_prompt">Törölni kívánja ezt az elemet a megtekintési előzmények közül\?</string>
<string name="delete_all_history_prompt">Biztosan törölni kíván minden elemet az előzmények közül\?</string>
<string name="title_last_played">Utoljára lejátszott</string>
<string name="title_most_played">Legtöbbet lejátszott</string>
<string name="main_page_content">Főoldal tartalma</string>
<string name="blank_page_summary">Üres oldal</string>
<string name="kiosk_page_summary">Újságárus oldal</string>
<string name="subscription_page_summary">Feliratkozási oldal</string>
<string name="feed_page_summary">Feed oldal</string>
<string name="channel_page_summary">Csatorna oldal</string>
<string name="select_a_channel">Csatorna választása</string>
<string name="no_channel_subscribed_yet">Még nincs csatorna feliratkozás</string>
<string name="select_a_kiosk">Újságárus választása</string>
<string name="export_complete_toast">Sikeres export</string>
<string name="import_complete_toast">Sikeres import</string>
<string name="no_valid_zip_file">Nem érvényes ZIP fájl</string>
<string name="could_not_import_all_files">Figyelmeztetés: nem sikerült az összes fájl importálása.</string>
<string name="override_current_data">Ez felül fogja írni a jelenlegi beállításokat.</string>
<string name="import_settings">A beállításokat is importálni kívánja\?</string>
<string name="kiosk">Újságárus</string>
<string name="trending">Felkapott</string>
<string name="top_50">Top 50</string>
<string name="new_and_hot">Új és friss</string>
<string name="title_activity_popup_player">Felugró ablak lejátszó</string>
<string name="play_queue_remove">Eltávolítás</string>
<string name="play_queue_stream_detail">Részletek</string>
<string name="play_queue_audio_settings">Hang beállítások</string>
<string name="drawer_header_action_paceholder_text">Itt hamarosan megjelenik valami :)</string>
<string name="preferred_open_action_settings_summary">Alapértelmezett tevékenység „%s” típusú tartalom megnyitásakor</string>
<string name="video_player">Videólejátszó</string>
<string name="background_player">Lejátszás háttérben</string>
<string name="popup_player">Felugró ablakos lejátszás</string>
<string name="always_ask_open_action">Mindig kérdezz rá</string>
<string name="preferred_player_fetcher_notification_title">Információk gyűjtése…</string>
<string name="preferred_player_fetcher_notification_message">Kért tartalom betöltése</string>
<string name="create_playlist">Új lejátszási lista létrehozása</string>
<string name="delete_playlist">Lejátszási lista törlése</string>
<string name="rename_playlist">Lejátszási lista átnevezése</string>
<string name="playlist_name_input">Név</string>
<string name="append_playlist">Lejátszási listához adás</string>
<string name="set_as_playlist_thumbnail">Beállítás lejátszási lista előképeként</string>
<string name="unbookmark_playlist">Könyvjelző törlése</string>
<string name="delete_playlist_prompt">Kívánja törölni ezt a lejátszási listát\?</string>
<string name="playlist_creation_success">Lejátszási listsa létrehozva</string>
<string name="playlist_add_stream_success">Lejátszási listához hozzáadva</string>
<string name="playlist_thumbnail_change_success">Lejátszási lista előképe megváltozott</string>
<string name="playlist_delete_failure">Nem sikerült a lejátszási lista törlése</string>
<string name="caption_none">Felirat kikapcsolva</string>
<string name="resize_fit">Illeszkedés</string>
<string name="resize_fill">Kitöltés</string>
<string name="resize_zoom">Közelítés</string>
<string name="caption_auto_generated">Automatikusan létrehozott</string>
<string name="caption_setting_title">Feliratok</string>
<string name="caption_setting_description">Feliratok méretének és hátterének stílusbeli módosítása. A módosítások életbelépésehez az alkalmazás újraindítása szükséges.</string>
<string name="enable_leak_canary_title">LeakCanary bekapcsolása</string>
<string name="import_export_title">Import/Export</string>
<string name="import_title">Import</string>
<string name="import_from">Importálás a következőből</string>
<string name="export_to">Exportálás a következőbe</string>
<string name="import_ongoing">Importálás…</string>
<string name="export_ongoing">Exportálás…</string>
<string name="import_file_title">Fájl importálása</string>
<string name="previous_export">Előző exportálás</string>
<string name="subscriptions_import_unsuccessful">Sikertelen a feliratkozások importálása</string>
<string name="subscriptions_export_unsuccessful">Sikertelen a feliratkozások exportálása</string>
<string name="import_youtube_instructions">Importálja YouTube feliratkozásait az export fájl letöltésével:
\n
\n1. Navigáljon erre az oldalra: %1$s
\n2. Jelentkezzen be
\n3. Ekkor az export fájl letöltése megkezdődik</string>
<string name="import_soundcloud_instructions">Importálja SoundCloud profilját az URL vagy az azonosítójának begépelésével:
\n
\n1. Az oldal mobileszközökön nem elérhető, így „asztali böngésző mód” szükséges
\n2. Navigáljon erre az oldalra: %1$s
\n3. Jelentkezzen be
\n4. Másolja ki a profil URL-t, ahova át lett irányítva.</string>
<string name="import_soundcloud_instructions_hint">azonosítód, soundcloud.com/azonosítód</string>
<string name="import_network_expensive_warning">Ez a művelet adatforgalom igényes lehet.
\n
\nFolytatni kívánja\?</string>
<string name="playback_tempo">Ütem</string>
<string name="playback_pitch">Hangmagasság</string>
<string name="skip_silence_checkbox">Előrepörgetés csend alatt</string>
<string name="playback_step">Lépés</string>
<string name="playback_reset">Helyreállítás</string>
<string name="accept">Elfogadás</string>
<string name="decline">Elutasítás</string>
<string name="limit_data_usage_none_description">Nincs korlát</string>
<string name="limit_mobile_data_usage_title">Felbontás korlátozása mobilinternet használata esetén</string>
<string name="minimize_on_exit_summary">Művelet alkalmazás váltásakor a fő videólejátszóról — %s</string>
<string name="minimize_on_exit_none_description">Ne tegyen semmit</string>
<string name="minimize_on_exit_background_description">Lejátszás folytatása a háttérben</string>
<string name="minimize_on_exit_popup_description">Lejátszás folytatása felugró ablakban</string>
</resources>

View File

@ -40,7 +40,7 @@
<string name="next_video_title">Video berikutnya</string>
<string name="show_next_and_similar_title">Tampilkan video \'berikutnya\' dan \'serupa\'</string>
<string name="url_not_supported_toast">URL tidak didukung</string>
<string name="search_language_title">Bahasa konten baku</string>
<string name="content_language_title">Bahasa konten baku</string>
<string name="settings_category_video_audio_title">Video &amp; Audio</string>
<string name="settings_category_appearance_title">Tampilan</string>
<string name="settings_category_other_title">Lainnya</string>

View File

@ -10,7 +10,7 @@
<string name="download">Scarica</string>
<string name="search">Cerca</string>
<string name="settings">Impostazioni</string>
<string name="did_you_mean">Intendevi: %1$s ?</string>
<string name="did_you_mean">Intendevi %1$s?</string>
<string name="share_dialog_title">Condividi con</string>
<string name="choose_browser">Scegli il browser</string>
<string name="screen_rotation">rotazione</string>
@ -28,7 +28,7 @@
<string name="next_video_title">Prossimo video</string>
<string name="show_next_and_similar_title">Mostra \'prossimi\' video e video \'simili\'</string>
<string name="url_not_supported_toast">URL non supportato</string>
<string name="search_language_title">Lingua predefinita per i contenuti</string>
<string name="content_language_title">Lingua predefinita per i contenuti</string>
<string name="settings_category_video_audio_title">Video e Audio</string>
<string name="list_thumbnail_view_description">Miniatura anteprima video</string>
@ -74,7 +74,7 @@
<string name="show_age_restricted_content_title">Mostra contenuti vietati ai minori</string>
<string name="video_is_age_restricted">Questo video è riservato ad un pubblico maggiorenne. Per accedervi, abilita \"Mostra contenuti vietati ai minori\" nelle impostazioni.</string>
<string name="main_bg_subtitle">Tocca cerca per iniziare</string>
<string name="main_bg_subtitle">Tocca Cerca per iniziare</string>
<string name="autoplay_by_calling_app_title">Riproduzione automatica</string>
<string name="autoplay_by_calling_app_summary">Riproduci i video quando NewPipe viene aperto da un\'altra app</string>
<string name="duration_live">in diretta</string>
@ -147,7 +147,7 @@
<string name="open_in_popup_mode">Apri in modalità popup</string>
<string name="popup_mode_share_menu_title">NewPipe modalità popup</string>
<string name="popup_mode_share_menu_title">Modalità popup di NewPipe</string>
<string name="popup_playing_toast">Riproduzione in modalità popup</string>
<string name="disabled">Disattivato</string>

View File

@ -25,14 +25,14 @@
<string name="default_audio_format_title">デフォルトの音楽形式</string>
<string name="download_dialog_title">保存</string>
<string name="next_video_title">次の動画</string>
<string name="show_next_and_similar_title">\"次の動画\"と\"関連動画\"を表示します</string>
<string name="show_next_and_similar_title">「次の動画」と「関連動画」を表示</string>
<string name="url_not_supported_toast">URLは使用できません</string>
<string name="search_language_title">優先言語</string>
<string name="content_language_title">優先言語</string>
<string name="settings_category_video_audio_title">動画と音楽</string>
<string name="view_count_text">%1$s ビュー</string>
<string name="list_thumbnail_view_description">動画 プレビュー サムネイル</string>
<string name="detail_thumbnail_view_description">動画 プレビュー サムネイル</string>
<string name="detail_uploader_thumbnail_view_description">アップローダー サムネイル</string>
<string name="detail_uploader_thumbnail_view_description">投稿者アイコンのサムネイル</string>
<string name="detail_dislikes_img_view_description">低評価</string>
<string name="detail_likes_img_view_description">高評価</string>
<string name="use_external_video_player_title">外部プレイヤーを使用する</string>
@ -43,9 +43,9 @@
<string name="use_tor_title">Torを使用する</string>
<string name="use_tor_summary">(実験的) 強制的に Tor を経由した経路で保存して、匿名性を高めます(動画の同時再生は未だ対応していません)。</string>
<string name="theme_title">外観</string>
<string name="dark_theme_title"></string>
<string name="light_theme_title"></string>
<string name="theme_title">テーマ</string>
<string name="dark_theme_title">ダーク</string>
<string name="light_theme_title">ライト</string>
<string name="settings_category_appearance_title">外観</string>
<string name="settings_category_other_title">その他</string>
@ -59,26 +59,26 @@
<string name="info_dir_created">保存場所 \'%1$s\' を作成しました</string>
<string name="general_error">エラー</string>
<string name="could_not_load_thumbnails">全てのサムネイルを読み込むことができません</string>
<string name="youtube_signature_decryption_error">動画のURL署名を復号できませんでした</string>
<string name="youtube_signature_decryption_error">動画の URL 署名を復号できませんでした</string>
<string name="parsing_error">Webサイトを解析できませんでした</string>
<string name="content_not_available">コンテンツが利用できません</string>
<string name="blocked_by_gema">GEMA によって阻止されました</string>
<string name="blocked_by_gema">GEMA にブロックされました</string>
<string name="could_not_setup_download_menu">保存メニューを設定できませんでした</string>
<string name="live_streams_not_supported">生放送には対応していません</string>
<string name="live_streams_not_supported">生放送にはまだ対応していません</string>
<string name="content">内容</string>
<string name="content">コンテンツ</string>
<string name="show_age_restricted_content_title">年齢制限のあるコンテンツを表示する</string>
<string name="video_is_age_restricted">この動画には年齢制限があります。視聴するには設定から制限を解除して下さい。</string>
<string name="light_parsing_error">Webサイトを完全には解析できませんでした</string>
<string name="light_parsing_error">ウェブサイトを完全には解析できませんでした</string>
<string name="could_not_get_stream">動画を取得できませんでした</string>
<string name="sorry_string">申し訳ありません。発生すべきではありませんでした。</string>
<string name="sorry_string">申し訳ありません。発生すべきでものではありませんでした。</string>
<string name="error_report_button_text">メールで不具合を報告</string>
<string name="error_snackbar_message">複数の不具合が発生しました</string>
<string name="error_snackbar_message">申し訳ありません。いくつかのエラーが発生しました。</string>
<string name="error_snackbar_action">報告</string>
<string name="what_device_headline">情報:</string>
<string name="what_happened_headline">何が起こりましたか:</string>
@ -91,7 +91,7 @@
<string name="retry">再試行</string>
<string name="storage_permission_denied">ストレージへのアクセスが拒否されました</string>
<string name="autoplay_by_calling_app_title">自動再生</string>
<string name="autoplay_by_calling_app_summary">NewPipeが他のアプリから呼び出された際に、自動的に動画を再生します。</string>
<string name="autoplay_by_calling_app_summary">NewPipe が他のアプリから呼び出された時、動画を再生します。</string>
<string name="report_error">不具合を報告</string>
<string name="user_report">利用者報告</string>
@ -100,7 +100,7 @@
<string name="main_bg_subtitle">開始するには検索をタップ</string>
<string name="start">開始</string>
<string name="pause">一時停止</string>
<string name="view">表示</string>
<string name="view">再生</string>
<string name="delete">削除</string>
<string name="checksum">チェックサム</string>
@ -117,7 +117,7 @@
<string name="msg_running_detail">タップして詳細を表示</string>
<string name="msg_wait">お待ちください…</string>
<string name="msg_copied">クリップボードにコピーしました</string>
<string name="no_available_dir">利用可能な保存場所を選択して下さい</string>
<string name="no_available_dir">ダウンロードフォルダを選択して下さい</string>
<string name="downloads">保存</string>
<string name="downloads_title">保存</string>
@ -126,13 +126,13 @@
<string name="could_not_load_image">画像を読み込みできません</string>
<string name="app_ui_crash">アプリ/UI がクラッシュしました</string>
<string name="info_labels">何:\\n提案:\\nコンテンツ言語:\\nサービス:\\nGMT 時間:\\nパッケージ:\\nバージョン:\\nOS バージョン:</string>
<string name="info_labels">何:\\\\n提案:\\\\nコンテンツ言語:\\\\nサービス:\\\\nGMT 時間:\\\\nパッケージ:\\\\nバージョン:\\\\nOSバージョン:</string>
<string name="reCaptchaActivity">reCAPTCHA</string>
<string name="reCaptcha_title">reCAPTCHA の要求</string>
<string name="recaptcha_request_toast">reCAPTCHA を要求しました</string>
<string name="black_theme_title"></string>
<string name="black_theme_title">ブラック</string>
<string name="all">すべて</string>
<string name="channel">チャンネル</string>
@ -161,7 +161,7 @@
<string name="default_popup_resolution_title">デフォルトのポップアップ解像度</string>
<string name="show_higher_resolutions_title">高い解像度で表示</string>
<string name="show_higher_resolutions_summary">一部のデバイスのみ 2K/4K ビデオの再生をサポートしています</string>
<string name="show_higher_resolutions_summary">2K/4K ビデオの再生は一部のデバイスのみサポートしています</string>
<string name="controls_background_title">背景</string>
<string name="controls_popup_title">ポップアップ</string>
@ -175,7 +175,7 @@
<string name="settings_category_popup_title">ポップアップ</string>
<string name="popup_resizing_indicator_title">サイズを変更</string>
<string name="use_external_video_player_summary">このオプションが有効になっているとき、一部の解像度では音声がありません</string>
<string name="use_external_video_player_summary">このオプションが有効になっているとき、一部の解像度では音声がありません</string>
<string name="player_gesture_controls_title">プレーヤーのジェスチャー コントロール</string>
<string name="player_gesture_controls_summary">ジェスチャーを使用してプレーヤーの明るさと音量をコントロールする</string>
<string name="show_search_suggestions_title">検索候補</string>
@ -193,12 +193,12 @@
<string name="tab_about">このアプリについて</string>
<string name="tab_contributors">貢献者</string>
<string name="tab_licenses">ライセンス</string>
<string name="app_description">Android向けの無料で軽量なYouTubeフロントエンド。</string>
<string name="view_on_github">Github で表示</string>
<string name="app_description">Android 向けの自由で軽量なプレイヤー</string>
<string name="view_on_github">GitHub で表示</string>
<string name="app_license_title">NewPipe のライセンス</string>
<string name="contribution_encouragement">翻訳、デザインの変更、コードの整理、動作の重いコードの変更など、アイデアをお持ちではありませんか?ヘルプはいつでも歓迎します。より良いものを一緒に作り上げましょう!</string>
<string name="read_full_license">ライセンスを読む</string>
<string name="contribution_title">貢献</string>
<string name="contribution_title">貢献する</string>
<string name="subscribe_button_title">チャンネル登録</string>
<string name="subscribed_button_title">チャンネル登録しました</string>
<string name="channel_unsubscribed">チャンネル登録を解除しました</string>
@ -212,14 +212,14 @@
<string name="enable_search_history_title">検索履歴</string>
<string name="enable_search_history_summary">検索履歴をローカルに保存します</string>
<string name="enable_watch_history_title">再生履歴</string>
<string name="enable_watch_history_title">再生履歴とキャッシュ</string>
<string name="enable_watch_history_summary">再生した動画を記録します</string>
<string name="resume_on_audio_focus_gain_title">フォーカスで再開</string>
<string name="resume_on_audio_focus_gain_summary">電話などによる中断の後、再生を再開します</string>
<string name="settings_category_player_title">プレーヤー</string>
<string name="show_hold_to_append_summary">動画の詳細ページで背景、またはポップアップボタンが押されたときにヒントを表示する</string>
<string name="settings_category_player_behavior_title">動作</string>
<string name="settings_category_history_title">履歴</string>
<string name="settings_category_history_title">履歴とキャッシュ</string>
<string name="playlist">再生リスト</string>
<string name="undo">元に戻す</string>
<string name="play_all">すべて再生</string>
@ -227,7 +227,7 @@
<string name="notification_channel_name">NewPipeの通知</string>
<string name="unknown_content">[不明]</string>
<string name="player_stream_failure">動画の再生に失敗しました</string>
<string name="player_stream_failure">動画の再生ができませんでした</string>
<string name="player_unrecoverable_failure">回復不能な再生エラーが発生しました</string>
<string name="search_no_results">何も見つかりませんでした</string>
<string name="no_subscribers">チャンネル登録なし</string>
@ -241,9 +241,9 @@
<string name="charset_most_special_characters">ほとんどの特殊文字</string>
<string name="donation_title">寄付</string>
<string name="donation_encouragement">NewPipeはあなたに最高の経験をもたらすため、自由時間を費やしたボランティアによって開発されています。カップのコーヒー(Java)を楽しんでいる間に、開発者がNewPipeをより良いものにすることが出来るよう、今度はお返しをする時間です</string>
<string name="donation_encouragement">NewPipe は、あなたに最高の体験を味わってもらうために、ボランティアが自分たちの時間を使って開発しています。開発者たちがコーヒーを飲みながら NewPipe を継続的に改良できるよう、あなたのご支援をお願いします。</string>
<string name="website_title">Webサイト</string>
<string name="website_encouragement">NewPipeに関する詳しい情報や最新のニュースについては、我々のWebサイトをご覧ください。</string>
<string name="website_encouragement">NewPipe の詳しい情報や最新情報については、ウェブサイトをご覧ください。</string>
<string name="title_activity_history">履歴</string>
<string name="title_history_search">検索履歴</string>
<string name="title_history_view">再生履歴</string>
@ -285,13 +285,13 @@
<string name="import_data_title">データベースのインポート</string>
<string name="export_data_title">データベースのエクスポート</string>
<string name="import_data_summary">既存の履歴と購読リストは上書きされます</string>
<string name="export_data_summary">履歴や購読リスト、プレイリストをエクスポートします</string>
<string name="export_data_summary">履歴や購読リスト、プレイリストをエクスポートします</string>
<string name="player_recoverable_failure">再生エラーからの回復中</string>
<string name="external_player_unsupported_link_type">外部プレーヤーは、これらのタイプのリンクをサポートしていません</string>
<string name="invalid_url_toast">無効なURL</string>
<string name="export_complete_toast">エクスポートが完了しました</string>
<string name="import_complete_toast">インポートが完了しました</string>
<string name="no_valid_zip_file">有効なZipファイルがありません</string>
<string name="no_valid_zip_file">有効な ZIP ファイルではありません</string>
<string name="could_not_import_all_files">警告: すべてのファイルをインポートできませんでした。</string>
<string name="override_current_data">これにより、現在の設定が上書きされます。</string>
@ -307,7 +307,7 @@
<string name="always_ask_player">常に尋ねる</string>
<string name="preferred_player_fetcher_notification_title">情報を取得しています…</string>
<string name="preferred_player_fetcher_notification_message">要求したコンテンツを読み込んでいます</string>
<string name="preferred_player_fetcher_notification_message">コンテンツを読み込んでいます</string>
<string name="controls_download_desc">動画ファイルをダウンロード</string>
<string name="show_info">情報を表示</string>
@ -353,10 +353,10 @@
<string name="unbookmark_playlist">ブックマークを削除</string>
<string name="delete_playlist_prompt">このプレイリストを削除しますか?</string>
<string name="playlist_creation_success">プレイリストが正常に作成されました</string>
<string name="playlist_creation_success">プレイリストが作成されました</string>
<string name="playlist_add_stream_success">プレイリストに追加しました</string>
<string name="playlist_thumbnail_change_success">プレイリストのサムネイルを変更しました</string>
<string name="playlist_delete_failure">プレイリストの削除に失敗しました</string>
<string name="playlist_delete_failure">プレイリストが削除できませんでした</string>
<string name="caption_none">字幕なし</string>
@ -372,8 +372,8 @@
<string name="import_file_title">ファイルからインポート</string>
<string name="previous_export">前回のエクスポート</string>
<string name="subscriptions_import_unsuccessful">購読リストのインポートに失敗しました</string>
<string name="subscriptions_export_unsuccessful">購読リストのエクスポートに失敗しました</string>
<string name="subscriptions_import_unsuccessful">購読リストがインポートできませんでした</string>
<string name="subscriptions_export_unsuccessful">購読リストがエクスポートできませんでした</string>
<string name="playback_tempo">テンポ</string>
<string name="playback_pitch">音程</string>
@ -381,14 +381,92 @@
<string name="background_player_append">バックグラウンド再生リストに追加されました</string>
<string name="popup_playing_append">ポップアップ再生リストに追加されました</string>
<string name="clear_views_history_title">再生履歴を消去</string>
<string name="clear_views_history_summary">再生した動画の履歴を削除します</string>
<string name="clear_views_history_summary">再生した動画の履歴を削除します</string>
<string name="view_history_deleted">再生履歴を削除しました。</string>
<string name="clear_search_history_title">検索履歴を消去</string>
<string name="clear_search_history_summary">検索キーワードの履歴を削除します</string>
<string name="clear_search_history_summary">検索キーワードの履歴を削除します</string>
<string name="search_history_deleted">検索履歴を削除しました。</string>
<string name="toast_no_player">このファイルを再生するためのアプリがインストールされていません</string>
<string name="import_settings">設定をインポートしますか?</string>
<string name="caption_setting_title">字幕</string>
</resources>
<string name="channels">チャンネル</string>
<string name="playlists">プレイリスト</string>
<string name="users">ユーザー</string>
<string name="privacy_policy_title">NewPipe プライバシーポリシー</string>
<string name="read_privacy_policy">プライバシーポリシーを確認</string>
<string name="use_inexact_seek_title">おおまかなシーク</string>
<string name="use_inexact_seek_summary">おおまかなシークを使用すると、正確さ下がりますが、高速なシークが可能になります</string>
<string name="download_thumbnail_summary">すべてのサムネイルの読み込みと保存を無効化します。このオプションを切り替えるとメモリおよびディスク上の画像キャッシュがクリアされます</string>
<string name="auto_queue_summary">繰り返しでないキューの最後の動画を再生時、関連動画を自動的にキューに追加する</string>
<string name="delete_view_history_alert">すべての再生履歴を削除します</string>
<string name="delete_search_history_alert">すべての検索履歴を削除します</string>
<string name="invalid_source">ファイル/コンテンツのソースが無効です</string>
<plurals name="subscribers">
<item quantity="other">登録者数 %s 人</item>
</plurals>
<string name="no_views">視聴なし</string>
<plurals name="views">
<item quantity="other">視聴回数 %s 回</item>
</plurals>
<plurals name="videos">
<item quantity="other">%s 本の動画</item>
</plurals>
<string name="one_item_deleted">1 つのアイテムが削除されました</string>
<string name="give_back">支援する</string>
<string name="privacy_policy_encouragement">NewPipe プロジェクトはあなたのプライバシーを非常に大切にしています。あなたの同意がない限り、アプリはいかなるデータも収集しません。NewPipe のプライバシー・ポリシーでは、クラッシュリポート送信時にどのような種類のデータが送信・記録されるかを詳細に説明しています。</string>
<string name="app_license">NewPipe は著作権が自由のソフトウェアです。自由であるとは、あなたは自分の自由意志で、ソフトウェアを自由に使ったり、自由に研究したり、自由に改良することができるということです。あなたは、GNU フリーソフトウェア財団が公開する GNU General Public ライセンス バージョン3以降の下に、自由に再配布・修正を行うことができます。</string>
<string name="title_last_played">最終再生日時</string>
<string name="title_most_played">最も再生した動画</string>
<string name="resize_zoom">ズーム</string>
<string name="controls_add_to_playlist_title">追加...</string>
<string name="show_hold_to_append_title">「長押しして追加」のヒントを表示</string>
<string name="tracks">トラック</string>
<string name="notification_channel_description">NewPipe バックグラウンドおよびポップアップのプレーヤーの通知</string>
<string name="new_and_hot">新しい &amp; ホット</string>
<string name="hold_to_append">長押ししてキューに入れる</string>
<string name="enqueue_on_background">バックグラウンド時にキューに入れる</string>
<string name="enqueue_on_popup">ポップアップ時にキューに入れる</string>
<string name="start_here_on_popup">ポップアップ時にここから開始</string>
<string name="drawer_header_action_paceholder_text">すぐにここに表示されます;D</string>
<string name="preferred_open_action_settings_title">お好みの \'開く\' アクション</string>
<string name="preferred_open_action_settings_summary">コンテンツを開くときのデフォルト動作 — %s</string>
<string name="resize_fit">フィット</string>
<string name="resize_fill">埋める</string>
<string name="caption_auto_generated">自動生成</string>
<string name="caption_setting_description">プレーヤーのキャプション文字スケールと背景スタイルを変更します。有効にするにはアプリの再起動が必要です</string>
<string name="empty_subscription_feed_subtitle">何もありません</string>
<string name="import_youtube_instructions">保存したエクスポートファイルからYoutubeの購読をインポート:
\n
\n1. このURLを開きます: %1$s
\n2. ログインしていなければログインします
\n3. ダウンロードが始まります (これがエクスポートファイルです)</string>
<string name="playback_reset">リセット</string>
<string name="accept">同意する</string>
<string name="decline">拒否</string>
<string name="limit_data_usage_none_description">制限なし</string>
<string name="limit_mobile_data_usage_title">モバイルデータ使用時の解像度の制限</string>
<string name="minimize_on_exit_title">アプリ切り替え時の最小化</string>
<string name="minimize_on_exit_summary">プレーヤーから他アプリに切り替え時の動作 — %s</string>
<string name="minimize_on_exit_none_description">何もしない</string>
<string name="minimize_on_exit_background_description">バックグラウンドに変更</string>
<string name="minimize_on_exit_popup_description">ポップアップに変更</string>
</resources>

View File

@ -28,7 +28,7 @@
<string name="next_video_title">다음 비디오</string>
<string name="show_next_and_similar_title">다음 및 유사한 비디오 표시</string>
<string name="url_not_supported_toast">지원하지 않는 URL 입니다</string>
<string name="search_language_title">기본 컨텐츠 언어</string>
<string name="content_language_title">기본 컨텐츠 언어</string>
<string name="settings_category_video_audio_title">비디오 &amp; 오디오</string>
<string name="list_thumbnail_view_description">비디오 미리보기 썸네일</string>
@ -60,7 +60,7 @@
<string name="info_dir_created">다운로드 디렉토리를 만들었습니다 \'%1$s\'</string>
<string name="main_bg_subtitle">검색 버튼을 눌러서 시작하세요</string>
<string name="autoplay_by_calling_app_title">자동으로 재생</string>
<string name="autoplay_by_calling_app_summary">NewPipe가 다른 앱으로부터 호출되었을 경우 비디오를 자동으로 재생합니다</string>
<string name="autoplay_by_calling_app_summary">NewPipe가 다른 앱으로부터 호출되었을 때 동영상을 재생합니다</string>
<string name="content">컨텐츠</string>
<string name="show_age_restricted_content_title">나이 제한이 있는 컨텐츠를 표시</string>
<string name="video_is_age_restricted">연령 제한 비디오입니다. 설정 메뉴에서 시청 허용 여부를 변경하실 수 있습니다.</string>
@ -130,7 +130,7 @@
<string name="show_search_suggestions_summary">검색 중에 제안을 표시합니다</string>
<string name="enable_search_history_title">검색 기록</string>
<string name="enable_search_history_summary">검색 기록을 기기에 저장합니다</string>
<string name="enable_watch_history_title">기록</string>
<string name="enable_watch_history_title">기록 및 캐시 관리</string>
<string name="enable_watch_history_summary">시청했던 비디오 기록을 저장</string>
<string name="resume_on_audio_focus_gain_title">초점 복원시 재생 재개</string>
<string name="resume_on_audio_focus_gain_summary">전화 통화 등으로 인해 재생이 중단된 이후에 다시 재생을 시작합니다</string>
@ -165,7 +165,7 @@
<string name="could_not_load_image">이미지를 불러올 수 없습니다</string>
<string name="app_ui_crash">앱/UI 충돌</string>
<string name="player_stream_failure">이 스트림을 재생할 수 없습니다</string>
<string name="player_stream_failure">이 스트림을 재생할 수 없습니다.</string>
<string name="player_unrecoverable_failure">복구할 수 없는 플레이어 오류가 발생했습니다</string>
<string name="player_recoverable_failure">플레이어 오류로부터 복구 중</string>
@ -234,7 +234,7 @@
<string name="tab_about">뉴파이프</string>
<string name="tab_contributors">기여자</string>
<string name="tab_licenses">라이센스</string>
<string name="app_description">안드로이드를 위한 개방/자유/무료 유튜브 프론트엔드 입니다.</string>
<string name="app_description">가볍고 빠른 자유 안드로이드 스트리밍 앱입니다.</string>
<string name="contribution_title">기여</string>
<string name="contribution_encouragement">번역, 디자인, 코딩 등 다양한 기여를 언제나 환영합니다. 향상에 참여해주세요!</string>
<string name="view_on_github">GitHub에서 보기</string>
@ -293,7 +293,7 @@
<string name="use_inexact_seek_title">정확하지는 않지만 빠른 탐색</string>
<string name="use_inexact_seek_summary">정확하지 않은 탐색은 빠르게 위치로 탐색할 수 있지만 정확도는 떨어집니다</string>
<string name="auto_queue_title">다음 스트림을 자동으로 재생열에 추가하기</string>
<string name="auto_queue_summary">전 스트림이 무한 반복 재생 큐가 아닐 때 관련된 스트림 자동 재생하기.</string>
<string name="auto_queue_summary">전 스트림이 무한 반복 재생 큐가 아닐 경우, 관련 스트림을 자동 재생합니다.</string>
<string name="default_content_country_title">기본 콘텐츠 국가</string>
<string name="service_title">서비스</string>
<string name="settings_category_debug_title">디버그</string>
@ -309,7 +309,7 @@
<string name="import_data_title">데이터베이스 가져오기</string>
<string name="export_data_title">데이터베이스 내보내기</string>
<string name="import_data_summary">현재 시청 기록 및 구독 목록을 덮어쓰기 됩니다</string>
<string name="export_data_summary">시청 기록, 구독 목록, 재생목록 내보내기.</string>
<string name="export_data_summary">시청 기록, 구독 목록과 재생목록을 내보냅니다.</string>
<string name="external_player_unsupported_link_type">외부 플레이어는 이러한 종류의 링크를 지원하지 않습니다</string>
<string name="invalid_url_toast">잘못된 URL</string>
<string name="video_streams_empty">발견된 비디오 스트림 없음</string>
@ -359,7 +359,7 @@
<string name="unbookmark_playlist">북마크 제거하기</string>
<string name="delete_playlist_prompt">이 재생목록을 삭제하시겠습니까?</string>
<string name="playlist_creation_success">재생목록 생성 성공</string>
<string name="playlist_creation_success">재생목록 생성 완료</string>
<string name="playlist_add_stream_success">재생목록에 추가됨</string>
<string name="playlist_thumbnail_change_success">재생목록 썸내일이 바뀜</string>
<string name="playlist_delete_failure">재생목록 삭제 실패</string>
@ -379,9 +379,9 @@
<string name="live_sync">동기화</string>
<string name="enable_leak_canary_title">LeakCanary 할성화</string>
<string name="enable_leak_canary_summary">메모리 누수 모니터링은 힙 덤핑시 앱이 불안정할 수 있습니다</string>
<string name="enable_leak_canary_summary">힙 덤프 중 메모리 누수 점검으로 앱이 불안정해질 수 있습니다</string>
<string name="enable_disposed_exceptions_title">Out-of-Lifecycle 에러 보고</string>
<string name="enable_disposed_exceptions_title">Out-of-Lifecycle 오류 보고</string>
<string name="enable_disposed_exceptions_summary">프래그먼트 또는 버려진 액티비티 주기 밖에서 일어나는 전달할 수 없는 Rx 예외를 강제적으로 보고하기</string>
<string name="file">파일</string>
@ -410,21 +410,21 @@
\n1. 이곳으로 가세요: $1$s
\n2. 로그인이 필요하면 하세요
\n3. 다운로드가 곧 시작 됩니다 (이 파일이 내보내기 파일 입니다)</string>
<string name="import_soundcloud_instructions">SoundCloud 팔로잉 목록을 가져오려면 당신의 프로필 URL 및 ID를 알아야 합니다. 알고 있다면 아래에 있는 빈칸에 입력해 주세요.
<string name="import_soundcloud_instructions">SoundCloud 프로필을 가져오시려면 URL 및 ID를 입력해주세요.
\n
\n프로필 URL을 찾으시려면 다음 과정을 따라해 주세요.
\n
\n만약 모르신다면, 다음을 참고하세요:
\n
\n1. 모바일 환경이시면 브라우저 설정에서 데스크탑 모드를 활성화해주세요. Chrome 모바일에서는 오른쪽 … 클릭시 아래쪽에 있습니다.
\n2. 이 주소로 가세요: %1$s
\n3. 로그인이 필요하면 하세요.
\n3. 로그인이 필요하면 하세요.
\n4. 리디렉트된 곳의 URL을 복사하세요. (이 URL이 당신의 프로필 URL 입니다)</string>
<string name="import_soundcloud_instructions_hint">프로필ID, soundcloud.com/프로필ID</string>
<string name="import_network_expensive_warning">경고: 데이터 소모량이 늘어날 수 있습니다.
\n
\n진행하시겠습니까?</string>
<string name="import_network_expensive_warning">경고: 데이터 소모량이 늘어날 수 있습니다.
\n
\n계속하시겠습니까?</string>
<string name="download_thumbnail_title">썸내일 로드하기</string>
<string name="download_thumbnail_summary">모든 썸내일의 로드와 데이터에 저장하기를 멈춥니다. 이것은 메모리와 이미지 캐시를 지울 것입니다.</string>
<string name="download_thumbnail_summary">동영상 썸네일을 로드하지 않으며, 데이터와 메모리 사용을 최대한 줄입니다. 이 옵션을
\n선택 시, 모든 메모리 캐시와 저장소 캐시를 삭제합니다.</string>
<string name="thumbnail_cache_wipe_complete_notice">이미지 캐시 지워짐</string>
<string name="metadata_cache_wipe_title">캐시된 메타데이터 지우기</string>
<string name="metadata_cache_wipe_summary">캐시된 모든 웹페이지 데이터 지우기</string>
@ -432,12 +432,12 @@
<string name="playback_speed_control">재생 속도 조절</string>
<string name="playback_tempo">템포</string>
<string name="playback_pitch">피치</string>
<string name="unhook_checkbox">후크 취소 (소리가 깨질수 있음)</string>
<string name="unhook_checkbox">영상과 소리 분리 (소리가 깨질 수 있음)</string>
<string name="playback_nightcore">나이트코어</string>
<string name="playback_default">기본</string>
<string name="no_streams_available_download">다운로드 가능한 스트림이 없습니다</string>
<string name="toast_no_player">이 파일을 위한 플레이어가 발견되지 않았습니다</string>
<string name="toast_no_player">이 파일을 재생할 수 있는 플레이어 앱이 없습니다.</string>
<string name="preferred_open_action_settings_title">선호하는 열기 동작</string>
<string name="preferred_open_action_settings_summary">컨텐츠를 열 때 사용할 기본 동작 — %s</string>
@ -445,4 +445,29 @@
<string name="caption_setting_title">자막</string>
<string name="caption_setting_description">플레이어 자막 텍스트 크기와 배경 스타일을 변경합니다. 효과를 적용하려면 앱을 재시작 해야합니다.</string>
<string name="channels">채널만</string>
<string name="playlists">재생 목록만</string>
<string name="clear_views_history_title">시청 기록 삭제하기</string>
<string name="clear_views_history_summary">동영상 시청 기록을 삭제합니다.</string>
<string name="delete_view_history_alert">\'삭제\' 버튼을 누르면 모든 시청 기록이 삭제됩니다.</string>
<string name="view_history_deleted">동영상 시청 기록이 삭제되었습니다.</string>
<string name="clear_search_history_title">검색 기록 삭제</string>
<string name="clear_search_history_summary">검색 기록을 모두 삭제합니다.</string>
<string name="delete_search_history_alert">\'삭제\' 버튼을 누르면 모든 검색 기록이 삭제됩니다.</string>
<string name="search_history_deleted">검색 기록이 삭제되었습니다.</string>
<string name="privacy_policy_title">뉴파이프 개인정보 보호 정책</string>
<string name="privacy_policy_encouragement">뉴파이프 프로젝트는 사용자의 개인 정보 보호를 최우선으로 생각하며, 동의 없이 어떠한 정보도 수집하지 않습니다.
\n뉴파이프 개인정보 보호 정책에서는 오류 보고 시 어떠한 정보가 수집되고 저장되는지 자세히 명시되어 있습니다.</string>
<string name="read_privacy_policy">개인정보 보호 정책 읽기</string>
<string name="app_license">뉴파이프는 카피레프트 자유 소프트웨어입니다. 사용자는 이 앱을 사용, 공유, 또는 수정하는 것이 가능하고, 수정 후 재배포 시 자유 소프트웨어 재단의 GNU 라이센스 버전
\n3 또는 그 이상의 버전을 포함해야 합니다.</string>
<string name="import_settings">앱 설정을 가져오시겠습니까?</string>
<string name="skip_silence_checkbox">무음 구간 스킵</string>
<string name="start_accept_privacy_policy">유럽 연합 일반 데이터 보호 규정 (GDPR) 에 따라, 사용자는 뉴파이프 개인정보 보호 정책을 읽고 꼼꼼히 확인해야 합니다. 버그 리포트를 보내시려면 개인정보 보호 정책에 동의해주세요.</string>
<string name="accept">동의</string>
<string name="decline">동의하지 않음</string>
<string name="limit_data_usage_none_description">데이터 제한 없음</string>
<string name="limit_mobile_data_usage_title">모바일 데이터 사용 시 화질 제한</string>
</resources>

View File

@ -57,7 +57,7 @@
<string name="next_video_title">Kitas vaizdo įrašas</string>
<string name="show_next_and_similar_title">Rodyti kitus panašius vaizdo įrašus</string>
<string name="url_not_supported_toast">URL nepalaikoma</string>
<string name="search_language_title">Numatytoji tūrinio kalba</string>
<string name="content_language_title">Numatytoji tūrinio kalba</string>
<string name="settings_category_video_audio_title">Vaizdas ir garsas</string>
<string name="settings_category_popup_title">Iššokantis langas</string>
<string name="settings_category_appearance_title">Išvaizda</string>

View File

@ -93,7 +93,7 @@
<string name="url_not_supported_toast">Неподдржана URL врска</string>
<string name="default_content_country_title">Земја на прикажани видеа</string>
<string name="service_title">Услуга</string>
<string name="search_language_title">Претпочитан јазик на видеата</string>
<string name="content_language_title">Претпочитан јазик на видеата</string>
<string name="settings_category_player_title">Плеер</string>
<string name="settings_category_player_behavior_title">Однесување</string>
<string name="settings_category_video_audio_title">Видео и Звук</string>

View File

@ -40,7 +40,7 @@
<string name="next_video_title">Neste video</string>
<string name="show_next_and_similar_title">Vis \"neste\" og \"lignende\" videoer</string>
<string name="url_not_supported_toast">Nettadressen støttes ikke</string>
<string name="search_language_title">Foretrukket innholdsspråk</string>
<string name="content_language_title">Foretrukket innholdsspråk</string>
<string name="settings_category_video_audio_title">Video og lyd</string>
<string name="settings_category_appearance_title">Utseende</string>
<string name="settings_category_other_title">Annet</string>
@ -377,7 +377,7 @@
<string name="smaller_caption_font_size">Mindre skrift</string>
<string name="normal_caption_font_size">Normal skrift</string>
<string name="larger_caption_font_size">Større skrift</string>
<string name="use_inexact_seek_title">Bruk raskt unøyaktig søk</string>
<string name="use_inexact_seek_title">Bruk raskt unøyaktig blafring</string>
<string name="settings_category_debug_title">Feilretting</string>
<string name="file">Fil</string>
@ -434,7 +434,7 @@
<string name="search_history_deleted">Søkehistorikk slettet.</string>
<string name="one_item_deleted">Ett element slettet.</string>
<string name="toast_no_player">Inget program installert for avspilling av denne filen.</string>
<string name="toast_no_player">Inget program installert for avspilling av denne filen</string>
<string name="caption_setting_title">Undertekster</string>
<string name="caption_setting_description">Endre undertekststørrelse og bakgrunnsstiler. Krever omstart av programmet for å tre i effekt</string>

View File

@ -93,7 +93,7 @@
<string name="url_not_supported_toast">URL wordt niet ondersteund</string>
<string name="default_content_country_title">Standaardinhoudsland</string>
<string name="service_title">Dienst</string>
<string name="search_language_title">Standaardtaal voor inhoud</string>
<string name="content_language_title">Standaardtaal voor inhoud</string>
<string name="settings_category_player_title">Speler</string>
<string name="settings_category_player_behavior_title">Gedrag</string>
<string name="settings_category_video_audio_title">Video &amp; audio</string>

View File

@ -5,38 +5,38 @@
<string name="no_player_found">Geen speler met streamondersteuning gevonden. Wil je VLC installeren?</string>
<string name="install">Installeren</string>
<string name="cancel">Annuleren</string>
<string name="open_in_browser">In browser openen</string>
<string name="open_in_browser">Openen in browser</string>
<string name="share">Delen</string>
<string name="download">Downloaden</string>
<string name="search">Zoeken</string>
<string name="settings">Instellingen</string>
<string name="did_you_mean">Bedoelde je: %1$s ?</string>
<string name="did_you_mean">Bedoelde je: %1$s\?</string>
<string name="share_dialog_title">Delen met</string>
<string name="choose_browser">Kies een browser</string>
<string name="screen_rotation">rotatie</string>
<string name="screen_rotation">draaiing</string>
<string name="download_path_title">Downloadlocatie voor video\'s</string>
<string name="download_path_summary">Locatie om gedownloade video\'s in op te slaan</string>
<string name="download_path_dialog_title">Voer downloadlocatie in voor video\'s</string>
<string name="default_resolution_title">Standaardresolutie</string>
<string name="play_with_kodi_title">Afspelen met Kodi</string>
<string name="kore_not_found">Kore-app niet gevonden. Installeren?</string>
<string name="show_play_with_kodi_title">Toon \"Afspelen met Kodi\"-optie</string>
<string name="show_play_with_kodi_summary">Toont een optie om een video op een Kodi media center af te spelen</string>
<string name="show_play_with_kodi_title">\"Afspelen met Kodi\"-optie tonen</string>
<string name="show_play_with_kodi_summary">Toont een optie om een video af te spelen op een Kodi-mediastation</string>
<string name="play_audio">Audio</string>
<string name="default_audio_format_title">Standaardaudioformaat</string>
<string name="download_dialog_title">Downloaden</string>
<string name="next_video_title">Volgende video</string>
<string name="url_not_supported_toast">URL wordt niet ondersteund</string>
<string name="show_next_and_similar_title">volgende en vergelijkbare videos weergeven</string>
<string name="search_language_title">Standaardtaal voor inhoud</string>
<string name="content_language_title">Standaardtaal voor inhoud</string>
<string name="use_external_video_player_title">Externe videospeler gebruiken</string>
<string name="use_external_audio_player_title">Externe audiospeler gebruiken</string>
<string name="settings_category_video_audio_title">Video &amp; audio</string>
<string name="settings_category_video_audio_title">Audio en video</string>
<string name="list_thumbnail_view_description">Videovoorbeeldminiatuur</string>
<string name="detail_thumbnail_view_description">Videovoorbeeldminiatuur</string>
<string name="detail_uploader_thumbnail_view_description">Avatarminiatuur van uploader</string>
<string name="detail_dislikes_img_view_description">Duimpjes omlaag</string>
<string name="detail_uploader_thumbnail_view_description">Gebruikersafbeelding van uploader</string>
<string name="detail_dislikes_img_view_description">Vind-ik-niet-leuks</string>
<string name="download_path_audio_title">Downloadlocatie voor audio</string>
<string name="download_path_audio_summary">Locatie om gedownloade muziek in op te slaan</string>
<string name="download_path_audio_dialog_title">Voer downloadlocatie voor audiobestanden in</string>
@ -46,38 +46,38 @@
<string name="light_theme_title">Licht</string>
<string name="settings_category_appearance_title">Uiterlijk</string>
<string name="settings_category_other_title">Overige</string>
<string name="background_player_playing_toast">Speelt af in achtergrond</string>
<string name="settings_category_other_title">Overig</string>
<string name="background_player_playing_toast">Speelt af op achtergrond</string>
<string name="play_btn_text">Afspelen</string>
<string name="content">Inhoud</string>
<string name="show_age_restricted_content_title">Toon inhoud met leeftijdsbeperking</string>
<string name="video_is_age_restricted">Video heeft leeftijdsbeperking. Leeftijdsbeperkte video\'s kunnen ingeschakeld worden in de instellingen.</string>
<string name="show_age_restricted_content_title">Inhoud met leeftijdsbeperking tonen</string>
<string name="video_is_age_restricted">De video heeft een leeftijdsbeperking. Toestaan van dit soort video\'s kan worden ingeschakeld in de instellingen.</string>
<string name="general_error">Fout</string>
<string name="network_error">Netwerkfout</string>
<string name="could_not_load_thumbnails">Kon niet alle miniaturen laden</string>
<string name="youtube_signature_decryption_error">Kon video-URL-ondertekening niet ontsleutelen</string>
<string name="parsing_error">Kon website niet verwerken</string>
<string name="could_not_load_thumbnails">Kan niet alle miniatuurvoorbeelden laden</string>
<string name="youtube_signature_decryption_error">Kan video-URL-ondertekening niet ontsleutelen</string>
<string name="parsing_error">Kan website niet verwerken</string>
<string name="content_not_available">Inhoud niet beschikbaar</string>
<string name="blocked_by_gema">Geblokkeerd door GEMA</string>
<string name="could_not_setup_download_menu">Kon downloadmenu niet instellen</string>
<string name="live_streams_not_supported">Dit is een LIVESTREAM, deze worden nog niet ondersteund.</string>
<string name="could_not_setup_download_menu">Kan downloadmenu niet instellen</string>
<string name="live_streams_not_supported">Dit is een LIVESTREAM; deze worden nog niet ondersteund.</string>
<string name="detail_likes_img_view_description">Duimpjes omhoog</string>
<string name="use_tor_title">Gebruik Tor</string>
<string name="detail_likes_img_view_description">Vind-ik-leuks</string>
<string name="use_tor_title">Tor gebruiken</string>
<string name="use_tor_summary">(Experimenteel) Dwing downloadverkeer door Tor voor verhoogde privacy (streamen van video\'s wordt nog niet ondersteund).</string>
<string name="err_dir_create">Kan downloadmap \'%1$s\' niet aanmaken</string>
<string name="info_dir_created">Downloadmap \'%1$s\' aangemaakt</string>
<string name="light_parsing_error">Kon de website niet volledig inlezen</string>
<string name="could_not_get_stream">Kon geen streams vinden</string>
<string name="sorry_string">Sorry, dit zou niet mogen gebeuren.</string>
<string name="err_dir_create">Kan downloadmap \'%1$s\' niet creëren</string>
<string name="info_dir_created">Downloadmap \'%1$s\' gecreëerd</string>
<string name="light_parsing_error">Kan website niet volledig verwerken</string>
<string name="could_not_get_stream">Kan geen streams vinden</string>
<string name="sorry_string">Sorry, dit had niet mogen gebeuren.</string>
<string name="error_report_button_text">Fout melden via e-mail</string>
<string name="error_snackbar_message">Sorry, er traden enkele fouten op.</string>
<string name="error_snackbar_action">MELDEN</string>
<string name="what_device_headline">Info:</string>
<string name="what_happened_headline">Wat is er gebeurd:</string>
<string name="what_device_headline">Informatie:</string>
<string name="what_happened_headline">Wat er is gebeurd:</string>
<string name="your_comment">Je opmerking (in het Engels):</string>
<string name="error_details_headline">Details:</string>
@ -85,7 +85,7 @@
<string name="video">Video</string>
<string name="audio">Geluid</string>
<string name="retry">Opnieuw proberen</string>
<string name="main_bg_subtitle">Tik op zoeken om te beginnen</string>
<string name="main_bg_subtitle">Druk op zoeken om te beginnen</string>
<string name="autoplay_by_calling_app_title">Automatisch afspelen</string>
<string name="autoplay_by_calling_app_summary">Speelt videos af als NewPipe vanuit een andere app wordt geopend</string>
<string name="duration_live">live</string>
@ -93,7 +93,7 @@
<string name="downloads_title">Downloads</string>
<string name="error_report_title">Foutrapport</string>
<string name="could_not_load_image">Kon afbeelding niet laden</string>
<string name="could_not_load_image">Kan afbeelding niet laden</string>
<string name="app_ui_crash">App/UI gecrasht</string>
<string name="info_labels">Wat:\\nVerzoek:\\nTaal van inhoud:\\nDienst:\\nTijd in GMT:\\nPakket:\\nVersie:\\nVersie van besturingssysteem:</string>
<string name="report_error">Meld een probleem</string>
@ -115,9 +115,9 @@
<string name="msg_error">Fout</string>
<string name="msg_server_unsupported">Server wordt niet ondersteund</string>
<string name="msg_exists">Bestand bestaat al</string>
<string name="msg_url_malform">Verkeerde URL of internet niet beschikbaar</string>
<string name="msg_url_malform">Onjuiste URL of geen internetverbinding</string>
<string name="msg_running">NewPipe is aan het downloaden</string>
<string name="msg_running_detail">Tik voor meer informatie</string>
<string name="msg_running_detail">Druk voor meer informatie</string>
<string name="msg_wait">Even geduld…</string>
<string name="msg_copied">Gekopieerd naar klembord</string>
<string name="no_available_dir">Kies een beschikbare downloadmap</string>
@ -140,21 +140,21 @@
<string name="short_million">M</string>
<string name="short_billion">B</string>
<string name="msg_popup_permission">Deze toestemming is vereist om
te openen in pop-upmodus</string>
<string name="msg_popup_permission">Deze machtiging is vereist om te
\nopenen in pop-upmodus</string>
<string name="popup_mode_share_menu_title">NewPipe-pop-upmodus</string>
<string name="popup_playing_toast">Speelt af in pop-upmodus</string>
<string name="use_old_player_title">Gebruik oude speler</string>
<string name="use_old_player_title">Oude speler gebruiken</string>
<string name="use_old_player_summary">Verouderde ingebouwde Mediaframework-speler</string>
<string name="default_video_format_title">Standaardvideoformaat</string>
<string name="default_video_format_title">Standaard videoformaat</string>
<string name="disabled">Uitgeschakeld</string>
<string name="default_popup_resolution_title">Standaardresolutie voor pop-up</string>
<string name="show_higher_resolutions_title">Hogere resoluties weergeven</string>
<string name="show_higher_resolutions_summary">Video\'s afspelen in 2K/4K wordt maar op sommige apparaten ondersteund</string>
<string name="default_popup_resolution_title">Standaardresolutie van pop-up</string>
<string name="show_higher_resolutions_title">Hogere resoluties tonen</string>
<string name="show_higher_resolutions_summary">2K-/4K-video\'s worden slechts op sommige apparaten ondersteund</string>
<string name="controls_background_title">Achtergrond</string>
<string name="controls_popup_title">Pop-up</string>
@ -166,9 +166,9 @@ te openen in pop-upmodus</string>
<string name="popup_remember_size_pos_summary">Onthoud laatste grootte en positie van pop-up</string>
<string name="settings_category_popup_title">Pop-up</string>
<string name="popup_resizing_indicator_title">Bezig met schalen</string>
<string name="popup_resizing_indicator_title">Bezig met wijzigen van grootte</string>
<string name="use_external_video_player_summary">Sommige resoluties zullen geen geluid hebben als deze optie is ingeschakeld</string>
<string name="use_external_video_player_summary">Sommige resoluties hebben GEEN geluid hebben als deze optie is ingeschakeld</string>
<string name="show_search_suggestions_title">Zoeksuggesties</string>
<string name="show_search_suggestions_summary">Toon suggesties bij zoeken</string>
@ -179,9 +179,9 @@ te openen in pop-upmodus</string>
<string name="title_activity_about">Over NewPipe</string>
<string name="action_settings">Instellingen</string>
<string name="action_about">Over</string>
<string name="title_licenses">Derdepartijlicenties</string>
<string name="title_licenses">Licenties van derde partijen</string>
<string name="copyright" formatted="true">© %1$s door %2$s, uitgebracht onder de %3$s</string>
<string name="error_unable_to_load_license">Kon licentie niet laden</string>
<string name="error_unable_to_load_license">Kan licentie niet laden</string>
<string name="action_open_website">Website openen</string>
<string name="tab_about">Over</string>
<string name="tab_contributors">Bijdragers</string>
@ -189,7 +189,7 @@ te openen in pop-upmodus</string>
<string name="app_description">Vrij en licht streamen voor Android.</string>
<string name="view_on_github">Bekijken op GitHub</string>
<string name="app_license_title">Licentie van NewPipe</string>
<string name="contribution_encouragement">Hulp is altijd welkom, of je nu nieuwe ideeën hebt, vertalingen kan bijdragen, wijzigingen in het ontwerp, opschonen van of grote wijzigingen in de code. Hoe meer hulp, hoe beter het wordt!</string>
<string name="contribution_encouragement">Hulp is altijd welkom. Of je nu nieuwe ideeën hebt, vertalingen kan aanleveren, wijzigingen in het ontwerp kan verrichten, code kan opschonen of van grote wijzigingen voorzien. Hoe meer hulp, hoe beter het wordt!</string>
<string name="read_full_license">Licentie lezen</string>
<string name="contribution_title">Bijdragen</string>
<string name="settings_category_downloads_title">Download</string>
@ -198,15 +198,15 @@ te openen in pop-upmodus</string>
<string name="settings_file_replacement_character_title">Vervangend teken</string>
<string name="charset_letters_and_digits">Letters en cijfers</string>
<string name="charset_most_special_characters">Meeste speciale tekens</string>
<string name="charset_most_special_characters">Speciaalste tekens</string>
<string name="subscribe_button_title">Abonneer</string>
<string name="subscribe_button_title">Abonneren</string>
<string name="subscribed_button_title">Geabonneerd</string>
<string name="channel_unsubscribed">Abonnement opgezegd</string>
<string name="subscription_change_failed">Kan het abonnement niet veranderen</string>
<string name="subscription_update_failed">Kan het abonnement niet vernieuwen</string>
<string name="channel_unsubscribed">Gedeabonneerd</string>
<string name="subscription_change_failed">Kan abonnement niet wijzigen</string>
<string name="subscription_update_failed">Kan abonnement niet bijwerken</string>
<string name="tab_main">Start</string>
<string name="tab_main">Startpagina</string>
<string name="tab_subscriptions">Abonnementen</string>
<string name="fragment_whats_new">Nieuw</string>
@ -224,7 +224,7 @@ te openen in pop-upmodus</string>
<string name="title_activity_history">Geschiedenis</string>
<string name="title_history_search">Gezocht</string>
<string name="title_history_view">Gekeken</string>
<string name="title_history_view">Bekeken</string>
<string name="history_disabled">Geschiedenis is uitgeschakeld</string>
<string name="action_history">Geschiedenis</string>
<string name="history_empty">De geschiedenis is leeg</string>
@ -232,12 +232,12 @@ te openen in pop-upmodus</string>
<string name="settings_category_player_title">Speler</string>
<string name="settings_category_player_behavior_title">Gedrag</string>
<string name="settings_category_history_title">Geschiedenis &amp; Cache</string>
<string name="settings_category_history_title">Geschiedenis en cache</string>
<string name="playlist">Afspeellijst</string>
<string name="undo">Ongedaan maken</string>
<string name="search_no_results">Geen resultaten</string>
<string name="empty_subscription_feed_subtitle">Niets te zien</string>
<string name="empty_subscription_feed_subtitle">Niets, maar dan ook niets te zien</string>
<string name="no_subscribers">Geen abonnees</string>
<plurals name="subscribers">
@ -258,29 +258,29 @@ te openen in pop-upmodus</string>
</plurals>
<string name="item_deleted">Item verwijderd</string>
<string name="delete_item_search_history">Wil je dit item uit je zoekgeschiedenis verwijderen?</string>
<string name="show_hold_to_append_title">Tip weergeven voor ingedrukt houden om toe te voegen</string>
<string name="show_hold_to_append_summary">Toon tip wanneer achtergrond- of pop-upknop is ingedrukt op de video-detailpagina</string>
<string name="delete_item_search_history">Wil je dit item verwijderen uit je zoekgeschiedenis?</string>
<string name="show_hold_to_append_title">Tip tonen voor ingedrukt houden om toe te voegen</string>
<string name="show_hold_to_append_summary">Toon tip als achtergrond- of pop-upknop wordt ingedrukt op de videogegevenspagina</string>
<string name="background_player_append">Toegevoegd aan wachtrij voor achtergrondspeler</string>
<string name="popup_playing_append">Toegevoegd aan wachtrij voor pop-upspeler</string>
<string name="play_all">Alles afspelen</string>
<string name="player_stream_failure">Deze stream kan niet worden afgespeeld</string>
<string name="player_unrecoverable_failure">Onherstelbare spelerfout opgetreden</string>
<string name="player_recoverable_failure">Aan het herstellen van spelerfout</string>
<string name="player_recoverable_failure">Bezig met herstellen na spelerfout</string>
<string name="main_page_content">Content van hoofdpagina</string>
<string name="blank_page_summary">Blanke Pagina</string>
<string name="main_page_content">Inhoud van hoofdpagina</string>
<string name="blank_page_summary">Blanco pagina</string>
<string name="kiosk_page_summary">Kioskpagina</string>
<string name="subscription_page_summary">Abonnementenpagina</string>
<string name="feed_page_summary">Feedpagina</string>
<string name="channel_page_summary">Kanaalpagina</string>
<string name="select_a_channel">Selecteer een kanaal</string>
<string name="select_a_channel">Kies een kanaal</string>
<string name="no_channel_subscribed_yet">Nog niet geabonneerd op een kanaal</string>
<string name="select_a_kiosk">Selecteer een kiosk</string>
<string name="select_a_kiosk">Kies een kiosk</string>
<string name="kiosk">Kiosk</string>
<string name="trending">Trending</string>
<string name="trending">Populair</string>
<string name="top_50">Top 50</string>
<string name="new_and_hot">Nieuw en populair</string>
<string name="title_activity_background_player">Achtergrondspeler</string>
@ -293,28 +293,28 @@ te openen in pop-upmodus</string>
<string name="enqueue_on_background">Toevoegen aan wachtrij in achtergrond</string>
<string name="enqueue_on_popup">Toevoegen aan wachtrij in pop-up</string>
<string name="start_here_on_main">Hier beginnen spelen</string>
<string name="start_here_on_background">Hier beginnen in achtergrond</string>
<string name="start_here_on_popup">Hier beginnen in pop-up</string>
<string name="start_here_on_main">Begin hier met afspelen</string>
<string name="start_here_on_background">Begin hier met afspelen op achtergrond</string>
<string name="start_here_on_popup">Begin hier met afspelen in pop-up</string>
<string name="donation_title">Doneren</string>
<string name="donation_encouragement">NewPipe wordt door vrijwilligers in hun vrije tijd ontwikkeld om jou de beste ervaring te brengen. Geef wat terug zodat onze ontwikkelaars NewPipe nóg beter kunnen maken terwijl ze van hun kopje koffie genieten.</string>
<string name="give_back">Teruggeven</string>
<string name="website_title">Website</string>
<string name="website_encouragement">Bezoek de website van NewPipe voor meer informatie en het laatste nieuws.</string>
<string name="default_content_country_title">Standaardinhoudsland</string>
<string name="default_content_country_title">Standaard inhoudsland</string>
<string name="service_title">Dienst</string>
<string name="toggle_orientation">Oriëntatie wijzigen</string>
<string name="switch_to_background">Verplaatsen naar achtergrond</string>
<string name="switch_to_popup">Verplaatsen naar pop-up</string>
<string name="switch_to_main">Verplaatsen naar normaal</string>
<string name="switch_to_main">Verplaatsen naar hoofdvenster</string>
<string name="drawer_open">Menu openen</string>
<string name="drawer_close">Menu sluiten</string>
<string name="no_player_found_toast">Geen speler met streamondersteuning gevonden (je kan VLC installeren om het af te spelen)</string>
<string name="no_player_found_toast">Geen speler met streamondersteuning gevonden (je kan VLC installeren om af te spelen)</string>
<string name="always">Altijd</string>
<string name="just_once">Eenmalig</string>
<string name="external_player_unsupported_link_type">Externe spelers ondersteunen deze soorten koppelingen niet</string>
<string name="external_player_unsupported_link_type">Externe spelers ondersteunen dit soort links niet</string>
<string name="invalid_url_toast">Ongeldige URL</string>
<string name="video_streams_empty">Geen videostreams gevonden</string>
<string name="audio_streams_empty">Geen audiostreams gevonden</string>
@ -324,20 +324,20 @@ te openen in pop-upmodus</string>
<string name="popup_player">Pop-upspeler</string>
<string name="always_ask_player">Altijd vragen</string>
<string name="preferred_player_fetcher_notification_title">Info ophalen</string>
<string name="preferred_player_fetcher_notification_title">Bezig met ophalen van informatie</string>
<string name="preferred_player_fetcher_notification_message">Bezig met laden van gevraagde inhoud</string>
<string name="import_data_title">Database importeren</string>
<string name="export_data_title">Database exporteren</string>
<string name="import_data_summary">Dit zal je huidige geschiedenis en abonnementen overschrijven</string>
<string name="export_data_summary">Exporteer geschiedenis, abonnementen en speellijsten</string>
<string name="export_complete_toast">Export voltooid</string>
<string name="import_complete_toast">Import voltooid</string>
<string name="import_data_title">Databank importeren</string>
<string name="export_data_title">Databank exporteren</string>
<string name="import_data_summary">Dit overschrijft je huidige geschiedenis en abonnementen</string>
<string name="export_data_summary">Exporteer geschiedenis, abonnementen en afspeellijsten</string>
<string name="export_complete_toast">Exporteren voltooid</string>
<string name="import_complete_toast">Importeren voltooid</string>
<string name="no_valid_zip_file">Geen geldig ZIP-bestand</string>
<string name="could_not_import_all_files">Opgelet: kon niet alle bestanden importeren.</string>
<string name="override_current_data">Dit zal je huidige configuratie overschrijven.</string>
<string name="could_not_import_all_files">Let op: niet alle bestanden konden worden geïmporteerd.</string>
<string name="override_current_data">Dit overschrijft je huidige configuratie.</string>
<string name="controls_download_desc">Streambestand downloaden.</string>
<string name="show_info">Info tonen</string>
<string name="show_info">Informatie tonen</string>
<string name="tab_bookmarks">Bladwijzers</string>
@ -345,22 +345,22 @@ te openen in pop-upmodus</string>
<string name="detail_drag_description">Versleep om de volgorde te wijzigen</string>
<string name="create">Aanmaken</string>
<string name="delete_one">Één verwijderen</string>
<string name="create">Creëren</string>
<string name="delete_one">Eén verwijderen</string>
<string name="delete_all">Alles verwijderen</string>
<string name="dismiss">Sluiten</string>
<string name="rename">Hernoemen</string>
<string name="rename">Naam wijzigen</string>
<string name="delete_stream_history_prompt">Wil je dit item uit je kijkgeschiedenis verwijderen?</string>
<string name="delete_all_history_prompt">Wil je alle items uit je geschiedenis verwijderen?</string>
<string name="delete_stream_history_prompt">Wil je dit item verwijderen uit je kijkgeschiedenis?</string>
<string name="delete_all_history_prompt">Wil je alle items verwijderen uit je geschiedenis?</string>
<string name="title_last_played">Laatst afgespeeld</string>
<string name="title_most_played">Meest afgespeeld</string>
<string name="always_ask_open_action">Altijd vragen</string>
<string name="create_playlist">Nieuwe afspeellijst aanmaken</string>
<string name="create_playlist">Nieuwe afspeellijst creëren</string>
<string name="delete_playlist">Afspeellijst verwijderen</string>
<string name="rename_playlist">Afspeellijst hernoemen</string>
<string name="rename_playlist">Afspeellijstnaam wijzigen</string>
<string name="playlist_name_input">Naam</string>
<string name="append_playlist">Toevoegen aan afspeellijst</string>
<string name="set_as_playlist_thumbnail">Instellen als miniatuur voor afspeellijst</string>
@ -376,7 +376,7 @@ te openen in pop-upmodus</string>
<string name="caption_none">Geen bijschriften</string>
<string name="resize_fit">Passen</string>
<string name="resize_fit">Inpassen</string>
<string name="resize_fill">Opvullen</string>
<string name="resize_zoom">Inzoomen</string>
@ -404,8 +404,8 @@ te openen in pop-upmodus</string>
<string name="invalid_directory">Ongeldige map</string>
<string name="invalid_source">Ongeldig bestand/Ongeldige inhoudsbron</string>
<string name="invalid_file">Het bestand bestaat niet of u beschikt niet over voldoende machtiging om het te lezen/er naar te schrijven</string>
<string name="file_name_empty_error">De bestandsnaam mag niet leeg zijn</string>
<string name="invalid_file">Het bestand bestaat niet of je bent onvoldoende gemachtigd om het te lezen/er naar te schrijven</string>
<string name="file_name_empty_error">De bestandsnaam mag niet blanco zijn</string>
<string name="error_occurred_detail">Er is een fout opgetreden: %1$s</string>
<string name="import_export_title">Importeren/Exporteren</string>
@ -435,7 +435,7 @@ te openen in pop-upmodus</string>
\n4. Kopieer de koppeling van de pagina waar je op terechtkomt (dat is je profiel-URL).</string>
<string name="import_soundcloud_instructions_hint">jouwID, soundcloud.com/jouwid</string>
<string name="import_network_expensive_warning">Let op: deze actie kan veel MBs van je netwerk gebruiken.
<string name="import_network_expensive_warning">Let op: deze actie kan veel MBs van je mobiele netwerk gebruiken.
\n
\nWil je doorgaan?</string>
<string name="download_thumbnail_title">Miniatuurvoorbeelden laden</string>
@ -456,7 +456,7 @@ te openen in pop-upmodus</string>
<string name="no_streams_available_download">Geen streams beschikbaar voor downloaden</string>
<string name="caption_setting_title">Bijschriften</string>
<string name="caption_setting_description">Bijschriftgrootte en achtergrondstijlen wijzigen. Vereist een herstart van de app</string>
<string name="caption_setting_description">Bijschriftgrootte en -achtergrondstijlen wijzigen. Vereist een herstart van de app</string>
<string name="toast_no_player">Er is geen app geïnstalleerd die dit bestand kan afspelen</string>
@ -464,22 +464,22 @@ te openen in pop-upmodus</string>
<string name="clear_views_history_summary">Verwijdert de geschiedenis van afgespeelde streams</string>
<string name="delete_view_history_alert">Verwijdert de gehele kijkgeschiedenis.</string>
<string name="view_history_deleted">Kijkgeschiedenis verwijderd.</string>
<string name="view_history_deleted">Kijkgeschiedenis gewist.</string>
<string name="clear_search_history_title">Zoekgeschiedenis wissen</string>
<string name="clear_search_history_summary">Verwijdert de gebruikte zoektermen</string>
<string name="delete_search_history_alert">Verwijdert de gehele geschiedenis.</string>
<string name="search_history_deleted">Zoekgeschiedenis verwijderd.</string>
<string name="search_history_deleted">Zoekgeschiedenis gewist.</string>
<string name="one_item_deleted">1 item verwijderd.</string>
<string name="app_license">NewPipe is vrije software: je kan het gebruiken, bestuderen, delen en verbeteren zoveel je maar wil. Je kan het opnieuw uitgeven en/of aanpassen volgens de voorwaarden van de GNU General Public License, gepubliceerd door de Free Software Foundation, versie 3 van de licentie, of (indien gewenst) om het even welke latere versie.</string>
<string name="import_settings">Wil je ook de instellingen importeren?</string>
<string name="privacy_policy_title">NewPipe\'s privacybeleid</string>
<string name="privacy_policy_encouragement">Het NewPipe-project neemt privacy serieus. Daarom verzamelt de app geen gegevens zonder jouw toestemming.
\nNewPipe\'s privacybeleid legt gedetailleerd uit welke gegevens verstuurd en opgeslagen worden als je een crashrapport verstuurd.</string>
<string name="privacy_policy_encouragement">Het NewPipe-project neemt privacy serieus. Daarom verzamelt de app geen gegevens zonder jouw toestemming.
\nNewPipe\'s privacybeleid legt gedetailleerd uit welke gegevens verstuurd en opgeslagen worden als je een crashrapport verstuurt.</string>
<string name="read_privacy_policy">Privacybeleid lezen</string>
<string name="start_accept_privacy_policy">Om de Europese Algemene Verordening Gegevensbescherming (ook wel: AVG of GDPR) na te leven, wijzen we je op het nieuwe privacybeleid van NewPipe. Lees dit zorgvuldig.
\nJe moet het beleid accepteren om ons het bugrapport te kunnen sturen.</string>
<string name="start_accept_privacy_policy">Om de Europese Algemene Verordening Gegevensbescherming (ook wel: AVG of GDPR) na te leven, wijzen we je op het nieuwe privacybeleid van NewPipe. Lees dit zorgvuldig.
\nJe moet het beleid accepteren om ons het foutrapport te kunnen sturen.</string>
<string name="accept">Accepteren</string>
<string name="decline">Weigeren</string>
<string name="limit_data_usage_none_description">Ongelimiteerd</string>

View File

@ -13,9 +13,19 @@
<string name="controls_download_desc">ਡਾਊਨਲੋਡ ਸਟਰੀਮ ਫਾਈਲ.</string>
<string name="search">ਖੋਜੋ</string>
<string name="settings">ਸੇਟਿੰਗਾਂ</string>
<string name="did_you_mean">ਕੀ ਤੁਹਾਡਾ ਮਤਲਬ: %1$s ?</string>
<string name="did_you_mean">ਕੀ ਤੁਹਾਡਾ ਮਤਲਬ: %1$s\?</string>
<string name="share_dialog_title">ਭੇਜੋ</string>
<string name="choose_browser">Browser ਚੁਣੋ</string>
<string name="screen_rotation">ਉਲਟਾਨਾ</string>
<string name="use_external_video_player_title">ਹੋਰ ਪਲੇਅਰ ਵਰਤਣਾ</string>
<string name="use_external_video_player_title">ਹੋਰ ਪਲੇਅਰ ਵਰਤਤੋ</string>
<string name="use_external_video_player_summary">ਕੁਝ ਵੀਡੀਓ ਰੈਸੋਲੂਸ਼ਨ ਚੁਣਨ ਨਾਲ ਆਡੀਓ ਮੌਜੂਦ ਨਹੀਂ ਹੋਵੇਗੀ</string>
<string name="use_external_audio_player_title">ਬਾਹਰੀ ਆਡੀਓ ਪਲੇਅਰ ਦੀ ਵਰਤੋਂ ਕਰੋ</string>
<string name="popup_mode_share_menu_title">NewPipe ਪੋਪਉਪ ਮੋਡ</string>
<string name="subscribe_button_title">ਸਅਬਸਕਰਾਇਬ</string>
<string name="subscribed_button_title">ਮੈਂਬਰ ਬਣਏ</string>
<string name="channel_unsubscribed">ਚੈਨਲ ਸਦੱਸਤਾ ਰੱਦ ਕੀਤੀ ਗਈ</string>
<string name="subscription_change_failed">ਸਦੱਸਤਾ ਨੂੰ ਬਦਲਣ ਵਿਚ ਅਸਮਰੱਥ ਹੈ</string>
<string name="show_info">ਜਾਣਕਾਰੀ</string>
<string name="tab_main">ਮੁੱਖ</string>
</resources>

View File

@ -43,7 +43,7 @@
<string name="next_video_title">Następny film</string>
<string name="show_next_and_similar_title">Pokaż \'następne\' i \'podobne\' filmy</string>
<string name="url_not_supported_toast">URL nieobsługiwany</string>
<string name="search_language_title">Domyślny język zawartości</string>
<string name="content_language_title">Domyślny język zawartości</string>
<string name="settings_category_video_audio_title">Wideo i audio</string>
<string name="settings_category_appearance_title">Wygląd</string>
<string name="settings_category_other_title">Inne</string>
@ -144,7 +144,7 @@
<string name="channel">Kanał</string>
<string name="yes">Tak</string>
<string name="later">Później</string>
<string name="disabled">Wyłączone</string>
<string name="disabled">Wyłączony</string>
<string name="filter">Filtr</string>
<string name="refresh">Odśwież</string>
<string name="clear">Wyczyść</string>
@ -481,4 +481,18 @@
<string name="limit_data_usage_none_description">Brak limitu</string>
<string name="limit_mobile_data_usage_title">Limit przy użyciu danych mobilnych</string>
</resources>
<string name="channels">Kanały</string>
<string name="playlists">Playlisty</string>
<string name="tracks">Utwory</string>
<string name="users">Użytkownicy</string>
<string name="skip_silence_checkbox">Przewiń w przód podczas ciszy</string>
<string name="playback_step">Krok</string>
<string name="playback_reset">Zresetuj</string>
<string name="minimize_on_exit_title">Zminimalizuj podczas przełączenia aplikacji</string>
<string name="minimize_on_exit_summary">"Akcja podczas przełączenia do innej aplikacji z głównego odtwarzacza — %s"</string>
<string name="minimize_on_exit_none_description">Zminimalizuj</string>
<string name="minimize_on_exit_background_description">Zminimalizuj do odtwarzania w tle</string>
<string name="minimize_on_exit_popup_description">Zminimalizuj do odtwarzania w okienku</string>
</resources>

View File

@ -57,7 +57,7 @@
<string name="report_error">Reportar um erro</string>
<string name="retry">Tentar novamente</string>
<string name="screen_rotation">Rotação</string>
<string name="search_language_title">Idioma de conteúdo preferido</string>
<string name="content_language_title">Idioma de conteúdo preferido</string>
<string name="settings">Configurações</string>
<string name="settings_category_appearance_title">Aparência</string>
<string name="settings_category_other_title">Outros</string>
@ -254,7 +254,7 @@ abrir em modo popup</string>
<string name="trending">Em Alta</string>
<string name="top_50">Top 50</string>
<string name="new_and_hot">Novos e tendências</string>
<string name="show_hold_to_append_title">"Mostrar dica \"mantenha pressionado\" para enfileirar"</string>
<string name="show_hold_to_append_title">"Mostrar dica \"mantenha pressionado para enfileirar\""</string>
<string name="show_hold_to_append_summary">Mostrar dica quando o botão de plano de fundo ou de popup for pressionado na página de detalhes do vídeo</string>
<string name="background_player_append">Adicionado a fila do reprodutor em plano de fundo</string>
<string name="popup_playing_append">Adicionado a fila no reprodutor popup</string>
@ -291,7 +291,7 @@ abrir em modo popup</string>
<string name="toggle_orientation">Alterar a orientação</string>
<string name="switch_to_background">Alterar para Plano de Fundo</string>
<string name="switch_to_popup">Alterar para Popup</string>
<string name="switch_to_main">Aletar para principal</string>
<string name="switch_to_main">Alterar para o Principal</string>
<string name="external_player_unsupported_link_type">Reprodutores externos não suportam estes tipos de links</string>
<string name="invalid_url_toast">URL inválida</string>

View File

@ -30,7 +30,7 @@
<string name="next_video_title">Vídeo seguinte</string>
<string name="show_next_and_similar_title">Mostrar vídeos \'seguintes\' e \'semelhantes\'</string>
<string name="url_not_supported_toast">URL não suportado</string>
<string name="search_language_title">Idioma padrão do conteúdo</string>
<string name="content_language_title">Idioma padrão do conteúdo</string>
<string name="settings_category_video_audio_title">Vídeo e áudio</string>
<string name="list_thumbnail_view_description">Miniatura de vídeos</string>
@ -184,7 +184,7 @@
<string name="tab_about">Sobre</string>
<string name="tab_contributors">Colaboradores</string>
<string name="tab_licenses">Licenças</string>
<string name="app_description">Aplicação leve, simples e grátis de YouTube para Android.</string>
<string name="app_description">Aplicação leve livre de YouTube para Android.</string>
<string name="view_on_github">Ver no GitHub</string>
<string name="app_license_title">Licença do NewPipe</string>
<string name="contribution_encouragement">Se tem ideias de tradução, alterações de design, limpeza de código ou alterações de código pesado—ajuda é sempre bem-vinda. Quanto mais se faz melhor fica!</string>
@ -293,7 +293,7 @@
<string name="import_data_title">Importar base de dados</string>
<string name="export_data_title">Exportar base de dados</string>
<string name="import_data_summary">Irá sobrepor o seu histórico atual e subscrições</string>
<string name="export_data_summary">Exportar histórico, subscrições e listas de reprodução.</string>
<string name="export_data_summary">Exportar histórico, subscrições e listas de reprodução</string>
<string name="background_player_append">Em lista de espera no reprodutor em segundo plano</string>
<string name="popup_playing_append">Em lista de espera no reprodutor popup</string>
<string name="switch_to_background">Mudar para segundo plano</string>
@ -318,7 +318,7 @@
<string name="use_inexact_seek_title">Utilizar pesquisa rápida</string>
<string name="use_inexact_seek_summary">A pesquisa rápida permite que a pesquisa seja mais rápida mas diminui a qualidade da precisão</string>
<string name="download_thumbnail_title">Carregar miniaturas</string>
<string name="download_thumbnail_summary">Desative para parar o carregamento das miniaturas e poupar dados e memória. Se alterar esta opção limpa a cache de memória e do disco.</string>
<string name="download_thumbnail_summary">Desative para parar o carregamento das miniaturas e poupar dados e memória. Se alterar esta opção limpa a cache de memória e do disco</string>
<string name="thumbnail_cache_wipe_complete_notice">Cache de imagens limpa</string>
<string name="default_content_country_title">País padrão para o conteúdo</string>
<string name="settings_category_debug_title">Depuração</string>
@ -333,7 +333,7 @@
<string name="dismiss">Descartar</string>
<string name="website_title">Site</string>
<string name="website_encouragement">Para obter mais informações e saber as novidades do NewPipe, aceda ao nosso site.</string>
<string name="website_encouragement">Visite ao website NewPipe para obter mais informações e saber as novidades.</string>
<string name="kiosk_page_summary">Página \"kiosk\"</string>
<string name="feed_page_summary">Página da fonte</string>
<string name="export_complete_toast">Exportação terminada</string>
@ -364,7 +364,7 @@
<string name="always_ask_open_action">Perguntar sempre</string>
<string name="preferred_player_fetcher_notification_title">A obter informação…</string>
<string name="preferred_player_fetcher_notification_message">O conteúdo requisitado está a carregar</string>
<string name="preferred_player_fetcher_notification_message">O conteúdo requisitado está carregando</string>
<string name="create_playlist">Criar Nova Lista de Reprodução</string>
<string name="delete_playlist">Apagar Lista de Reprodução</string>
@ -379,7 +379,7 @@
<string name="playlist_thumbnail_change_success">Thumbnail da Lista de Reprodução modificada</string>
<string name="caption_none">Sem Legenda</string>
<string name="resize_zoom">ZOOM</string>
<string name="resize_zoom">Zoom</string>
<string name="caption_auto_generated">Gerado automaticamente</string>
@ -398,24 +398,47 @@
<string name="subscriptions_import_unsuccessful">Importação de subscrições falhou</string>
<string name="subscriptions_export_unsuccessful">Exportação de subscrições falhou</string>
<string name="import_youtube_instructions">Para importar as tuas subscrições do Google vais precisar do ficheiro de exportação, que pode ser descarregado com auxílio destas instruções:
\n
\n1. Vai a esta hiperligação: %1$s
\n2. Inicia a tua sessão quando requisitado
\n3. O descarregamento deve começar (esse é o ficheiro de exportação)</string>
<string name="import_soundcloud_instructions">Para importar as contas que segue no SoundCloud, terá que saber o link ou id do seu perfil. Se souber, basta escrever um deles no campo abaixo e estará tudo pronto.
<string name="import_youtube_instructions">Para importar as tuas subscrições do Youtube vais precisar do ficheiro de exportação, que pode ser descarregado com auxílio destas instruções:
\n
\nSe não souber, pode seguir estas etapas:
\n1. Vai a esta hiperligação: %1$s
\n2. Inicia a tua sessão quando requisitado
\n3. O descarregamento deve começar (esse é o ficheiro de exportação)</string>
<string name="import_soundcloud_instructions">Para importar as contas SoundCloud, vais precisar do link ou id do seu perfil que pode ser descarregado com auxílio destas instruções:
\n
\n1. Ative \"modo desktop\" num navegador da internet (o site não está disponível para dispositivos móveis)
\n2. Vá a este url: %1$s
\n3. Inicie sessão na sua conta quando solicitado
\n4. Copie o link para o qual foi redirecionado (este é o link do seu perfil)</string>
<string name="import_soundcloud_instructions_hint">seuid, soundcloud.com/seuid</string>
\n4. Copie o link para o qual foi redirecionado.</string>
<string name="import_soundcloud_instructions_hint">seuID, soundcloud.com/seuID</string>
<string name="playback_speed_control">Controlo de velocidade de reprodução</string>
<string name="playback_tempo">Tempo</string>
<string name="playback_nightcore">Nightcore</string>
<string name="playback_default">Predefinido</string>
<string name="clear_views_history_title">Limpar histórico de exibição</string>
<string name="auto_queue_summary">Auto anexar um fluxo relacionado quando jogar o último fluxo em uma fila não repetitiva</string>
<string name="show_hold_to_append_title">Mostrar dica \"mantenha pressionado para enfileirar\"</string>
<string name="show_hold_to_append_summary">Mostrar dica quando o botão de plano de fundo ou de popup for pressionado na página de detalhes do vídeo</string>
<string name="channels">Canais</string>
<string name="playlists">Listas de reprodução</string>
<string name="tracks">Faixas</string>
<string name="users">Utilizadores</string>
<string name="clear_views_history_summary">Deleta o histórico de videos já reproduzidos</string>
<string name="delete_view_history_alert">Deleta o histórico de videos já reproduzidos.</string>
<string name="view_history_deleted">Histórico de já assistidos deletado.</string>
<string name="clear_search_history_title">Deleta histórico de pesquisa</string>
<string name="clear_search_history_summary">Deleta histórico de palavras chave pesquisadas</string>
<string name="delete_search_history_alert">Deleta histórico de pesquisa completo.</string>
<string name="search_history_deleted">Histórico de pesquisa deletado.</string>
<string name="one_item_deleted">1 elemento deletado.</string>
<string name="toast_no_player">Nehum aplicativo instalada para reproduzir este arquivo</string>
<string name="donation_encouragement">NewPipe é desenvolvido por voluntários que usam seu tempo para trazer a melhor experiência para você. Retribua para ajudar os desenvolvedores a tornarem o NewPipe ainda melhor enquanto desfrutam uma xícara de café.</string>
<string name="give_back">Retribuir</string>
<string name="privacy_policy_title">Política de privacidade do NewPipe</string>
<string name="privacy_policy_encouragement">O projeto NewPipe leva a sua privacidade muito a sério. Sendo assim, o aplicativo não coleta nenhum dado sem seu consentimento.
\nA polícia de privacidade do NewPipe explica em detalhes qual dado é enviado e salvo quando você envia um relatório de erros.</string>
<string name="read_privacy_policy">Ler a política de privacidade</string>
<string name="auto_queue_title">Próximo stream automaticamente em lista de espera</string>
</resources>

View File

@ -41,7 +41,7 @@
<string name="next_video_title">Următorul videoclip</string>
<string name="show_next_and_similar_title">Arată videoclipurile care urmează</string>
<string name="url_not_supported_toast">URL nesuportat</string>
<string name="search_language_title">Limba dorită a conținutului</string>
<string name="content_language_title">Limba dorită a conținutului</string>
<string name="settings_category_video_audio_title">Video &amp; Audio</string>
<string name="settings_category_appearance_title">Aspect</string>
<string name="settings_category_other_title">Altele</string>

View File

@ -30,7 +30,7 @@
<string name="next_video_title">Следующее видео</string>
<string name="url_not_supported_toast">URL не поддерживается</string>
<string name="show_next_and_similar_title">\"Следующее\" и \"Похожие\" видео</string>
<string name="search_language_title">Язык контента по умолчанию</string>
<string name="content_language_title">Язык контента по умолчанию</string>
<string name="settings_category_video_audio_title">Видео и аудио</string>
<string name="settings_category_appearance_title">Внешний вид</string>
<string name="settings_category_other_title">Другое</string>
@ -470,7 +470,7 @@
<string name="clear_search_history_summary">Удалить историю запросов поиска</string>
<string name="clear_views_history_summary">Удалить историю воспроизведённых потоков</string>
<string name="delete_search_history_alert">Вся история поиска будет удалена.</string>
<string name="search_history_deleted">История поиска удалена</string>
<string name="search_history_deleted">История поиска удалена.</string>
<string name="one_item_deleted">1 элемент удалён.</string>
<string name="app_license">NewPipe — свободное программное обеспечение: вы можете использовать, изучать и улучшать его по своему усмотрению. В частности, вы можете распространять и/или изменять его в соответствии с условиями GNU General Public License, опубликованной Free Software Foundation, либо версии 3, либо (по вашему выбору) любой более поздней версии.</string>
@ -490,6 +490,7 @@
<string name="limit_mobile_data_usage_title">Предел разрешения в мобильной сети</string>
<string name="channels">Каналы</string>
<string name="playlists">Плейлисты</string>
<string name="videos">Видео</string>
<string name="tracks">Дорожки</string>
<string name="users">Пользователи</string>
<string name="skip_silence_checkbox">Проматывать тишину</string>
@ -502,4 +503,26 @@
<string name="minimize_on_exit_background_description">Фоновый плеер</string>
<string name="minimize_on_exit_popup_description">Плеер в окне</string>
<string name="list_view_mode">Вид списка</string>
<string name="list">Список</string>
<string name="grid">Сетка</string>
<string name="auto">Автоматически</string>
<string name="brightness_gesture_control_summary">Менять яркость плеера жестом</string>
<string name="brightness_gesture_control_title">Жест яркости</string>
<string name="download_to_sdcard_error_message">Загрузка на внешний накопитель невозможна. Сбросить расположение папки загрузки?</string>
<string name="download_to_sdcard_error_title">Внешний накопитель недоступен</string>
<string name="main_page_content_summary">Вкладки, видимые на главной странице</string>
<string name="restore_defaults">По умолчанию</string>
<string name="restore_defaults_confirmation">Хотите восстановить умолчания?</string>
<string name="saved_tabs_invalid_json">Ошибка чтения сохранённых вкладок. Используются вкладки по умолчанию</string>
<string name="selection">Выбор</string>
<string name="subscribers_count_not_available">Количество подписчиков недоступно</string>
<string name="switch_view">Переключить вид</string>
<string name="tab_choose">Выберите вкладку</string>
<string name="tab_new">Новая вкладка</string>
<string name="unsubscribe">Отписаться</string>
<string name="volume_gesture_control_summary">Менять громкость плеера жестом</string>
<string name="volume_gesture_control_title">Жест громкости</string>
</resources>

View File

@ -29,7 +29,7 @@
<string name="play_with_kodi_title">Prehrať cez Kodi</string>
<string name="kore_not_found">Aplikácia Kore nie je nainštalovaná. Chcete ju nainštalovať?</string>
<string name="show_play_with_kodi_title">Zobraziť možnosť \"Prehrať cez Kodi\"</string>
<string name="show_play_with_kodi_summary">Zobrazovať možnosť prehrať video cez mediálne centrum Kodi</string>
<string name="show_play_with_kodi_summary">Zobrazovať možnosť prehrať video cez multimediálne centrum Kodi</string>
<string name="play_audio">Zvuk</string>
<string name="default_audio_format_title">Predvolený zvukový formát</string>
<string name="theme_title">Téma</string>
@ -40,7 +40,7 @@
<string name="next_video_title">Ďalšie video</string>
<string name="show_next_and_similar_title">Ukázať \'ďalšie\' a \'podobné\' videá</string>
<string name="url_not_supported_toast">URL nie je podporovaná</string>
<string name="search_language_title">Preferovaný jazyk obsahu</string>
<string name="content_language_title">Preferovaný jazyk obsahu</string>
<string name="settings_category_video_audio_title">Video &amp; Zvuk</string>
<string name="settings_category_appearance_title">Vzhľad</string>
<string name="settings_category_other_title">Iné</string>
@ -309,10 +309,10 @@
<string name="rename">Premenovať</string>
<string name="donation_title">Prispieť</string>
<string name="donation_encouragement">Aplikácia NewPipe je vyvíjaná dobrovoľníkmi vo voľnom čase. Ak sa vám aplikácia páči a chceli by ste odmeniť vývojárov, teraz je ten najlepši čas. Podporte vývojárov aby mohli NewPipe zlepšovať a zároveň si pochutnávať na šálke kávy!</string>
<string name="donation_encouragement">Aplikácia NewPipe je vyvíjaná dobrovoľníkmi vo voľnom čase. Ak sa vám aplikácia páči, odmeňte vývojárov aby mohli NewPipe naďalej vylepšovať. Určite ich poteší napríklad šálka dobrej kávy.</string>
<string name="give_back">Daruj</string>
<string name="website_title">Webstránka</string>
<string name="website_encouragement">Ak chcete získať ďalšie informácie a novinky o NewPipe navštívte naše webové stránky.</string>
<string name="website_encouragement">"Pre viac informácií a noviniek navštívte webstránku NewPipe."</string>
<string name="delete_item_search_history">Chcete odstrániť túto položku z histórie vyhľadávania?</string>
<string name="delete_stream_history_prompt">Chcete odstrániť túto položku z histórie pozretých videí?</string>
<string name="delete_all_history_prompt">Ste si istý, že chcete vymazať všetky položky z histórie?</string>
@ -377,7 +377,7 @@
<string name="playlist_thumbnail_change_success">Miniatúra zoznamu skladieb bola zmenená</string>
<string name="playlist_delete_failure">Nemožno odstrániť zoznam skladieb</string>
<string name="caption_none">Bez popisu</string>
<string name="caption_none">Bez titulkov</string>
<string name="resize_fit">Prispôsobiť</string>
<string name="resize_fill">Vyplniť</string>
@ -417,14 +417,14 @@
<string name="caption_auto_generated">Automaticky vygenerované</string>
<string name="caption_setting_title">Nastavenie titulkov</string>
<string name="caption_setting_title">Titulky</string>
<string name="caption_setting_description">Upravte mierku textu titulkov a štýly pozadia. Vyžaduje reštart prehrávača</string>
<string name="enable_leak_canary_title">Povoliť službu LeakCanary</string>
<string name="enable_leak_canary_summary">Monitorovanie pretečenia pamäte môže spôsobiť, že aplikácia nebude reagovať</string>
<string name="enable_disposed_exceptions_title">Nahlásiť mimo-cyklické chyby</string>
<string name="enable_disposed_exceptions_summary">Vynútenie hlásenia nedodržateľných výnimiek Rx, ktoré sa vyskytnú mimo časového cyklu fragmentu alebo aktivity po zlikvidova</string>
<string name="enable_disposed_exceptions_summary">Vynútiť hlásenie výnimiek nedoručiteľných Rx mimo časového cyklu fragmentov alebo aktivity po zneškodne</string>
<string name="import_export_title">Import/Export
\n</string>
@ -449,16 +449,13 @@
\n2. Po výzve sa prihláste do svojho účtu
\n3. Sťahovanie by malo začať (to je exportovaný zoznam)
\n</string>
<string name="import_soundcloud_instructions">"Importovať SoundCloud profil zadaním URL adresy alebo vášho ID:
\n
\nAk nepoznáte ani URL ani ID vašeho profilu, môžete postupovať nasledovne:
\n
\n1. V niektorom prehliadači povoľte režim \"desktop\" (web nie je dostupný pre mobilné zariadenia)
\n2. Prejdite na túto adresu URL: %1$s
<string name="import_soundcloud_instructions">"Importovať SoundCloud profil zadaním URL adresy alebo vášho ID:
\n
\n1. Prepnite režim na \"desktop\" (web nie je dostupný pre mobilné zariadenia)
\n2. Prejdite na túto URL adresu: %1$s
\n3. Po výzve sa prihláste do svojho účtu
\n4. Skopírujte adresu URL, na ktorú ste boli presmerovaní (to je adresa vášho profilu).
\n"</string>
<string name="import_soundcloud_instructions_hint">ID,soundcloud.com/ID</string>
\n4. Skopírujte adresu URL, na ktorú ste boli presmerovaní. "</string>
<string name="import_soundcloud_instructions_hint">vašeID, soundcloud.com/vašeid</string>
<string name="import_network_expensive_warning">Operácia môže byť náročná na počet prenesených dát.
\n
@ -467,7 +464,7 @@
<string name="playback_speed_control">Ovládanie rýchlosti prehrávania</string>
<string name="playback_tempo">Rýchlosť</string>
<string name="playback_pitch">Výška</string>
<string name="unhook_checkbox">"Zvoľnenie (môže spôsobovať skreslenie)"</string>
<string name="unhook_checkbox">"Spomalenie (môže spôsobovať skreslenie)"</string>
<string name="playback_nightcore">Nightcore režim</string>
<string name="playback_default">Predvolené</string>
<string name="clear_views_history_title">Vymazať históriu pozretí</string>
@ -493,4 +490,18 @@
<string name="limit_data_usage_none_description">Bez limitu</string>
<string name="limit_mobile_data_usage_title">Limitovať rozlíšenie pri použití mobilných dát</string>
</resources>
<string name="channels">Kanály</string>
<string name="playlists">Zoznamy skladieb</string>
<string name="tracks">Skladby</string>
<string name="users">Používatelia</string>
<string name="skip_silence_checkbox">Pretáčať tiché pasáže</string>
<string name="playback_step">Krok</string>
<string name="playback_reset">Vynulovať</string>
<string name="minimize_on_exit_title">Minimalizovať pri prepnutí aplikácie</string>
<string name="minimize_on_exit_summary">Akcia pri prepnutí na inú aplikáciu z hlavného prehrávača videa — %s</string>
<string name="minimize_on_exit_none_description">Nič</string>
<string name="minimize_on_exit_background_description">Prehrávať na pozadí</string>
<string name="minimize_on_exit_popup_description">Prehrávať v okne</string>
</resources>

View File

@ -29,7 +29,7 @@
<string name="next_video_title">Naslednji video</string>
<string name="show_next_and_similar_title">Pokaži naslednji video in podobne posnetke</string>
<string name="url_not_supported_toast">Zapis naslova URL ni podprt.</string>
<string name="search_language_title">Privzeti jezik vsebine</string>
<string name="content_language_title">Privzeti jezik vsebine</string>
<string name="settings_category_video_audio_title">Video in Zvok</string>
<string name="list_thumbnail_view_description">Sličica predogleda videa</string>
<string name="detail_thumbnail_view_description">Sličica predogleda videa</string>
@ -91,7 +91,7 @@
<string name="your_comment">Opomba (v angleščini):</string>
<string name="storage_permission_denied">Dovoljenje za dostop do shrambe je zavrnjeno</string>
<string name="autoplay_by_calling_app_title">Samodejno predvajanje</string>
<string name="autoplay_by_calling_app_summary">Samodejno predvaja vsebino, če je NewPipe klican iz drugega programa</string>
<string name="autoplay_by_calling_app_summary">Predvaja vsebino, če je program zagnan iz drugega programa</string>
<string name="report_error">Pošlji poročilo o napaki</string>
<string name="user_report">Poročilo uporabnika</string>
@ -320,4 +320,5 @@ odpiranje v pojavnem načinu</string>
<string name="dismiss">Opusti</string>
<string name="rename">Preimenuj</string>
<string name="download_thumbnail_title">Naloži sličice</string>
</resources>

View File

@ -30,7 +30,7 @@
<string name="download_dialog_title">Shkarko</string>
<string name="next_video_title">Videoja tjetër</string>
<string name="service_title">Shërbimi</string>
<string name="search_language_title">Gjuha e dëshiruar e përmbajtjeve</string>
<string name="content_language_title">Gjuha e dëshiruar e përmbajtjeve</string>
<string name="settings_category_player_title">Aplikacioni për video</string>
<string name="settings_category_player_behavior_title">Sjellja</string>
<string name="settings_category_video_audio_title">Video &amp; Audio</string>

View File

@ -28,7 +28,7 @@
<string name="next_video_title">Следећи видео</string>
<string name="url_not_supported_toast">УРЛ није подржан</string>
<string name="show_next_and_similar_title">Прикажи следећи и слични видео</string>
<string name="search_language_title">Подразумевани језик садржаја</string>
<string name="content_language_title">Подразумевани језик садржаја</string>
<string name="settings_category_video_audio_title">Видео и аудио</string>
<string name="settings_category_other_title">Остало</string>
<string name="list_thumbnail_view_description">Сличица видео прегледа</string>

View File

@ -10,10 +10,10 @@
<string name="download">Ladda ner</string>
<string name="search">Sök</string>
<string name="settings">Inställningar</string>
<string name="did_you_mean">Menade du: %1$s ?</string>
<string name="did_you_mean">Menade du: %1$s\?</string>
<string name="share_dialog_title">Dela med</string>
<string name="choose_browser">Välj webbläsare</string>
<string name="screen_rotation">rotering</string>
<string name="screen_rotation">rotation</string>
<string name="use_external_video_player_title">Använd extern videospelare</string>
<string name="use_external_video_player_summary">Några upplösningar kommer INTE ha ljud när det här alternativet är aktiverat</string>
<string name="use_external_audio_player_title">Använd extern ljudspelare</string>
@ -57,7 +57,7 @@
<string name="next_video_title">Nästa video</string>
<string name="show_next_and_similar_title">Visa \'nästkommande\' och \'liknande\' videor</string>
<string name="url_not_supported_toast">Webbadressen stöds inte</string>
<string name="search_language_title">Standard innehållsspråk</string>
<string name="content_language_title">Standard innehållsspråk</string>
<string name="settings_category_video_audio_title">Video &amp; Ljud</string>
<string name="settings_category_popup_title">Popup-ruta</string>
<string name="settings_category_appearance_title">Utseende</string>
@ -109,7 +109,7 @@
<string name="view_count_text">%1$s visningar</string>
<string name="subscribe_button_title">Prenumerera</string>
<string name="subscribed_button_title">Prenumererad</string>
<string name="channel_unsubscribed">Prenumerationen togs bort</string>
<string name="channel_unsubscribed">Prenumeration avslutad</string>
<string name="subscription_change_failed">Kunde inte ändra prenumeration</string>
<string name="subscription_update_failed">Kunde inte uppdatera prenumeration</string>
@ -286,10 +286,10 @@
<string name="tab_bookmarks">Bokmärken</string>
<string name="controls_add_to_playlist_title">Lägga till</string>
<string name="controls_add_to_playlist_title">Lägg till</string>
<string name="use_inexact_seek_title">Använda snabb inexakt sökning</string>
<string name="download_thumbnail_title">Ladda miniatyrer</string>
<string name="download_thumbnail_title">Ladda miniatyrbilder</string>
<string name="download_thumbnail_summary">Inaktivera för att stoppa alla miniatyrbilder från att ladda och spara på data och minnesanvändning. Ändring av detta kommer att rensa cache-minnet</string>
<string name="thumbnail_cache_wipe_complete_notice">Bild cacheminnet var rensad</string>
<string name="service_title">Tjänst</string>
@ -396,7 +396,7 @@
<string name="delete_playlist_prompt">Vill du ta bort den här spellistan?</string>
<string name="playlist_creation_success">Spellistan skapades</string>
<string name="playlist_add_stream_success">Tillagad i spellistan</string>
<string name="playlist_thumbnail_change_success">"Spellistans miniatyrbild förändrades "</string>
<string name="playlist_thumbnail_change_success">Spellistans miniatyrbild förändrades</string>
<string name="playlist_delete_failure">Kunde inte ta bort spellistan</string>
<string name="caption_none">Ingen textning</string>
@ -449,7 +449,7 @@
<string name="playback_speed_control">Uppspelningshastighet Kontroller</string>
<string name="playback_tempo">Tempo</string>
<string name="playback_pitch">Pitch</string>
<string name="playback_pitch">Tonhöjd</string>
<string name="unhook_checkbox">Avlänka (kan orsaka förvrängning)</string>
<string name="skip_silence_checkbox">Snabbspola vid frånvaro av ljud</string>
<string name="playback_step">Steg</string>

View File

@ -53,7 +53,7 @@
<string name="show_next_and_similar_title">తదుపరి వీడియో మరియు ఇలాంటి వీడియో</string>
<string name="show_hold_to_append_title">చిట్కాను అనుబంధించడానికి హోల్డ్ను చూపు</string>
<string name="url_not_supported_toast">Url మద్దతు లేదు</string>
<string name="search_language_title">డిఫాల్ట్ భాష</string>
<string name="content_language_title">డిఫాల్ట్ భాష</string>
<string name="settings_category_player_title">ప్లేయర్</string>
<string name="settings_category_player_behavior_title">ప్రవర్తన</string>
<string name="settings_category_video_audio_title">వీడియో &amp; ఆడియో</string>

View File

@ -11,7 +11,7 @@
<string name="download">İndir</string>
<string name="search">Ara</string>
<string name="settings">Ayarlar</string>
<string name="did_you_mean">Bunu mu demek istediniz: %1$s ?</string>
<string name="did_you_mean">Bunu mu demek istediniz: %1$s\?</string>
<string name="share_dialog_title">Şununla paylaş</string>
<string name="choose_browser">Tarayıcı seç</string>
<string name="screen_rotation">döndürme</string>
@ -42,7 +42,7 @@
<string name="next_video_title">Sonraki video</string>
<string name="show_next_and_similar_title">\'Sonraki\' ve \'benzer\' videoları göster</string>
<string name="url_not_supported_toast">URL desteklenmiyor</string>
<string name="search_language_title">Öntanımlı içerik dili</string>
<string name="content_language_title">Öntanımlı içerik dili</string>
<string name="play_audio">Ses</string>
<string name="settings_category_video_audio_title">Video ve Ses</string>
<string name="settings_category_appearance_title">Görünüm</string>
@ -65,7 +65,7 @@
<string name="light_parsing_error">Web sitesi tümüyle ayrıştırılamadı</string>
<string name="content_not_available">İçerik kullanılabilir değil</string>
<string name="blocked_by_gema">GEMA tarafından engellendi</string>
<string name="live_streams_not_supported">Bu, henüz desteklenmeyen, bir CANLI AKIŞ.</string>
<string name="live_streams_not_supported">Bu, henüz desteklenmeyen bir CANLI AKIŞ.</string>
<string name="could_not_get_stream">Herhangi bir akış alınamadı</string>
<string name="could_not_load_image">Resim yüklenemedi</string>
<string name="app_ui_crash">Uygulama/arayüz çöktü</string>
@ -254,7 +254,7 @@
<string name="history_cleared">Geçmiş temizlendi</string>
<string name="item_deleted">Öge silindi</string>
<string name="delete_item_search_history">Bu içeriği arama geçmişinden silmek istiyor musunuz?</string>
<string name="show_hold_to_append_title">\"Kuyruğa almak İçin bas\" ipucunu göster</string>
<string name="show_hold_to_append_title">\"Kuyruğa almak için basılı tut\" ipucunu göster</string>
<string name="show_hold_to_append_summary">Video ayrıntıları sayfasında arka plan veya açılır oynatıcı düğmesine basıldığında ipucu göster</string>
<string name="background_player_append">Arka plan oynatıcıda kuyruğa eklendi</string>
<string name="popup_playing_append">ılır oynatıcıda kuyruğa eklendi</string>
@ -272,7 +272,7 @@
<string name="subscription_page_summary">Abonelik Sayfası</string>
<string name="feed_page_summary">Besleme Sayfası</string>
<string name="channel_page_summary">Kanal Sayfası</string>
<string name="select_a_channel">Bir kanal seç</string>
<string name="select_a_channel">Kanal seç</string>
<string name="no_channel_subscribed_yet">Henüz abone olunan kanal yok</string>
<string name="select_a_kiosk">Köşk seç</string>
@ -285,7 +285,7 @@
<string name="play_queue_remove">Kaldır</string>
<string name="play_queue_stream_detail">Ayrıntılar</string>
<string name="play_queue_audio_settings">Ses Ayarları</string>
<string name="hold_to_append">Kuyruğa Almak İçin Bas</string>
<string name="hold_to_append">Kuyruğa Almak İçin Basılı Tut</string>
<string name="enqueue_on_background">Arka Planda Kuyruğa Al</string>
<string name="enqueue_on_popup">ılır Oynatıcıda Kuyruğa Al</string>
<string name="start_here_on_main">Burada Oynatmaya Başla</string>
@ -334,9 +334,9 @@
<string name="controls_download_desc">Akış dosyasını indir.</string>
<string name="show_info">Bilgileri göster</string>
<string name="tab_bookmarks">Yer imleri</string>
<string name="tab_bookmarks">Yer İmleri</string>
<string name="controls_add_to_playlist_title">Şuna Ekle</string>
<string name="controls_add_to_playlist_title">Listeye Ekle</string>
<string name="detail_drag_description">Yeniden sıralamak için sürükle</string>
@ -380,7 +380,7 @@
<string name="normal_caption_font_size">Normal yazı tipi</string>
<string name="larger_caption_font_size">Daha büyük yazı tipi</string>
<string name="settings_category_debug_title">Hata Ayıklama</string>
<string name="drawer_header_action_paceholder_text">Yakında burada bir şeyler görünecek ;D</string>
<string name="drawer_header_action_paceholder_text">Yakında burada bir şeyler görünecek :)</string>
<string name="caption_auto_generated">Kendiliğinden Üretilmiş</string>
@ -435,7 +435,7 @@
\n
\nDevam etmek istiyor musunuz?</string>
<string name="download_thumbnail_title">Küçük resimleri yükle</string>
<string name="download_thumbnail_summary">Küçük resimlerin hepsinin yüklenmesini engellemek ve bellek ve veri kullanımını azaltmak için devre dışı bırakın. Bunu değiştirmek, hem bellekteki hem de diskteki resim önbelleğini temizler</string>
<string name="download_thumbnail_summary">Küçük resimlerin tümünün yüklenmesini engellemek, bellek ve veri kullanımını azaltmak için devre dışı bırakın. Bunu değiştirmek, hem bellekteki hem de diskteki resim önbelleğini temizler</string>
<string name="thumbnail_cache_wipe_complete_notice">Resim önbelleği temizlendi</string>
<string name="metadata_cache_wipe_title">Önbelleklenmiş üst veriyi temizle</string>
<string name="metadata_cache_wipe_summary">Önbelleklenmiş tüm web sayfası verisini kaldır</string>

Some files were not shown because too many files have changed in this diff Show More