diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 4a707ff0a..49e78e997 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -52,6 +52,7 @@ jobs: test-android: # macos has hardware acceleration. See android-emulator-runner action runs-on: macos-latest + timeout-minutes: 20 strategy: matrix: # api-level 19 is min sdk, but throws errors related to desugaring @@ -73,6 +74,13 @@ jobs: # workaround to emulator bug: https://github.com/ReactiveCircus/android-emulator-runner/issues/160 emulator-build: 7425822 script: ./gradlew connectedCheck --stacktrace + + - name: Upload test report when tests fail # because the printed out stacktrace (console) is too short, see also #7553 + uses: actions/upload-artifact@v2 + if: failure() + with: + name: android-test-report-api${{ matrix.api-level }} + path: app/build/reports/androidTests/connected/** sonar: runs-on: ubuntu-latest diff --git a/README.es.md b/README.es.md index 72fcc236c..bb579d6cb 100644 --- a/README.es.md +++ b/README.es.md @@ -18,7 +18,7 @@

Sitio WebBlogPreguntas FrecuentesPrensa


-*Lea esto en otros idiomas: [English](README.md), [한국어](README.ko.md), [Soomaali](README.so.md), [Português Brasil](README.pt_BR.md), [日本語](README.ja.md), [Română](README.ro.md), [Türkçe](README.tr.md).* +*Lea esto en otros idiomas: [English](README.md), [한국어](README.ko.md), [Soomaali](README.so.md), [Português Brasil](README.pt_BR.md), [日本語](README.ja.md), [Română](README.ro.md), [Türkçe](README.tr.md), [正體中文](README.zh_TW.md).* AVISO: ESTA ES UNA VERSIÓN BETA, POR LO TANTO, PUEDE ENCONTRAR BUGS. SI ENCUENTRA UNO ABRA UN ISSUE A TRAVÉS DE NUESTRO REPOSITORIO DE GITHUB. diff --git a/README.ja.md b/README.ja.md index 2deab555c..e40ad4332 100644 --- a/README.ja.md +++ b/README.ja.md @@ -17,7 +17,7 @@

ウェブサイトブログFAQニュース


-*他の言語で読む: [English](README.md), [Español](README.es.md), [한국어](README.ko.md), [Soomaali](README.so.md), [Português Brasil](README.pt_BR.md), [日本語](README.ja.md), [Română](README.ro.md), [Türkçe](README.tr.md)。* +*他の言語で読む: [English](README.md), [Español](README.es.md), [한국어](README.ko.md), [Soomaali](README.so.md), [Português Brasil](README.pt_BR.md), [日本語](README.ja.md), [Română](README.ro.md), [Türkçe](README.tr.md), [正體中文](README.zh_TW.md)。* 注意: これはベータ版のため、バグが発生する可能性があります。もしバグが発生した場合、GitHub のリポジトリで Issue を開いてください。 diff --git a/README.ko.md b/README.ko.md index 47ecd12bd..4daf526a3 100644 --- a/README.ko.md +++ b/README.ko.md @@ -17,7 +17,7 @@

WebsiteBlogFAQPress


-*Read this in other languages: [English](README.md), [Español](README.es.md), [한국어](README.ko.md), [Soomaali](README.so.md), [Português Brasil](README.pt_BR.md), [日本語](README.ja.md), [Română](README.ro.md), [Türkçe](README.tr.md).* +*Read this in other languages: [English](README.md), [Español](README.es.md), [한국어](README.ko.md), [Soomaali](README.so.md), [Português Brasil](README.pt_BR.md), [日本語](README.ja.md), [Română](README.ro.md), [Türkçe](README.tr.md), [正體中文](README.zh_TW.md).* 경고: 이 버전은 베타 버전이므로, 버그가 발생할 수도 있습니다. 만약 버그가 발생하였다면, 우리의 GITHUB 저장소에서 ISSUE를 열람하여 주십시오. diff --git a/README.md b/README.md index 492c3247f..ac961eaac 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@

WebsiteBlogFAQPress


-*Read this in other languages: [English](README.md), [Español](README.es.md), [한국어](README.ko.md), [Soomaali](README.so.md), [Português Brasil](README.pt_BR.md), [日本語](README.ja.md), [Română](README.ro.md), [Türkçe](README.tr.md).* +*Read this in other languages: [English](README.md), [Español](README.es.md), [한국어](README.ko.md), [Soomaali](README.so.md), [Português Brasil](README.pt_BR.md), [日本語](README.ja.md), [Română](README.ro.md), [Türkçe](README.tr.md), [正體中文](README.zh_TW.md).* WARNING: THIS IS A BETA VERSION, THEREFORE YOU MAY ENCOUNTER BUGS. IF YOU DO, OPEN AN ISSUE VIA OUR GITHUB REPOSITORY. diff --git a/README.pt_BR.md b/README.pt_BR.md index b1b70bcd6..36e44b103 100644 --- a/README.pt_BR.md +++ b/README.pt_BR.md @@ -18,7 +18,7 @@

SiteBlogFAQPress


-*Read this in other languages: [English](README.md), [Español](README.es.md), [한국어](README.ko.md), [Soomaali](README.so.md), [Português Brasil](README.pt_BR.md), [日本語](README.ja.md), [Română](README.ro.md), [Türkçe](README.tr.md).* +*Read this in other languages: [English](README.md), [Español](README.es.md), [한국어](README.ko.md), [Soomaali](README.so.md), [Português Brasil](README.pt_BR.md), [日本語](README.ja.md), [Română](README.ro.md), [Türkçe](README.tr.md), [正體中文](README.zh_TW.md).* AVISO: ESTA É UMA VERSÃO BETA, PORTANTO, VOCÊ PODE ENCONTRAR BUGS. ENCONTROU ALGUM, ABRA UM ISSUE ATRAVÉS DO NOSSO REPOSITÓRIO GITHUB. diff --git a/README.ro.md b/README.ro.md index b40015a11..b52339871 100644 --- a/README.ro.md +++ b/README.ro.md @@ -17,7 +17,7 @@

WebsiteBlogFAQPresă


-*Citiţi în alte limbi: [English](README.md), [Español](README.es.md), [한국어](README.ko.md), [Soomaali](README.so.md), [Português Brasil](README.pt_BR.md), [日本語](README.ja.md), [Română](README.ro.md), [Türkçe](README.tr.md).* +*Citiţi în alte limbi: [English](README.md), [Español](README.es.md), [한국어](README.ko.md), [Soomaali](README.so.md), [Português Brasil](README.pt_BR.md), [日本語](README.ja.md), [Română](README.ro.md), [Türkçe](README.tr.md), [正體中文](README.zh_TW.md).* Atenţionare: ACEASTA ESTE O VERSIUNE BETA, AŞA CĂ S-AR PUTE SĂ ÎNTÂLNIŢI ERORI. DACĂ SE ÎNTÂMPLĂ ACEST LUCRU, DESCHIDEŢI UN ISSUE PRIN REPSITORY-UL NOSTRU GITHUB. diff --git a/README.so.md b/README.so.md index 78cd65075..1195b9488 100644 --- a/README.so.md +++ b/README.so.md @@ -17,7 +17,7 @@

Website-kaMaqaaladaSu'aalaha Aalaa La-iswaydiiyoWarbaahinta


-*Ku akhri luuqad kale: [English](README.md), [Español](README.es.md), [한국어](README.ko.md), [Soomaali](README.so.md), [Português Brasil](README.pt_BR.md), [日本語](README.ja.md), [Română](README.ro.md), [Türkçe](README.tr.md).* +*Ku akhri luuqad kale: [English](README.md), [Español](README.es.md), [한국어](README.ko.md), [Soomaali](README.so.md), [Português Brasil](README.pt_BR.md), [日本語](README.ja.md), [Română](README.ro.md), [Türkçe](README.tr.md), [正體中文](README.zh_TW.md).* DIGNIIN: MIDKAN, NOOCA APP-KA EE HADDA WALI TIJAABO AYUU KU JIRAA, SIDAA DARTEED CILLADO AYAAD LA KULMI KARTAA. HADAAD LA KULANTO, KA FUR ARIN SHARAXAYA QAYBTANADA ARRIMAHA EE GITHUB-KA. diff --git a/README.tr.md b/README.tr.md index 1fa39d600..a0d231cf8 100644 --- a/README.tr.md +++ b/README.tr.md @@ -17,7 +17,7 @@

Web sitesiBlogSSSBasın


-*Bu sayfayı diğer dillerde okuyun: [English](README.md), [Español](README.es.md), [한국어](README.ko.md), [Soomaali](README.so.md), [Português Brasil](README.pt_BR.md), [日本語](README.ja.md), [Română](README.ro.md), [Türkçe](README.tr.md).* +*Bu sayfayı diğer dillerde okuyun: [English](README.md), [Español](README.es.md), [한국어](README.ko.md), [Soomaali](README.so.md), [Português Brasil](README.pt_BR.md), [日本語](README.ja.md), [Română](README.ro.md), [Türkçe](README.tr.md), [正體中文](README.zh_TW.md).* UYARI: BU SÜRÜM BETA SÜRÜMÜDÜR, BU NEDENLE HATALARLA KARŞILAŞABİLİRSİNİZ. HATA BULURSANIZ BU GITHUB DEPOSUNDA BUNU BİLDİRİN. diff --git a/README.zh_TW.md b/README.zh_TW.md new file mode 100644 index 000000000..e4d9d375d --- /dev/null +++ b/README.zh_TW.md @@ -0,0 +1,149 @@ +

+

NewPipe

+

輕巧的 Android 串流前端

+ +

Get it on F-Droid

+ +

+ + + + + + +

+
+

截圖說明功能安裝與更新貢獻捐款授權憑證

+

網站部落格FAQ媒體

+
+ +*其他語言: [English](README.md), [Español](README.es.md), [한국어](README.ko.md), [Soomaali](README.so.md), [Português Brasil](README.pt_BR.md), [日本語](README.ja.md), [Română](README.ro.md), [Türkçe](README.tr.md), [正體中文](README.zh_TW.md)* + +警告:這是測試版本,可能會發生錯誤。如果遇到錯誤,請在我們的 GITHUB REPO 開 ISSUE 回報。 + +將 NEWPIPE 或其任何分支上傳至 GOOGLE PLAY 商店違反了他們的使用者合約。 + + +## 截圖 + +[](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_01.png) +[](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_02.png) +[](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_03.png) +[](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_04.png) +[](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_05.png) +[](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_06.png) +[](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_07.png) +[](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_08.png) +[](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_09.png) +[](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_10.png) +[](fastlane/metadata/android/en-US/images/tenInchScreenshots/shot_11.png) +[](fastlane/metadata/android/en-US/images/tenInchScreenshots/shot_12.png) + + +## 說明 + +NewPipe 不使用任何 Google 架構的函式庫或 Youtube API。因為只解析網站來取得必要資訊,此軟體可以在沒有安裝 Google 服務的裝置上使用。此外,使用 NewPipe 不需要 YouTube 帳號。NewPipe 是個 copyleft 自由軟體。 + + +### 功能 + +* 搜索影片 +* 無須登入 +* 顯示影片的基本資訊 +* 播放 Youtube 影片 +* 收聽 Youtube 影片 +* 彈出模式(懸浮模式) +* 選擇串流播放器來播放影片 +* 下載影片 +* 只下載音訊 +* 在 Kodi 開啟影片 +* 顯示上/下一部影片 +* 搜尋特定語言的影片 +* 播放/屏蔽有年齡限的制內容 +* 顯示頻道資訊 +* 搜索頻道 +* 觀看頻道影片 +* 支援 Orbot/Tor (目前未直接實裝) +* 支援 1080p/2K/4K +* 觀看歷史 +* 訂閱頻道 +* 搜尋歷史 +* 搜索/播放播放清單 +* 將播放清單加入待播清單 +* 將影片加入待播清單 +* 末端播放清單 +* 字幕 +* 支援直播 +* 顯示評論 + +### 支援的網站 + +NewPipe 支援多種服務。我們的[使用文件](https://teamnewpipe.github.io/documentation/)有如何增加新服務與下載器的說明。想新增服務的話,請聯絡我們。目前支援的服務有: + +* YouTube +* SoundCloud \[測試\] +* media.ccc.de \[測試\] +* PeerTube instances \[測試\] +* Bandcamp \[測試\] + + + + + +## 安裝與更新 +你可以用以下的任何方法安裝 NewPipe: +1. 將我們的 repo 加至 F-Droid 再從那邊安裝。詳細的說明在此:https://newpipe.net/FAQ/tutorials/install-add-fdroid-repo/ +2. 從 [Github 發布](https://github.com/TeamNewPipe/NewPipe/releases) 下載 APK 再安裝。 +3. 自 F-Droid 更新。這是取得更新最慢的方式,因為 F-Droid 要檢測到更新、建置 APK 、簽署後才會將更新推送給使用者。 +4. 自己建置 APK。這是取得更新最快的方法,但因為這也比較複雜,所以我們推薦使用其他方法。 + +對一般的使用者我們推薦方法一。使用方法一或二安裝的 APK 互相相容,但都不相容於方法三。因為前兩者的簽章使用相同的(我們的)金鑰,與後者(使用 F-Droid 的金鑰)的不同。使用方法四建置除錯 APK 完全避免了金鑰的問題。簽章金鑰能幫助使用者避免安裝惡意的更新。 + +若你想更換安裝來源(如果 NewPipe 的核心機能壞掉而 F-Droid 又還沒有最新的更新),我們推薦以下的步驟: +1. 在 設定 > 內容 > 匯出資料庫 備份資料以保留歷史、訂閱與播放清單 +2. 移除 NewPipe +3. 從新的來源下載 APK 並安裝 +4. 在 設定 > 內容 > 匯入資料庫 匯入在步驟 1 備份的資料 + + +## 貢獻 +若你有任何想法、翻譯、設計、整理原始碼或大範圍的原始碼改動,我們歡迎任何幫助。 + +若你想參與,請閱讀[貢獻須知(英文)](.github/CONTRIBUTING.md)。 + + +Translation status + + + +## 捐款 +若你喜歡 NewPipe 我們歡迎捐款。你可以使用 bitcoin ,也能在 Bountysource 或 Liberapay 上捐款。 更多關於捐款資訊,請見我們的[網站](https://newpipe.net/donate)。 + + + + + + + + + + + + + + + + + +
BitcoinBitcoin QR code16A9J59ahMRqkLSZjhYj33n9j3fMztFxnh
LiberapayVisit NewPipe at liberapay.comDonate via Liberapay
BountysourceVisit NewPipe at bountysource.comCheck out how many bounties you can earn.
+ +## 隱私權政策 +NewPipe 專案旨在提供私人與匿名的網路媒體使用體驗。 +因此,此軟體不在沒有你的同意下收集任何資料。NewPipe 的隱私權政策說明了送出錯誤報告與在我們的部落格上留言時何種資料會被傳輸或儲存。你可以在[這裡](https://newpipe.net/legal/privacy/)找到此文件。 + + +## 授權條款 +[![GNU GPLv3 Image](https://www.gnu.org/graphics/gplv3-127x51.png)](https://www.gnu.org/licenses/gpl-3.0.en.html) + +NewPipe 是自由軟體:可以任意使用、研究、分享或更改。在自由軟體基金會發布的[ GPL 通用公眾授權條款](第三或更新的版本)下可以重新散佈與/或修改。 + diff --git a/app/build.gradle b/app/build.gradle index 3b02cc757..d085d9f7e 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -113,6 +113,7 @@ ext { leakCanaryVersion = '2.5' stethoVersion = '1.6.0' mockitoVersion = '4.0.0' + assertJVersion = '3.22.0' } configurations { @@ -293,6 +294,7 @@ dependencies { androidTestImplementation "androidx.test.ext:junit:1.1.3" androidTestImplementation "androidx.test:runner:1.4.0" androidTestImplementation "androidx.room:room-testing:${androidxRoomVersion}" + androidTestImplementation "org.assertj:assertj-core:${assertJVersion}" } static String getGitWorkingBranch() { diff --git a/app/src/androidTest/java/org/schabi/newpipe/local/history/HistoryRecordManagerTest.kt b/app/src/androidTest/java/org/schabi/newpipe/local/history/HistoryRecordManagerTest.kt index 3f3a038d8..c32a43b2a 100644 --- a/app/src/androidTest/java/org/schabi/newpipe/local/history/HistoryRecordManagerTest.kt +++ b/app/src/androidTest/java/org/schabi/newpipe/local/history/HistoryRecordManagerTest.kt @@ -1,19 +1,19 @@ package org.schabi.newpipe.local.history import androidx.test.core.app.ApplicationProvider +import org.assertj.core.api.Assertions.assertThat import org.junit.After import org.junit.Assert.assertEquals -import org.junit.Assert.assertTrue import org.junit.Before import org.junit.Rule import org.junit.Test -import org.junit.rules.Timeout import org.schabi.newpipe.database.AppDatabase import org.schabi.newpipe.database.history.model.SearchHistoryEntry import org.schabi.newpipe.testUtil.TestDatabase import org.schabi.newpipe.testUtil.TrampolineSchedulerRule +import java.time.LocalDateTime import java.time.OffsetDateTime -import java.util.concurrent.TimeUnit +import java.time.ZoneOffset class HistoryRecordManagerTest { @@ -23,9 +23,6 @@ class HistoryRecordManagerTest { @get:Rule val trampolineScheduler = TrampolineSchedulerRule() - @get:Rule - val timeout = Timeout(1, TimeUnit.SECONDS) - @Before fun setup() { database = TestDatabase.createReplacingNewPipeDatabase() @@ -45,59 +42,59 @@ class HistoryRecordManagerTest { // that the number of Lists it returns is exactly 1, we can only check if the first List is // correct. Why on earth has a Flowable been used instead of a Single for getAll()?!? val entities = database.searchHistoryDAO().all.blockingFirst() - assertEquals(1, entities.size) - assertEquals(1, entities[0].id) - assertEquals(0, entities[0].serviceId) - assertEquals("Hello", entities[0].search) + assertThat(entities).hasSize(1) + assertThat(entities[0].id).isEqualTo(1) + assertThat(entities[0].serviceId).isEqualTo(0) + assertThat(entities[0].search).isEqualTo("Hello") } @Test fun deleteSearchHistory() { val entries = listOf( - SearchHistoryEntry(OffsetDateTime.now(), 0, "A"), - SearchHistoryEntry(OffsetDateTime.now(), 2, "A"), - SearchHistoryEntry(OffsetDateTime.now(), 1, "B"), - SearchHistoryEntry(OffsetDateTime.now(), 0, "B"), + SearchHistoryEntry(time.minusSeconds(1), 0, "A"), + SearchHistoryEntry(time.minusSeconds(2), 2, "A"), + SearchHistoryEntry(time.minusSeconds(3), 1, "B"), + SearchHistoryEntry(time.minusSeconds(4), 0, "B"), ) // make sure all 4 were inserted database.searchHistoryDAO().insertAll(entries) - assertEquals(entries.size, database.searchHistoryDAO().all.blockingFirst().size) + assertThat(database.searchHistoryDAO().all.blockingFirst()).hasSameSizeAs(entries) // try to delete only "A" entries, "B" entries should be untouched manager.deleteSearchHistory("A").test().await().assertValue(2) val entities = database.searchHistoryDAO().all.blockingFirst() - assertEquals(2, entities.size) - assertTrue(entries[2].hasEqualValues(entities[0])) - assertTrue(entries[3].hasEqualValues(entities[1])) + assertThat(entities).hasSize(2) + assertThat(entities).usingElementComparator { o1, o2 -> if (o1.hasEqualValues(o2)) 0 else 1 } + .containsExactly(*entries.subList(2, 4).toTypedArray()) // assert that nothing happens if we delete a search query that does exist in the db manager.deleteSearchHistory("A").test().await().assertValue(0) val entities2 = database.searchHistoryDAO().all.blockingFirst() - assertEquals(2, entities2.size) - assertTrue(entries[2].hasEqualValues(entities2[0])) - assertTrue(entries[3].hasEqualValues(entities2[1])) + assertThat(entities2).hasSize(2) + assertThat(entities2).usingElementComparator { o1, o2 -> if (o1.hasEqualValues(o2)) 0 else 1 } + .containsExactly(*entries.subList(2, 4).toTypedArray()) // delete all remaining entries manager.deleteSearchHistory("B").test().await().assertValue(2) - assertEquals(0, database.searchHistoryDAO().all.blockingFirst().size) + assertThat(database.searchHistoryDAO().all.blockingFirst()).isEmpty() } @Test fun deleteCompleteSearchHistory() { val entries = listOf( - SearchHistoryEntry(OffsetDateTime.now(), 1, "A"), - SearchHistoryEntry(OffsetDateTime.now(), 2, "B"), - SearchHistoryEntry(OffsetDateTime.now(), 0, "C"), + SearchHistoryEntry(time.minusSeconds(1), 1, "A"), + SearchHistoryEntry(time.minusSeconds(2), 2, "B"), + SearchHistoryEntry(time.minusSeconds(3), 0, "C"), ) // make sure all 3 were inserted database.searchHistoryDAO().insertAll(entries) - assertEquals(entries.size, database.searchHistoryDAO().all.blockingFirst().size) + assertThat(database.searchHistoryDAO().all.blockingFirst()).hasSameSizeAs(entries) // should remove everything manager.deleteCompleteSearchHistory().test().await().assertValue(entries.size) - assertEquals(0, database.searchHistoryDAO().all.blockingFirst().size) + assertThat(database.searchHistoryDAO().all.blockingFirst()).isEmpty() } @Test @@ -111,11 +108,12 @@ class HistoryRecordManagerTest { // make sure correct number of searches is returned and in correct order val searches = manager.getRelatedSearches("", 6, 4).blockingFirst() - assertEquals(4, searches.size) - assertEquals(RELATED_SEARCHES_ENTRIES[6].search, searches[0]) // A (even if in two places) - assertEquals(RELATED_SEARCHES_ENTRIES[4].search, searches[1]) // B - assertEquals(RELATED_SEARCHES_ENTRIES[5].search, searches[2]) // AA - assertEquals(RELATED_SEARCHES_ENTRIES[2].search, searches[3]) // BA + assertThat(searches).containsExactly( + RELATED_SEARCHES_ENTRIES[6].search, // A (even if in two places) + RELATED_SEARCHES_ENTRIES[4].search, // B + RELATED_SEARCHES_ENTRIES[5].search, // AA + RELATED_SEARCHES_ENTRIES[2].search, // BA + ) } @Test @@ -129,25 +127,28 @@ class HistoryRecordManagerTest { // make sure correct number of searches is returned and in correct order val searches = manager.getRelatedSearches("A", 3, 5).blockingFirst() - assertEquals(3, searches.size) - assertEquals(RELATED_SEARCHES_ENTRIES[6].search, searches[0]) // A (even if in two places) - assertEquals(RELATED_SEARCHES_ENTRIES[5].search, searches[1]) // AA - assertEquals(RELATED_SEARCHES_ENTRIES[1].search, searches[2]) // BA + assertThat(searches).containsExactly( + RELATED_SEARCHES_ENTRIES[6].search, // A (even if in two places) + RELATED_SEARCHES_ENTRIES[5].search, // AA + RELATED_SEARCHES_ENTRIES[1].search, // BA + ) // also make sure that the string comparison is case insensitive val searches2 = manager.getRelatedSearches("a", 3, 5).blockingFirst() - assertEquals(searches, searches2) + assertThat(searches).isEqualTo(searches2) } companion object { - val RELATED_SEARCHES_ENTRIES = listOf( - SearchHistoryEntry(OffsetDateTime.now().minusSeconds(7), 2, "AC"), - SearchHistoryEntry(OffsetDateTime.now().minusSeconds(6), 0, "ABC"), - SearchHistoryEntry(OffsetDateTime.now().minusSeconds(5), 1, "BA"), - SearchHistoryEntry(OffsetDateTime.now().minusSeconds(4), 3, "A"), - SearchHistoryEntry(OffsetDateTime.now().minusSeconds(2), 0, "B"), - SearchHistoryEntry(OffsetDateTime.now().minusSeconds(3), 2, "AA"), - SearchHistoryEntry(OffsetDateTime.now().minusSeconds(1), 1, "A"), + private val time = OffsetDateTime.of(LocalDateTime.of(2000, 1, 1, 1, 1), ZoneOffset.UTC) + + private val RELATED_SEARCHES_ENTRIES = listOf( + SearchHistoryEntry(time.minusSeconds(7), 2, "AC"), + SearchHistoryEntry(time.minusSeconds(6), 0, "ABC"), + SearchHistoryEntry(time.minusSeconds(5), 1, "BA"), + SearchHistoryEntry(time.minusSeconds(4), 3, "A"), + SearchHistoryEntry(time.minusSeconds(2), 0, "B"), + SearchHistoryEntry(time.minusSeconds(3), 2, "AA"), + SearchHistoryEntry(time.minusSeconds(1), 1, "A"), ) } } diff --git a/app/src/androidTest/java/org/schabi/newpipe/local/playlist/LocalPlaylistManagerTest.kt b/app/src/androidTest/java/org/schabi/newpipe/local/playlist/LocalPlaylistManagerTest.kt index 249492d8f..c392d8d3d 100644 --- a/app/src/androidTest/java/org/schabi/newpipe/local/playlist/LocalPlaylistManagerTest.kt +++ b/app/src/androidTest/java/org/schabi/newpipe/local/playlist/LocalPlaylistManagerTest.kt @@ -4,13 +4,11 @@ import org.junit.After import org.junit.Before import org.junit.Rule import org.junit.Test -import org.junit.rules.Timeout import org.schabi.newpipe.database.AppDatabase import org.schabi.newpipe.database.stream.model.StreamEntity import org.schabi.newpipe.extractor.stream.StreamType import org.schabi.newpipe.testUtil.TestDatabase import org.schabi.newpipe.testUtil.TrampolineSchedulerRule -import java.util.concurrent.TimeUnit class LocalPlaylistManagerTest { @@ -20,9 +18,6 @@ class LocalPlaylistManagerTest { @get:Rule val trampolineScheduler = TrampolineSchedulerRule() - @get:Rule - val timeout = Timeout(1, TimeUnit.SECONDS) - @Before fun setup() { database = TestDatabase.createReplacingNewPipeDatabase() diff --git a/app/src/main/java/org/schabi/newpipe/database/history/model/SearchHistoryEntry.java b/app/src/main/java/org/schabi/newpipe/database/history/model/SearchHistoryEntry.java deleted file mode 100644 index fd4588700..000000000 --- a/app/src/main/java/org/schabi/newpipe/database/history/model/SearchHistoryEntry.java +++ /dev/null @@ -1,79 +0,0 @@ -package org.schabi.newpipe.database.history.model; - -import androidx.room.ColumnInfo; -import androidx.room.Entity; -import androidx.room.Ignore; -import androidx.room.Index; -import androidx.room.PrimaryKey; - -import java.time.OffsetDateTime; - -import static org.schabi.newpipe.database.history.model.SearchHistoryEntry.SEARCH; - -@Entity(tableName = SearchHistoryEntry.TABLE_NAME, - indices = {@Index(value = SEARCH)}) -public class SearchHistoryEntry { - public static final String ID = "id"; - public static final String TABLE_NAME = "search_history"; - public static final String SERVICE_ID = "service_id"; - public static final String CREATION_DATE = "creation_date"; - public static final String SEARCH = "search"; - - @ColumnInfo(name = ID) - @PrimaryKey(autoGenerate = true) - private long id; - - @ColumnInfo(name = CREATION_DATE) - private OffsetDateTime creationDate; - - @ColumnInfo(name = SERVICE_ID) - private int serviceId; - - @ColumnInfo(name = SEARCH) - private String search; - - public SearchHistoryEntry(final OffsetDateTime creationDate, final int serviceId, - final String search) { - this.serviceId = serviceId; - this.creationDate = creationDate; - this.search = search; - } - - public long getId() { - return id; - } - - public void setId(final long id) { - this.id = id; - } - - public OffsetDateTime getCreationDate() { - return creationDate; - } - - public void setCreationDate(final OffsetDateTime creationDate) { - this.creationDate = creationDate; - } - - public int getServiceId() { - return serviceId; - } - - public void setServiceId(final int serviceId) { - this.serviceId = serviceId; - } - - public String getSearch() { - return search; - } - - public void setSearch(final String search) { - this.search = search; - } - - @Ignore - public boolean hasEqualValues(final SearchHistoryEntry otherEntry) { - return getServiceId() == otherEntry.getServiceId() - && getSearch().equals(otherEntry.getSearch()); - } -} diff --git a/app/src/main/java/org/schabi/newpipe/database/history/model/SearchHistoryEntry.kt b/app/src/main/java/org/schabi/newpipe/database/history/model/SearchHistoryEntry.kt new file mode 100644 index 000000000..8cb9a25ca --- /dev/null +++ b/app/src/main/java/org/schabi/newpipe/database/history/model/SearchHistoryEntry.kt @@ -0,0 +1,40 @@ +package org.schabi.newpipe.database.history.model + +import androidx.room.ColumnInfo +import androidx.room.Entity +import androidx.room.Ignore +import androidx.room.Index +import androidx.room.PrimaryKey +import java.time.OffsetDateTime + +@Entity( + tableName = SearchHistoryEntry.TABLE_NAME, + indices = [Index(value = [SearchHistoryEntry.SEARCH])] +) +data class SearchHistoryEntry( + @field:ColumnInfo(name = CREATION_DATE) var creationDate: OffsetDateTime?, + @field:ColumnInfo( + name = SERVICE_ID + ) var serviceId: Int, + @field:ColumnInfo(name = SEARCH) var search: String? +) { + @ColumnInfo(name = ID) + @PrimaryKey(autoGenerate = true) + var id: Long = 0 + + @Ignore + fun hasEqualValues(otherEntry: SearchHistoryEntry): Boolean { + return ( + serviceId == otherEntry.serviceId && + search == otherEntry.search + ) + } + + companion object { + const val ID = "id" + const val TABLE_NAME = "search_history" + const val SERVICE_ID = "service_id" + const val CREATION_DATE = "creation_date" + const val SEARCH = "search" + } +} diff --git a/app/src/main/java/org/schabi/newpipe/fragments/detail/VideoDetailFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/detail/VideoDetailFragment.java index 5a74dc948..05630ef79 100644 --- a/app/src/main/java/org/schabi/newpipe/fragments/detail/VideoDetailFragment.java +++ b/app/src/main/java/org/schabi/newpipe/fragments/detail/VideoDetailFragment.java @@ -1098,6 +1098,11 @@ public final class VideoDetailFragment toggleFullscreenIfInFullscreenMode(); + if (isPlayerAvailable()) { + // FIXME Workaround #7427 + player.setRecovery(); + } + if (!useExternalAudioPlayer) { openNormalBackgroundPlayer(append); } else { @@ -1114,6 +1119,9 @@ public final class VideoDetailFragment // See UI changes while remote playQueue changes if (!isPlayerAvailable()) { playerHolder.startService(false, this); + } else { + // FIXME Workaround #7427 + player.setRecovery(); } toggleFullscreenIfInFullscreenMode(); @@ -2208,12 +2216,20 @@ public final class VideoDetailFragment mainFragment.setDescendantFocusability(afterDescendants); toolbar.setDescendantFocusability(afterDescendants); ((ViewGroup) requireView()).setDescendantFocusability(blockDescendants); - mainFragment.requestFocus(); + // Only focus the mainFragment if the mainFragment (e.g. search-results) + // or the toolbar (e.g. Textfield for search) don't have focus. + // This was done to fix problems with the keyboard input, see also #7490 + if (!mainFragment.hasFocus() && !toolbar.hasFocus()) { + mainFragment.requestFocus(); + } } else { mainFragment.setDescendantFocusability(blockDescendants); toolbar.setDescendantFocusability(blockDescendants); ((ViewGroup) requireView()).setDescendantFocusability(afterDescendants); - binding.detailThumbnailRootLayout.requestFocus(); + // Only focus the player if it not already has focus + if (!binding.getRoot().hasFocus()) { + binding.detailThumbnailRootLayout.requestFocus(); + } } } diff --git a/app/src/main/java/org/schabi/newpipe/fragments/list/playlist/PlaylistFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/list/playlist/PlaylistFragment.java index a61cec11d..85c47ec74 100644 --- a/app/src/main/java/org/schabi/newpipe/fragments/list/playlist/PlaylistFragment.java +++ b/app/src/main/java/org/schabi/newpipe/fragments/list/playlist/PlaylistFragment.java @@ -268,7 +268,10 @@ public class PlaylistFragment extends BaseListInfoFragment { ShareUtils.openUrlInBrowser(requireContext(), url); break; case R.id.menu_item_share: - ShareUtils.shareText(requireContext(), name, url, currentInfo.getThumbnailUrl()); + if (currentInfo != null) { + ShareUtils.shareText(requireContext(), name, url, + currentInfo.getThumbnailUrl()); + } break; case R.id.menu_item_bookmark: onBookmarkClicked(); diff --git a/app/src/main/java/org/schabi/newpipe/local/feed/FeedFragment.kt b/app/src/main/java/org/schabi/newpipe/local/feed/FeedFragment.kt index 5b593bcd7..905290b48 100644 --- a/app/src/main/java/org/schabi/newpipe/local/feed/FeedFragment.kt +++ b/app/src/main/java/org/schabi/newpipe/local/feed/FeedFragment.kt @@ -271,7 +271,7 @@ class FeedFragment : BaseStateFragment() { override fun onDestroyView() { // Ensure that all animations are canceled - feedBinding.newItemsLoadedButton?.clearAnimation() + tryGetNewItemsLoadedButton()?.clearAnimation() feedBinding.itemsList.adapter = null _feedBinding = null diff --git a/app/src/main/java/org/schabi/newpipe/player/Player.java b/app/src/main/java/org/schabi/newpipe/player/Player.java index c038f5573..81ef25db1 100644 --- a/app/src/main/java/org/schabi/newpipe/player/Player.java +++ b/app/src/main/java/org/schabi/newpipe/player/Player.java @@ -635,6 +635,7 @@ public final class Player implements final boolean isMuted = intent.getBooleanExtra(IS_MUTED, isMuted()); /* + * TODO As seen in #7427 this does not work: * There are 3 situations when playback shouldn't be started from scratch (zero timestamp): * 1. User pressed on a timestamp link and the same video should be rewound to the timestamp * 2. User changed a player from, for example. main to popup, or from audio to main, etc diff --git a/app/src/main/java/org/schabi/newpipe/util/NavigationHelper.java b/app/src/main/java/org/schabi/newpipe/util/NavigationHelper.java index e68009d41..80d1b25ae 100644 --- a/app/src/main/java/org/schabi/newpipe/util/NavigationHelper.java +++ b/app/src/main/java/org/schabi/newpipe/util/NavigationHelper.java @@ -157,9 +157,8 @@ public final class NavigationHelper { return; } - if (PlayerHolder.getInstance().getType() != PlayerType.POPUP) { - Toast.makeText(context, R.string.popup_playing_toast, Toast.LENGTH_SHORT).show(); - } + Toast.makeText(context, R.string.popup_playing_toast, Toast.LENGTH_SHORT).show(); + final Intent intent = getPlayerIntent(context, MainPlayer.class, queue, resumePlayback); intent.putExtra(Player.PLAYER_TYPE, MainPlayer.PlayerType.POPUP.ordinal()); ContextCompat.startForegroundService(context, intent); @@ -168,12 +167,7 @@ public final class NavigationHelper { public static void playOnBackgroundPlayer(final Context context, final PlayQueue queue, final boolean resumePlayback) { - Toast.makeText( - context, - PlayerHolder.getInstance().getType() == PlayerType.AUDIO - ? R.string.background_player_already_playing_toast - : R.string.background_player_playing_toast, - Toast.LENGTH_SHORT) + Toast.makeText(context, R.string.background_player_playing_toast, Toast.LENGTH_SHORT) .show(); final Intent intent = getPlayerIntent(context, MainPlayer.class, queue, resumePlayback); diff --git a/app/src/main/java/org/schabi/newpipe/util/StreamDialogEntry.java b/app/src/main/java/org/schabi/newpipe/util/StreamDialogEntry.java index 0ffbe4137..bb1cbbeae 100644 --- a/app/src/main/java/org/schabi/newpipe/util/StreamDialogEntry.java +++ b/app/src/main/java/org/schabi/newpipe/util/StreamDialogEntry.java @@ -2,6 +2,7 @@ package org.schabi.newpipe.util; import android.content.Context; import android.net.Uri; +import android.util.Log; import android.widget.Toast; import androidx.fragment.app.Fragment; @@ -21,6 +22,7 @@ import org.schabi.newpipe.util.external_communication.ShareUtils; import java.util.Collections; import java.util.List; +import java.util.function.Consumer; import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers; import io.reactivex.rxjava3.schedulers.Schedulers; @@ -63,20 +65,24 @@ public enum StreamDialogEntry { * Info: Add this entry within showStreamDialog. */ enqueue(R.string.enqueue_stream, (fragment, item) -> { - NavigationHelper.enqueueOnPlayer(fragment.getContext(), new SinglePlayQueue(item)); + fetchItemInfoIfSparse(fragment, item, fullItem -> + NavigationHelper.enqueueOnPlayer(fragment.getContext(), fullItem)); }), enqueue_next(R.string.enqueue_next_stream, (fragment, item) -> { - NavigationHelper.enqueueNextOnPlayer(fragment.getContext(), new SinglePlayQueue(item)); + fetchItemInfoIfSparse(fragment, item, fullItem -> + NavigationHelper.enqueueNextOnPlayer(fragment.getContext(), fullItem)); }), - start_here_on_background(R.string.start_here_on_background, (fragment, item) -> - NavigationHelper.playOnBackgroundPlayer(fragment.getContext(), - new SinglePlayQueue(item), true)), + start_here_on_background(R.string.start_here_on_background, (fragment, item) -> { + fetchItemInfoIfSparse(fragment, item, fullItem -> + NavigationHelper.playOnBackgroundPlayer(fragment.getContext(), fullItem, true)); + }), - start_here_on_popup(R.string.start_here_on_popup, (fragment, item) -> - NavigationHelper.playOnPopupPlayer(fragment.getContext(), - new SinglePlayQueue(item), true)), + start_here_on_popup(R.string.start_here_on_popup, (fragment, item) -> { + fetchItemInfoIfSparse(fragment, item, fullItem -> + NavigationHelper.playOnPopupPlayer(fragment.getContext(), fullItem, true)); + }), set_as_playlist_thumbnail(R.string.set_as_playlist_thumbnail, (fragment, item) -> { }), // has to be set manually @@ -218,4 +224,39 @@ public enum StreamDialogEntry { fragment.requireActivity().getSupportFragmentManager(), item.getServiceId(), uploaderUrl, item.getUploaderName()); } + + ///////////////////////////////////////////// + // helper functions // + ///////////////////////////////////////////// + + private static void fetchItemInfoIfSparse(final Fragment fragment, + final StreamInfoItem item, + final Consumer callback) { + if (!(item.getStreamType() == StreamType.LIVE_STREAM + || item.getStreamType() == StreamType.AUDIO_LIVE_STREAM) + && item.getDuration() < 0) { + // Sparse item: fetched by fast fetch + ExtractorHelper.getStreamInfo( + item.getServiceId(), + item.getUrl(), + false + ) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(result -> { + final HistoryRecordManager recordManager = + new HistoryRecordManager(fragment.getContext()); + recordManager.saveStreamState(result, 0) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .doOnError(throwable -> Log.e("StreamDialogEntry", + throwable.toString())) + .subscribe(); + + callback.accept(new SinglePlayQueue(result)); + }, throwable -> Log.e("StreamDialogEntry", throwable.toString())); + } else { + callback.accept(new SinglePlayQueue(item)); + } + } } diff --git a/app/src/main/res/layout-large-land/fragment_video_detail.xml b/app/src/main/res/layout-large-land/fragment_video_detail.xml index 98b24f511..1ee11c49b 100644 --- a/app/src/main/res/layout-large-land/fragment_video_detail.xml +++ b/app/src/main/res/layout-large-land/fragment_video_detail.xml @@ -651,7 +651,6 @@ android:layout_height="60dp" android:layout_alignParentStart="true" android:background="@color/transparent_background_color" - android:contentDescription="@string/list_thumbnail_view_description" android:gravity="center_vertical" android:paddingLeft="@dimen/video_item_search_padding" android:paddingRight="@dimen/video_item_search_padding" diff --git a/app/src/main/res/layout/fragment_video_detail.xml b/app/src/main/res/layout/fragment_video_detail.xml index b7d97cac5..23c9a166a 100644 --- a/app/src/main/res/layout/fragment_video_detail.xml +++ b/app/src/main/res/layout/fragment_video_detail.xml @@ -626,7 +626,6 @@ android:layout_height="60dp" android:layout_alignParentStart="true" android:background="@color/transparent_background_color" - android:contentDescription="@string/list_thumbnail_view_description" android:gravity="center_vertical" android:paddingLeft="@dimen/video_item_search_padding" android:paddingRight="@dimen/video_item_search_padding" diff --git a/app/src/main/res/layout/list_channel_item.xml b/app/src/main/res/layout/list_channel_item.xml index 6af6add2b..e302af0c5 100644 --- a/app/src/main/res/layout/list_channel_item.xml +++ b/app/src/main/res/layout/list_channel_item.xml @@ -63,7 +63,6 @@ android:layout_width="@dimen/video_item_search_thumbnail_image_width" android:layout_height="@dimen/video_item_search_thumbnail_image_height" android:layout_marginRight="@dimen/video_item_search_image_right_margin" - android:contentDescription="@string/list_thumbnail_view_description" android:src="@drawable/buddy" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toStartOf="@+id/itemTitleView" diff --git a/app/src/main/res/layout/list_channel_mini_item.xml b/app/src/main/res/layout/list_channel_mini_item.xml index cc91b858f..650685d50 100644 --- a/app/src/main/res/layout/list_channel_mini_item.xml +++ b/app/src/main/res/layout/list_channel_mini_item.xml @@ -15,7 +15,6 @@ android:layout_height="42dp" android:layout_centerVertical="true" android:layout_marginRight="12dp" - android:contentDescription="@string/list_thumbnail_view_description" android:src="@drawable/buddy_channel_item" tools:ignore="RtlHardcoded" /> diff --git a/app/src/main/res/layout/list_comments_item.xml b/app/src/main/res/layout/list_comments_item.xml index c76444212..81f27aaca 100644 --- a/app/src/main/res/layout/list_comments_item.xml +++ b/app/src/main/res/layout/list_comments_item.xml @@ -18,7 +18,6 @@ android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:layout_marginRight="@dimen/video_item_search_image_right_margin" - android:contentDescription="@string/list_thumbnail_view_description" android:focusable="false" android:src="@drawable/buddy" tools:ignore="RtlHardcoded" /> diff --git a/app/src/main/res/layout/list_comments_mini_item.xml b/app/src/main/res/layout/list_comments_mini_item.xml index 02bba4063..604854a39 100644 --- a/app/src/main/res/layout/list_comments_mini_item.xml +++ b/app/src/main/res/layout/list_comments_mini_item.xml @@ -16,7 +16,6 @@ android:layout_height="42dp" android:layout_centerVertical="true" android:layout_marginRight="12dp" - android:contentDescription="@string/list_thumbnail_view_description" android:src="@drawable/buddy_channel_item" tools:ignore="RtlHardcoded" /> diff --git a/app/src/main/res/layout/list_playlist_grid_item.xml b/app/src/main/res/layout/list_playlist_grid_item.xml index 0c9390455..270abbde8 100644 --- a/app/src/main/res/layout/list_playlist_grid_item.xml +++ b/app/src/main/res/layout/list_playlist_grid_item.xml @@ -17,7 +17,6 @@ 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_playlist" tools:ignore="RtlHardcoded" /> diff --git a/app/src/main/res/layout/list_playlist_item.xml b/app/src/main/res/layout/list_playlist_item.xml index 390528de1..84cce8395 100644 --- a/app/src/main/res/layout/list_playlist_item.xml +++ b/app/src/main/res/layout/list_playlist_item.xml @@ -18,7 +18,6 @@ android:layout_alignParentLeft="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" /> diff --git a/app/src/main/res/layout/list_playlist_mini_item.xml b/app/src/main/res/layout/list_playlist_mini_item.xml index 835b18a6e..fe40449c6 100644 --- a/app/src/main/res/layout/list_playlist_mini_item.xml +++ b/app/src/main/res/layout/list_playlist_mini_item.xml @@ -18,7 +18,6 @@ android:layout_alignParentLeft="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" /> diff --git a/app/src/main/res/layout/list_stream_grid_item.xml b/app/src/main/res/layout/list_stream_grid_item.xml index fc6e03648..e770e6614 100644 --- a/app/src/main/res/layout/list_stream_grid_item.xml +++ b/app/src/main/res/layout/list_stream_grid_item.xml @@ -14,7 +14,6 @@ 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:contentDescription="@string/list_thumbnail_view_description" android:scaleType="centerCrop" android:src="@drawable/dummy_thumbnail" app:layout_constraintEnd_toEndOf="parent" diff --git a/app/src/main/res/layout/list_stream_item.xml b/app/src/main/res/layout/list_stream_item.xml index 7f2f74c64..5806ed96e 100644 --- a/app/src/main/res/layout/list_stream_item.xml +++ b/app/src/main/res/layout/list_stream_item.xml @@ -14,7 +14,6 @@ android:id="@+id/itemThumbnailView" android:layout_width="@dimen/video_item_search_thumbnail_image_width" android:layout_height="@dimen/video_item_search_thumbnail_image_height" - android:contentDescription="@string/list_thumbnail_view_description" android:scaleType="centerCrop" android:src="@drawable/dummy_thumbnail" app:layout_constraintBottom_toTopOf="@+id/itemProgressView" diff --git a/app/src/main/res/layout/list_stream_mini_item.xml b/app/src/main/res/layout/list_stream_mini_item.xml index 4c68d9001..5de3eac46 100644 --- a/app/src/main/res/layout/list_stream_mini_item.xml +++ b/app/src/main/res/layout/list_stream_mini_item.xml @@ -17,7 +17,6 @@ android:layout_alignParentLeft="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" tools:ignore="RtlHardcoded" /> diff --git a/app/src/main/res/layout/list_stream_playlist_grid_item.xml b/app/src/main/res/layout/list_stream_playlist_grid_item.xml index c8b360062..ac57ae378 100644 --- a/app/src/main/res/layout/list_stream_playlist_grid_item.xml +++ b/app/src/main/res/layout/list_stream_playlist_grid_item.xml @@ -17,7 +17,6 @@ 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" /> diff --git a/app/src/main/res/layout/list_stream_playlist_item.xml b/app/src/main/res/layout/list_stream_playlist_item.xml index 58a4b917f..9ac1045e2 100644 --- a/app/src/main/res/layout/list_stream_playlist_item.xml +++ b/app/src/main/res/layout/list_stream_playlist_item.xml @@ -18,7 +18,6 @@ android:layout_alignParentLeft="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" tools:ignore="RtlHardcoded" /> diff --git a/app/src/main/res/layout/picker_subscription_item.xml b/app/src/main/res/layout/picker_subscription_item.xml index be26d064c..5f0344057 100644 --- a/app/src/main/res/layout/picker_subscription_item.xml +++ b/app/src/main/res/layout/picker_subscription_item.xml @@ -21,7 +21,6 @@ android:id="@+id/thumbnail_view" android:layout_width="48dp" android:layout_height="48dp" - android:contentDescription="@string/list_thumbnail_view_description" tools:src="@drawable/buddy_channel_item" /> diff --git a/app/src/main/res/mipmap-xhdpi/newpipe_tv_banner.png b/app/src/main/res/mipmap-xhdpi/newpipe_tv_banner.png index 49800ec19..b57cb4b99 100644 Binary files a/app/src/main/res/mipmap-xhdpi/newpipe_tv_banner.png and b/app/src/main/res/mipmap-xhdpi/newpipe_tv_banner.png differ diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index 62d6f4e31..ffd2b92b0 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -21,7 +21,6 @@ تثبيت تطبيق Kore غير موجود. هل تريد تثبيته؟ فاتح - صور معاينة الفيديو خطأ في الشبكة لم يتم العثور على مشغل بث. تثبيت VLC؟ افتح في المتصفح diff --git a/app/src/main/res/values-b+ast/strings.xml b/app/src/main/res/values-b+ast/strings.xml index 513dd5170..cbb668684 100644 --- a/app/src/main/res/values-b+ast/strings.xml +++ b/app/src/main/res/values-b+ast/strings.xml @@ -458,7 +458,6 @@ Arrastra pa reordenar Avatar del xubidor Reproducción d\'un videu, duración: - Miniatura del videu Un comentariu (n\'inglés): Qué pasó: Informar diff --git a/app/src/main/res/values-b+uz+Latn/strings.xml b/app/src/main/res/values-b+uz+Latn/strings.xml index 59530ee86..050f55a4a 100644 --- a/app/src/main/res/values-b+uz+Latn/strings.xml +++ b/app/src/main/res/values-b+uz+Latn/strings.xml @@ -288,7 +288,6 @@ Layklar Yuklovchining avatar eskizi Videoni ijro etish muddati, davomiyligi: - Videoni oldindan ko\'rish uchun eskiz Detallar: Sizning sharhingiz (ingliz tilida): Nima: \\n So\'rov: \\nTarkib tili: \\nTarkib mamlakati: \\nIlova tili: \\ nXizmat: \\ nGMT vaqti: \\ nPaket: \\ nVersion: \\ nOS versiyasi: diff --git a/app/src/main/res/values-b+zh+HANS+CN/strings.xml b/app/src/main/res/values-b+zh+HANS+CN/strings.xml index 25e92d4af..be31d04a8 100644 --- a/app/src/main/res/values-b+zh+HANS+CN/strings.xml +++ b/app/src/main/res/values-b+zh+HANS+CN/strings.xml @@ -155,7 +155,6 @@ 详情:\\n请求:\\n内容语言:\\n内容国家:\\n客户端语言:\\n服务:\\nGMT时间:\\n包名:\\n版本:\\n操作系统版本: 您的附加说明(请用英文): 详细信息: - 视频预览缩略图 播放视频,时长: 视频上传者的头像缩略图 十亿 diff --git a/app/src/main/res/values-be/strings.xml b/app/src/main/res/values-be/strings.xml index 5dd5daca1..a6f21866d 100644 --- a/app/src/main/res/values-be/strings.xml +++ b/app/src/main/res/values-be/strings.xml @@ -153,7 +153,6 @@ Што:\\nЗапыт:\\nМова кантэнту:\\nСэрвіс:\\nЧас па Грынвічы:\\nПакет:\\nВерсія:\\nВерсія АС: Ваш каментар (English): Падрабязнасці: - Мініяцюра відэа-прэв\'ю Мініяцюра відэа-прэв\'ю Мініяцюра аватара карыстальніка Спадабалася diff --git a/app/src/main/res/values-bg/strings.xml b/app/src/main/res/values-bg/strings.xml index 447f0a964..32109a4a9 100644 --- a/app/src/main/res/values-bg/strings.xml +++ b/app/src/main/res/values-bg/strings.xml @@ -213,7 +213,6 @@ Не са намерени видео стриймове Не са намерени аудио стриймове Какво:\\nЗаявка:\\nЕзик на съдържанието:\\nУслуга:\\nВреме по GMT:\\nПакет:\\nВерсия:\\nОС версия: - Миниатюра на видео Пренареди чрез плъзгане Начало Преименувай diff --git a/app/src/main/res/values-bn-rBD/strings.xml b/app/src/main/res/values-bn-rBD/strings.xml index d561d52e8..8a014cdf8 100644 --- a/app/src/main/res/values-bn-rBD/strings.xml +++ b/app/src/main/res/values-bn-rBD/strings.xml @@ -77,7 +77,6 @@ তোমার মন্তব্য (ইংরেজিতে): বর্ণনা: - ভিডিও প্রাকদর্শন থাম্বনেইল ভিডিও প্রাকদর্শন, সময়ঃ আপলোডারের ইউজারপিক থাম্বনেইল পছন্দ হয়েছে diff --git a/app/src/main/res/values-bn-rIN/strings.xml b/app/src/main/res/values-bn-rIN/strings.xml index 94fa9ee9e..edf38d3eb 100644 --- a/app/src/main/res/values-bn-rIN/strings.xml +++ b/app/src/main/res/values-bn-rIN/strings.xml @@ -31,7 +31,6 @@ পছন্দ হয়েছে আপলোডারের ইউজারপিক থাম্বনেইল ভিডিও প্রাকদর্শন, সময়ঃ - ভিডিও প্রাকদর্শন থাম্বনেইল বর্ণনা: আপনার মন্তব্য (ইংরেজিতে): কি:\\nঅনুরোধ:\\nকন্টেন্ট ভাষা:\\nসার্ভিস:\\nসময়(GMT এ):\\nপ্যাকেজ:\\nসংস্করণ:\\nওএস সংস্করণ:\\nআইপি পরিসর: diff --git a/app/src/main/res/values-bn/strings.xml b/app/src/main/res/values-bn/strings.xml index 649f648a8..c4773637a 100644 --- a/app/src/main/res/values-bn/strings.xml +++ b/app/src/main/res/values-bn/strings.xml @@ -116,7 +116,6 @@ পছন্দ আপলোডারের অবয়বের প্রতিচ্ছবি ভিডিও চালাও, সময়ঃ - ভিডিও প্রাকদর্শন প্রতিচ্ছবি বর্ণনা: তোমার মন্তব্য (ইংরেজিতে): কি:\\nঅনুরোধ:\\nকন্টেন্ট ভাষা:\\nসার্ভিস:\\nসময়(GMT এ):\\nপ্যাকেজ:\\nসংস্করণ:\\nওএস সংস্করণ:\\nআইপি পরিসর: diff --git a/app/src/main/res/values-ca/strings.xml b/app/src/main/res/values-ca/strings.xml index ec9a0f608..40e30928a 100644 --- a/app/src/main/res/values-ca/strings.xml +++ b/app/src/main/res/values-ca/strings.xml @@ -161,7 +161,6 @@ Què ha passat: Comentari (en anglès): Detalls: - Miniatura de previsualització del vídeo Reprodueix el vídeo, duració: Miniatura de l\'avatar del propietari M\'agrada diff --git a/app/src/main/res/values-ckb/strings.xml b/app/src/main/res/values-ckb/strings.xml index cf04ff89c..e42f10aa5 100644 --- a/app/src/main/res/values-ckb/strings.xml +++ b/app/src/main/res/values-ckb/strings.xml @@ -177,7 +177,6 @@ خستنه‌ نۆبه‌تی-خۆكاری په‌خشی دواتر لێده‌ره‌ دەرەکییەکان پشتگیری ئەم جۆرە بەستەرانە ناکەن کردار ڕەتکرایەوە لەلایەن سیستەمەوە - زووبینینی وێنۆچکەی ڤیدیۆ په‌نجه‌ره‌ ڕه‌ش قه‌باره‌ی بنەڕەتی په‌نجه‌ره‌ diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index 957fe6e91..98b632692 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -42,7 +42,6 @@ Nebylo možné dekódovat URL videa Nebylo možné analyzovat stránku Obsah není k dispozici - Náhled videa Přehrát video, délka: Náhled avataru uploadera To se mi líbí diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml index d59c35edb..7e75ca57b 100644 --- a/app/src/main/res/values-da/strings.xml +++ b/app/src/main/res/values-da/strings.xml @@ -171,7 +171,6 @@ Hvad skete der: Din kommentar (på engelsk): Detaljer: - Videominiaturebillede Videominiaturebillede Uploaders profilbillede Synes godt om diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index b69c87f39..7786d9d8b 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -26,7 +26,6 @@ Nicht unterstützte URL Video und Audio Bevorzugte Sprache des Inhalts - Video-Vorschaubild Video abspielen, Dauer: Avatarbild des Benutzers Gefällt mir nicht diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml index 108c0474f..46ef00f66 100644 --- a/app/src/main/res/values-el/strings.xml +++ b/app/src/main/res/values-el/strings.xml @@ -37,7 +37,6 @@ Εμφάνιση Αναπαραγωγή στο παρασκήνιο Σφάλμα δικτύου - Μικρογραφία προεπισκόπησης βίντεο Αναπαραγωγή βίντεο, διάρκεια: Μικρογραφία εικόνας προφίλ του χρήστη Like diff --git a/app/src/main/res/values-eo/strings.xml b/app/src/main/res/values-eo/strings.xml index ac6a1af30..1ff87940b 100644 --- a/app/src/main/res/values-eo/strings.xml +++ b/app/src/main/res/values-eo/strings.xml @@ -38,7 +38,6 @@ Ĉiuj bildetoj ne ŝargeblas La subskribo de la ligilo de la filmeto ne malĉifreblas La retejo ne analizeblas - Bildeto de la antaŭrigardo de la filmeto Ludi filmeton, daŭro: Bildeto de la alŝutinto Elŝutujo por filmetoj diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 3daa7a5d4..78d6713e9 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -42,7 +42,6 @@ No se pudo analizar el sitio web Mostrar vídeos \'Siguientes\' y \'Similares\' Idioma predefinido del contenido - Miniatura de previsualización del vídeo Reproducir vídeo; duración: Me gusta No me gusta diff --git a/app/src/main/res/values-et/strings.xml b/app/src/main/res/values-et/strings.xml index 2b36f6453..0468a982b 100644 --- a/app/src/main/res/values-et/strings.xml +++ b/app/src/main/res/values-et/strings.xml @@ -148,7 +148,6 @@ Mis:\\nPäring:\\nSisu keel:\\nSisu maa:\\nRakenduse keel:\\nTeenus:\\nGMT aeg:\\nPakett:\\nVersioon:\\nOS versioon: Oma kommentaar (inglise keeles): Üksikasjad: - Video eelvaate pisipilt Esita video, kestus: Üleslaadiaja avatari pisipilt Meeldib diff --git a/app/src/main/res/values-eu/strings.xml b/app/src/main/res/values-eu/strings.xml index 88f27b920..97b407275 100644 --- a/app/src/main/res/values-eu/strings.xml +++ b/app/src/main/res/values-eu/strings.xml @@ -24,7 +24,6 @@ URLak ez du euskarririk Edukiaren hizkuntz lehenetsia Bideoa eta audioa - Bideoaren aurreikuspen argazkitxoa Erreproduzitu bideoa, iraupena: Igotzailearen abatarraren iruditxoa Ez dute gustoko diff --git a/app/src/main/res/values-fa/strings.xml b/app/src/main/res/values-fa/strings.xml index 518ad7e1c..48a41c588 100644 --- a/app/src/main/res/values-fa/strings.xml +++ b/app/src/main/res/values-fa/strings.xml @@ -58,7 +58,6 @@ چه روی داد: توضیح شما (به انگلیسی): جزییات: - بندانگشتی پیش‌نمایش ویدیو پخش ویدیو، مدت زمان: بندانگشتی کاربر بارگذاری کننده پسندها diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml index 27d38f43f..7373acdf9 100644 --- a/app/src/main/res/values-fi/strings.xml +++ b/app/src/main/res/values-fi/strings.xml @@ -95,7 +95,6 @@ Mitä tapahtui: Sinun viesti (englanniksi): Yksityiskohdat: - Videon esikatselukuva Toista video, kesto: Lataajan hahmokuvake Tykkäykset diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 638695ffe..da3a33a36 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -25,7 +25,6 @@ Afficher les vidéos « Suivantes » et « Similaires » URL non pris en charge Vidéo et audio - Miniature d’aperçu vidéo Lecture vidéo, durée : Je n’aime pas J’aime diff --git a/app/src/main/res/values-gl/strings.xml b/app/src/main/res/values-gl/strings.xml index accd13d8e..6d3c1f1b0 100644 --- a/app/src/main/res/values-gl/strings.xml +++ b/app/src/main/res/values-gl/strings.xml @@ -152,7 +152,6 @@ Que: \\n Solicitar: \\n Idioma de contido: \\n País de contido: \\n Idioma do aplicativo: \\nServicio: \\n Tempo GMT: \\n Paquete: \\n Versión: \\n versión de nOS: O teu comentario (en inglés): Detalles: - Miniatura do vídeo Reproducir o vídeo, duración: Miniatura do avatar do autor Gosto diff --git a/app/src/main/res/values-he/strings.xml b/app/src/main/res/values-he/strings.xml index 1bb11399f..b629f4f7a 100644 --- a/app/src/main/res/values-he/strings.xml +++ b/app/src/main/res/values-he/strings.xml @@ -105,7 +105,6 @@ מתבצעת החלמה משגיאת נגן ההערה שלך (באנגלית): פרטים: - תמונה ממוזערת לתצוגה המקדימה של הסרטון נגינת סרטון, משך: תמונה ייצוגית של המפרסם אהבו diff --git a/app/src/main/res/values-hi/strings.xml b/app/src/main/res/values-hi/strings.xml index a9c6bca1c..65e8a3fa4 100644 --- a/app/src/main/res/values-hi/strings.xml +++ b/app/src/main/res/values-hi/strings.xml @@ -119,7 +119,6 @@ क्या:\\nमांग:\\nविषयवस्तु की भाषा:\\nसेवा:\\nजीएमटी समय:\\nपैकेज:\\nसंस्करण:\\nOS संस्करण: आपकी टिप्पणी: विवरण: - विडियो के thumbnail के पूर्व दर्शन वीडियो चलाये, समय : अपलोडर के thumbnail वाले फोटो पसंद diff --git a/app/src/main/res/values-hr/strings.xml b/app/src/main/res/values-hr/strings.xml index 7b5ba37bd..162dc77ad 100644 --- a/app/src/main/res/values-hr/strings.xml +++ b/app/src/main/res/values-hr/strings.xml @@ -92,7 +92,6 @@ Što:\\nZahtjev:\\nJezik sadržaja:\\nZemlja sadržaja:\\nJezik programa:\\nUsluga:\\nGMT vrijeme:\\nPaket:\\nVerzija:\\nVerzija OS-a: Vaš komentar (na engleskom): Detalji: - Sličica pregleda videozapisa Pokreni video, trajanje: Profilna slika prenositelja Goreglasovi diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index 364b88919..4b7871d79 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -39,7 +39,6 @@ A letöltött hangfájlok itt találhatóak Tetszik Nem tetszik - Előnézeti kép Videó lejátszása, hossz: Fetöltő profilképe Tartalom diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml index fe26f32b7..3253bade1 100644 --- a/app/src/main/res/values-in/strings.xml +++ b/app/src/main/res/values-in/strings.xml @@ -55,7 +55,6 @@ Yang terjadi: Komentar Anda (dalam bahasa Inggris): Detail: - Thumbnail pratinjau video Putar video, durasi: Suka Thumbnail avatar pengunggah diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 42d31308f..c65eeff80 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -26,7 +26,6 @@ URL non supportato Lingua predefinita per i contenuti Video e audio - Copertina di anteprima video Riproduci video, durata: Immagine dell\'utente Non mi piace diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index 418b363ee..66a877c76 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -26,7 +26,6 @@ 対応していないURLです デフォルトの言語 動画と音声 - 動画 プレビュー サムネイル ビデオ再生、時間: 投稿者アイコンのサムネイル 低評価 diff --git a/app/src/main/res/values-kmr/strings.xml b/app/src/main/res/values-kmr/strings.xml index 2ed1163f3..b87b84741 100644 --- a/app/src/main/res/values-kmr/strings.xml +++ b/app/src/main/res/values-kmr/strings.xml @@ -65,7 +65,6 @@ Evîn Nîgariya avatar ya barkêşker Vîdeo, demdirêj bilîze: - Pêşniyara vîdyoyê wêneyê piçûk Hûrî: Şîroveya we (bi Îngilîzî): Çi:\\nRequest:\\nContent Language:\\nContent Welat:\\nApp Language:\\nService:\\nGMT Dem:\\nPackage:\\nVersion:\\nOS version: diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index 7befbb800..bf1e63051 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -26,7 +26,6 @@ 지원하지 않는 URL입니다 기본 컨텐츠 언어 비디오 & 오디오 - 비디오 미리보기 썸네일 비디오 재생, 구간: 업로더 썸네일 싫어요 diff --git a/app/src/main/res/values-ku/strings.xml b/app/src/main/res/values-ku/strings.xml index 883347e62..85dc66f60 100644 --- a/app/src/main/res/values-ku/strings.xml +++ b/app/src/main/res/values-ku/strings.xml @@ -127,7 +127,6 @@ چی ڕوویدا: لێدوانەکەت (بە ئینگلیزی): وردەکارییەکان: - پێشبینین ی وێنۆچکەی ڤیدیۆ کارپێکردنی ڤیدیۆ، ماوەی: وێنۆچکەی کەسی بەرزکەرەوە بەدڵبوون diff --git a/app/src/main/res/values-lt/strings.xml b/app/src/main/res/values-lt/strings.xml index 34871cd61..e58a888e1 100644 --- a/app/src/main/res/values-lt/strings.xml +++ b/app/src/main/res/values-lt/strings.xml @@ -79,7 +79,6 @@ Kas:\\nUžklausa:\\nTurinio Kalba:\\nTurinio Šalis:\\nProgramėlės Kalba:\\nPaslauga:\\nGMT Laikas:\\nPaketas:\\nVersija:\\nOS versija: Jūsų komentaras (anglų kalba): Išsami informacija: - Vaizdo įrašo peržiūros miniatiūra Paleisti vaizdo įrašą, trukmė: Įkėlėjo naudotojo paveikslėlio miniatiūra Pamėgimai diff --git a/app/src/main/res/values-lv/strings.xml b/app/src/main/res/values-lv/strings.xml index 9e6bdebe7..306a6da32 100644 --- a/app/src/main/res/values-lv/strings.xml +++ b/app/src/main/res/values-lv/strings.xml @@ -153,7 +153,6 @@ Patīk Autora avatāra attēls Atskaņot video, ilgums: - Video priekšskatījuma attēls Detaļas: Jūsu komentārs (Angliski): Kas:\\nRequest:\\nContent Valoda:\\nContent Valsts:\\nApp Valoda:\\nService:\\nGMT Laiks:\\nPackage:\\nVersion:\\nOS versija: diff --git a/app/src/main/res/values-mk/strings.xml b/app/src/main/res/values-mk/strings.xml index d925e2970..392bc39d2 100644 --- a/app/src/main/res/values-mk/strings.xml +++ b/app/src/main/res/values-mk/strings.xml @@ -140,7 +140,6 @@ Што:\\nБарање:\\nЈазик на Содрж.:\\nУслуга:\\nGMT Час:\\nПакет:\\nВерзија:\\nВерз. на ОС: Ваш коментар (на Англиски): Детали: - Сликичка за преглед на видеото Сликичка за преглед на видеото Икона од аватарот на објавителот Допаѓања diff --git a/app/src/main/res/values-ml/strings.xml b/app/src/main/res/values-ml/strings.xml index 2fd7fbc99..0672b0233 100644 --- a/app/src/main/res/values-ml/strings.xml +++ b/app/src/main/res/values-ml/strings.xml @@ -198,7 +198,6 @@ ലൈക്കുകൾ അപ്‌ലോഡറുടെ ലഘുചിത്രം പ്ലേ വീഡിയോ, ദൈർഘ്യം: - വീഡിയോ ലഘുചിത്രം വിശദാംശങ്ങൾ: നിങ്ങളുടെ അഭിപ്രായം (ഇംഗ്ലീഷിൽ): എന്ത് സംഭവിച്ചു: diff --git a/app/src/main/res/values-ms/strings.xml b/app/src/main/res/values-ms/strings.xml index 6af6ec25d..87ab37fda 100644 --- a/app/src/main/res/values-ms/strings.xml +++ b/app/src/main/res/values-ms/strings.xml @@ -169,7 +169,6 @@ Apa:\\nPermintaan:\\nBahasa Kandungan:\\nNegara Kandungan:\\nBahasa Aplikasi:\\nPerkhidmatan:\\nWaktu GMT:\\nPakej:\\nVersi:\\nVersi OS: Ulasan anda (dalam bahasa Inggeris): Butiran: - Thumbnail pratonton video Main video, tempoh masa: Thumbnail avatar pemuatnaik Suka diff --git a/app/src/main/res/values-nb-rNO/strings.xml b/app/src/main/res/values-nb-rNO/strings.xml index 58dcca87c..9e0753f14 100644 --- a/app/src/main/res/values-nb-rNO/strings.xml +++ b/app/src/main/res/values-nb-rNO/strings.xml @@ -37,7 +37,6 @@ Utseende Spiller i bakgrunnen Nettverksfeil - Video-forhåndsvisning i miniatyrbilde Spill av video, varighet: Opplasterens avatar Nikk diff --git a/app/src/main/res/values-ne/strings.xml b/app/src/main/res/values-ne/strings.xml index 71c9e107f..d9abdfefd 100644 --- a/app/src/main/res/values-ne/strings.xml +++ b/app/src/main/res/values-ne/strings.xml @@ -174,7 +174,6 @@ के:\\nअनुरोध:\\nसामग्री भाषा: \\nसेवा:\\nGMT समय:\\nप्याकेज:\\nसंस्करण: \\nOS संस्करण: तपाईंको टिप्पणी (अंग्रेजी मा): विवरण: - सामग्री वर्णन (राम्रो पहुँच लागि) प्ले भिडियो, अवधि: अपलोडरको अवतार थम्बनेल मनपर्दो diff --git a/app/src/main/res/values-nl-rBE/strings.xml b/app/src/main/res/values-nl-rBE/strings.xml index c80016b2b..599958ae0 100644 --- a/app/src/main/res/values-nl-rBE/strings.xml +++ b/app/src/main/res/values-nl-rBE/strings.xml @@ -141,7 +141,6 @@ Wat:\\nVerzoek:\\nTaal van inhoud:\\nLand:\\nTaal van applicatie:\\nDienst:\\nGMT tijd:\\nPakket:\\nVersie:\\nVersie van besturingssysteem: Uw opmerking (in het Engels): Details: - Videovoorbeeldminiatuur Speel video, tijd: Avatarminiatuur van uploader Duimen diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index 98e4fb98a..db409f505 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -28,7 +28,6 @@ Externe videospeler gebruiken Externe audiospeler gebruiken Video en audio - Videovoorbeeldminiatuur Speel video, tijd: Gebruikersafbeelding van uploader Vind-ik-niet-leuks diff --git a/app/src/main/res/values-pa/strings.xml b/app/src/main/res/values-pa/strings.xml index 91a86aa59..a74567270 100644 --- a/app/src/main/res/values-pa/strings.xml +++ b/app/src/main/res/values-pa/strings.xml @@ -147,7 +147,6 @@ ਕੀ:\\nRequest:\\nContent ਭਾਸ਼ਾ/ਬੋਲੀ:\\nContent Country:\\nApp ਭਾਸ਼ਾ/ਬੋਲੀ:\\nService:\\nGMT ਸਮਾਂ:\\nPackage:\\nVersion:\\nOS version: ਤੁਹਾਡੀ ਟਿੱਪਣੀ (ਅੰਗਰੇਜ਼ੀ ਵਿਚ): ਵੇਰਵੇ: - ਵੀਡੀਓ preview thumbnail ਵਿਡੀਉ ਚਲਾਓ, ਮਿਆਦ: ਅਪਲੋਡਰ ਦਾ ਅਵਤਾਰ thumbnail ਪਸੰਦ diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index 7ce6d919b..b6e5de47b 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -59,7 +59,6 @@ Co:\\nŻądanie:\\nJęzyk treści:\\nKraj treści:\\nJęzyk aplikacji:\\nUsługa:\\nCzas GMT:\\nPakiet:\\nWersja:\\nWersja systemu: Twój komentarz (po angielsku): Szczegóły: - Miniatura podglądu wideo Odtwarzane wideo, czas trwania: Miniatura awatara przesyłającego Polubienia diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 8b3044e81..01abc413e 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -70,7 +70,6 @@ Vídeos baixados são salvos aqui Pasta para vídeos baixados Instalar o aplicativo Kore\? - Miniatura de visualização do vídeo Toque na lupa para começar. Threads Por favor, defina uma pasta de download depois nas configurações diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml index 8c10670dc..89868c573 100644 --- a/app/src/main/res/values-pt-rPT/strings.xml +++ b/app/src/main/res/values-pt-rPT/strings.xml @@ -444,7 +444,6 @@ Tempo após a última atualização antes de a subscrição ser considerada desatualizada - %s Pesquisar Atualizações - Miniatura do vídeo Atualizações Iniciar transferências Guardar termos de pesquisa localmente diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index 170628393..40e39802c 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -28,7 +28,6 @@ URL não suportado Idioma padrão para conteúdo Vídeo e áudio - Miniatura do vídeo Reproduzir vídeo, duração: Miniatura do avatar do canal Não gosto diff --git a/app/src/main/res/values-ro/strings.xml b/app/src/main/res/values-ro/strings.xml index ce949a97d..cbfa004ae 100644 --- a/app/src/main/res/values-ro/strings.xml +++ b/app/src/main/res/values-ro/strings.xml @@ -45,7 +45,6 @@ Nu s-a putut analiza site-ul web Conținut indisponibil Nu s-a putut configura meniul de descărcare - Miniatura de previzualizare video Redare video, durata: Miniatura avatarului autorului Au apreciat diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index c77cbc588..7d0da8992 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -27,7 +27,6 @@ Язык контента по умолчанию Видео и аудио Внешний вид - Миниатюра видео-превью Воспроизвести видео, длительность: Миниатюра аватара пользователя Не понравилось diff --git a/app/src/main/res/values-sc/strings.xml b/app/src/main/res/values-sc/strings.xml index 2413b4a0d..0d9dbe2e0 100644 --- a/app/src/main/res/values-sc/strings.xml +++ b/app/src/main/res/values-sc/strings.xml @@ -180,7 +180,6 @@ Agradessimentos Miniadura de s\'avatar de su carrigadore Riprodui su vìdeu, longària: - Miniadura de anteprima de su vìdeu Detàllios: Su cummentu tuo (in inglesu): Ite est acontèssidu: diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml index f6891bd1c..6bf4452a7 100644 --- a/app/src/main/res/values-sk/strings.xml +++ b/app/src/main/res/values-sk/strings.xml @@ -42,7 +42,6 @@ Nepodarilo sa dekódovať URL videa Nemožno analyzovať webovú stránku Obsah nie je dostupný - Náhľad videa Prehrať video, dĺžka: Náhľad avataru uploadera Lajky diff --git a/app/src/main/res/values-sl/strings.xml b/app/src/main/res/values-sl/strings.xml index e9afcee70..e56e0caa5 100644 --- a/app/src/main/res/values-sl/strings.xml +++ b/app/src/main/res/values-sl/strings.xml @@ -27,7 +27,6 @@ Nepodprt URL Privzeti jezik vsebine Video in zvok - Sličica predogleda videa Predvajaj video, dolžina: Sličica objavitelja Pokaži možnost predvajanja videa preko predstavnega središča Kodi diff --git a/app/src/main/res/values-so/strings.xml b/app/src/main/res/values-so/strings.xml index a113094da..bd1612011 100644 --- a/app/src/main/res/values-so/strings.xml +++ b/app/src/main/res/values-so/strings.xml @@ -259,7 +259,6 @@ Sawirka u saaran soosaareha Daar muuqaalka, intuu socdo: Shayga:\\nCodsiga:\\nLuuqada Shayga:\\nWadanka Shayga:\\nLuuqada Appka:\\nAdeega:\\nWakhtiga oo GMT ah:\\nXidhmada:\\nTirsiga Appka:\\nTirsiga Nooca Barnaamijka: - Galka muuqaal tusaha Faahfaahin: Faalladaada (oo Ingiriis ah): Waxa dhacay: diff --git a/app/src/main/res/values-sq/strings.xml b/app/src/main/res/values-sq/strings.xml index d8bcb6fd1..7ad5848cc 100644 --- a/app/src/main/res/values-sq/strings.xml +++ b/app/src/main/res/values-sq/strings.xml @@ -313,7 +313,6 @@ Pëlqimet Pamja statike e fotos së ngarkuesit Luaje videon, kohëzgjatja: - Pamjet statike të parapamjes së videove Detajet: Komenti juaj (në Anglisht): Çfarë:\\nKërkesa:\\nGjuha e përmbajtjes:\\nShteti i pëmbajtjes:\\nGjuha e aplikacionit:\\nShërbimi:\\nKoha në GMT:\\nPaketa:\\nVersioni:\\nVersioni i sistemit operativ: diff --git a/app/src/main/res/values-sr/strings.xml b/app/src/main/res/values-sr/strings.xml index de3e8de9c..2d77567fc 100644 --- a/app/src/main/res/values-sr/strings.xml +++ b/app/src/main/res/values-sr/strings.xml @@ -26,7 +26,6 @@ Прикажи „следећи“ и „слични“ видео Подразумевани језик садржаја Видео и аудио - Сличица видео прегледа Пусти видео, трајање: Аватар пошиљаоца Несвиђања diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index 5cb3bd7f2..fc431e80a 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -107,7 +107,6 @@ Återhämtar sig från spelarfel Rapportera detta fel via e-post Vad:\\nBegäran:\\nInnehållsspråk:\\nInnehållsland:\\nApp-språk:\\nTjänst:\\nGMT-tid:\\nPaket:\\nVersion:\\nOS-version: - Videons miniatyrbild Spela video, längd: Uppladdarens avatar-miniatyrbild Inga resultat diff --git a/app/src/main/res/values-ta/strings.xml b/app/src/main/res/values-ta/strings.xml index d1ae9ee8a..5c1e38214 100644 --- a/app/src/main/res/values-ta/strings.xml +++ b/app/src/main/res/values-ta/strings.xml @@ -135,7 +135,6 @@ மின்னஞ்சல் மூலம் பிழையை தெரிவிக்கவும் என்ன நடந்தது: உங்கள் கருத்து: - காணொளி முன்தோற்றம் வெறுப்புகள் பின் தொடர்பவர்கள் இல்லை diff --git a/app/src/main/res/values-te/strings.xml b/app/src/main/res/values-te/strings.xml index 872e1e8d1..bfdaa9609 100644 --- a/app/src/main/res/values-te/strings.xml +++ b/app/src/main/res/values-te/strings.xml @@ -71,7 +71,6 @@ ఏం జరిగింది: మీ వ్యాఖ్య(ఆంగ్లం లో): వివరములు: - వీడియో ప్రివ్యూ సూక్ష్మచిత్రం వీడియోని ప్లే చేయండి, వ్యవధి: ఇష్టాలు మంది ఇష్టపడలేదు diff --git a/app/src/main/res/values-th/strings.xml b/app/src/main/res/values-th/strings.xml index 01946c321..bf8e56d75 100644 --- a/app/src/main/res/values-th/strings.xml +++ b/app/src/main/res/values-th/strings.xml @@ -163,7 +163,6 @@ เกิดอะไรขึ้น: ความคิดเห็นของคุณ (เป็นภาษาอังกฤษ): รายละเอียด: - ภาพขนาดย่อของตัวอย่างวิดีโอ ภาพของตัวอย่างวิดีโอขนาดย่อ รูปขนาดย่อของผู้อัปโหลด ชอบ diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 13e6ede22..607d00e12 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -90,7 +90,6 @@ Devre dışı Yorumunuz (İngilizce): Ayrıntılar: - Video ön izleme küçük resmi b M B diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 5d90ebf40..e6baece4d 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -63,7 +63,6 @@ Збій застосунку/інтерфейсу Ваш коментар (англійською): Деталі: - Зображення відео перед його переглядом Відтворити відео, тривалість: Відео Аудіо diff --git a/app/src/main/res/values-ur/strings.xml b/app/src/main/res/values-ur/strings.xml index ba43cdd61..02dccfc97 100644 --- a/app/src/main/res/values-ur/strings.xml +++ b/app/src/main/res/values-ur/strings.xml @@ -140,7 +140,6 @@ کیا ہوا:\\nدرخواست:\\nمواد کی زبان:\\nملک:\\nایپ کی زبان:\\nسروس:\\nجی ایم ٹٰ:\\nوقت:\\nپیکیج:\\nورژن:\\nآپریٹنگ سسٹم ورزن: آپ کا تبصرہ (انگریزی میں): تفصیلات: - ویڈیو پیش منظر انگشتی ویڈیو چلائیں، دورانیہ: اپ لوڈر کا اوتار نظرِ انگشتی پسندیدگی diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml index 79b60b71e..8efea3ca4 100644 --- a/app/src/main/res/values-vi/strings.xml +++ b/app/src/main/res/values-vi/strings.xml @@ -77,7 +77,6 @@ Cái gì:\\nYêu cầu:\\nNgôn ngữ của nội dung:\\nVùng miền (quốc gia) của nội dung:\\nNgôn ngữ của ứng dụng:\\nDịch vụ:\\nThời gian GMT:\\nTên gói:\\nPhiên bản:\\nPhiên bản hệ điều hành: Nhận xét của bạn (bằng tiếng Anh): Chi tiết: - Hình thu nhỏ xem trước video Xem video, thời lượng: Hình thu nhỏ của avatar người tải lên Lượt thích diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 2742f6ffa..c94fd4af5 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -155,7 +155,6 @@ 详情:\\n请求:\\n内容语言:\\n服务:\\nGMT时间:\\n包:\\n版本:\\n操作系统版本: 您的注释(请用英文): 详细信息: - 视频预览缩略图 播放视频,时长: 视频上传者的头像缩略图 字节 diff --git a/app/src/main/res/values-zh-rHK/strings.xml b/app/src/main/res/values-zh-rHK/strings.xml index fdedf8ece..3f1437d53 100644 --- a/app/src/main/res/values-zh-rHK/strings.xml +++ b/app/src/main/res/values-zh-rHK/strings.xml @@ -31,7 +31,6 @@ 外觀 背景播放 網絡問題 - 影片預覽縮圖 影片預覽縮圖 上載者的個人頭像縮圖 讚好 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 5186164a6..a6ac7f81c 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -34,7 +34,6 @@ 外觀 背景播放中 網路錯誤 - 影片預覽縮圖 播放影片,持續時間: 發佈者的個人頭像縮圖 喜歡 diff --git a/app/src/main/res/values/donottranslate.xml b/app/src/main/res/values/donottranslate.xml new file mode 100644 index 000000000..c3cc48726 --- /dev/null +++ b/app/src/main/res/values/donottranslate.xml @@ -0,0 +1,29 @@ + + + https://f-droid.org/packages/org.videolan.vlc/ + RSS + org.xbmc.kore + https://joinpeertube.org/instances#instances-list + newpipe + newpipeAppUpdate + newpipeHash + newpipeErrorReport + newpipeNewStreams + Guru Meditation. + @string/no_videos + @string/no_comments + 100+ + + MD5 + SHA-1 + reCAPTCHA + https://github.com/TeamNewPipe/NewPipe + https://newpipe.net/donate/ + https://newpipe.net/ + https://newpipe.net/legal/privacy/ + %1$s/%2$s + YouTube + SoundCloud + @string/app_name + LeakCanary + diff --git a/app/src/main/res/values/settings_keys.xml b/app/src/main/res/values/settings_keys.xml index 2a7754395..a73a3b9ca 100644 --- a/app/src/main/res/values/settings_keys.xml +++ b/app/src/main/res/values/settings_keys.xml @@ -1,42 +1,42 @@ - last_used_preferences_version + last_used_preferences_version - + @string/youtube @string/soundcloud - service - @string/youtube + service + @string/youtube - saved_tabs_key + saved_tabs_key - download_path - download_path_audio + download_path + download_path_audio - use_external_video_player - use_external_audio_player + use_external_video_player + use_external_audio_player - volume_gesture_control - brightness_gesture_control - resume_on_audio_focus_gain - popup_remember_size_pos_key - use_inexact_seek_key - auto_queue_key - screen_brightness_key - screen_brightness_timestamp_key - clear_queue_confirmation_key + volume_gesture_control + brightness_gesture_control + resume_on_audio_focus_gain + popup_remember_size_pos_key + use_inexact_seek_key + auto_queue_key + screen_brightness_key + screen_brightness_timestamp_key + clear_queue_confirmation_key - popup_saved_width - popup_saved_x - popup_saved_y + popup_saved_width + popup_saved_x + popup_saved_y - seek_duration - 10000 - + seek_duration + 10000 + 5 seconds @@ -46,7 +46,7 @@ 25 seconds 30 seconds - + 5000 10000 15000 @@ -55,63 +55,63 @@ 30000 - minimize_on_exit_key - @string/minimize_on_exit_background_key - minimize_on_exit_none_key - minimize_on_exit_background_key - minimize_on_exit_popup_key - + minimize_on_exit_key + @string/minimize_on_exit_background_key + minimize_on_exit_none_key + minimize_on_exit_background_key + minimize_on_exit_popup_key + @string/minimize_on_exit_none_key @string/minimize_on_exit_background_key @string/minimize_on_exit_popup_key - + @string/minimize_on_exit_none_description @string/minimize_on_exit_background_description @string/minimize_on_exit_popup_description - start_main_player_fullscreen_key + start_main_player_fullscreen_key - autoplay_key - @string/autoplay_wifi_key - autoplay_always_key - autoplay_wifi_key - autoplay_never_key - + autoplay_key + @string/autoplay_wifi_key + autoplay_always_key + autoplay_wifi_key + autoplay_never_key + @string/autoplay_always_key @string/autoplay_wifi_key @string/autoplay_never_key - + @string/always @string/wifi_only @string/never - seekbar_preview_thumbnail_key - seekbar_preview_thumbnail_high_quality - seekbar_preview_thumbnail_low_quality - seekbar_preview_thumbnail_none - + seekbar_preview_thumbnail_key + seekbar_preview_thumbnail_high_quality + seekbar_preview_thumbnail_low_quality + seekbar_preview_thumbnail_none + @string/seekbar_preview_thumbnail_high_quality @string/seekbar_preview_thumbnail_low_quality @string/seekbar_preview_thumbnail_none - + @string/high_quality_larger @string/low_quality_smaller @string/dont_show - default_resolution - 720p60 - show_higher_resolutions - default_popup_resolution - 480p - best_resolution + default_resolution + 720p60 + show_higher_resolutions + default_popup_resolution + 480p + best_resolution - + @string/best_resolution_key 1080p60 1080p @@ -122,7 +122,7 @@ 240p 144p - + @string/best_resolution 1080p60 1080p @@ -134,145 +134,145 @@ 144p - scale_to_square_image_in_notifications + scale_to_square_image_in_notifications - notification_slot_0_key - notification_slot_1_key - notification_slot_2_key - notification_slot_3_key - notification_slot_4_key + notification_slot_0_key + notification_slot_1_key + notification_slot_2_key + notification_slot_3_key + notification_slot_4_key - notification_slot_compact_0_key - notification_slot_compact_1_key - notification_slot_compact_2_key + notification_slot_compact_0_key + notification_slot_compact_1_key + notification_slot_compact_2_key - notification_colorize_key + notification_colorize_key - video_mp4 - video_webm - video_3gp - default_video_format - @string/video_mp4_key - + video_mp4 + video_webm + video_3gp + default_video_format + @string/video_mp4_key + MPEG-4 WebM 3GP - + @string/video_mp4_key @string/video_webm_key @string/video_3gp_key - default_audio_format - @string/audio_m4a_key - audio_m4a - audio_webm - + default_audio_format + @string/audio_m4a_key + audio_m4a + audio_webm + M4A WebM - + @string/audio_m4a_key @string/audio_webm_key - last_resize_mode + last_resize_mode - debug_pref_screen_key - allow_heap_dumping_key - show_memory_leaks_key - allow_disposed_exceptions_key - show_original_time_ago_key - disable_media_tunneling_key - show_image_indicators_key - show_crash_the_player_key - check_new_streams - crash_the_app_key - show_error_snackbar_key - create_error_notification_key + debug_pref_screen_key + allow_heap_dumping_key + show_memory_leaks_key + allow_disposed_exceptions_key + show_original_time_ago_key + disable_media_tunneling_key + show_image_indicators_key + show_crash_the_player_key + check_new_streams + crash_the_app_key + show_error_snackbar_key + create_error_notification_key - theme - night_theme - light_theme - dark_theme - black_theme - auto_device_theme - @string/auto_device_theme_key - @string/dark_theme_key - + theme + night_theme + light_theme + dark_theme + black_theme + auto_device_theme + @string/auto_device_theme_key + @string/dark_theme_key + @string/light_theme_key @string/dark_theme_key @string/black_theme_key @string/auto_device_theme_key - + @string/light_theme_title @string/dark_theme_title @string/black_theme_title @string/auto_device_theme_title - + @string/dark_theme_key @string/black_theme_key - + @string/dark_theme_title @string/black_theme_title - caption_settings_key - caption_user_set_key + caption_settings_key + caption_user_set_key - show_search_suggestions - show_local_search_suggestions - show_remote_search_suggestions - + show_search_suggestions + show_local_search_suggestions + show_remote_search_suggestions + @string/show_local_search_suggestions_key @string/show_remote_search_suggestions_key - + @string/local_search_suggestions @string/remote_search_suggestions - show_play_with_kodi - show_comments - show_next_video - show_description - show_meta_info - stream_info_selected_tab - show_hold_to_append - content_language - peertube_instance_setup - peertube_selected_instance - peertube_instance_list - content_country - show_age_restricted_content - youtube_restricted_mode_enabled - enable_search_history - enable_watch_history - main_page_content - enable_playback_resume - enable_playback_state_lists - playback_unhook_key - playback_speed_key - playback_pitch_key - playback_skip_silence_key + show_play_with_kodi + show_comments + show_next_video + show_description + show_meta_info + stream_info_selected_tab + show_hold_to_append + content_language + peertube_instance_setup + peertube_selected_instance + peertube_instance_list + content_country + show_age_restricted_content + youtube_restricted_mode_enabled + enable_search_history + enable_watch_history + main_page_content + enable_playback_resume + enable_playback_state_lists + playback_unhook_key + playback_speed_key + playback_pitch_key + playback_skip_silence_key - app_language_key + app_language_key - feed_update_threshold_key - 300 - feed_show_played_items + feed_update_threshold_key + 300 + feed_show_played_items - show_thumbnail_key + show_thumbnail_key - + @string/feed_update_threshold_option_always_update 5 minutes 15 minutes @@ -282,7 +282,7 @@ 1 day - + 0 300 900 @@ -291,53 +291,53 @@ 43200 86400 - feed_use_dedicated_fetch_method + feed_use_dedicated_fetch_method - import_export_data_path - import_data - export_data + import_export_data_path + import_data + export_data - clear_cookie + clear_cookie - download_thumbnail_key + download_thumbnail_key - cache_wipe_key - clear_play_history - clear_playback_states - clear_search_history + cache_wipe_key + clear_play_history + clear_playback_states + clear_search_history - @string/last_download_type_video_key - last_dl_type_video - last_dl_type_audio - last_dl_type_subtitle + @string/last_download_type_video_key + last_dl_type_video + last_dl_type_audio + last_dl_type_subtitle - downloads_storage_ask - storage_use_saf + downloads_storage_ask + storage_use_saf - file_rename_charset - file_replacement_character - _ + file_rename_charset + file_replacement_character + _ - CHARSET_LETTERS_AND_DIGITS - CHARSET_MOST_SPECIAL + CHARSET_LETTERS_AND_DIGITS + CHARSET_MOST_SPECIAL - + @string/charset_letters_and_digits_value @string/charset_most_special_value - + @string/charset_letters_and_digits @string/charset_most_special_characters - @string/charset_most_special_value + @string/charset_most_special_value - downloads_max_retry - 3 - + downloads_max_retry + 3 + @string/minimize_on_exit_none_description 1 2 @@ -349,25 +349,25 @@ 15 - cross_network_downloads - downloads_queue_limit + cross_network_downloads + downloads_queue_limit - default_download_threads + default_download_threads - preferred_open_action_key - @string/always_ask_open_action_key - preferred_open_action_last_selected + preferred_open_action_key + @string/always_ask_open_action_key + preferred_open_action_last_selected - show_info - video_player - background_player - popup_player - download - add_to_playlist - always_ask_player + show_info + video_player + background_player + popup_player + download + add_to_playlist + always_ask_player - + @string/show_info @string/video_player @string/background_player @@ -376,7 +376,7 @@ @string/add_to_playlist @string/always_ask_open_action - + @string/show_info_key @string/video_player_key @string/background_player_key @@ -387,15 +387,15 @@ - update_app_key + update_app_key manual_update_key - update_pref_screen_key - update_expiry_key + update_pref_screen_key + update_expiry_key - system + system - + @string/default_localization_key af az @@ -474,7 +474,7 @@ ja ko - + @string/systems_language Afrikaans Azərbaycan @@ -555,7 +555,7 @@ - + @string/systems_language Afghanistan Aland Islands @@ -806,7 +806,7 @@ Zimbabwe - + @string/default_localization_key AF AX @@ -1058,7 +1058,7 @@ - + @string/default_localization_key ace ar @@ -1137,7 +1137,7 @@ zh-hk zh-tw - + @string/systems_language Basa Acèh العربية @@ -1218,9 +1218,9 @@ - limit_mobile_data_usage - limit_data_usage_none - + limit_mobile_data_usage + limit_data_usage_none + @string/limit_data_usage_none_key @string/limit_data_usage_none_key 1080p60 @@ -1233,45 +1233,46 @@ 144p - list_view_mode - @string/list_view_mode_auto_key + list_view_mode + @string/list_view_mode_auto_key - auto - list - grid + auto + list + grid - + @string/list_view_mode_auto_key @string/list_view_mode_list_key @string/list_view_mode_grid_key - + @string/auto @string/list @string/grid - tablet_mode + tablet_mode - auto - on - off - + auto + on + off + @string/tablet_mode_auto_key @string/tablet_mode_on_key @string/tablet_mode_off_key - + @string/auto @string/on @string/off - recaptcha_cookies_key - enable_streams_notifications - streams_notifications_interval - 14400 + recaptcha_cookies_key + + enable_streams_notifications + streams_notifications_interval + 14400 15 minutes @@ -1292,10 +1293,10 @@ 43200 86400 - streams_notifications_network - any - wifi - @string/streams_notifications_network_wifi + streams_notifications_network + any + wifi + @string/streams_notifications_network_wifi @string/streams_notifications_network_any @string/streams_notifications_network_wifi @@ -1304,5 +1305,5 @@ @string/any_network @string/wifi_only - streams_notifications_channels + streams_notifications_channels diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 03197bb2b..3f2e2adf7 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -7,7 +7,6 @@ Install Cancel OK - https://f-droid.org/repository/browse/?fdfilter=vlc&fdid=org.videolan.vlc Open in browser Mark as watched Open in popup mode @@ -23,7 +22,6 @@ Use external video player Removes audio at some resolutions Use external audio player - RSS Subscribe Subscribed Unsubscribe @@ -49,7 +47,6 @@ Only some devices can play 2K/4K videos Play with Kodi Install missing Kore app? - org.xbmc.kore Show \"Play with Kodi\" option Display an option to play a video via Kodi media center Crash the player @@ -132,7 +129,6 @@ PeerTube instances Select your favorite PeerTube instances Find the instances you like on %s - https://joinpeertube.org/instances#instances-list Add instance Enter instance URL Could not validate instance @@ -148,7 +144,6 @@ Player notification Configure current playing stream notification Playing in background - Already playing in background Playing in popup mode Content Show age restricted content @@ -182,19 +177,14 @@ Just Once File Notifications - newpipe NewPipe notification Notifications for NewPipe\'s player - newpipeAppUpdate App update notification Notifications for new NewPipe versions - newpipeHash Video hash notification Notifications for video hashing progress - newpipeNewStreams New streams Notifications about new streams for subscriptions - newpipeErrorReport Error report notification Notifications to report errors [Unknown] @@ -253,7 +243,6 @@ NewPipe encountered an error, tap to report An error occurred, see the notification Sorry, that should not have happened. - Guru Meditation. Report this error via e-mail Copy formatted report Report on GitHub @@ -266,7 +255,6 @@ Your comment (in English): Details: - Video preview thumbnail Play video, duration: Uploader\'s avatar thumbnail Likes @@ -275,8 +263,6 @@ Related items Description No results - @string/no_videos - @string/no_comments Nothing here but crickets Drag to reorder Video @@ -311,8 +297,6 @@ No videos 100+ videos ∞ videos - 100+ - %s video %s videos @@ -344,11 +328,7 @@ No download folder set yet, choose the default download folder now This permission is needed to\nopen in popup mode 1 item deleted. - - MD5 - SHA-1 - reCAPTCHA reCAPTCHA challenge Press \"Done\" when solved reCAPTCHA challenge requested @@ -371,18 +351,14 @@ Libre lightweight streaming on Android. Contribute Whether you have ideas of; translation, design changes, code cleaning, or real heavy code changes—help is always welcome. The more is done the better it gets! - https://github.com/TeamNewPipe/NewPipe View on GitHub Donate NewPipe is developed by volunteers spending their free time bringing you the best user experience. Give back to help developers make NewPipe even better while they enjoy a cup of coffee. - https://newpipe.net/donate Give back Website Visit the NewPipe Website for more info and news. - https://newpipe.net/ NewPipe\'s Privacy Policy The NewPipe project takes your privacy very seriously. Therefore, the app does not collect any data without your consent.\nNewPipe\'s privacy policy explains in detail what data is sent and stored when you send a crash report. - https://newpipe.net/legal/privacy/ Read privacy policy NewPipe\'s License NewPipe is copyleft libre software: You can use, study share and improve it at will. Specifically you can redistribute 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. @@ -422,7 +398,6 @@ Recently added Most liked Conferences - %1$s/%2$s Play queue Remove @@ -439,10 +414,7 @@ Open Drawer Close Drawer - YouTube - SoundCloud - @string/app_name Preferred \'open\' action Default action when opening content — %s Video player @@ -477,7 +449,6 @@ Captions Modify player caption text scale and background styles. Requires app restart to take effect - LeakCanary Memory leak monitoring may cause the app to become unresponsive when heap dumping Show memory leaks Report out-of-lifecycle errors @@ -523,7 +494,6 @@ No limit Limit resolution when using mobile data - @string/limit_data_usage_none_key @string/limit_data_usage_none_description 1080p60 diff --git a/assets/android-tv-banner.svg b/assets/android-tv-banner.svg new file mode 100644 index 000000000..bead122f4 --- /dev/null +++ b/assets/android-tv-banner.svg @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/fastlane/metadata/android/en-US/images/icon.png b/fastlane/metadata/android/en-US/images/icon.png new file mode 100644 index 000000000..611b8291c Binary files /dev/null and b/fastlane/metadata/android/en-US/images/icon.png differ