diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml new file mode 100644 index 000000000..a71be3cba --- /dev/null +++ b/app/src/main/res/values-in/strings.xml @@ -0,0 +1,8 @@ + + + + Sistem file Anda tidak mendukung file berukuran lebih dari 4GB + Mendeteksi apakah sistem file dapat membuat file berukuran 4GB + diff --git a/buildSrc/src/main/kotlin/Libs.kt b/buildSrc/src/main/kotlin/Libs.kt index c6d512518..a2a846900 100644 --- a/buildSrc/src/main/kotlin/Libs.kt +++ b/buildSrc/src/main/kotlin/Libs.kt @@ -59,6 +59,23 @@ object Libs { */ const val retrofit: String = "com.squareup.retrofit2:retrofit:" + Versions.com_squareup_retrofit2 + /** + * https://square.github.io/okhttp/ + */ + const val logging_interceptor: String = "com.squareup.okhttp3:logging-interceptor:" + + Versions.com_squareup_okhttp3 + + /** + * https://square.github.io/okhttp/ + */ + const val mockwebserver: String = "com.squareup.okhttp3:mockwebserver:" + + Versions.com_squareup_okhttp3 + + /** + * https://square.github.io/okhttp/ + */ + const val okhttp: String = "com.squareup.okhttp3:okhttp:" + Versions.com_squareup_okhttp3 + /** * https://kotlinlang.org/ */ @@ -177,6 +194,11 @@ object Libs { const val objectbox_gradle_plugin: String = "io.objectbox:objectbox-gradle-plugin:" + Versions.io_objectbox + /** + * https://objectbox.io + */ + const val objectbox_java: String = "io.objectbox:objectbox-java:" + Versions.io_objectbox + /** * https://objectbox.io */ @@ -247,12 +269,6 @@ object Libs { const val javax_annotation_api: String = "javax.annotation:javax.annotation-api:" + Versions.javax_annotation_api - /** - * https://square.github.io/okhttp/ - */ - const val logging_interceptor: String = "com.squareup.okhttp3:logging-interceptor:" + - Versions.logging_interceptor - const val ink_page_indicator: String = "com.pacioianu.david:ink-page-indicator:" + Versions.ink_page_indicator @@ -283,11 +299,6 @@ object Libs { */ const val junit_jupiter: String = "org.junit.jupiter:junit-jupiter:" + Versions.junit_jupiter - /** - * https://square.github.io/okhttp/ - */ - const val mockwebserver: String = "com.squareup.okhttp3:mockwebserver:" + Versions.mockwebserver - const val xfetch2okhttp: String = "androidx.tonyodev.fetch2okhttp:xfetch2okhttp:" + Versions.xfetch2okhttp @@ -357,7 +368,7 @@ object Libs { const val kiwixlib: String = "org.kiwix.kiwixlib:kiwixlib:" + Versions.kiwixlib /** - * http://developer.android.com/tools/extras/support-library.html + * https://github.com/material-components/material-components-android */ const val material: String = "com.google.android.material:material:" + Versions.material @@ -377,16 +388,16 @@ object Libs { */ const val ktlint: String = "com.pinterest:ktlint:" + Versions.ktlint - /** - * https://square.github.io/okhttp/ - */ - const val okhttp: String = "com.squareup.okhttp3:okhttp:" + Versions.okhttp - /** * https://github.com/ReactiveX/RxJava */ const val rxjava: String = "io.reactivex.rxjava2:rxjava:" + Versions.rxjava + /** + * https://developer.android.com/jetpack/androidx + */ + const val webkit: String = "androidx.webkit:webkit:" + Versions.webkit + /** * https://developer.android.com/studio */ diff --git a/buildSrc/src/main/kotlin/Versions.kt b/buildSrc/src/main/kotlin/Versions.kt index 99c6cc916..b2e4bc6ea 100644 --- a/buildSrc/src/main/kotlin/Versions.kt +++ b/buildSrc/src/main/kotlin/Versions.kt @@ -15,17 +15,19 @@ object Versions { const val com_squareup_retrofit2: String = "2.5.0" // available: "2.9.0" + const val com_squareup_okhttp3: String = "3.6.0" // available: "4.8.0" + const val org_jetbrains_kotlin: String = "1.3.72" - const val com_google_dagger: String = "2.26" // available: "2.28.1" + const val com_google_dagger: String = "2.26" // available: "2.28.3" const val com_yahoo_squidb: String = "2.0.0" // available: "3.2.3" - const val com_jakewharton: String = "10.2.1" + const val com_jakewharton: String = "10.2.1" // available: "10.2.2" const val androidx_test: String = "1.2.0" - const val io_objectbox: String = "2.6.0" + const val io_objectbox: String = "2.6.0" // available: "2.7.0" const val org_jacoco: String = "0.7.9" @@ -43,8 +45,6 @@ object Versions { const val javax_annotation_api: String = "1.3.2" - const val logging_interceptor: String = "3.6.0" // available: "4.7.2" - const val ink_page_indicator: String = "1.3.0" const val leakcanary_android: String = "2.4" @@ -57,8 +57,6 @@ object Versions { const val junit_jupiter: String = "5.6.2" - const val mockwebserver: String = "3.6.0" // available: "4.7.2" - const val xfetch2okhttp: String = "3.1.4" const val assertj_core: String = "3.16.1" @@ -67,7 +65,7 @@ object Versions { const val fragment_ktx: String = "1.2.5" - const val lint_gradle: String = "27.0.0" + const val lint_gradle: String = "27.0.1" const val testing_ktx: String = "1.1.2" @@ -83,11 +81,11 @@ object Versions { const val rxandroid: String = "2.1.1" - const val core_ktx: String = "1.3.0" + const val core_ktx: String = "1.3.0" // available: "1.3.1" - const val kiwixlib: String = "9.2.3" + const val kiwixlib: String = "9.2.3" // available: "9.3.1" - const val material: String = "1.1.0" + const val material: String = "1.1.0" // available: "1.2.0" const val multidex: String = "2.0.1" @@ -99,18 +97,18 @@ object Versions { const val ktlint: String = "0.36.0" // available: "0.37.2" - const val okhttp: String = "3.6.0" // available: "4.7.2" - const val rxjava: String = "2.2.19" - const val aapt2: String = "4.0.0-6051327" + const val webkit: String = "1.2.0" + + const val aapt2: String = "4.0.1-6197926" const val junit: String = "1.1.1" const val navigation: String = "2.3.0" /** - * Current version: "6.1.1" + * Current version: "6.2" * See issue 19: How to update Gradle itself? * https://github.com/jmfayard/buildSrcVersions/issues/19 */ diff --git a/core/build.gradle.kts b/core/build.gradle.kts index 8a4538b1c..11d59e9bb 100644 --- a/core/build.gradle.kts +++ b/core/build.gradle.kts @@ -60,4 +60,5 @@ dependencies { implementation(Libs.android_arch_lifecycle_extensions) implementation(Libs.objectbox_kotlin) implementation(Libs.objectbox_rxjava) + implementation(Libs.webkit) } diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/CoreApp.kt b/core/src/main/java/org/kiwix/kiwixmobile/core/CoreApp.kt index 39ab9b048..0d52aab3e 100644 --- a/core/src/main/java/org/kiwix/kiwixmobile/core/CoreApp.kt +++ b/core/src/main/java/org/kiwix/kiwixmobile/core/CoreApp.kt @@ -66,6 +66,13 @@ abstract class CoreApp : Application() { @Inject lateinit var fileLogger: FileLogger + /** + * The init of this class does the work of initializing, + * simply injecting it is all that there is to be done + */ + @Inject + lateinit var serviceWorkerInitialiser: ServiceWorkerInitialiser + override fun attachBaseContext(base: Context) { super.attachBaseContext(base) if (BuildConfig.DEBUG) { diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/ServiceWorkerInitialiser.kt b/core/src/main/java/org/kiwix/kiwixmobile/core/ServiceWorkerInitialiser.kt new file mode 100644 index 000000000..702c8ec43 --- /dev/null +++ b/core/src/main/java/org/kiwix/kiwixmobile/core/ServiceWorkerInitialiser.kt @@ -0,0 +1,49 @@ +/* + * Kiwix Android + * Copyright (c) 2020 Kiwix + * This program 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. + * + * This program 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 this program. If not, see . + * + */ + +package org.kiwix.kiwixmobile.core + +import android.content.Context +import android.os.Build +import android.webkit.WebResourceRequest +import android.webkit.WebResourceResponse +import androidx.webkit.ServiceWorkerClientCompat +import androidx.webkit.ServiceWorkerControllerCompat +import androidx.webkit.WebViewFeature +import org.kiwix.kiwixmobile.core.reader.ZimReaderContainer +import javax.inject.Inject + +class ServiceWorkerInitialiser @Inject constructor( + context: Context, + zimReaderContainer: ZimReaderContainer +) { + init { + if (WebViewFeature.isFeatureSupported(WebViewFeature.SERVICE_WORKER_BASIC_USAGE)) { + ServiceWorkerControllerCompat.getInstance() + .setServiceWorkerClient(object : ServiceWorkerClientCompat() { + override fun shouldInterceptRequest(request: WebResourceRequest): WebResourceResponse? { + return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + zimReaderContainer.load(request.url.toString()) + } else { + null + } + } + }) + } + } +} diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/main/CoreWebViewClient.java b/core/src/main/java/org/kiwix/kiwixmobile/core/main/CoreWebViewClient.java index 4fed33f59..9e294ff54 100644 --- a/core/src/main/java/org/kiwix/kiwixmobile/core/main/CoreWebViewClient.java +++ b/core/src/main/java/org/kiwix/kiwixmobile/core/main/CoreWebViewClient.java @@ -41,8 +41,10 @@ public class CoreWebViewClient extends WebViewClient { }}; protected final WebViewCallback callback; protected final ZimReaderContainer zimReaderContainer; - private static String LEGACY_CONTENT_PREFIX = - Uri.parse("content://" + CoreApp.getInstance().getPackageName() + ".zim.base/").toString(); + private static String[] LEGACY_CONTENT_PREFIXES = new String[] { + "zim://content/", + Uri.parse("content://" + CoreApp.getInstance().getPackageName() + ".zim.base/").toString() + }; private String urlWithAnchor; public CoreWebViewClient( @@ -87,9 +89,12 @@ public class CoreWebViewClient extends WebViewClient { } private String convertLegacyUrl(String url) { - return url.startsWith(LEGACY_CONTENT_PREFIX) - ? url.replace(LEGACY_CONTENT_PREFIX, CONTENT_PREFIX) - : url; + for (String legacyContentPrefix : LEGACY_CONTENT_PREFIXES) { + if (url.startsWith(legacyContentPrefix)) { + return url.replace(legacyContentPrefix, CONTENT_PREFIX); + } + } + return url; } private boolean handleEpubAndPdf(String url) { diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/reader/ZimFileReader.kt b/core/src/main/java/org/kiwix/kiwixmobile/core/reader/ZimFileReader.kt index 9471cfaec..58bab6d6b 100644 --- a/core/src/main/java/org/kiwix/kiwixmobile/core/reader/ZimFileReader.kt +++ b/core/src/main/java/org/kiwix/kiwixmobile/core/reader/ZimFileReader.kt @@ -236,7 +236,7 @@ class ZimFileReader constructor( @JvmField val UI_URI: Uri? = Uri.parse("content://org.kiwix.ui/") - const val CONTENT_PREFIX = "zim://content/" + const val CONTENT_PREFIX = "https://kiwix.app/" private val INVERT_IMAGES_VIDEO = """ @@ -253,7 +253,8 @@ class ZimFileReader constructor( filter: invert(0); } """.trimIndent() - private val assetExtensions = listOf("3gp", "mp4", "m4a", "webm", "mkv", "ogg", "ogv", "svg") + private val assetExtensions = + listOf("3gp", "mp4", "m4a", "webm", "mkv", "ogg", "ogv", "svg", "warc") private const val DEFAULT_MIME_TYPE = "application/octet-stream" } } diff --git a/core/src/main/res/values-ca/strings.xml b/core/src/main/res/values-ca/strings.xml index 7ef0bdc20..a311dae9f 100644 --- a/core/src/main/res/values-ca/strings.xml +++ b/core/src/main/res/values-ca/strings.xml @@ -5,6 +5,7 @@ * Grondin * Joan manel * Macondo +* Mguix --> Ajuda @@ -18,8 +19,8 @@ Llegir en veu alta Deixar de llegir en veu alta Anomena i desa el fitxer… - S\'ha produït un error en mirar de desar el fitxer! - El fitxer s\'ha desat amb el nom %1$s a la vostra carpeta d\'imatges + S\'ha produït un error en mirar de desar el fitxer! + Multimèdia desat com %s en Android/media/org.kiwix…/ Cercar Seleccioneu un fitxer de contingut ZIM (*.zim) Obrir l\'enllaç en una pestanya nova? @@ -60,22 +61,22 @@ Article obert en una pestanya nova Dispositiu Biblioteca - Voleu suprimir %s? + Els següents arxius ZIM seran eliminats:\n\n%s Fitxer esborrat Cap fitxer aquí L’espai és insuficient per a la baixada. Cap connexió de xarxa Què fa Kiwix? Kiwix és un lector de contingut sense connexió. Actua molt semblant a un navegador però en comptes d\'accedir a pàgines web en línia, llegeix el contingut d\'un fitxer en format ZIM. - Si bé Kiwix es va dissenyar originalment per a proporcionar una Wikipedia sense connexió, també pot llegir altres continguts. + Si bé Kiwix es va dissenyar originalment per a proporcionar una Wikipedia sense connexió, també pot llegir altres continguts. On està el contingut? El nostre contingut està allotjat en el lloc web de Kiwix Estan disponibles com a fitxers ZIM. Hi ha molts d\'ells: • La Viquipèdia està disponible per separat per a cada idioma • Altres continguts com Wikileaks o Wikisource també estan disponibles - Pots descarregar els arxius ZIM triats a l\'aplicació, o bé seleccionar acuradament els que vulguis, descarregar-los des d\'un ordinador i transferir-los a la targeta SD. + Podeu descarregar els arxius ZIM triats a l\'aplicació, o bé seleccionar acuradament els que vulgueu, descarregar-los des d\'un ordinador i transferir-los a la vostra targeta SD. Els fitxers ZIM descarregats en l\'aplicació es troben al directori d\'emmagatzematge extern, en una carpeta anomenada Kiwix. - No podem eliminar aquest fitxer. Hauries de provar amb un administrador de fitxers. + No podem eliminar alguns arxius. Hauries de provar amb un administrador d\'arxius Intern Extern @@ -84,7 +85,7 @@ Segur que vols aturar aquesta descàrrega? Selector de dispositiu d\'emmagatzematge Següent - Accés a enllaç extern + Accés a enllaç extern! Estàs entrant a un enllaç extern. Això podria ocasionar-te costos addicionals per transferència de dades o, senzillament, no funcionarà si no tens connexió. Vols continuar? No tornar a preguntar Idiomes seleccionats: diff --git a/core/src/main/res/values-fi/strings.xml b/core/src/main/res/values-fi/strings.xml index d01580f66..383fb748d 100644 --- a/core/src/main/res/values-fi/strings.xml +++ b/core/src/main/res/values-fi/strings.xml @@ -19,6 +19,7 @@ Lue ääneen Lopeta ääneen lukeminen Tue Kiwixiä + Hostaa kirjoja Tallenna media Virhe mediaa tallennettaessa! Tallennettu media %s muodossa hakemistoon Android/media/org.kiwix…/ @@ -29,10 +30,13 @@ Siirry WiFi-asetuksiin Valitse ensin kirjat Ei voitu käynnistää palvelinta. + Palvelin käynnistetty onnistuneesti. + Palvelin pysäytetty onnistuneesti. Hotspot kytketty päälle Käynnistetään palvelinta - Kytke WiFi-hotspottisi päälle - KYLLÄ, OLEN KYTKENYT SEN PÄÄLLE + Ohjeet kirjojen hostaamiseen + WiFi-yhteys tunnistettu + ETENE Kiwix-hotspot Käynnistä palvelin Pysäytä palvelin @@ -58,9 +62,11 @@ Poista tämä kohde? Tyhjennä historia Kaikki historia tyhjennetty - Tyhjennä kaikki historia + Tyhjennä kirjanmerkit + Tyhjennä kaikki historia? Jaa Poista + Peruuta Voit tarkastella tämän artikkelin sisältöä pyyhkäisemällä vasemmalle Selvä Tiesitkö? @@ -85,7 +91,7 @@ Laite Online Kirjasto - Poista %s? + Seuraava(t) zim-tiedosto(t) tullaan poistamaan:\n\n%s Tiedosto poistettu Ei tiedostoja täällä Tilaa käytettävissä: @@ -100,7 +106,7 @@ • Muut sisällöt kuten Wikileaks tai Wikiaineisto ovat myös käytettävissä Tallennuslaite Nykyinen kansio - Emme pystyneet poistamaan tätä tiedostoa. Sinun pitäisi kokeilla käyttää tiedostonhallintaa sen sijaan. + Emme pystyneet poistamaan joitakin tiedostoja. Sinun tulisi kokeilla käyttää tiedostonhallintaa sen sijaan. keskeytä jatka pysäytä @@ -123,7 +129,7 @@ jäljellä Tänään Eilen - Ulkoisen linkin syöttäminen + Ulkoisen linkin syöttäminen! Älä kysy enää Valitut kielet: Muut kielet: @@ -161,8 +167,25 @@ Wikiartikkelin otsikko Hylkää tallentamattomat muutokset? Joitakin tiedostoja ei poistettu + %d kirja(a) Laitteesi: LÄHELLÄ OLEVAT LAITTEET Tila + Kuva + Video + Vain teksti + Lyhyt teksti + Ei tuloksia Ei kirjanmerkkejä + Ei historiaa + Laitteen oletus + Poista kaikki historia? + Poista valittu historia? + Poista kaikki kirjanmerkit? + Poista valitut kirjanmerkit? + Päälle + Pois + Auto + %d%% + Avaa uudessa välilehdessä diff --git a/core/src/main/res/values-in/strings.xml b/core/src/main/res/values-in/strings.xml index 890a2f26f..e6285a378 100644 --- a/core/src/main/res/values-in/strings.xml +++ b/core/src/main/res/values-in/strings.xml @@ -38,6 +38,8 @@ Hotspot sudah menyala. Berikut adalah detil hotspot lokal Anda.\nSSID : %1$s\nPass : %2$s Menyalakan server + Koneksi Wifi telah terdeteksi + Untuk dapat melihat buku dengan alat elektronik lainnya, pastikan semua alat elektronik Anda terhubung ke jaringan Wifi yang sama. LANJUT Masukkan alamat IP ini ke browser Anda untuk mengakses server %s Galat: Berkas ZIM yang dipilih tidak ditemukan. @@ -64,7 +66,7 @@ Hapus riwayat Hapus riwayat penelusuran dan tab terakhir Semua Markah Telah Dibersihkan - Bersihkan Semua Markah + Bersihkan Semua Riwayat? Bagikan Bagikan ZIM file dengan: Hapus @@ -111,7 +113,7 @@ Mereka tersedia sebagai berkas ZIM. Ada banyak dari mereka: • Wikipedia tersedia terpisah untuk setiap bahasa • Konten lain seperti Wikileaks atau Wikisource juga tersedia - Anda dapat mengunduh berkas ZIM yang diinginkan dari dalam apl atau mengunduhnya dari komputer Desktop sebelum mentransfernya ke kartu SD Anda. + Anda dapat mengunduh berkas ZIM yang diinginkan dari dalam aplikasi atau mengunduh berkas yang Anda inginkan dari komputer Desktop sebelum memindahkannya ke kartu SD Anda. Berkas ZIM yang diunduh dari dalam apl terletak di direktori penyimpanan eksternal didalam folder Kiwix. Penyimpanan Folder Saat Ini @@ -137,6 +139,8 @@ mnt dtk kiri + Hari ini + Kemarin Peringatkan saat mengunjungi pranala luar Tampilkan popup untuk memperingatkan tentang biaya tambahan atau tidak bekerja dalam pranala luring. Mengunjungi Pranala Luar @@ -144,15 +148,67 @@ Jangan tanya lagi Bahasa terpilih: Bahasa lain: + Daftar file Zim Anda + Tab baru + Ambil konten + Favicon + %s artikel + Mulai + Unduh buku-buku Humankind\'s knowledge, on your phone. + Selamat datang di keluarga + Simpan buku-buku offline + Unduh buku dan baca di mana pun Anda berada. Ke halaman sebelumnya Ke halaman berikutnya + Daftar isi Pilih bahasa Simpan bahasa Kirim masukan + Riwayat + Lihat riwayat semua buku + Riwayat pencarian + %1$d dipilih Tutup semua tab + Dalam proses Selesai + Gagal: %s + Simpan + Catatan + Judul Artikel Wiki + Akses tempat penyimpanan data dibutuhkan untuk Catatan Notes can\'t be used without access to storage + Penyimpanan Catatan tidak berhasil + Catatan telah berhasil dihapus + Catatan tidak terhapus + Catatan telah tersimpan + Gagal menyimpan Catatan: tempat penyimpanan data tidak dapat ditulisi Note file doesn\'t exist + Bagi file catatan dengan: + Hapus semua catatan? + Gagal: Akses ke tempat penyimpanan data tidak ada + Seluruh direktori Catatan telah dihapus + Beberapa file tidak terhapus + %d buku + Koneksi gagal + FILE UNTUK DIPINDAHKAN + Mempersiapkan file untuk dipindahkan.... + Melakukan jabat tangan.... + Status + Bersihkan semua catatan dari semua artikel + Bersihkan semua catatan + Ubah ukuran teks dengan penambahan 25% + Gambar + Video + Teks Saja + Teks Singkat + Akses ke tempat penyimpanan data ditolak + Aplikasi ini membutuhkan kemampuan membaca tempat penyimpanan data untuk berfungsi dengan baik. Berikan izin mengakses tempat penyimpanan data lewat menu pengaturan Anda + Ke menu Pengaturan Hotspot + Tidak ada Hasil Tidak Ada Markah + Tidak ada Riwayat + Kirimkan semua detil berikut agar kami dapat menelaah masalahnya + %d%% + Buka di tab baru diff --git a/custom/src/main/res/values-in/strings.xml b/custom/src/main/res/values-in/strings.xml new file mode 100644 index 000000000..d76a0ae9f --- /dev/null +++ b/custom/src/main/res/values-in/strings.xml @@ -0,0 +1,9 @@ + + + + Coba lagi + Unduh + Instalasi tidak berlaku. Silakan unduh Zim.\nPastikan Wifi menyala dan Anda memiliki cukup tempat penyimpanan data +