diff --git a/app/src/androidTest/java/org/kiwix/kiwixmobile/KiwixMockServer.kt b/app/src/androidTest/java/org/kiwix/kiwixmobile/KiwixMockServer.kt index 41a3ce895..a484c6888 100644 --- a/app/src/androidTest/java/org/kiwix/kiwixmobile/KiwixMockServer.kt +++ b/app/src/androidTest/java/org/kiwix/kiwixmobile/KiwixMockServer.kt @@ -38,11 +38,9 @@ class KiwixMockServer { mockWebServer.shutdown() } - fun map( - vararg pathsToResponses: Pair - ) { + fun map(vararg pathsToResponses: Pair) { val mapOfPathsToResponses = mapOf(*pathsToResponses) - mockWebServer.setDispatcher(object : Dispatcher() { + mockWebServer.dispatcher = object : Dispatcher() { override fun dispatch(request: RecordedRequest) = mapOfPathsToResponses[request.path]?.let(::successfulResponse) ?: forcedResponse?.let { return@let it } @@ -50,7 +48,7 @@ class KiwixMockServer { "No response mapped for ${request.path}" + "\nmapped $mapOfPathsToResponses\nqueued $forcedResponse" ) - }) + } } private fun successfulResponse(bodyObject: Any) = MockResponse().apply { diff --git a/app/src/main/java/org/kiwix/kiwixmobile/webserver/ZimHostFragment.kt b/app/src/main/java/org/kiwix/kiwixmobile/webserver/ZimHostFragment.kt index 3efa14f21..77339a9b9 100644 --- a/app/src/main/java/org/kiwix/kiwixmobile/webserver/ZimHostFragment.kt +++ b/app/src/main/java/org/kiwix/kiwixmobile/webserver/ZimHostFragment.kt @@ -18,11 +18,14 @@ package org.kiwix.kiwixmobile.webserver +import android.Manifest import android.app.ProgressDialog import android.content.ComponentName import android.content.Context import android.content.Intent import android.content.ServiceConnection +import android.content.pm.PackageManager +import android.os.Build import android.os.Bundle import android.os.IBinder import android.provider.Settings @@ -32,6 +35,8 @@ import android.view.View import android.view.ViewGroup import android.widget.Toast import androidx.appcompat.app.AppCompatActivity +import androidx.core.app.ActivityCompat +import androidx.core.content.ContextCompat import kotlinx.android.synthetic.main.activity_zim_host.recyclerViewZimHost import kotlinx.android.synthetic.main.activity_zim_host.serverTextView import kotlinx.android.synthetic.main.activity_zim_host.startServerButton @@ -132,7 +137,54 @@ class ZimHostFragment : BaseFragment(), ZimHostCallbacks, ZimHostContract.View { } } - startServerButton.setOnClickListener { startStopServer() } + startServerButton.setOnClickListener { + if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.P || checkCoarseLocationAccessPermission()) { + startStopServer() + } + } + } + + private fun checkCoarseLocationAccessPermission(): Boolean = + if (ContextCompat.checkSelfPermission( + requireActivity(), + Manifest.permission.ACCESS_COARSE_LOCATION + ) == PackageManager.PERMISSION_DENIED + ) { + if (ActivityCompat.shouldShowRequestPermissionRationale( + requireActivity(), + Manifest.permission.ACCESS_COARSE_LOCATION + ) + ) { + alertDialogShower.show( + KiwixDialog.LocationPermissionRationaleOnHostZimFile, + ::askCoarseLocationPermission + ) + } else { + askCoarseLocationPermission() + } + false + } else { + true + } + + override fun onRequestPermissionsResult( + requestCode: Int, + permissions: Array, + grantResults: IntArray + ) { + super.onRequestPermissionsResult(requestCode, permissions, grantResults) + if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { + if (requestCode == PERMISSION_REQUEST_CODE_COARSE_LOCATION) { + startStopServer() + } + } + } + + private fun askCoarseLocationPermission() { + ActivityCompat.requestPermissions( + requireActivity(), arrayOf(Manifest.permission.ACCESS_COARSE_LOCATION), + PERMISSION_REQUEST_CODE_COARSE_LOCATION + ) } private fun startStopServer() { @@ -316,5 +368,6 @@ class ZimHostFragment : BaseFragment(), ZimHostCallbacks, ZimHostContract.View { companion object { const val SELECTED_ZIM_PATHS_KEY = "selected_zim_paths" + private const val PERMISSION_REQUEST_CODE_COARSE_LOCATION = 10 } } diff --git a/app/src/main/res/values-bn/strings.xml b/app/src/main/res/values-bn/strings.xml new file mode 100644 index 000000000..a6bf1eaef --- /dev/null +++ b/app/src/main/res/values-bn/strings.xml @@ -0,0 +1,8 @@ + + + + ফাইলসমূহ পাঠান + ফাইলসমূহ গ্রহণ করুন + diff --git a/buildSrc/src/main/kotlin/Versions.kt b/buildSrc/src/main/kotlin/Versions.kt index d265a2919..54aca62e1 100644 --- a/buildSrc/src/main/kotlin/Versions.kt +++ b/buildSrc/src/main/kotlin/Versions.kt @@ -16,9 +16,9 @@ object Versions { const val androidx_test_espresso: String = "3.2.0" // available: "3.3.0" - const val com_squareup_retrofit2: String = "2.5.0" // available: "2.9.0" + const val com_squareup_retrofit2: String = "2.9.0" - const val com_squareup_okhttp3: String = "3.6.0" // available: "4.9.0" + const val com_squareup_okhttp3: String = "4.9.0" const val org_jetbrains_kotlin: String = "1.3.72" // available: "1.4.10" @@ -36,11 +36,11 @@ object Versions { const val org_jacoco: String = "0.7.9" - const val io_mockk: String = "1.10.0" + const val io_mockk: String = "1.10.0" // available: "1.10.2" const val android_arch_lifecycle_extensions: String = "1.1.1" - const val com_android_tools_build_gradle: String = "4.0.1" + const val com_android_tools_build_gradle: String = "4.0.1" // available: "4.0.2" const val de_fayard_buildsrcversions_gradle_plugin: String = "0.7.0" @@ -50,9 +50,9 @@ object Versions { const val ink_page_indicator: String = "1.3.0" - const val leakcanary_android: String = "2.4" + const val leakcanary_android: String = "2.4" // available: "2.5" - const val constraintlayout: String = "1.1.3" // available: "2.0.1" + const val constraintlayout: String = "1.1.3" // available: "2.0.2" const val collection_ktx: String = "1.1.0" @@ -60,7 +60,7 @@ object Versions { const val junit_jupiter: String = "5.6.2" // available: "5.7.0" - const val xfetch2okhttp: String = "3.1.4" // available: "3.1.5" + const val xfetch2okhttp: String = "3.1.5" const val assertj_core: String = "3.16.1" // available: "3.17.2" @@ -68,7 +68,7 @@ object Versions { const val fragment_ktx: String = "1.2.5" - const val lint_gradle: String = "27.0.1" + const val lint_gradle: String = "27.0.1" // available: "27.0.2" const val testing_ktx: String = "1.1.2" @@ -84,7 +84,7 @@ object Versions { const val rxandroid: String = "2.1.1" - const val core_ktx: String = "1.3.1" + const val core_ktx: String = "1.3.1" // available: "1.3.2" const val kiwixlib: String = "9.4.0" @@ -92,19 +92,19 @@ object Versions { const val multidex: String = "2.0.1" - const val barista: String = "2.7.1" // available: "3.6.0" + const val barista: String = "2.7.1" // available: "3.7.0" - const val xfetch2: String = "3.1.4" // available: "3.1.5" + const val xfetch2: String = "3.1.5" const val jsr305: String = "3.0.2" const val ktlint: String = "0.36.0" // available: "0.39.0" - const val rxjava: String = "2.2.19" + const val rxjava: String = "2.2.19" // available: "2.2.20" const val webkit: String = "1.2.0" // available: "1.3.0" - const val aapt2: String = "4.0.1-6197926" + const val aapt2: String = "4.0.1-6197926" // available: "4.0.2-6197926" const val junit: String = "1.1.1" // available: "1.1.2" diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/main/CoreReaderFragment.java b/core/src/main/java/org/kiwix/kiwixmobile/core/main/CoreReaderFragment.java index 5473d9afc..1fbfd865a 100644 --- a/core/src/main/java/org/kiwix/kiwixmobile/core/main/CoreReaderFragment.java +++ b/core/src/main/java/org/kiwix/kiwixmobile/core/main/CoreReaderFragment.java @@ -716,6 +716,7 @@ public abstract class CoreReaderFragment extends BaseFragment actionBar = null; mainMenu = null; tabRecyclerView.setAdapter(null); + tableDrawerRight.setAdapter(null); tableDrawerAdapter = null; unbinder.unbind(); webViewList.clear(); diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/utils/dialog/KiwixDialog.kt b/core/src/main/java/org/kiwix/kiwixmobile/core/utils/dialog/KiwixDialog.kt index 724307f75..53ce42151 100644 --- a/core/src/main/java/org/kiwix/kiwixmobile/core/utils/dialog/KiwixDialog.kt +++ b/core/src/main/java/org/kiwix/kiwixmobile/core/utils/dialog/KiwixDialog.kt @@ -47,6 +47,13 @@ sealed class KiwixDialog( android.R.string.cancel ) + object LocationPermissionRationaleOnHostZimFile : KiwixDialog( + null, + R.string.permission_rationale_location_on_host_zim_file, + android.R.string.yes, + android.R.string.cancel + ) + object StoragePermissionRationale : KiwixDialog( null, R.string.request_storage, diff --git a/core/src/main/res/values-bn/strings.xml b/core/src/main/res/values-bn/strings.xml index bd23a9f0e..fb833c239 100644 --- a/core/src/main/res/values-bn/strings.xml +++ b/core/src/main/res/values-bn/strings.xml @@ -25,6 +25,7 @@ অনুসন্ধান একটি বিষয়বস্তুর ফাইল নির্বাচন করুন (*.zim) নতুন ট্যাবে লিঙ্ক খোলা হবে? + সংযোগ প্রত্যাখান করা হয়েছে। ত্রুটি: নির্বাচিত ZIM ফাইলটি খুঁজে পাওয়া যায় নি। ত্রুটি: নির্বাচিত ফাইলটি বৈধ ZIM ফাইল নয়। ত্রুটি: নিবন্ধ লোডে (Url: %1$s) ব্যর্থ। diff --git a/core/src/main/res/values-fr/strings.xml b/core/src/main/res/values-fr/strings.xml index 80e3975a0..2375f2f5f 100644 --- a/core/src/main/res/values-fr/strings.xml +++ b/core/src/main/res/values-fr/strings.xml @@ -40,6 +40,7 @@ Échec de démarrage du point d’accès il semble que votre point d’accès soit déjà activé. Veuillez d’abord désactiver votre point d’accès WiFi pour continuer. Aller aux paramètres WiFi + Connexion refusée. Point d’accès WiFi actif Veuillez d’abord choisir les livres Impossible de démarrer le serveur. Veuillez activer votre point d’accès WiFi diff --git a/core/src/main/res/values-hu/strings.xml b/core/src/main/res/values-hu/strings.xml index da124b7fc..e52ee7234 100644 --- a/core/src/main/res/values-hu/strings.xml +++ b/core/src/main/res/values-hu/strings.xml @@ -6,6 +6,7 @@ * Csega * Dj * Fitoschido +* Hanna Tardos * Kelson * Macofe * Tacsipacsi @@ -28,6 +29,7 @@ Keresés Tartalomfájl kiválasztása (*.zim) Hivatkozás megnyitása új lapon? + Csatlakozás elutasítva. Hiba: A kijelölt ZIM-fájl nem található. Hiba: A kijelölt fájl nem érvényes ZIM-fájl. Hiba: A cikk (URL: %1$s) betöltése nem sikerült. diff --git a/core/src/main/res/values-it/strings.xml b/core/src/main/res/values-it/strings.xml index dcc0243dc..f6dcb6c3b 100644 --- a/core/src/main/res/values-it/strings.xml +++ b/core/src/main/res/values-it/strings.xml @@ -6,6 +6,7 @@ * G.garatti * Gianfranco * Matteocng +* Mpayansilva * Nivit * Purodha --> @@ -26,6 +27,7 @@ Ricerca Seleziona un file di contenuto (*.zim) Apri il collegamento in una nuova scheda? + Collegamento negato. Istruzioni per ospitare libri PROCEDI Errore: il file ZIM selezionato non è stato trovato. diff --git a/core/src/main/res/values-iw/strings.xml b/core/src/main/res/values-iw/strings.xml index 4fc2b875d..7629af7f1 100644 --- a/core/src/main/res/values-iw/strings.xml +++ b/core/src/main/res/values-iw/strings.xml @@ -33,6 +33,7 @@ הפעלת נקודת חיבור לא עבדה נראה שנקודת החיבור כבר מופעלת אצלך. נא לכבות את נקודת החיבור שלך כדי להמשיך. לעבור להגדרות וייפיי + החיבור סורב. נקודת החיבור פועלת נא לבחור ספרים קודם לא היה אפשר להתחיל את השרת. נא להפעיל את נקודת החיבור שלך diff --git a/core/src/main/res/values-mk/strings.xml b/core/src/main/res/values-mk/strings.xml index 6f8888bd8..9a2c118ee 100644 --- a/core/src/main/res/values-mk/strings.xml +++ b/core/src/main/res/values-mk/strings.xml @@ -26,6 +26,7 @@ Не успеав да ја покренам пристапната точка Се чини дека точката за безжичен пристап е веќе вклучена. Исклучете ја за да продолжите. Оди во поставките за безжичен пристап + Поврзувањето е одбиено. Активна пристапна точка Најпрвин одберете книги Не можев да го покренам опслужувачот. Вклучете ја пристапната точка diff --git a/core/src/main/res/values-pt-rBR/strings.xml b/core/src/main/res/values-pt-rBR/strings.xml index bea53d30a..133098a05 100644 --- a/core/src/main/res/values-pt-rBR/strings.xml +++ b/core/src/main/res/values-pt-rBR/strings.xml @@ -32,6 +32,7 @@ Falha ao iniciar o ponto de acesso Parece que seu ponto de acesso já está ativado. Desative seu ponto de acesso wi-fi para continuar. Vá para configurações de wi-fi + Conexão recusada. Rede wi-fi em execução Selecione primeiro os livros Não foi possível iniciar o servidor. Por favor, ligue seu ponto de acesso @@ -280,4 +281,6 @@ Guia restaurada Abrir gaveta Fechar gaveta + Como atualizar o conteúdo? + Para atualizar o conteúdo (um arquivo zim), você precisa baixar a versão completa mais recente desse mesmo conteúdo. Você pode fazer isso através da seção de download. diff --git a/core/src/main/res/values-qq/strings.xml b/core/src/main/res/values-qq/strings.xml index 6b1ece2ff..b19682a45 100644 --- a/core/src/main/res/values-qq/strings.xml +++ b/core/src/main/res/values-qq/strings.xml @@ -61,4 +61,5 @@ Tell the user that they have not opened a book. The action of opening the library destination, used on a button. Tell the user that a tab has been restored. + Tell the user Location permission required for hosting zim file. diff --git a/core/src/main/res/values-zh-rTW/strings.xml b/core/src/main/res/values-zh-rTW/strings.xml index 81eff15e3..ebcb08364 100644 --- a/core/src/main/res/values-zh-rTW/strings.xml +++ b/core/src/main/res/values-zh-rTW/strings.xml @@ -31,6 +31,7 @@ 開啟熱點失敗 看起來似乎是您的熱點已開啟,請停用您的 WiFi 熱點來繼續。 前往 WIFI 設定 + 連線被拒絕。 運行熱點 請先選擇書籍 無法開啟伺服器,請啟動您的熱點 diff --git a/core/src/main/res/values-zh/strings.xml b/core/src/main/res/values-zh/strings.xml index 35c7e4c58..bc4d652bb 100644 --- a/core/src/main/res/values-zh/strings.xml +++ b/core/src/main/res/values-zh/strings.xml @@ -38,6 +38,7 @@ 未能启动热点 你的热点好像已经打开了。请先关闭 Wi-Fi 热点再继续。 转到WIFI设置 + 拒绝连接 运行热点 请先选择书籍 未能启动服务器。请打开热点。 diff --git a/core/src/main/res/values/strings.xml b/core/src/main/res/values/strings.xml index fbcb54bf5..1a5a46e87 100644 --- a/core/src/main/res/values/strings.xml +++ b/core/src/main/res/values/strings.xml @@ -230,6 +230,7 @@ Severe error! Try Disable/Re-enable WiFi P2P Connection failed Location permission is required by Android to allow the app to detect peer devices + Location permission is required by Android to allow the app to Host Zim files Cannot locate peer devices without location permissions Cannot access zim files without storage permission Enable location to allow detection of peers