mirror of
https://github.com/kiwix/kiwix-android.git
synced 2025-09-22 12:03:09 -04:00
commit
e288e58771
4
.github/workflows/coverage.yml
vendored
4
.github/workflows/coverage.yml
vendored
@ -25,11 +25,11 @@ jobs:
|
||||
fetch-depth: 1
|
||||
|
||||
- name: create instrumentation coverage
|
||||
uses: ReactiveCircus/android-emulator-runner@v2.12.0
|
||||
uses: ReactiveCircus/android-emulator-runner@v2.14.3
|
||||
with:
|
||||
api-level: ${{ matrix.api-level }}
|
||||
arch: x86_64
|
||||
ndk: 21.3.6528147
|
||||
ndk: 21.4.7075529
|
||||
script: bash contrib/instrumentation.sh
|
||||
|
||||
- name: Upload screenshot result
|
||||
|
9
.github/workflows/nightly.yml
vendored
9
.github/workflows/nightly.yml
vendored
@ -21,11 +21,11 @@ jobs:
|
||||
fetch-depth: 1
|
||||
|
||||
- name: run instrumentation tests
|
||||
uses: ReactiveCircus/android-emulator-runner@v2.12.0
|
||||
uses: ReactiveCircus/android-emulator-runner@v2.14.3
|
||||
with:
|
||||
api-level: ${{ matrix.api-level }}
|
||||
arch: x86_64
|
||||
ndk: 21.3.6528147
|
||||
ndk: 21.4.7075529
|
||||
script: bash contrib/instrumentation_nightly.sh
|
||||
|
||||
- name: Upload screenshot result
|
||||
@ -36,7 +36,7 @@ jobs:
|
||||
path: screencap.png
|
||||
|
||||
unit_test_and_release:
|
||||
runs-on: ubuntu-latest
|
||||
runs-on: ubuntu-18.04
|
||||
steps:
|
||||
|
||||
- name: checkout
|
||||
@ -44,6 +44,9 @@ jobs:
|
||||
with:
|
||||
fetch-depth: 1
|
||||
|
||||
- name: Install NDK
|
||||
run: echo "y" | sudo ${ANDROID_HOME}/tools/bin/sdkmanager --install "ndk;22.0.7026061" --sdk_root=${ANDROID_SDK_ROOT}
|
||||
|
||||
- name: run unit tests
|
||||
run: ./gradlew testDebugUnitTest testCustomExampleDebugUnitTest
|
||||
|
||||
|
7
.github/workflows/pull_request.yml
vendored
7
.github/workflows/pull_request.yml
vendored
@ -6,7 +6,7 @@ jobs:
|
||||
|
||||
staticAnalysis:
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
runs-on: ubuntu-18.04
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
@ -27,13 +27,16 @@ jobs:
|
||||
|
||||
build:
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
runs-on: ubuntu-18.04
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
with:
|
||||
fetch-depth: 1
|
||||
|
||||
- name: Install NDK
|
||||
run: echo "y" | sudo ${ANDROID_HOME}/tools/bin/sdkmanager --install "ndk;22.0.7026061" --sdk_root=${ANDROID_SDK_ROOT}
|
||||
|
||||
- name: Build all configurations
|
||||
run: ./gradlew assemble
|
||||
|
||||
|
2
.github/workflows/release.yml
vendored
2
.github/workflows/release.yml
vendored
@ -12,7 +12,7 @@ on:
|
||||
jobs:
|
||||
publish:
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
runs-on: ubuntu-18.04
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
|
@ -1,3 +1,12 @@
|
||||
3.4.4
|
||||
NEW: The Download of Zim in now more stable
|
||||
NEW: Updated translations
|
||||
BUGFIX: In Search menu item recreates multiple times
|
||||
BUGFIX: Clicking the search result doesn't go anywhere
|
||||
BUGFIX: Search text don't appear in the search field
|
||||
BUGFIX: Back Press doesn't work in SearchFragment
|
||||
BUGFIX: Memory leaks patched
|
||||
|
||||
3.4.3
|
||||
NEW: Updated translations
|
||||
BUGFIX: Video seek was not working
|
||||
|
@ -11,7 +11,7 @@ apply(from = rootProject.file("jacoco.gradle"))
|
||||
ext {
|
||||
set("versionMajor", 3)
|
||||
set("versionMinor", 4)
|
||||
set("versionPatch", 3)
|
||||
set("versionPatch", 4)
|
||||
}
|
||||
|
||||
fun generateVersionName() = "${ext["versionMajor"]}.${ext["versionMinor"]}.${ext["versionPatch"]}"
|
||||
|
@ -34,6 +34,9 @@ class HelpFragmentTest : BaseActivityTest() {
|
||||
clickOnWhereIsContent()
|
||||
assertWhereIsContentIsExpanded()
|
||||
clickOnWhereIsContent()
|
||||
clickOnHowToUpdateContent()
|
||||
assertHowToUpdateContentIsExpanded()
|
||||
clickOnHowToUpdateContent()
|
||||
clickOnSendFeedback()
|
||||
}
|
||||
}
|
||||
|
@ -66,6 +66,14 @@ class HelpRobot : BaseRobot() {
|
||||
)
|
||||
}
|
||||
|
||||
fun clickOnHowToUpdateContent() {
|
||||
clickOn(TextId(string.how_to_update_content))
|
||||
}
|
||||
|
||||
fun assertHowToUpdateContentIsExpanded() {
|
||||
isVisible(TextId(string.update_content_description))
|
||||
}
|
||||
|
||||
fun clickOnSendFeedback() {
|
||||
clickOn(ViewId(id.activity_help_feedback_text_view))
|
||||
}
|
||||
|
@ -90,7 +90,7 @@ class TopLevelDestinationRobot : BaseRobot() {
|
||||
|
||||
fun clickHostBooksOnSideNav(func: ZimHostRobot.() -> Unit) {
|
||||
inNavDrawer {
|
||||
clickOn(TextId(R.string.menu_host_books))
|
||||
clickOn(TextId(R.string.menu_wifi_hotspot))
|
||||
zimHost(func)
|
||||
}
|
||||
}
|
||||
|
@ -1,60 +0,0 @@
|
||||
/*
|
||||
* Kiwix Android
|
||||
* Copyright (c) 2019 Kiwix <android.kiwix.org>
|
||||
* 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 <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
package org.kiwix.kiwixmobile.search;
|
||||
|
||||
import android.Manifest;
|
||||
import androidx.test.espresso.matcher.ViewMatchers;
|
||||
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
||||
import androidx.test.filters.LargeTest;
|
||||
import androidx.test.rule.ActivityTestRule;
|
||||
import androidx.test.rule.GrantPermissionRule;
|
||||
import org.junit.Rule;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.kiwix.kiwixmobile.R;
|
||||
import org.kiwix.kiwixmobile.main.KiwixMainActivity;
|
||||
|
||||
import static androidx.test.espresso.Espresso.onView;
|
||||
import static androidx.test.espresso.action.ViewActions.click;
|
||||
import static androidx.test.espresso.matcher.ViewMatchers.withEffectiveVisibility;
|
||||
import static androidx.test.espresso.matcher.ViewMatchers.withId;
|
||||
import static androidx.test.espresso.matcher.ViewMatchers.withText;
|
||||
import static org.hamcrest.CoreMatchers.allOf;
|
||||
|
||||
@LargeTest
|
||||
@RunWith(AndroidJUnit4.class)
|
||||
public class SearchFragmentTest {
|
||||
|
||||
@Rule
|
||||
public ActivityTestRule<KiwixMainActivity> mActivityTestRule = new ActivityTestRule<>(
|
||||
KiwixMainActivity.class);
|
||||
@Rule
|
||||
public GrantPermissionRule readPermissionRule =
|
||||
GrantPermissionRule.grant(Manifest.permission.READ_EXTERNAL_STORAGE);
|
||||
@Rule
|
||||
public GrantPermissionRule writePermissionRule =
|
||||
GrantPermissionRule.grant(Manifest.permission.WRITE_EXTERNAL_STORAGE);
|
||||
|
||||
@Test
|
||||
public void SearchFragmentSimple() {
|
||||
onView(allOf(withText(R.string.reader),
|
||||
withEffectiveVisibility(ViewMatchers.Visibility.VISIBLE))).perform(click());
|
||||
onView(withId(R.id.menu_search));
|
||||
}
|
||||
}
|
@ -15,18 +15,21 @@
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
package org.kiwix.kiwixmobile.core.main
|
||||
package org.kiwix.kiwixmobile.search
|
||||
|
||||
import android.content.Context
|
||||
import java.io.BufferedReader
|
||||
import java.io.IOException
|
||||
import androidx.test.internal.runner.junit4.statement.UiThreadStatement
|
||||
import com.schibsted.spain.barista.assertion.BaristaVisibilityAssertions.assertDisplayed
|
||||
import org.junit.Before
|
||||
import org.junit.Test
|
||||
import org.kiwix.kiwixmobile.BaseActivityTest
|
||||
import org.kiwix.kiwixmobile.R
|
||||
|
||||
class FileReader {
|
||||
fun readFile(filePath: String, context: Context): String = try {
|
||||
context.assets.open(filePath)
|
||||
.bufferedReader()
|
||||
.use(BufferedReader::readText)
|
||||
} catch (e: IOException) {
|
||||
"".also { e.printStackTrace() }
|
||||
class SearchFragmentTest : BaseActivityTest() {
|
||||
@Before fun setUp() {
|
||||
UiThreadStatement.runOnUiThread { activityRule.activity.navigate(R.id.searchFragment) }
|
||||
}
|
||||
|
||||
@Test fun searchFragmentSimple() {
|
||||
assertDisplayed(R.string.menu_search_in_text)
|
||||
}
|
||||
}
|
@ -27,6 +27,6 @@ fun zimHost(func: ZimHostRobot.() -> Unit) = ZimHostRobot().applyWithViewHierarc
|
||||
|
||||
class ZimHostRobot : BaseRobot() {
|
||||
init {
|
||||
isVisible(TextId(R.string.menu_host_books))
|
||||
isVisible(TextId(R.string.menu_wifi_hotspot))
|
||||
}
|
||||
}
|
||||
|
@ -38,7 +38,7 @@ import org.kiwix.kiwixmobile.core.base.FragmentActivityExtensions
|
||||
import org.kiwix.kiwixmobile.core.di.components.CoreComponent
|
||||
import org.kiwix.kiwixmobile.core.main.CoreMainActivity
|
||||
import org.kiwix.kiwixmobile.kiwixActivityComponent
|
||||
import org.kiwix.kiwixmobile.nav.destination.library.LocalLibraryFragmentDirections
|
||||
import org.kiwix.kiwixmobile.nav.destination.reader.KiwixReaderFragmentDirections
|
||||
|
||||
const val NAVIGATE_TO_ZIM_HOST_FRAGMENT = "navigate_to_zim_host_fragment"
|
||||
|
||||
@ -95,7 +95,7 @@ class KiwixMainActivity : CoreMainActivity() {
|
||||
}
|
||||
}
|
||||
if (sharedPreferenceUtil.showIntro()) {
|
||||
navigate(LocalLibraryFragmentDirections.actionLibraryFragmentToIntrofragment())
|
||||
navigate(KiwixReaderFragmentDirections.actionReaderFragmentToIntroFragment())
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -111,6 +111,7 @@ class KiwixReaderFragment : CoreReaderFragment() {
|
||||
|
||||
private fun openPageInBookFromNavigationArguments() {
|
||||
val args = KiwixReaderFragmentArgs.fromBundle(requireArguments())
|
||||
|
||||
if (args.pageUrl.isNotEmpty()) {
|
||||
if (args.zimFileUri.isNotEmpty()) {
|
||||
tryOpeningZimFile(args.zimFileUri)
|
||||
@ -250,9 +251,13 @@ class KiwixReaderFragment : CoreReaderFragment() {
|
||||
val settings = requireActivity().getSharedPreferences(SharedPreferenceUtil.PREF_KIWIX_MOBILE, 0)
|
||||
val zimFile = settings.getString(TAG_CURRENT_FILE, null)
|
||||
|
||||
if (zimFile != null) {
|
||||
if (zimFile != null && File(zimFile).exists()) {
|
||||
if (zimReaderContainer.zimFile == null) {
|
||||
openZimFile(File(zimFile))
|
||||
Log.d(
|
||||
TAG_KIWIX,
|
||||
"Kiwix normal start, Opened last used zimFile: -> $zimFile"
|
||||
)
|
||||
}
|
||||
} else {
|
||||
getCurrentWebView().snack(R.string.zim_not_opened)
|
||||
|
@ -293,9 +293,11 @@ class ZimHostFragment : BaseFragment(), ZimHostCallbacks, ZimHostContract.View {
|
||||
private fun setUpToolbar(view: View) {
|
||||
val activity = requireActivity() as AppCompatActivity
|
||||
activity.setSupportActionBar(view.findViewById(R.id.toolbar))
|
||||
activity.supportActionBar!!.title = getString(R.string.menu_host_books)
|
||||
activity.supportActionBar!!.setHomeButtonEnabled(true)
|
||||
activity.supportActionBar!!.setDisplayHomeAsUpEnabled(true)
|
||||
activity.supportActionBar?.apply {
|
||||
title = getString(R.string.menu_wifi_hotspot)
|
||||
setHomeButtonEnabled(true)
|
||||
setDisplayHomeAsUpEnabled(true)
|
||||
}
|
||||
}
|
||||
|
||||
// Advice user to turn on hotspot manually for API<26
|
||||
|
@ -43,4 +43,8 @@ class ConnectivityBroadcastReceiver @Inject constructor(
|
||||
) {
|
||||
_networkStates.onNext(connectivityManager.networkState)
|
||||
}
|
||||
|
||||
fun stopNetworkState() {
|
||||
_networkStates.onComplete()
|
||||
}
|
||||
}
|
||||
|
@ -116,10 +116,10 @@ class ZimManageViewModel @Inject constructor(
|
||||
val requestDownloadLibrary = BehaviorProcessor.createDefault(Unit)
|
||||
val requestFiltering = BehaviorProcessor.createDefault("")
|
||||
|
||||
private val compositeDisposable = CompositeDisposable()
|
||||
private var compositeDisposable: CompositeDisposable? = CompositeDisposable()
|
||||
|
||||
init {
|
||||
compositeDisposable.addAll(*disposables())
|
||||
compositeDisposable?.addAll(*disposables())
|
||||
context.registerReceiver(connectivityBroadcastReceiver)
|
||||
}
|
||||
|
||||
@ -129,8 +129,13 @@ class ZimManageViewModel @Inject constructor(
|
||||
}
|
||||
|
||||
override fun onCleared() {
|
||||
compositeDisposable.clear()
|
||||
compositeDisposable?.clear()
|
||||
context.unregisterReceiver(connectivityBroadcastReceiver)
|
||||
connectivityBroadcastReceiver.stopNetworkState()
|
||||
requestFileSystemCheck.onComplete()
|
||||
fileSelectActions.onComplete()
|
||||
requestDownloadLibrary.onComplete()
|
||||
compositeDisposable = null
|
||||
super.onCleared()
|
||||
}
|
||||
|
||||
|
@ -19,7 +19,7 @@
|
||||
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
app:startDestination="@id/libraryFragment">
|
||||
app:startDestination="@id/readerFragment">
|
||||
<fragment
|
||||
android:id="@+id/readerFragment"
|
||||
android:name="org.kiwix.kiwixmobile.nav.destination.reader.KiwixReaderFragment"
|
||||
@ -52,6 +52,11 @@
|
||||
<action
|
||||
android:id="@+id/action_readerFragment_to_searchFragment"
|
||||
app:destination="@id/searchFragment" />
|
||||
<action
|
||||
android:id="@+id/action_readerFragment_to_introFragment"
|
||||
app:destination="@id/introFragment"
|
||||
app:popUpTo="@id/readerFragment"
|
||||
app:popUpToInclusive="true" />
|
||||
</fragment>
|
||||
|
||||
<fragment
|
||||
@ -69,11 +74,6 @@
|
||||
<action
|
||||
android:id="@+id/action_libraryFragment_to_localFileTransferFragment"
|
||||
app:destination="@id/localFileTransferFragment" />
|
||||
<action
|
||||
android:id="@+id/action_libraryFragment_to_introfragment"
|
||||
app:destination="@id/introFragment"
|
||||
app:popUpTo="@id/libraryFragment"
|
||||
app:popUpToInclusive="true" />
|
||||
</fragment>
|
||||
|
||||
<fragment
|
||||
|
8
app/src/main/res/values-eo/strings.xml
Normal file
8
app/src/main/res/values-eo/strings.xml
Normal file
@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Authors:
|
||||
* Jakub Fabijan
|
||||
-->
|
||||
<resources>
|
||||
<string name="send_files_title">Sendado de Dosierojn</string>
|
||||
<string name="receive_files_title">Ricevado de Dosierojn</string>
|
||||
</resources>
|
@ -2,11 +2,12 @@
|
||||
<!-- Authors:
|
||||
* Gomoko
|
||||
* Thibaut120094
|
||||
* Verdy p
|
||||
-->
|
||||
<resources>
|
||||
<string name="file_system_does_not_support_4gb">Votre système de fichiers ne prend pas en charge les fichiers de 4 Go ou plus.</string>
|
||||
<string name="detecting_file_system">Détecte si le système de fichiers peut créer des fichiers de 4 Go ou plus</string>
|
||||
<string name="cannot_open_file">Échec de l\'ouverture du fichier\nEssayez de chercher ce fichier dans l\'onglet Appareils de votre Bibliothèque</string>
|
||||
<string name="cannot_open_file">Échec de l’ouverture du fichier.\nEssayez de chercher ce fichier dans l’onglet Appareils de votre Bibliothèque.</string>
|
||||
<string name="send_files_title">Envoyer des fichiers</string>
|
||||
<string name="receive_files_title">Recevoir des fichiers</string>
|
||||
</resources>
|
||||
|
@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="all">
|
||||
<string name="send_files_title">The title of an activity used for sending files.</string>
|
||||
<string name="receive_files_title">The titles of an activity used for receiving files.</string>
|
||||
</resources>
|
||||
|
@ -59,7 +59,7 @@ object Versions {
|
||||
|
||||
const val junit_jupiter: String = "5.7.0"
|
||||
|
||||
const val xfetch2okhttp: String = "3.1.5"
|
||||
const val xfetch2okhttp: String = "3.1.6"
|
||||
|
||||
const val assertj_core: String = "3.18.1"
|
||||
|
||||
@ -93,7 +93,7 @@ object Versions {
|
||||
|
||||
const val barista: String = "2.7.1" // available: "3.7.0"
|
||||
|
||||
const val xfetch2: String = "3.1.5"
|
||||
const val xfetch2: String = "3.1.6"
|
||||
|
||||
const val jsr305: String = "3.0.2"
|
||||
|
||||
|
@ -48,7 +48,7 @@ class AllProjectConfigurer {
|
||||
fun configureBaseExtension(target: Project, path: String) {
|
||||
target.configureExtension<BaseExtension> {
|
||||
setCompileSdkVersion(Config.compileSdk)
|
||||
ndkVersion = "21.3.6528147"
|
||||
ndkVersion = "21.4.7075529"
|
||||
defaultConfig {
|
||||
setMinSdkVersion(Config.minSdk)
|
||||
setTargetSdkVersion(Config.targetSdk)
|
||||
|
@ -158,6 +158,7 @@ class CompatFindActionModeCallback internal constructor(context: Context) :
|
||||
actionMode = null
|
||||
isActive = false
|
||||
webView?.clearMatches()
|
||||
webView = null
|
||||
input.hideSoftInputFromWindow(webView?.windowToken, 0)
|
||||
}
|
||||
|
||||
|
@ -145,20 +145,10 @@ public abstract class CoreReaderFragment extends BaseFragment
|
||||
|
||||
@BindView(R2.id.toolbar)
|
||||
protected Toolbar toolbar;
|
||||
@BindView(R2.id.activity_main_back_to_top_fab)
|
||||
FloatingActionButton backToTopButton;
|
||||
@BindView(R2.id.activity_main_button_stop_tts)
|
||||
Button stopTTSButton;
|
||||
@BindView(R2.id.activity_main_button_pause_tts)
|
||||
Button pauseTTSButton;
|
||||
@BindView(R2.id.activity_main_tts_controls)
|
||||
Group TTSControls;
|
||||
@BindView(R2.id.fragment_main_app_bar)
|
||||
protected AppBarLayout toolbarContainer;
|
||||
@BindView(R2.id.main_fragment_progress_view)
|
||||
protected ContentLoadingProgressBar progressBar;
|
||||
@BindView(R2.id.activity_main_fullscreen_button)
|
||||
ImageButton exitFullscreenButton;
|
||||
@BindView(R2.id.navigation_fragment_main_drawer_layout)
|
||||
protected DrawerLayout drawerLayout;
|
||||
protected NavigationView tableDrawerRightContainer;
|
||||
@ -166,31 +156,16 @@ public abstract class CoreReaderFragment extends BaseFragment
|
||||
protected FrameLayout contentFrame;
|
||||
@BindView(R2.id.bottom_toolbar)
|
||||
protected BottomAppBar bottomToolbar;
|
||||
@BindView(R2.id.bottom_toolbar_bookmark)
|
||||
ImageView bottomToolbarBookmark;
|
||||
@BindView(R2.id.bottom_toolbar_arrow_back)
|
||||
ImageView bottomToolbarArrowBack;
|
||||
@BindView(R2.id.bottom_toolbar_arrow_forward)
|
||||
ImageView bottomToolbarArrowForward;
|
||||
@BindView(R2.id.tab_switcher_recycler_view)
|
||||
RecyclerView tabRecyclerView;
|
||||
@BindView(R2.id.activity_main_tab_switcher)
|
||||
protected View tabSwitcherRoot;
|
||||
@BindView(R2.id.tab_switcher_close_all_tabs)
|
||||
protected FloatingActionButton closeAllTabsButton;
|
||||
@BindView(R2.id.snackbar_root)
|
||||
CoordinatorLayout snackbarRoot;
|
||||
@BindView(R2.id.fullscreen_video_container)
|
||||
protected ViewGroup videoView;
|
||||
@BindView(R2.id.go_to_library_button_no_open_book)
|
||||
protected Button noOpenBookButton;
|
||||
@BindView(R2.id.no_open_book_text)
|
||||
TextView noOpenBookText;
|
||||
@BindView(R2.id.activity_main_root)
|
||||
protected View activityMainRoot;
|
||||
|
||||
@Inject
|
||||
StorageObserver storageObserver;
|
||||
@Inject
|
||||
protected SharedPreferenceUtil sharedPreferenceUtil;
|
||||
@Inject
|
||||
@ -207,11 +182,37 @@ public abstract class CoreReaderFragment extends BaseFragment
|
||||
protected DialogShower alertDialogShower;
|
||||
@Inject
|
||||
protected NightModeViewPainter painter;
|
||||
protected int currentWebViewIndex = 0;
|
||||
protected ActionBar actionBar;
|
||||
protected MainMenu mainMenu;
|
||||
@BindView(R2.id.activity_main_back_to_top_fab)
|
||||
FloatingActionButton backToTopButton;
|
||||
@BindView(R2.id.activity_main_button_stop_tts)
|
||||
Button stopTTSButton;
|
||||
@BindView(R2.id.activity_main_button_pause_tts)
|
||||
Button pauseTTSButton;
|
||||
@BindView(R2.id.activity_main_tts_controls)
|
||||
Group TTSControls;
|
||||
@BindView(R2.id.activity_main_fullscreen_button)
|
||||
ImageButton exitFullscreenButton;
|
||||
@BindView(R2.id.bottom_toolbar_bookmark)
|
||||
ImageView bottomToolbarBookmark;
|
||||
@BindView(R2.id.bottom_toolbar_arrow_back)
|
||||
ImageView bottomToolbarArrowBack;
|
||||
@BindView(R2.id.bottom_toolbar_arrow_forward)
|
||||
ImageView bottomToolbarArrowForward;
|
||||
@BindView(R2.id.tab_switcher_recycler_view)
|
||||
RecyclerView tabRecyclerView;
|
||||
@BindView(R2.id.snackbar_root)
|
||||
CoordinatorLayout snackbarRoot;
|
||||
@BindView(R2.id.no_open_book_text)
|
||||
TextView noOpenBookText;
|
||||
@Inject
|
||||
StorageObserver storageObserver;
|
||||
@Inject
|
||||
MainRepositoryActions repositoryActions;
|
||||
@Inject
|
||||
ExternalLinkOpener externalLinkOpener;
|
||||
|
||||
private CountDownTimer hideBackToTopTimer;
|
||||
private List<TableDrawerAdapter.DocumentSection> documentSections;
|
||||
private boolean isBackToTopEnabled = false;
|
||||
@ -221,16 +222,13 @@ public abstract class CoreReaderFragment extends BaseFragment
|
||||
private KiwixTextToSpeech tts;
|
||||
private CompatFindActionModeCallback compatCallback;
|
||||
private TabsAdapter tabsAdapter;
|
||||
protected int currentWebViewIndex = 0;
|
||||
private File file;
|
||||
private ActionMode actionMode = null;
|
||||
private KiwixWebView tempWebViewForUndo;
|
||||
private File tempZimFileForUndo;
|
||||
private boolean isFirstRun;
|
||||
protected ActionBar actionBar;
|
||||
private TableDrawerAdapter tableDrawerAdapter;
|
||||
private RecyclerView tableDrawerRight;
|
||||
protected MainMenu mainMenu;
|
||||
private ItemTouchHelper.Callback tabCallback;
|
||||
private Disposable bookmarkingDisposable;
|
||||
private boolean isBookmarked;
|
||||
@ -488,7 +486,7 @@ public abstract class CoreReaderFragment extends BaseFragment
|
||||
}
|
||||
|
||||
private void addFileReader() {
|
||||
documentParserJs = new FileReader().readFile("js/documentParser.js", getActivity());
|
||||
documentParserJs = FileUtils.readFile(getActivity(), "js/documentParser.js");
|
||||
documentSections = new ArrayList<>();
|
||||
}
|
||||
|
||||
@ -538,7 +536,7 @@ public abstract class CoreReaderFragment extends BaseFragment
|
||||
}
|
||||
|
||||
protected void hideTabSwitcher() {
|
||||
if (actionBar != null) {
|
||||
if (actionBar != null && toolbar != null) {
|
||||
actionBar.setDisplayShowTitleEnabled(true);
|
||||
((CoreMainActivity) requireActivity()).setupDrawerToggle(toolbar);
|
||||
|
||||
@ -601,7 +599,7 @@ public abstract class CoreReaderFragment extends BaseFragment
|
||||
}
|
||||
|
||||
@NotNull @Override public Super onBackPressed(@NotNull AppCompatActivity activity) {
|
||||
if (tabSwitcherRoot.getVisibility() == View.VISIBLE) {
|
||||
if (tabSwitcherRoot != null && tabSwitcherRoot.getVisibility() == View.VISIBLE) {
|
||||
selectTab(currentWebViewIndex < webViewList.size() ? currentWebViewIndex
|
||||
: webViewList.size() - 1);
|
||||
hideTabSwitcher();
|
||||
@ -612,10 +610,10 @@ public abstract class CoreReaderFragment extends BaseFragment
|
||||
} else if (compatCallback.isActive) {
|
||||
compatCallback.finish();
|
||||
return ShouldNotCall;
|
||||
} else if (drawerLayout.isDrawerOpen(GravityCompat.END)) {
|
||||
} else if (drawerLayout != null && drawerLayout.isDrawerOpen(GravityCompat.END)) {
|
||||
drawerLayout.closeDrawers();
|
||||
return ShouldNotCall;
|
||||
} else if (getCurrentWebView().canGoBack()) {
|
||||
} else if (getCurrentWebView() != null && getCurrentWebView().canGoBack()) {
|
||||
getCurrentWebView().goBack();
|
||||
return ShouldNotCall;
|
||||
}
|
||||
@ -743,8 +741,10 @@ public abstract class CoreReaderFragment extends BaseFragment
|
||||
}
|
||||
|
||||
private KiwixWebView initalizeWebView(String url) {
|
||||
if (isAdded()) {
|
||||
AttributeSet attrs = StyleUtils.getAttributes(requireActivity(), R.xml.webview);
|
||||
KiwixWebView webView = createWebView(attrs);
|
||||
if (webView != null) {
|
||||
loadUrl(url, webView);
|
||||
setUpWithTextToSpeech(webView);
|
||||
documentParser.initInterface(webView);
|
||||
@ -752,15 +752,22 @@ public abstract class CoreReaderFragment extends BaseFragment
|
||||
openMainPage();
|
||||
return Unit.INSTANCE;
|
||||
}).initInterface(webView);
|
||||
}
|
||||
return webView;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@NotNull protected ToolbarScrollingKiwixWebView createWebView(AttributeSet attrs) {
|
||||
if (activityMainRoot != null) {
|
||||
return new ToolbarScrollingKiwixWebView(
|
||||
getActivity(), this, attrs, (ViewGroup) activityMainRoot, videoView,
|
||||
new CoreWebViewClient(this, zimReaderContainer),
|
||||
toolbarContainer, bottomToolbar,
|
||||
sharedPreferenceUtil);
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
protected KiwixWebView newMainPageTab() {
|
||||
@ -826,6 +833,7 @@ public abstract class CoreReaderFragment extends BaseFragment
|
||||
|
||||
protected void selectTab(int position) {
|
||||
currentWebViewIndex = position;
|
||||
if (contentFrame != null) {
|
||||
contentFrame.removeAllViews();
|
||||
KiwixWebView webView = safelyGetWebView(position);
|
||||
if (webView.getParent() != null) {
|
||||
@ -839,6 +847,7 @@ public abstract class CoreReaderFragment extends BaseFragment
|
||||
updateTableOfContents();
|
||||
updateTitle();
|
||||
}
|
||||
}
|
||||
|
||||
protected KiwixWebView safelyGetWebView(int position) {
|
||||
return webViewList.size() == 0 ? newMainPageTab() : webViewList.get(safePosition(position));
|
||||
@ -1220,6 +1229,7 @@ public abstract class CoreReaderFragment extends BaseFragment
|
||||
switch (intent.getAction()) {
|
||||
case Intent.ACTION_PROCESS_TEXT: {
|
||||
goToSearchWithText(intent);
|
||||
intent.setAction(null); // see https://github.com/kiwix/kiwix-android/issues/2607
|
||||
break;
|
||||
}
|
||||
case CoreSearchWidget.TEXT_CLICKED:
|
||||
@ -1303,7 +1313,7 @@ public abstract class CoreReaderFragment extends BaseFragment
|
||||
}
|
||||
|
||||
private void setUpWithTextToSpeech(KiwixWebView kiwixWebView) {
|
||||
tts.initWebView(kiwixWebView);
|
||||
if (kiwixWebView != null) tts.initWebView(kiwixWebView);
|
||||
}
|
||||
|
||||
@OnClick(R2.id.activity_main_back_to_top_fab)
|
||||
@ -1355,7 +1365,11 @@ public abstract class CoreReaderFragment extends BaseFragment
|
||||
}
|
||||
|
||||
protected boolean urlIsValid() {
|
||||
if (getCurrentWebView() != null) {
|
||||
return getCurrentWebView().getUrl() != null;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
private void updateUrlProcessor() {
|
||||
@ -1396,11 +1410,12 @@ public abstract class CoreReaderFragment extends BaseFragment
|
||||
JSONArray urls = new JSONArray();
|
||||
JSONArray positions = new JSONArray();
|
||||
for (KiwixWebView view : webViewList) {
|
||||
if (view != null) {
|
||||
if (view.getUrl() == null) continue;
|
||||
urls.put(view.getUrl());
|
||||
positions.put(view.getScrollY());
|
||||
}
|
||||
|
||||
}
|
||||
editor.putString(TAG_CURRENT_FILE, zimReaderContainer.getZimCanonicalPath());
|
||||
editor.putString(TAG_CURRENT_ARTICLES, urls.toString());
|
||||
editor.putString(TAG_CURRENT_POSITIONS, positions.toString());
|
||||
@ -1467,6 +1482,7 @@ public abstract class CoreReaderFragment extends BaseFragment
|
||||
@Override
|
||||
public void webViewProgressChanged(int progress) {
|
||||
if (checkNull(progressBar) && isAdded()) {
|
||||
progressBar.setVisibility(View.VISIBLE);
|
||||
progressBar.show();
|
||||
progressBar.setProgress(progress);
|
||||
if (progress == 100) {
|
||||
@ -1561,19 +1577,26 @@ public abstract class CoreReaderFragment extends BaseFragment
|
||||
return Math.max(settings.getInt(TAG_CURRENT_TAB, 0), 0);
|
||||
}
|
||||
|
||||
/* This method restores tabs state in new launches, do not modify it
|
||||
unless it is explicitly mentioned in the issue you're fixing */
|
||||
protected void restoreTabs(@Nullable String zimArticles, @Nullable String zimPositions,
|
||||
int currentTab) {
|
||||
try {
|
||||
JSONArray urls = new JSONArray(zimArticles);
|
||||
JSONArray positions = new JSONArray(zimPositions);
|
||||
webViewList.clear();
|
||||
currentWebViewIndex = 0;
|
||||
tabsAdapter.notifyItemRemoved(0);
|
||||
tabsAdapter.notifyDataSetChanged();
|
||||
for (int i = 0; i < urls.length(); i++) {
|
||||
newTab(UpdateUtils.reformatProviderUrl(urls.getString(i)), i == currentTab)
|
||||
.setScrollY(positions.getInt(i));
|
||||
int cursor = 0;
|
||||
getCurrentWebView().loadUrl(UpdateUtils.reformatProviderUrl(urls.getString(cursor)));
|
||||
getCurrentWebView().setScrollY(positions.getInt(cursor));
|
||||
cursor++;
|
||||
while (cursor < urls.length()) {
|
||||
newTab(UpdateUtils.reformatProviderUrl(urls.getString(cursor)));
|
||||
getCurrentWebView().setScrollY(positions.getInt(cursor));
|
||||
cursor++;
|
||||
}
|
||||
selectTab(currentTab);
|
||||
} catch (JSONException e) {
|
||||
Log.w(TAG_KIWIX, "Kiwix shared preferences corrupted", e);
|
||||
ContextExtensionsKt.toast(getActivity(), "Could not restore tabs.", Toast.LENGTH_LONG);
|
||||
|
@ -132,8 +132,8 @@ class ZimFileReader constructor(
|
||||
}.also { Log.d(TAG, "getting mimetype for $uri = $it") }
|
||||
|
||||
private fun mimeTypeFromReader(it: String) =
|
||||
// Truncate mime-type (everything after the first space
|
||||
jniKiwixReader.getMimeType(it.filePath)?.replace("^([^ ]+).*$", "$1")
|
||||
// Truncate mime-type (everything after the first space and semi-colon(if exists)
|
||||
jniKiwixReader.getMimeType(it.filePath)?.replace("^([^ ]+).*$", "$1")?.substringBefore(";")
|
||||
|
||||
fun getRedirect(url: String) = "${toRedirect(url)}"
|
||||
|
||||
|
@ -26,11 +26,13 @@ import android.view.MenuItem
|
||||
import android.view.MenuItem.OnActionExpandListener
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.activity.OnBackPressedCallback
|
||||
import androidx.appcompat.widget.SearchView
|
||||
import androidx.core.view.isVisible
|
||||
import androidx.core.widget.ContentLoadingProgressBar
|
||||
import androidx.lifecycle.ViewModelProvider
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import androidx.navigation.fragment.findNavController
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import kotlinx.android.synthetic.main.fragment_search.searchLoadingIndicator
|
||||
@ -107,6 +109,17 @@ class SearchFragment : BaseFragment() {
|
||||
lifecycleScope.launchWhenCreated {
|
||||
searchViewModel.effects.collect { it.invokeWith(this@SearchFragment.coreMainActivity) }
|
||||
}
|
||||
handleBackPress()
|
||||
}
|
||||
|
||||
private fun handleBackPress() {
|
||||
activity?.onBackPressedDispatcher?.addCallback(
|
||||
viewLifecycleOwner,
|
||||
object : OnBackPressedCallback(true) {
|
||||
override fun handleOnBackPressed() {
|
||||
goBack()
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
private fun setupToolbar(view: View) {
|
||||
@ -122,6 +135,12 @@ class SearchFragment : BaseFragment() {
|
||||
override fun onDestroyView() {
|
||||
super.onDestroyView()
|
||||
closeKeyboard()
|
||||
activity?.intent?.action = null
|
||||
}
|
||||
|
||||
private fun goBack() {
|
||||
val readerFragmentResId = (activity as CoreMainActivity).readerFragmentResId
|
||||
findNavController().popBackStack(readerFragmentResId, false)
|
||||
}
|
||||
|
||||
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
|
||||
@ -131,7 +150,9 @@ class SearchFragment : BaseFragment() {
|
||||
searchMenuItem.expandActionView()
|
||||
searchView = searchMenuItem.actionView as SearchView
|
||||
searchView.setOnQueryTextListener(SimpleTextListener {
|
||||
if (it.isNotEmpty()) {
|
||||
searchViewModel.actions.offer(Filter(it))
|
||||
}
|
||||
})
|
||||
searchMenuItem.setOnActionExpandListener(object : OnActionExpandListener {
|
||||
override fun onMenuItemActionExpand(item: MenuItem) = false
|
||||
@ -153,6 +174,7 @@ class SearchFragment : BaseFragment() {
|
||||
}
|
||||
|
||||
private fun render(state: SearchState) {
|
||||
searchView.setQuery(state.searchTerm, false)
|
||||
searchInTextMenuItem.isVisible = state.searchOrigin == FromWebView
|
||||
searchInTextMenuItem.isEnabled = state.searchTerm.isNotBlank()
|
||||
searchLoadingIndicator.isShowing(state.isLoading)
|
||||
|
@ -26,6 +26,7 @@ import android.util.Log
|
||||
import org.kiwix.kiwixmobile.core.downloader.ChunkUtils
|
||||
import org.kiwix.kiwixmobile.core.entity.LibraryNetworkEntity.Book
|
||||
import org.kiwix.kiwixmobile.core.extensions.get
|
||||
import java.io.BufferedReader
|
||||
import java.io.File
|
||||
import java.io.IOException
|
||||
import java.util.ArrayList
|
||||
@ -219,4 +220,12 @@ object FileUtils {
|
||||
File("$fileName.part").exists() -> "$fileName.part"
|
||||
else -> "${fileName}aa"
|
||||
}
|
||||
|
||||
@JvmStatic fun Context.readFile(filePath: String): String = try {
|
||||
assets.open(filePath)
|
||||
.bufferedReader()
|
||||
.use(BufferedReader::readText)
|
||||
} catch (e: IOException) {
|
||||
"".also { e.printStackTrace() }
|
||||
}
|
||||
}
|
||||
|
@ -54,7 +54,7 @@
|
||||
android:indeterminate="false"
|
||||
android:max="100"
|
||||
android:theme="@style/ThemeOverlay.KiwixTheme.ProgressBar"
|
||||
android:visibility="visible"
|
||||
android:visibility="gone"
|
||||
app:layout_constraintTop_toBottomOf="@+id/toolbar"
|
||||
tools:progress="70" />
|
||||
</com.google.android.material.appbar.AppBarLayout>
|
||||
|
@ -20,7 +20,7 @@
|
||||
<item
|
||||
android:id="@+id/menu_host_books"
|
||||
android:icon="@drawable/ic_mobile_screen_share_24px"
|
||||
android:title="@string/menu_host_books"
|
||||
android:title="@string/menu_wifi_hotspot"
|
||||
app:showAsAction="never" />
|
||||
</group>
|
||||
|
||||
|
@ -22,7 +22,7 @@
|
||||
<string name="menu_read_aloud">اقرأ بصوت عالٍ</string>
|
||||
<string name="menu_read_aloud_stop">توقف عن القراءة بصوت عالٍ</string>
|
||||
<string name="menu_support_kiwix">دعم كيويكس</string>
|
||||
<string name="menu_host_books">كتب المضيف</string>
|
||||
<string name="menu_wifi_hotspot">كتب المضيف</string>
|
||||
<string name="save_media">حفظ الوسائط</string>
|
||||
<string name="save_media_error">حدث خطأ عند محاولة حفظ الوسائط!</string>
|
||||
<string name="save_media_saved">حفظ الوسائط كـ%s إلى Android/media/org.kiwix…/</string>
|
||||
|
@ -20,7 +20,7 @@
|
||||
<string name="menu_read_aloud">بە بەرزی بیخوێنەوە</string>
|
||||
<string name="menu_read_aloud_stop">بوەستە لە خوێندنەوە</string>
|
||||
<string name="menu_support_kiwix">پشتگیریی کیویکس بکە</string>
|
||||
<string name="menu_host_books">خانەخوێی کتێبەکان</string>
|
||||
<string name="menu_wifi_hotspot">خانەخوێی کتێبەکان</string>
|
||||
<string name="save_media">میدیا پاشەکەوت بکە</string>
|
||||
<string name="save_media_error">ھەڵەیەک ڕوویدا لەکاتی ھەوڵدان لە خەزێنەکردنی میدیاکە!</string>
|
||||
<string name="save_media_saved">میدیا پاشەکەوتکرا وەکو %s بۆ ئەندرۆید/میدیا/org.kiwix…/</string>
|
||||
|
@ -25,7 +25,7 @@
|
||||
<string name="menu_read_aloud">Číst nahlas</string>
|
||||
<string name="menu_read_aloud_stop">Zastavit čtení nahlas</string>
|
||||
<string name="menu_support_kiwix">Podpořte Kiwix</string>
|
||||
<string name="menu_host_books">Hostujte Knihy</string>
|
||||
<string name="menu_wifi_hotspot">Hostujte Knihy</string>
|
||||
<string name="save_media">Uložit médium jako…</string>
|
||||
<string name="save_media_error">Došlo k chybě při pokusu o uložení média!</string>
|
||||
<string name="save_media_saved">Multimediální soubory uložené jako %s ve složce Android/media/org.kiwix…/</string>
|
||||
|
@ -20,7 +20,7 @@
|
||||
<string name="menu_read_aloud">Be veng ra bıwane</string>
|
||||
<string name="menu_read_aloud_stop">Bevengrawendış caverde</string>
|
||||
<string name="menu_support_kiwix">Kiwix\'i desteg</string>
|
||||
<string name="menu_host_books">Kıtabê esasi</string>
|
||||
<string name="menu_wifi_hotspot">Kıtabê esasi</string>
|
||||
<string name="save_media">Medyay bışevekne</string>
|
||||
<string name="save_media_error">Medya qeyd kerdış de yew xeta ameyê meydan!</string>
|
||||
<string name="save_media_saved">Medyay gorey %s\'i tiya dı qeyd kerê Android/media/org.kiwix…/</string>
|
||||
@ -81,7 +81,7 @@
|
||||
<string name="clear_all_history_dialog_title">Verori pêro wa pak kerê?</string>
|
||||
<string name="share">Vıla ke</string>
|
||||
<string name="selected_file_cab_app_chooser_title">Dosyayanê ZIM\'i pê :</string>
|
||||
<string name="delete">Bestere</string>
|
||||
<string name="delete">Bıesternê</string>
|
||||
<string name="cancel">Bıtexelne</string>
|
||||
<string name="delete_specific_search_toast">Cıgeyrayışo peyên wedariya</string>
|
||||
<string name="hint_contents_drawer_message">Zerrey nê meqaley vinayışi rê peta hetê çepiya xuz kerê</string>
|
||||
|
@ -3,6 +3,7 @@
|
||||
* Abijeet Patro
|
||||
* Blahma
|
||||
* Fitoschido
|
||||
* Jakub Fabijan
|
||||
* Javiero
|
||||
* Kelson
|
||||
* KuboF
|
||||
@ -52,10 +53,11 @@
|
||||
<string name="pref_clear_all_history_summary">Forviŝi ĵusajn serĉojn kaj historion de langetoj</string>
|
||||
<string name="pref_notes">Notoj</string>
|
||||
<string name="all_history_cleared">Forviŝis Ĉiun Historion</string>
|
||||
<string name="clear_all_history_dialog_title" fuzzy="true">Forviŝi Ĉiun da Historio</string>
|
||||
<string name="clear_all_history_dialog_title">Forviŝi Ĉiun da Historio?</string>
|
||||
<string name="share">Diskonigi</string>
|
||||
<string name="selected_file_cab_app_chooser_title">Diskonigi ZIM-dosierojn al:</string>
|
||||
<string name="delete">Forigi</string>
|
||||
<string name="cancel">Nuligi</string>
|
||||
<string name="delete_specific_search_toast">Forigis lastatempajn serĉojn</string>
|
||||
<string name="hint_contents_drawer_message">Vi povas ŝovumi maldekstren por vidi la enhavon de ĉi tiu artikolo</string>
|
||||
<string name="got_it">Komprenite</string>
|
||||
@ -84,6 +86,7 @@
|
||||
<string name="delete_zims_toast">Forigis dosieron</string>
|
||||
<string name="no_files_here">Neniu dosiero ĉi tie</string>
|
||||
<string name="download_no_space" fuzzy="true">Ne estas sufiĉa spaco por elŝuti ĉi tiun dosieron.</string>
|
||||
<string name="download">Elŝuti</string>
|
||||
<string name="space_available">Havebla Spaco:</string>
|
||||
<string name="zim_simple">Simpla</string>
|
||||
<string name="zim_no_pic">Neniu Bildo</string>
|
||||
@ -127,7 +130,7 @@
|
||||
<string name="time_yesterday">Hieraŭ</string>
|
||||
<string name="pref_external_link_popup_title">Averti pri aliro al eksteraj ligiloj</string>
|
||||
<string name="pref_external_link_popup_summary">Montri averton pri plia kosto aŭ nefunkciado pri eksteraj ligiloj.</string>
|
||||
<string name="external_link_popup_dialog_title" fuzzy="true">Enigi Eksteran Ligilon</string>
|
||||
<string name="external_link_popup_dialog_title">Enigi Eksteran Ligilon!</string>
|
||||
<string name="external_link_popup_dialog_message">Vi estas ironta al celo de ekstera ligilo. Tio eble plie kostos por datentransigo, aŭ simple ne funkcios se vi ne estas konektita. Ĉu daŭrigi?</string>
|
||||
<string name="do_not_ask_anymore">Ne demandu plu</string>
|
||||
<string name="your_languages">Elektitaj lingvoj:</string>
|
||||
@ -164,7 +167,7 @@
|
||||
<string name="history_from_current_book" fuzzy="true">Historio el la aktuala libro</string>
|
||||
<string name="search_history">Serĉi historion</string>
|
||||
<string name="selected_items">%1$d elektita(j)</string>
|
||||
<string name="bookmarks_from_current_book" fuzzy="true">Legosignoj en la aktuala libro</string>
|
||||
<string name="bookmarks_from_current_book">Montri legosignoj de ĉiuj libroj</string>
|
||||
<string name="search_bookmarks">Serĉi legosignojn</string>
|
||||
<string name="switch_tabs">Ŝanĝi langetojn</string>
|
||||
<string name="close_all_tabs">Fermi ĉiujn langetojn</string>
|
||||
@ -188,6 +191,14 @@
|
||||
<string name="ext_storage_permission_not_granted">Eraro: Permeso pri konservejo mankas</string>
|
||||
<string name="notes_deletion_successful">La tuta dosierujo da notoj foriĝis</string>
|
||||
<string name="notes_deletion_unsuccessful">Iuj dosieroj ne foriĝis</string>
|
||||
<string name="books_count">%d libro(j)</string>
|
||||
<string name="connection_failed">Konektado fiaskis</string>
|
||||
<string name="your_device">Via Aparato:</string>
|
||||
<string name="nearby_devices">PROKSIMAJ APARATOJ</string>
|
||||
<string name="pref_clear_all_notes_title" fuzzy="true">Forviŝi Ĉiujn Notojn</string>
|
||||
<string name="no_bookmarks">Neniu Legosigno</string>
|
||||
<string name="no_history">Neniu Historio</string>
|
||||
<string name="on">Ŝaltita</string>
|
||||
<string name="off">Malŝaltita</string>
|
||||
<string name="pref_text_zoom_title">Teksta Zomo</string>
|
||||
</resources>
|
||||
|
@ -19,7 +19,7 @@
|
||||
<string name="menu_read_aloud">با صدای بلند بخوان</string>
|
||||
<string name="menu_read_aloud_stop">خواندن با صدای بلند را متوقف کن</string>
|
||||
<string name="menu_support_kiwix">پشتیبانی از کیویکس</string>
|
||||
<string name="menu_host_books">کتابهای میزبان</string>
|
||||
<string name="menu_wifi_hotspot">کتابهای میزبان</string>
|
||||
<string name="save_media">ذخیرهٔ رسانه</string>
|
||||
<string name="save_media_error">خطایی در حین ذخیرهسازی این رسانه رخ داد!</string>
|
||||
<string name="save_media_saved">رسانه با نام %s در Android/media/org.kiwix…/ ذخیره شد</string>
|
||||
|
@ -19,7 +19,7 @@
|
||||
<string name="menu_read_aloud">Lue ääneen</string>
|
||||
<string name="menu_read_aloud_stop">Lopeta ääneen lukeminen</string>
|
||||
<string name="menu_support_kiwix">Tue Kiwixiä</string>
|
||||
<string name="menu_host_books">Hostaa kirjoja</string>
|
||||
<string name="menu_wifi_hotspot">Hostaa kirjoja</string>
|
||||
<string name="save_media">Tallenna media</string>
|
||||
<string name="save_media_error">Virhe mediaa tallennettaessa!</string>
|
||||
<string name="save_media_saved">Tallennettu media %s muodossa hakemistoon Android/media/org.kiwix…/</string>
|
||||
|
@ -29,7 +29,7 @@
|
||||
<string name="menu_read_aloud">Lire à haute voix</string>
|
||||
<string name="menu_read_aloud_stop">Arrêter de lire à haute voix</string>
|
||||
<string name="menu_support_kiwix">Soutenir Kiwix</string>
|
||||
<string name="menu_host_books">Diffuser des contenus</string>
|
||||
<string name="menu_wifi_hotspot">Diffuser des contenus</string>
|
||||
<string name="save_media">Enregistrer le média</string>
|
||||
<string name="save_media_error">Une erreur s’est produite en essayant d’enregistrer le média !</string>
|
||||
<string name="save_media_saved">Média enregistré sous %s dans le dossier Android/media/org.kiwix…/</string>
|
||||
@ -43,7 +43,7 @@
|
||||
<string name="connection_refused">Connexion refusée.</string>
|
||||
<string name="hotspot_running">Point d’accès WiFi actif</string>
|
||||
<string name="no_books_selected_toast_message">Veuillez d’abord choisir les livres</string>
|
||||
<string name="server_failed_message">Impossible de démarrer le serveur. Veuillez activer votre point d’accès WiFi</string>
|
||||
<string name="server_failed_message">Impossible de démarrer le serveur. Veuillez activer votre point d’accès WiFi.</string>
|
||||
<string name="server_failed_toast_message">Impossible de démarrer le serveur.</string>
|
||||
<string name="server_started_successfully_toast_message">Serveur démarré avec succès.</string>
|
||||
<string name="server_stopped_successfully_toast_message">Le serveur a été arrêté avec succès.</string>
|
||||
@ -51,11 +51,11 @@
|
||||
<string name="hotspot_details_message">Voici les détails de votre point d’accès local.\nSSID : %1$s\nPasse : %2$s</string>
|
||||
<string name="server_textview_default_message">Sélectionnez les fichiers que vous voulez héberger sur le serveur</string>
|
||||
<string name="progress_dialog_starting_server">Démarrage du serveur</string>
|
||||
<string name="hotspot_dialog_title">Instructions pour les livres hébergeurs</string>
|
||||
<string name="hotspot_dialog_title">Instructions pour héberger des livres</string>
|
||||
<string name="wifi_dialog_title">Connexion WiFi détectée</string>
|
||||
<string name="wifi_dialog_body">Afin de pouvoir lire les livres sur d’autres appareils, veuillez vous assurer que tous ceux-ci sont connectés au même réseau WiFi.</string>
|
||||
<string name="hotspot_dialog_message">Pour que cette fonctionnalité fonctionne, vous devez d’abord activer manuellement votre point d’accès WiFi ou vous assurer que l\'appareil hôte et l\'appareil récepteur appartiennent au même réseau WiFi</string>
|
||||
<string name="hotspot_dialog_neutral_button">PROCEDER</string>
|
||||
<string name="hotspot_dialog_message">Pour que cette fonctionnalité fonctionne, vous devez d’abord activer manuellement votre point d’accès WiFi ou vous assurer que l’appareil hôte et l’appareil récepteur appartiennent au même réseau WiFi.</string>
|
||||
<string name="hotspot_dialog_neutral_button">PROCÉDER</string>
|
||||
<string name="hotspot_channel_description">Mises à jour concernant l’état de votre point d’accès/serveur.</string>
|
||||
<string name="hotspot_notification_content_title">Point d’accès Kiwix</string>
|
||||
<string name="start_server_label">Démarrer le serveur</string>
|
||||
@ -87,7 +87,7 @@
|
||||
<string name="pref_notes">Notes</string>
|
||||
<string name="all_history_cleared">Tout l’historique est effacé</string>
|
||||
<string name="pref_clear_all_bookmarks_title">Supprimer les marque-pages</string>
|
||||
<string name="clear_all_history_dialog_title">Effacer tout l’historique ?</string>
|
||||
<string name="clear_all_history_dialog_title">Effacer tout l’historique ?</string>
|
||||
<string name="share">Partager</string>
|
||||
<string name="selected_file_cab_app_chooser_title">Partager des fichiers ZIM avec :</string>
|
||||
<string name="delete">Supprimer</string>
|
||||
@ -102,7 +102,7 @@
|
||||
<string name="rate_dialog_title">Merci de nous évaluer</string>
|
||||
<string name="rate_dialog_msg_1">Si vous aimez utiliser</string>
|
||||
<string name="rate_dialog_msg_2">, veuillez prendre un moment pour l’évaluer. Merci pour votre soutien !</string>
|
||||
<string name="rate_dialog_positive">Donnez nous une note!</string>
|
||||
<string name="rate_dialog_positive">Donnez nous une note !</string>
|
||||
<string name="no_thanks">Non merci</string>
|
||||
<string name="rate_dialog_neutral">Plus tard</string>
|
||||
<string name="open">Ouvrir</string>
|
||||
@ -117,7 +117,7 @@
|
||||
<string name="local_zims">Appareil</string>
|
||||
<string name="remote_zims">En ligne</string>
|
||||
<string name="library">Bibliothèque</string>
|
||||
<string name="delete_zim_body">Les fichiers zim suivants seront supprimés :\n\n%s</string>
|
||||
<string name="delete_zim_body">Le ou les fichiers zim suivants seront supprimés :\n\n%s</string>
|
||||
<string name="delete_zims_toast">Les fichiers ont bien été supprimés</string>
|
||||
<string name="no_files_here">Aucun fichier ici</string>
|
||||
<string name="download_no_space">Espace insuffisant pour le téléchargement.</string>
|
||||
@ -139,7 +139,7 @@
|
||||
<string name="help_11">Les fichiers ZIM téléchargés dans l’application sont situés dans le répertoire de stockage externe dans un répertoire appelé Kiwix.</string>
|
||||
<string name="pref_storage">Stockage</string>
|
||||
<string name="pref_current_folder">Dossier actuel</string>
|
||||
<string name="delete_zim_failed">Désolé, nous n\'avons pas pu supprimer certains fichiers. Vous devriez essayer d’utiliser un gestionnaire de fichiers à la place.</string>
|
||||
<string name="delete_zim_failed">Désolé, nous n’avons pas pu supprimer certains fichiers. Vous devriez essayer d’utiliser un gestionnaire de fichiers à la place.</string>
|
||||
<string name="tts_pause">pause</string>
|
||||
<string name="tts_resume">reprendre</string>
|
||||
<string name="stop">arrêter</string>
|
||||
@ -151,12 +151,12 @@
|
||||
<string name="confirm_stop_download_msg">Êtes-vous sûr de vouloir arrêter ce téléchargement ?</string>
|
||||
<string name="download_change_storage">Sélecteur de périphérique de stockage</string>
|
||||
<string name="tts_not_enabled">La synthèse vocale n’est pas activée pour ce fichier ZIM</string>
|
||||
<string name="texttospeech_initialization_failed">L’initialisation de Texte en Paroles a échoué. Veuillez réessayer</string>
|
||||
<string name="texttospeech_error">Erreur inattendue dans Texte en Paroles. Veuillez réessayer</string>
|
||||
<string name="texttospeech_initialization_failed">L’initialisation de Texte en Paroles a échoué. Veuillez réessayer.</string>
|
||||
<string name="texttospeech_error">Erreur inattendue dans Texte en Paroles. Veuillez réessayer.</string>
|
||||
<string name="next">Suivant</string>
|
||||
<string name="previous">Précédent</string>
|
||||
<string name="wifi_only_title">Permettre le téléchargement de contenu via le réseau mobile ?</string>
|
||||
<string name="wifi_only_msg">Si vous choisissez « Oui », vous ne serez plus averti à l’avenir. Cependant, vous pouvez toujours modifier cela dans les paramètres.</string>
|
||||
<string name="wifi_only_msg">Si vous choisissez « Oui », vous ne serez plus averti à l’avenir. Cependant, vous pouvez toujours modifier cela dans les paramètres.</string>
|
||||
<string name="pref_wifi_only">Télécharger le contenu uniquement via WiFi</string>
|
||||
<string name="time_day">jour</string>
|
||||
<string name="time_hour"> h</string>
|
||||
@ -167,13 +167,13 @@
|
||||
<string name="time_yesterday">Hier</string>
|
||||
<string name="pref_external_link_popup_title">Avertir lors de l’accès à des liens externes</string>
|
||||
<string name="pref_external_link_popup_summary">Afficher un dialogue pour avertir à propos de coûts supplémentaires ou de liens ne fonctionnant pas hors connexion.</string>
|
||||
<string name="external_link_popup_dialog_title">Accès au lien externe !</string>
|
||||
<string name="external_link_popup_dialog_title">Accès au lien externe !</string>
|
||||
<string name="external_link_popup_dialog_message">Vous accédez à un lien externe. Cela peut engendrer des coûts supplémentaires pour le transfert de données ou ne fonctionnera tout simplement pas lorsque vous serez hors ligne. Voulez-vous continuer ?</string>
|
||||
<string name="do_not_ask_anymore">Ne plus demander</string>
|
||||
<string name="your_languages">Langues sélectionnées :</string>
|
||||
<string name="other_languages">Autres langues :</string>
|
||||
<string name="no_items_msg">Aucun élément disponible</string>
|
||||
<string name="crash_title">Eh bien… c’est embarrassant</string>
|
||||
<string name="crash_title">Hé bien… c’est embarrassant.</string>
|
||||
<string name="crash_description">Il semble que nous ayons planté.\n\nPourriez-vous nous aider à corriger ce problème en envoyant l’information suivante ?</string>
|
||||
<string name="crash_checkbox_language">Vos paramètres de langue</string>
|
||||
<string name="crash_checkbox_zimfiles">Une liste de vos fichiers ZIM</string>
|
||||
@ -188,7 +188,7 @@
|
||||
<string name="articleCount">%s articles</string>
|
||||
<string name="get_started">Commencer</string>
|
||||
<string name="download_books">Télécharger des livres</string>
|
||||
<string name="humankind_knowledge">Connaissances de l’espèce humaine, sur votre téléphone.</string>
|
||||
<string name="humankind_knowledge">La connaissance de l’humanité, sur votre téléphone.</string>
|
||||
<string name="welcome_to_the_family">Bienvenue dans la famille</string>
|
||||
<string name="save_books_offline">Enregistrer des livres hors connexion</string>
|
||||
<string name="download_books_message">Téléchargez et lisez des livres où que vous soyez.</string>
|
||||
@ -219,8 +219,8 @@
|
||||
<string name="ext_storage_permission_rationale_add_note">L’accès au stockage est nécessaire pour Notes.</string>
|
||||
<string name="ext_storage_write_permission_denied_add_note">Notes ne peut être utilisé sans accès au stockage</string>
|
||||
<string name="note_save_unsuccessful">Note enregistrée avec succès</string>
|
||||
<string name="note_delete_successful">La note a bien été supprimée</string>
|
||||
<string name="note_delete_unsuccessful">La note n’a pas été supprimée</string>
|
||||
<string name="note_delete_successful">La note a bien été supprimée.</string>
|
||||
<string name="note_delete_unsuccessful">La note n’a pas été supprimée.</string>
|
||||
<string name="note_save_successful">Note enregistrée</string>
|
||||
<string name="note_save_error_storage_not_writable">Erreur lors de la sauvegarde de la note : le stockage n’autorise pas l’écriture</string>
|
||||
<string name="note_share_error_file_missing">Le fichier de note est inexistant</string>
|
||||
@ -259,19 +259,19 @@
|
||||
<string name="status">État</string>
|
||||
<string name="pref_clear_all_notes_summary">Effacer toutes les notes sur tous les articles</string>
|
||||
<string name="pref_clear_all_notes_title">Effacer toutes les notes</string>
|
||||
<string name="pref_text_zoom_summary">Modifier la taille du texte par incrément de 25%.</string>
|
||||
<string name="pref_text_zoom_summary">Modifier la taille du texte par incrément de 25 %.</string>
|
||||
<string name="tag_pic">Image</string>
|
||||
<string name="tag_vid">Vidéo</string>
|
||||
<string name="tag_text_only">Texte seulement</string>
|
||||
<string name="tag_short_text">Texte bref</string>
|
||||
<string name="storage_permission_denied">Autorisation de stockage refusée</string>
|
||||
<string name="storage_permission_denied">Autorisation de stockage refusée.</string>
|
||||
<string name="grant_read_storage_permission">Cette application a besoin de la possibilité de lire le stockage pour pouvoir fonctionner. Veuillez accorder le droit dans vos paramètres.</string>
|
||||
<string name="go_to_settings">Aller aux paramètres de Hotspot</string>
|
||||
<string name="no_results">Aucun résultat</string>
|
||||
<string name="go_to_settings">Aller aux paramètres du point d’accès</string>
|
||||
<string name="no_results">Aucun résultat.</string>
|
||||
<string name="no_bookmarks">Aucun marque-page</string>
|
||||
<string name="no_history">Aucun historique</string>
|
||||
<string name="no_history">Aucun historique.</string>
|
||||
<string name="device_default">Appareil par défaut</string>
|
||||
<string name="delete_history">Supprimer tout l’historique ?</string>
|
||||
<string name="delete_history">Supprimer tout l’historique ?</string>
|
||||
<string name="delete_selected_history">Supprimer l’historique sélectionné ?</string>
|
||||
<string name="delete_bookmarks">Supprimer tous les signets ?</string>
|
||||
<string name="delete_selected_bookmarks">Supprimer les marque-pages sélectionnés ?</string>
|
||||
@ -282,15 +282,15 @@
|
||||
<string name="crash_checkbox_file_system">Détails du système de fichiers</string>
|
||||
<string name="diagnostic_report">Rapport de diagnostic</string>
|
||||
<string name="diagnostic_report_message">Veuillez envoyer tous les détails suivants afin que nous puissions diagnostiquer le problème</string>
|
||||
<string name="percentage">%d%%</string>
|
||||
<string name="percentage">%d %%</string>
|
||||
<string name="pref_text_zoom_title">Zoomer le texte</string>
|
||||
<string name="search_open_in_new_tab">Ouvrir dans un nouvel onglet</string>
|
||||
<string name="reader">Lecteur</string>
|
||||
<string name="no_open_book">Pas de livre ouvert</string>
|
||||
<string name="no_open_book">Aucun livre ouvert</string>
|
||||
<string name="open_library">Ouvrir la bibliothèque</string>
|
||||
<string name="tab_restored">Onglet restauré</string>
|
||||
<string name="open_drawer">Ouvrir le tiroir</string>
|
||||
<string name="close_drawer">Fermer le tiroir</string>
|
||||
<string name="how_to_update_content">Comment actualiser le contenu ?</string>
|
||||
<string name="update_content_description">Pour mettre à jour un contenu (un fichier zim), vous devez télécharger la dernière version complète de ce même contenu. Vous pouvez le faire via la section téléchargement.</string>
|
||||
<string name="how_to_update_content">Comment actualiser le contenu ?</string>
|
||||
<string name="update_content_description">Pour mettre à jour un contenu (un fichier zim), vous devez télécharger la dernière version complète de ce même contenu. Vous pouvez le faire via la section de téléchargement.</string>
|
||||
</resources>
|
||||
|
@ -1,5 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Authors:
|
||||
* ArenaL5
|
||||
* Athena in Wonderland
|
||||
* Elisardojm
|
||||
* Fitoschido
|
||||
@ -45,7 +46,7 @@
|
||||
<string name="pref_clear_all_history_title">Limpar o historial</string>
|
||||
<string name="pref_clear_all_history_summary">Borrar as procuras recentes e o historial de lapelas</string>
|
||||
<string name="all_history_cleared">Borrado todo o historial</string>
|
||||
<string name="clear_all_history_dialog_title" fuzzy="true">Borrar todo o historial</string>
|
||||
<string name="clear_all_history_dialog_title">Borrar todo o historial?</string>
|
||||
<string name="delete">Borrar</string>
|
||||
<string name="delete_specific_search_toast">Procuras recentes eliminadas</string>
|
||||
<string name="hint_contents_drawer_message">Podes deslizar á esquerda para ver os contidos deste artigo</string>
|
||||
@ -74,7 +75,7 @@
|
||||
<string name="library">Biblioteca</string>
|
||||
<string name="delete_zims_toast">Ficheiro eliminado</string>
|
||||
<string name="no_files_here">Ningún ficheiro aquí</string>
|
||||
<string name="download_no_space" fuzzy="true">Espacio insuficiente para descargar este ficheiro.</string>
|
||||
<string name="download_no_space">Espacio insuficiente para descargar.</string>
|
||||
<string name="space_available">Espazo dispoñible:</string>
|
||||
<string name="zim_simple">Simple</string>
|
||||
<string name="zim_no_pic">Sen imaxes</string>
|
||||
@ -82,17 +83,17 @@
|
||||
<string name="no_network_connection">Ningunha conexión de rede</string>
|
||||
<string name="help_2">Que fai Kiwix?</string>
|
||||
<string name="help_3">Kiwix é un lector de contido desconectado. Actúa como un navegador web, pero en vez de acceder a páxinas web en liña, le o contido dun ficheiro en formato ZIM.</string>
|
||||
<string name="help_4" fuzzy="true">Se ben Kiwix deseñouse orixinalmente para proporcionar Wikipedia sen conexión, tamén pode ler outros contidos.</string>
|
||||
<string name="help_4">Se ben Kiwix deseñouse orixinalmente para proporcionar Wikipedia sen conexión, tamén pode ler outros contidos.</string>
|
||||
<string name="help_5">Onde esta o contido?</string>
|
||||
<string name="help_6">O noso contido está aloxado no sitio web de Kiwix.</string>
|
||||
<string name="help_7">Están dispoñibles como ficheiros ZIM. Hai unha chea deles:</string>
|
||||
<string name="help_8">• Wikipedia está dispoñible para cada lingua por separado</string>
|
||||
<string name="help_9">• Outros contidos, como Wikileaks ou Wikisource tamén están dispoñibles</string>
|
||||
<string name="help_10" fuzzy="true">Pode descargar os ficheiros ZIM elixidos na aplicación, ou ben seleccionar coidadosamente os que queira, descargalos dende un ordenador e transferilos á súa tarxeta SD.</string>
|
||||
<string name="help_10">Pode descargar os ficheiros ZIM elixidos na aplicación, ou ben seleccionar coidadosamente os que queira, descargalos dende un ordenador e transferilos á súa tarxeta SD.</string>
|
||||
<string name="help_11">Os ficheiros ZIM descargados na aplicación atópanse no directorio de almacenamento externo, nunha carpeta chamada Kiwix.</string>
|
||||
<string name="pref_storage">Almacenamento</string>
|
||||
<string name="pref_current_folder">Carpeta actual</string>
|
||||
<string name="delete_zim_failed" fuzzy="true">Non podemos eliminar este ficheiro. Debería probar cun administrador de ficheiros.</string>
|
||||
<string name="delete_zim_failed">Sentímolo pero non podemos eliminar algúns ficheiros. Debería probar cun administrador de ficheiros.</string>
|
||||
<string name="tts_pause">pausa</string>
|
||||
<string name="tts_resume">continuar</string>
|
||||
<string name="stop">deter</string>
|
||||
@ -116,7 +117,7 @@
|
||||
<string name="time_left">esquerda</string>
|
||||
<string name="pref_external_link_popup_title">Avisar cando introducir ligazóns externas</string>
|
||||
<string name="pref_external_link_popup_summary">Mostra as previsualizacións de páxinas para avisar sobre os custos adicionais ou cando non funciona en ligazóns desconectadas.</string>
|
||||
<string name="external_link_popup_dialog_title" fuzzy="true">Introducindo ligazón externa</string>
|
||||
<string name="external_link_popup_dialog_title">Introducindo ligazón externa!</string>
|
||||
<string name="external_link_popup_dialog_message">Estás introducindo unha ligazón externa. Isto pode xerar gastos por transferencia de datos ou simplemente non funcionará cando está desconectado. Aínda quere continuar?</string>
|
||||
<string name="do_not_ask_anymore">Non preguntar máis</string>
|
||||
<string name="your_languages">Linguas escollidas:</string>
|
||||
|
@ -23,7 +23,7 @@
|
||||
<string name="menu_read_aloud">להקריא בקול</string>
|
||||
<string name="menu_read_aloud_stop">להפסיק להקריא בקול</string>
|
||||
<string name="menu_support_kiwix">לתמוך בקיוויקס</string>
|
||||
<string name="menu_host_books">לארח ספרים</string>
|
||||
<string name="menu_wifi_hotspot">לארח ספרים</string>
|
||||
<string name="save_media">שמירת מדיה</string>
|
||||
<string name="save_media_error">אירעה שגיאה בעת ניסיון לשמור את המדיה!</string>
|
||||
<string name="save_media_saved">המדיה נשמרה בתור %s אל Android/media/org.kiwix…/</string>
|
||||
|
@ -25,7 +25,7 @@
|
||||
<string name="menu_read_aloud">소리내어 읽기</string>
|
||||
<string name="menu_read_aloud_stop">그만 소리내어 읽기</string>
|
||||
<string name="menu_support_kiwix">Kiwix 지원하기</string>
|
||||
<string name="menu_host_books">호스트북</string>
|
||||
<string name="menu_wifi_hotspot">호스트북</string>
|
||||
<string name="save_media">미디어 저장</string>
|
||||
<string name="save_media_error">미디어 저장을 시도할 때 오류가 발생하였습니다!</string>
|
||||
<string name="save_media_saved">미디어(%s)를 Android/media/org.kiwix…/에 저장했습니다</string>
|
||||
|
@ -18,7 +18,7 @@
|
||||
<string name="menu_read_aloud">Bi dengê bilind bixwîne</string>
|
||||
<string name="menu_read_aloud_stop">Xwendina dengê bilind rawestîne</string>
|
||||
<string name="menu_support_kiwix">Piştgiriya Kiwix-ê Bike</string>
|
||||
<string name="menu_host_books">Kitêban Bihewîne</string>
|
||||
<string name="menu_wifi_hotspot">Kitêban Bihewîne</string>
|
||||
<string name="save_media">Medyayê Tomar Bike</string>
|
||||
<string name="save_media_error">Gava ku medya dihat tomarkirin çewtiyek derket holêǃ</string>
|
||||
<string name="save_media_saved">Medya wek %s ji Android/media/org.kiwix…/ re hate qeydkirin</string>
|
||||
|
@ -15,7 +15,7 @@
|
||||
<string name="menu_read_aloud">Прочитај на глас</string>
|
||||
<string name="menu_read_aloud_stop">Запри читање на глас</string>
|
||||
<string name="menu_support_kiwix">Поддржете го Кивикс</string>
|
||||
<string name="menu_host_books">Книги на домаќинот</string>
|
||||
<string name="menu_wifi_hotspot">Книги на домаќинот</string>
|
||||
<string name="save_media">Зачувај медиум</string>
|
||||
<string name="save_media_error">Настана грешка при зачувувањето на податотеката!</string>
|
||||
<string name="save_media_saved">Податотеката е зачувана како %s во Android/media/org.kiwix…/</string>
|
||||
|
@ -38,6 +38,7 @@
|
||||
<string name="tts_lang_not_supported">ဤစာမျက်နှာ၏ ဘာသာစကားကို မထောက်ပံ့ထားပါ၊ သို့မဟုတ် သင့်လျော်သော ဘာသာစကားဒေတာကို သွင်းမထားပါ။ ဆောင်းပါးကို မှန်ကန်စွာ ဖတ်နိုင်မည်မဟုတ်ပါ။</string>
|
||||
<string name="delete_recent_search_item">ဤဟာကို ဖျက်မည်လား</string>
|
||||
<string name="pref_clear_all_history_title">မှတ်တမ်းအားရှင်းမည်</string>
|
||||
<string name="pref_notes">မှတ်စုများ</string>
|
||||
<string name="all_history_cleared">ရာဇဝင်အားလုံး ရှင်းလင်းပြီး</string>
|
||||
<string name="pref_clear_all_bookmarks_title">မှတ်သားထားသော စာအုပ်များကိုဖျက်ပါ</string>
|
||||
<string name="clear_all_history_dialog_title" fuzzy="true">မှတ်တမ်းများအားလုံး ရှင်းလင်းရန်</string>
|
||||
|
@ -26,7 +26,7 @@
|
||||
<string name="menu_read_aloud">Czytaj na głos</string>
|
||||
<string name="menu_read_aloud_stop">Zatrzymaj czytanie na głos</string>
|
||||
<string name="menu_support_kiwix">Wspieraj Kiwix</string>
|
||||
<string name="menu_host_books">Host Książek</string>
|
||||
<string name="menu_wifi_hotspot">Host Książek</string>
|
||||
<string name="save_media">Zapisz plik multimedialny jako…</string>
|
||||
<string name="save_media_error">Wystąpił błąd podczas próby zapisania multimediów!</string>
|
||||
<string name="save_media_saved">Zapisano plik multimedialny jako %s w folderze Android/media/org.kiwix…/</string>
|
||||
|
@ -21,7 +21,7 @@
|
||||
<string name="menu_read_aloud">Ler em voz alta</string>
|
||||
<string name="menu_read_aloud_stop">Parar de ler em voz alta</string>
|
||||
<string name="menu_support_kiwix">Suporte Kiwix</string>
|
||||
<string name="menu_host_books">Hospedagem de livro</string>
|
||||
<string name="menu_wifi_hotspot">Hospedagem de livro</string>
|
||||
<string name="save_media">Salvar mídia</string>
|
||||
<string name="save_media_error">Ocorreu um erro ao tentar salvar a mídia!</string>
|
||||
<string name="save_media_saved">Midia salva como %s para Android/media/org.kiwix…/</string>
|
||||
|
@ -10,14 +10,14 @@
|
||||
* The RedBurn
|
||||
* Verdy p
|
||||
-->
|
||||
<resources>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="all">
|
||||
<string name="menu_help">{{Identical|Help}}</string>
|
||||
<string name="menu_home">{{Identical|Home}}</string>
|
||||
<string name="menu_settings">{{Identical|Settings}}</string>
|
||||
<string name="bookmarks">{{Identical|Bookmark}}</string>
|
||||
<string name="menu_random_article">{{Identical|Random article}}</string>
|
||||
<string name="menu_full_screen">{{Identical|Full screen}}</string>
|
||||
<string name="menu_host_books">Il s\'agit de la fonctionnalité hotspot - l\'anglais \"host books\" n\'est pas particulièrement satisfaisant à la base.</string>
|
||||
<string name="menu_wifi_hotspot">* English : it maps to some \"hotspot\" feature in order to serve collections of contents (aka books) over a local network area.\n* French : il s’agit de la fonctionnalité \'\'hotspot\'\' : l’anglais \'\'host books\'\' n’est pas particulièrement satisfaisant à la base.</string>
|
||||
<string name="search_label">{{Identical|Search}}</string>
|
||||
<string name="hotspot_details_message">Do not change:\n* <code>%1$s</code> (replaced by the “SSID” value identifying the WiFi hotspot identity for users)\n* <code>%2$s</code> (replaced by the password or code configured in the hotspot to authorize the association and network connection)</string>
|
||||
<string name="hotspot_dialog_title">This the title displayed when a user clicks wants to start the server in the host books section</string>
|
||||
|
@ -18,7 +18,7 @@
|
||||
<string name="menu_read_aloud">Citește cu voce tare</string>
|
||||
<string name="menu_read_aloud_stop">Oprește citirea cu voce tare</string>
|
||||
<string name="menu_support_kiwix">Susține Kiwix</string>
|
||||
<string name="menu_host_books">Găzduiește Cărți</string>
|
||||
<string name="menu_wifi_hotspot">Găzduiește Cărți</string>
|
||||
<string name="save_media">Salvează Media</string>
|
||||
<string name="save_media_error">A apărut o eroare în încercarea de a salva fișierul media!</string>
|
||||
<string name="save_media_saved">Media salvată %s în Android/media/org.kiwix…/</string>
|
||||
|
@ -30,7 +30,7 @@
|
||||
<string name="menu_read_aloud">Читать вслух</string>
|
||||
<string name="menu_read_aloud_stop">Остановить чтение вслух</string>
|
||||
<string name="menu_support_kiwix">Поддержать Kiwix</string>
|
||||
<string name="menu_host_books">Разместить книги</string>
|
||||
<string name="menu_wifi_hotspot">Разместить книги</string>
|
||||
<string name="save_media">Сохранить Медиа-файлы</string>
|
||||
<string name="save_media_error">Произошла ошибка при сохранении медиафайла!</string>
|
||||
<string name="save_media_saved">Медиафайл сохранён как %s в Android/media/org.kiwix…/</string>
|
||||
|
@ -16,7 +16,7 @@
|
||||
<string name="menu_read_aloud">Leghe a boghe arta</string>
|
||||
<string name="menu_read_aloud_stop">Firma sa leghidura a boghe arta</string>
|
||||
<string name="menu_support_kiwix">Suporta Kiwix</string>
|
||||
<string name="menu_host_books">Istràngia libros</string>
|
||||
<string name="menu_wifi_hotspot">Istràngia libros</string>
|
||||
<string name="save_media">Sarba su mèdia</string>
|
||||
<string name="save_media_error">B\'est istadu un\'errore durante su tentativu de sarvamentu de su mèdia!</string>
|
||||
<string name="save_media_saved">Mèdia sarvadu comente %s in Android/media/org.kiwix…/</string>
|
||||
|
@ -13,7 +13,7 @@
|
||||
<string name="menu_help">Pomoč</string>
|
||||
<string name="menu_home">Domov</string>
|
||||
<string name="menu_settings">Nastavitve</string>
|
||||
<string name="menu_search_in_text">Najdi na strani</string>
|
||||
<string name="menu_search_in_text">Poišči na strani</string>
|
||||
<string name="bookmarks">Zaznamki</string>
|
||||
<string name="menu_random_article">Naključni članek</string>
|
||||
<string name="menu_full_screen">Celozaslonski način</string>
|
||||
@ -54,7 +54,7 @@
|
||||
<string name="share">Deli</string>
|
||||
<string name="selected_file_cab_app_chooser_title">Deli ZIM datoteke z:</string>
|
||||
<string name="delete">Odstrani</string>
|
||||
<string name="delete_specific_search_toast">Nedavno iskanje je bilo odstranjeno</string>
|
||||
<string name="delete_specific_search_toast">Zadnje iskanje je bilo odstranjeno</string>
|
||||
<string name="hint_contents_drawer_message">Za ogled vsebine tega članka lahko povlecite v levo</string>
|
||||
<string name="got_it">Razumem</string>
|
||||
<string name="did_you_know">Ali ste vedeli?</string>
|
||||
@ -83,7 +83,7 @@
|
||||
<string name="no_files_here">Ni datotek tukaj</string>
|
||||
<string name="download_no_space" fuzzy="true">Premalo prostora za prenos te datoteke.</string>
|
||||
<string name="space_available">Prostor na voljo:</string>
|
||||
<string name="zim_simple">Enostavno</string>
|
||||
<string name="zim_simple">Preprosto</string>
|
||||
<string name="zim_no_pic">Ni slik</string>
|
||||
<string name="zim_no_vid">Ni videoposnetkov</string>
|
||||
<string name="no_network_connection">Ni omrežne povezave</string>
|
||||
@ -130,7 +130,7 @@
|
||||
<string name="do_not_ask_anymore">Ne sprašuj več</string>
|
||||
<string name="your_languages">Izbrani jeziki:</string>
|
||||
<string name="other_languages">Drugi jeziki:</string>
|
||||
<string name="no_items_msg">Ni na voljo nobenih elementov</string>
|
||||
<string name="no_items_msg">Na voljo ni noben predmet</string>
|
||||
<string name="crash_title">No… To je neprijetno</string>
|
||||
<string name="crash_description">Izgleda, da smo se zrušili.</string>
|
||||
<string name="crash_checkbox_language">Jezikovne nastavitve</string>
|
||||
@ -144,7 +144,7 @@
|
||||
<string name="get_content_shortcut_label">Pridobi vsebino</string>
|
||||
<string name="fav_icon">Zaznamka</string>
|
||||
<string name="articleCount">%s člankov</string>
|
||||
<string name="get_started">Prični</string>
|
||||
<string name="get_started">Začni</string>
|
||||
<string name="download_books">Prenesi knjige</string>
|
||||
<string name="humankind_knowledge">Znanje človeške vrste, na vašem telefonu.</string>
|
||||
<string name="welcome_to_the_family">Dobrodošli v družini</string>
|
||||
@ -154,7 +154,7 @@
|
||||
<string name="go_to_previous_page">Pojdi na prejšnjo stran</string>
|
||||
<string name="go_to_next_page">Pojdi na naslednjo stran</string>
|
||||
<string name="table_of_contents">Kazalo vsebine</string>
|
||||
<string name="select_languages">Izberi jezike</string>
|
||||
<string name="select_languages">Izberite jezike</string>
|
||||
<string name="save_languages">Shrani jezike</string>
|
||||
<string name="send_feedback">Sporočite svoje mnenje</string>
|
||||
<string name="expand">Razširi</string>
|
||||
@ -174,7 +174,7 @@
|
||||
<string name="save">Shrani</string>
|
||||
<string name="note">Beležka</string>
|
||||
<string name="wiki_article_title">Naslov članka Wiki</string>
|
||||
<string name="ext_storage_permission_rationale_add_note">Dostop za shranjevanje se zahteva za Beležke</string>
|
||||
<string name="ext_storage_permission_rationale_add_note">Za Beležke se zahteva dostop do pomnilnika</string>
|
||||
<string name="ext_storage_write_permission_denied_add_note">Beležke ni mogoče uporabiti brez dostopa do prostora za shranjevanje</string>
|
||||
<string name="note_save_unsuccessful">Shranjevanje beležke ni uspelo</string>
|
||||
<string name="note_save_successful">Beležka je shranjena</string>
|
||||
|
@ -20,7 +20,7 @@
|
||||
<string name="menu_read_aloud">Läs upp</string>
|
||||
<string name="menu_read_aloud_stop">Sluta läsa upp</string>
|
||||
<string name="menu_support_kiwix">Stöd Kiwix</string>
|
||||
<string name="menu_host_books">Värdböcker</string>
|
||||
<string name="menu_wifi_hotspot">Värdböcker</string>
|
||||
<string name="save_media">Spara media</string>
|
||||
<string name="save_media_error">Ett fel uppstod när media skulle sparas!</string>
|
||||
<string name="save_media_saved">Sparade media som %s i Android/media/org.kiwix…/</string>
|
||||
|
@ -28,7 +28,7 @@
|
||||
<string name="menu_read_aloud">Yüksek sesle oku</string>
|
||||
<string name="menu_read_aloud_stop">Yüksek sesle okumayı sonlandır</string>
|
||||
<string name="menu_support_kiwix">Kiwix\'i destekle</string>
|
||||
<string name="menu_host_books">Ana Kitaplar</string>
|
||||
<string name="menu_wifi_hotspot">Ana Kitaplar</string>
|
||||
<string name="save_media">Ortam dosyasını kaydet</string>
|
||||
<string name="save_media_error">Medya kaydedilmeye çalışılırken bir hata oluştu!</string>
|
||||
<string name="save_media_saved">Medyayı %s olarak şuraya kaydet Android/media/org.kiwix…/</string>
|
||||
@ -127,7 +127,7 @@
|
||||
<string name="zim_no_vid">Video Yok</string>
|
||||
<string name="no_network_connection">Ağ bağlantısı yok</string>
|
||||
<string name="help_2">Kiwix ne yapar?</string>
|
||||
<string name="help_3">Kiwix bir çevrimdışı içerik okuyucusudur. Aynı bir ağ tarayıcısı gibi çalışır ama web sayfalarına çevrimiçi erişmek yerine içeriği ZIM formatındaki bir dosyadan okur.</string>
|
||||
<string name="help_3">Kiwix bir çevrimdışı içerik okuyucusudur. Bir tarayıcı gibi davranır, ancak çevrimiçi web sayfalarına erişmek yerine, içeriği ZIM formatında bir dosyadan okur.</string>
|
||||
<string name="help_4">Kiwix orijinalde Vikipedi\'yi çevrimdışı olarak okuması için tasarlanmış olsa da diğer içerikleri de okuyabilir.</string>
|
||||
<string name="help_5">İçerik nerededir?</string>
|
||||
<string name="help_6">İçeriğimiz Kiwix web sayfasındadır.</string>
|
||||
|
@ -21,7 +21,7 @@
|
||||
<string name="menu_read_aloud">Читати вголос</string>
|
||||
<string name="menu_read_aloud_stop">Зупинити читання вголос</string>
|
||||
<string name="menu_support_kiwix">Підтримати Kiwix</string>
|
||||
<string name="menu_host_books">Розташувати книги</string>
|
||||
<string name="menu_wifi_hotspot">Розташувати книги</string>
|
||||
<string name="save_media">Зберегти медіафайл</string>
|
||||
<string name="save_media_error">Сталася помилка при спробі зберегти медіафайл!</string>
|
||||
<string name="save_media_saved">Медіафайл збережено як %s до Android/media/org.kiwix…/</string>
|
||||
|
@ -20,7 +20,7 @@
|
||||
<string name="menu_read_aloud">朗讀</string>
|
||||
<string name="menu_read_aloud_stop">停止朗讀</string>
|
||||
<string name="menu_support_kiwix">支持 Kiwix</string>
|
||||
<string name="menu_host_books">託管書籍</string>
|
||||
<string name="menu_wifi_hotspot">託管書籍</string>
|
||||
<string name="save_media">儲存媒體</string>
|
||||
<string name="save_media_error">嘗試儲存該媒體時出錯!</string>
|
||||
<string name="save_media_saved">已將媒體以 %1$s 儲存到 Android/media/org.kiwix…/</string>
|
||||
|
@ -5,6 +5,7 @@
|
||||
* Akagisoy
|
||||
* Arthur2e5
|
||||
* Josephine W.
|
||||
* LClightcat
|
||||
* Liuxinyu970226
|
||||
* Shuiwater
|
||||
* SomeyaMako
|
||||
@ -27,7 +28,7 @@
|
||||
<string name="menu_read_aloud">朗读</string>
|
||||
<string name="menu_read_aloud_stop">停止朗读</string>
|
||||
<string name="menu_support_kiwix">支持Kiwix</string>
|
||||
<string name="menu_host_books">成为服务器共享书籍</string>
|
||||
<string name="menu_wifi_hotspot">成为服务器共享书籍</string>
|
||||
<string name="save_media">保存媒体</string>
|
||||
<string name="save_media_error">尝试保存该媒体时出错!</string>
|
||||
<string name="save_media_saved">已将媒体作为%s保存至Android/media/org.kiwix…/</string>
|
||||
@ -114,6 +115,7 @@
|
||||
<string name="delete_zims_toast">文件已删除</string>
|
||||
<string name="no_files_here">没有文件</string>
|
||||
<string name="download_no_space">缺少下载所需的空间。</string>
|
||||
<string name="download">下载</string>
|
||||
<string name="space_available">可用空间:</string>
|
||||
<string name="zim_simple">简单</string>
|
||||
<string name="zim_no_pic">没有图片</string>
|
||||
@ -143,6 +145,8 @@
|
||||
<string name="confirm_stop_download_msg">您确定要停止此次下载么?</string>
|
||||
<string name="download_change_storage">存储设备选择器</string>
|
||||
<string name="tts_not_enabled">文字转换语音功能未对该ZIM文件启用</string>
|
||||
<string name="texttospeech_initialization_failed">文字到语音的初始化失败。请再试一次</string>
|
||||
<string name="texttospeech_error">文本到语音的转换过程中出现了未知错误。请再试一次</string>
|
||||
<string name="next">下一页</string>
|
||||
<string name="previous">上一页</string>
|
||||
<string name="wifi_only_title">允许通过移动网络下载内容?</string>
|
||||
@ -162,32 +166,48 @@
|
||||
<string name="do_not_ask_anymore">不要再次询问</string>
|
||||
<string name="your_languages">选择的语言:</string>
|
||||
<string name="other_languages">其他语言:</string>
|
||||
<string name="no_items_msg">没有可用的项目</string>
|
||||
<string name="crash_title">这太尴尬了</string>
|
||||
<string name="crash_description">看起来我们崩溃了。\n\n您是否介意通过发送以下信息帮助我们解决此问题?</string>
|
||||
<string name="crash_checkbox_language">您的语言设置</string>
|
||||
<string name="crash_checkbox_zimfiles">Zim文件列表</string>
|
||||
<string name="crash_checkbox_exception">崩溃详情</string>
|
||||
<string name="crash_checkbox_logs">应用程序日志</string>
|
||||
<string name="crash_checkbox_device">设备细节</string>
|
||||
<string name="crash_button_confirm">发送详情</string>
|
||||
<string name="shortcut_disabled_message">快捷方式不可用</string>
|
||||
<string name="new_tab_shortcut_label">新建标签页</string>
|
||||
<string name="get_content_shortcut_label">获取内容</string>
|
||||
<string name="fav_icon">网站图像</string>
|
||||
<string name="articleCount">%s个条目</string>
|
||||
<string name="get_started">入门</string>
|
||||
<string name="download_books">下载书籍</string>
|
||||
<string name="welcome_to_the_family">欢迎到来</string>
|
||||
<string name="save_books_offline">保存供离线使用</string>
|
||||
<string name="download_books_message">随时随地下载书籍并阅读。</string>
|
||||
<string name="unable_to_add_to_bookmarks">无法添加到书签</string>
|
||||
<string name="go_to_previous_page">楼上</string>
|
||||
<string name="go_to_next_page">下一楼</string>
|
||||
<string name="table_of_contents">目录</string>
|
||||
<string name="select_languages">选择的语言</string>
|
||||
<string name="send_feedback">发送反馈</string>
|
||||
<string name="expand">展开</string>
|
||||
<string name="history">历史</string>
|
||||
<string name="history_from_current_book">查看所有书籍的历史记录</string>
|
||||
<string name="search_history">搜索历史</string>
|
||||
<string name="selected_items">%1$d已选择</string>
|
||||
<string name="bookmarks_from_current_book">查看所有书籍中的标签</string>
|
||||
<string name="search_bookmarks">搜索书签</string>
|
||||
<string name="switch_tabs">切换选项卡</string>
|
||||
<string name="close_all_tabs">关闭所有标签</string>
|
||||
<string name="pending_state">待处理</string>
|
||||
<string name="running_state">进行中</string>
|
||||
<string name="complete">完成</string>
|
||||
<string name="paused_state">暂停</string>
|
||||
<string name="failed_state">失败:%s</string>
|
||||
<string name="save">保存</string>
|
||||
<string name="note">请注意</string>
|
||||
<string name="wiki_article_title">Wiki文章标题</string>
|
||||
<string name="confirmation_alert_dialog_message">丢弃没保存的更改?</string>
|
||||
<string name="delete_notes_confirmation_msg">删除所有笔记?</string>
|
||||
<string name="nearby_devices">附近的设备</string>
|
||||
|
@ -11,7 +11,7 @@
|
||||
<string name="menu_read_aloud">Read aloud</string>
|
||||
<string name="menu_read_aloud_stop">Stop reading aloud</string>
|
||||
<string name="menu_support_kiwix">Support Kiwix</string>
|
||||
<string name="menu_host_books">Host Books</string>
|
||||
<string name="menu_wifi_hotspot">WiFi Hotspot</string>
|
||||
<string name="save_media">Save Media</string>
|
||||
<string name="save_media_error">An error occurred when trying to save the media!</string>
|
||||
<string name="save_media_saved">Saved media as %s to Android/media/org.kiwix…/</string>
|
||||
|
1
custom/.gitignore
vendored
1
custom/.gitignore
vendored
@ -1 +1,2 @@
|
||||
/build
|
||||
jacoco.exec
|
||||
|
@ -3,7 +3,7 @@
|
||||
<Blacklist></Blacklist>
|
||||
<Whitelist>
|
||||
<ID>LongParameterList:DownloadCustom.kt$DownloadCustom$( id: String = "", title: String = "", description: String = "", language: String = "", creator: String = "", publisher: String = "", date: String = "", url: String = "", articleCount: String = "", mediaCount: String = "", size: String = "", name: String = "", favIcon: String = "" )</ID>
|
||||
<ID>MagicNumber:CustomDownloadActivity.kt$CustomDownloadActivity$3</ID>
|
||||
<ID>MagicNumber:CustomDownloadFragment.kt$CustomDownloadFragment$3</ID>
|
||||
<ID>TooGenericExceptionThrown:ActivityExtensions.kt$throw RuntimeException( """ applicationContext is ${applicationContext::class.java.simpleName} application is ${application::class.java.simpleName} """.trimIndent() )</ID>
|
||||
</Whitelist>
|
||||
</SmellBaseline>
|
||||
|
@ -52,7 +52,6 @@
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
<activity android:name=".download.CustomDownloadActivity" />
|
||||
|
||||
<receiver android:name=".main.CustomSearchWidget">
|
||||
<intent-filter>
|
||||
|
@ -23,7 +23,7 @@ import dagger.BindsInstance
|
||||
import dagger.Subcomponent
|
||||
import org.kiwix.kiwixmobile.core.di.ActivityScope
|
||||
import org.kiwix.kiwixmobile.core.di.components.CoreActivityComponent
|
||||
import org.kiwix.kiwixmobile.custom.download.CustomDownloadActivity
|
||||
import org.kiwix.kiwixmobile.custom.download.CustomDownloadFragment
|
||||
import org.kiwix.kiwixmobile.custom.main.CustomMainActivity
|
||||
import org.kiwix.kiwixmobile.custom.main.CustomReaderFragment
|
||||
import org.kiwix.kiwixmobile.custom.settings.CustomSettingsFragment
|
||||
@ -33,7 +33,7 @@ import org.kiwix.kiwixmobile.custom.settings.CustomSettingsFragment
|
||||
interface CustomActivityComponent : CoreActivityComponent {
|
||||
fun inject(customMainActivity: CustomMainActivity)
|
||||
fun inject(customSettingsFragment: CustomSettingsFragment)
|
||||
fun inject(customDownloadActivity: CustomDownloadActivity)
|
||||
fun inject(customDownloadFragment: CustomDownloadFragment)
|
||||
fun inject(customReaderFragment: CustomReaderFragment)
|
||||
|
||||
@Subcomponent.Builder
|
||||
|
@ -19,10 +19,13 @@
|
||||
package org.kiwix.kiwixmobile.custom.download
|
||||
|
||||
import android.os.Bundle
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.lifecycle.Observer
|
||||
import androidx.lifecycle.ViewModelProvider
|
||||
import io.reactivex.disposables.CompositeDisposable
|
||||
import kotlinx.android.synthetic.main.activity_custom_download.cd_view_animator
|
||||
import kotlinx.android.synthetic.main.fragment_custom_download.cd_view_animator
|
||||
import kotlinx.android.synthetic.main.layout_custom_download_error.cd_error_text
|
||||
import kotlinx.android.synthetic.main.layout_custom_download_error.cd_retry_button
|
||||
import kotlinx.android.synthetic.main.layout_custom_download_in_progress.cd_download_state
|
||||
@ -30,10 +33,12 @@ import kotlinx.android.synthetic.main.layout_custom_download_in_progress.cd_eta
|
||||
import kotlinx.android.synthetic.main.layout_custom_download_in_progress.cd_progress
|
||||
import kotlinx.android.synthetic.main.layout_custom_download_required.cd_download_button
|
||||
import org.kiwix.kiwixmobile.core.base.BaseActivity
|
||||
import org.kiwix.kiwixmobile.core.di.components.CoreComponent
|
||||
import org.kiwix.kiwixmobile.core.base.BaseFragment
|
||||
import org.kiwix.kiwixmobile.core.base.FragmentActivityExtensions
|
||||
import org.kiwix.kiwixmobile.core.downloader.model.DownloadItem
|
||||
import org.kiwix.kiwixmobile.core.extensions.ActivityExtensions.viewModel
|
||||
import org.kiwix.kiwixmobile.core.extensions.setDistinctDisplayedChild
|
||||
import org.kiwix.kiwixmobile.core.extensions.viewModel
|
||||
import org.kiwix.kiwixmobile.core.main.CoreMainActivity
|
||||
import org.kiwix.kiwixmobile.custom.R
|
||||
import org.kiwix.kiwixmobile.custom.customActivityComponent
|
||||
import org.kiwix.kiwixmobile.custom.download.Action.ClickedDownload
|
||||
@ -44,10 +49,7 @@ import org.kiwix.kiwixmobile.custom.download.State.DownloadInProgress
|
||||
import org.kiwix.kiwixmobile.custom.download.State.DownloadRequired
|
||||
import javax.inject.Inject
|
||||
|
||||
class CustomDownloadActivity : BaseActivity() {
|
||||
override fun injection(coreComponent: CoreComponent) {
|
||||
customActivityComponent.inject(this)
|
||||
}
|
||||
class CustomDownloadFragment : BaseFragment(), FragmentActivityExtensions {
|
||||
|
||||
private val downloadViewModel by lazy {
|
||||
viewModel<CustomDownloadViewModel>(viewModelFactory)
|
||||
@ -56,17 +58,30 @@ class CustomDownloadActivity : BaseActivity() {
|
||||
@Inject lateinit var viewModelFactory: ViewModelProvider.Factory
|
||||
|
||||
private val compositeDisposable = CompositeDisposable()
|
||||
override fun inject(baseActivity: BaseActivity) {
|
||||
baseActivity.customActivityComponent.inject(this)
|
||||
}
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
override fun onCreateView(
|
||||
inflater: LayoutInflater,
|
||||
container: ViewGroup?,
|
||||
savedInstanceState: Bundle?
|
||||
): View? {
|
||||
super.onCreate(savedInstanceState)
|
||||
setContentView(R.layout.activity_custom_download)
|
||||
downloadViewModel.state.observe(this, Observer(::render))
|
||||
val root = inflater.inflate(R.layout.fragment_custom_download, container, false)
|
||||
val activity = requireActivity() as CoreMainActivity
|
||||
downloadViewModel.state.observe(viewLifecycleOwner, Observer(::render))
|
||||
compositeDisposable.add(
|
||||
downloadViewModel.effects.subscribe(
|
||||
{ it.invokeWith(this) },
|
||||
{ it.invokeWith(activity) },
|
||||
Throwable::printStackTrace
|
||||
)
|
||||
)
|
||||
return root
|
||||
}
|
||||
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
cd_download_button.setOnClickListener { downloadViewModel.actions.offer(ClickedDownload) }
|
||||
cd_retry_button.setOnClickListener { downloadViewModel.actions.offer(ClickedRetry) }
|
||||
}
|
||||
@ -74,6 +89,7 @@ class CustomDownloadActivity : BaseActivity() {
|
||||
override fun onDestroy() {
|
||||
super.onDestroy()
|
||||
compositeDisposable.clear()
|
||||
activity?.finish()
|
||||
}
|
||||
|
||||
private fun render(state: State) {
|
||||
@ -85,7 +101,7 @@ class CustomDownloadActivity : BaseActivity() {
|
||||
}
|
||||
is DownloadFailed -> {
|
||||
cd_view_animator.setDistinctDisplayedChild(2)
|
||||
cd_error_text.text = state.downloadState.toReadableState(this)
|
||||
cd_error_text.text = context?.let(state.downloadState::toReadableState)
|
||||
}
|
||||
DownloadComplete -> cd_view_animator.setDistinctDisplayedChild(3)
|
||||
}
|
||||
@ -94,6 +110,6 @@ class CustomDownloadActivity : BaseActivity() {
|
||||
private fun render(downloadItem: DownloadItem) {
|
||||
cd_progress.progress = downloadItem.progress
|
||||
cd_eta.text = downloadItem.readableEta
|
||||
cd_download_state.text = downloadItem.downloadState.toReadableState(this)
|
||||
cd_download_state.text = context?.let(downloadItem.downloadState::toReadableState)
|
||||
}
|
||||
}
|
@ -34,7 +34,7 @@ import org.kiwix.kiwixmobile.custom.download.State.DownloadFailed
|
||||
import org.kiwix.kiwixmobile.custom.download.State.DownloadInProgress
|
||||
import org.kiwix.kiwixmobile.custom.download.State.DownloadRequired
|
||||
import org.kiwix.kiwixmobile.custom.download.effects.DownloadCustom
|
||||
import org.kiwix.kiwixmobile.custom.download.effects.FinishAndStartMain
|
||||
import org.kiwix.kiwixmobile.custom.download.effects.NavigateToCustomReader
|
||||
import org.kiwix.kiwixmobile.custom.download.effects.SetPreferredStorageWithMostSpace
|
||||
import javax.inject.Inject
|
||||
|
||||
@ -42,7 +42,7 @@ class CustomDownloadViewModel @Inject constructor(
|
||||
downloadDao: FetchDownloadDao,
|
||||
setPreferredStorageWithMostSpace: SetPreferredStorageWithMostSpace,
|
||||
private val downloadCustom: DownloadCustom,
|
||||
private val finishAndStartMain: FinishAndStartMain
|
||||
private val navigateToCustomReader: NavigateToCustomReader
|
||||
) : ViewModel() {
|
||||
|
||||
val state = MutableLiveData<State>().apply { value = DownloadRequired }
|
||||
@ -91,7 +91,7 @@ class CustomDownloadViewModel @Inject constructor(
|
||||
else
|
||||
DownloadInProgress(action.downloads)
|
||||
else
|
||||
DownloadComplete.also { _effects.offer(finishAndStartMain) }
|
||||
DownloadComplete.also { _effects.offer(navigateToCustomReader) }
|
||||
DownloadComplete -> state
|
||||
}
|
||||
}
|
||||
|
@ -24,7 +24,7 @@ import org.kiwix.kiwixmobile.core.extensions.ActivityExtensions.start
|
||||
import org.kiwix.kiwixmobile.custom.main.CustomMainActivity
|
||||
import javax.inject.Inject
|
||||
|
||||
class FinishAndStartMain @Inject constructor() : SideEffect<Unit> {
|
||||
class NavigateToCustomReader @Inject constructor() : SideEffect<Unit> {
|
||||
override fun invokeWith(activity: AppCompatActivity) {
|
||||
activity.finish()
|
||||
activity.start<CustomMainActivity>()
|
@ -37,10 +37,11 @@ import androidx.core.app.ActivityCompat
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.drawerlayout.widget.DrawerLayout
|
||||
import androidx.lifecycle.Observer
|
||||
import androidx.navigation.fragment.findNavController
|
||||
import org.kiwix.kiwixmobile.core.base.BaseActivity
|
||||
import org.kiwix.kiwixmobile.core.base.FragmentActivityExtensions
|
||||
import org.kiwix.kiwixmobile.core.extensions.ActivityExtensions.observeNavigationResult
|
||||
import org.kiwix.kiwixmobile.core.extensions.ActivityExtensions.setupDrawerToggle
|
||||
import org.kiwix.kiwixmobile.core.extensions.ActivityExtensions.start
|
||||
import org.kiwix.kiwixmobile.core.main.CoreReaderFragment
|
||||
import org.kiwix.kiwixmobile.core.main.FIND_IN_PAGE_SEARCH_STRING
|
||||
import org.kiwix.kiwixmobile.core.main.MainMenu
|
||||
@ -54,12 +55,9 @@ import org.kiwix.kiwixmobile.core.utils.urlSuffixToParsableUrl
|
||||
import org.kiwix.kiwixmobile.custom.BuildConfig
|
||||
import org.kiwix.kiwixmobile.custom.R
|
||||
import org.kiwix.kiwixmobile.custom.customActivityComponent
|
||||
import org.kiwix.kiwixmobile.custom.download.CustomDownloadActivity
|
||||
import java.util.Locale
|
||||
import javax.inject.Inject
|
||||
|
||||
const val PAGE_URL_KEY = "pageUrl"
|
||||
|
||||
class CustomReaderFragment : CoreReaderFragment() {
|
||||
|
||||
override fun inject(baseActivity: BaseActivity) {
|
||||
@ -68,13 +66,13 @@ class CustomReaderFragment : CoreReaderFragment() {
|
||||
|
||||
@Inject lateinit var customFileValidator: CustomFileValidator
|
||||
@Inject lateinit var dialogShower: DialogShower
|
||||
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
if (enforcedLanguage()) {
|
||||
return
|
||||
}
|
||||
|
||||
if (isAdded) {
|
||||
setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED)
|
||||
if (BuildConfig.DISABLE_SIDEBAR) {
|
||||
val toolbarToc = activity?.findViewById<ImageView>(R.id.bottom_toolbar_toc)
|
||||
@ -97,6 +95,12 @@ class CustomReaderFragment : CoreReaderFragment() {
|
||||
Observer(::openSearchItem)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onBackPressed(activity: AppCompatActivity): FragmentActivityExtensions.Super {
|
||||
requireActivity().finish()
|
||||
return super.onBackPressed(activity)
|
||||
}
|
||||
|
||||
private fun openSearchItem(item: SearchItemToOpen) {
|
||||
zimReaderContainer.titleToUrl(item.pageTitle)?.apply {
|
||||
@ -157,8 +161,7 @@ class CustomReaderFragment : CoreReaderFragment() {
|
||||
) {
|
||||
requestPermissions(arrayOf(READ_EXTERNAL_STORAGE), REQUEST_READ_FOR_OBB)
|
||||
} else {
|
||||
activity?.finish()
|
||||
activity?.start<CustomDownloadActivity>()
|
||||
findNavController().navigate(R.id.customDownloadFragment)
|
||||
}
|
||||
}
|
||||
)
|
||||
|
@ -5,7 +5,7 @@
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
tools:showIn="@layout/activity_custom_download">
|
||||
tools:showIn="@layout/fragment_custom_download">
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
|
@ -5,7 +5,7 @@
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
tools:showIn="@layout/activity_custom_download">
|
||||
tools:showIn="@layout/fragment_custom_download">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/cd_error_text"
|
||||
|
@ -4,7 +4,7 @@
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
tools:showIn="@layout/activity_custom_download">
|
||||
tools:showIn="@layout/fragment_custom_download">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/cd_text"
|
||||
|
@ -24,6 +24,7 @@
|
||||
android:id="@+id/customReaderFragment"
|
||||
android:name="org.kiwix.kiwixmobile.custom.main.CustomReaderFragment"
|
||||
android:label="CustomReaderFragment">
|
||||
|
||||
<argument
|
||||
android:name="pageUrl"
|
||||
android:defaultValue=""
|
||||
@ -36,6 +37,11 @@
|
||||
android:name="shouldOpenInNewTab"
|
||||
android:defaultValue="false"
|
||||
app:argType="boolean" />
|
||||
<action
|
||||
android:id="@+id/action_customReader_to_customDownload"
|
||||
app:destination="@id/customDownloadFragment"
|
||||
app:popUpTo="@id/customReaderFragment"
|
||||
app:popUpToInclusive="true" />
|
||||
</fragment>
|
||||
<fragment
|
||||
android:id="@+id/historyFragment"
|
||||
@ -53,6 +59,16 @@
|
||||
android:id="@+id/customSettingsFragment"
|
||||
android:name="org.kiwix.kiwixmobile.custom.settings.CustomSettingsFragment"
|
||||
android:label="CustomSettingsFragment" />
|
||||
<fragment
|
||||
android:id="@+id/customDownloadFragment"
|
||||
android:name="org.kiwix.kiwixmobile.custom.download.CustomDownloadFragment"
|
||||
android:label="CustomDownloadFragment">
|
||||
<action
|
||||
android:id="@+id/action_customDownload_to_customReader"
|
||||
app:destination="@id/customReaderFragment"
|
||||
app:popUpTo="@id/customDownloadFragment"
|
||||
app:popUpToInclusive="true" />
|
||||
</fragment>
|
||||
<fragment
|
||||
android:id="@+id/searchFragment"
|
||||
android:name="org.kiwix.kiwixmobile.core.search.SearchFragment"
|
||||
|
7
custom/src/main/res/values-eo/strings.xml
Normal file
7
custom/src/main/res/values-eo/strings.xml
Normal file
@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Authors:
|
||||
* Jakub Fabijan
|
||||
-->
|
||||
<resources>
|
||||
<string name="download">Elŝuti</string>
|
||||
</resources>
|
@ -2,6 +2,6 @@
|
||||
<!-- Authors:
|
||||
* Robby
|
||||
-->
|
||||
<resources>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="all">
|
||||
<string name="download">The title of the fragment/place where books are downloaded.</string>
|
||||
</resources>
|
||||
|
7
custom/src/main/res/values-zh/strings.xml
Normal file
7
custom/src/main/res/values-zh/strings.xml
Normal file
@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Authors:
|
||||
* LClightcat
|
||||
-->
|
||||
<resources>
|
||||
<string name="download">下载</string>
|
||||
</resources>
|
@ -40,7 +40,7 @@ import org.kiwix.kiwixmobile.custom.download.State.DownloadFailed
|
||||
import org.kiwix.kiwixmobile.custom.download.State.DownloadInProgress
|
||||
import org.kiwix.kiwixmobile.custom.download.State.DownloadRequired
|
||||
import org.kiwix.kiwixmobile.custom.download.effects.DownloadCustom
|
||||
import org.kiwix.kiwixmobile.custom.download.effects.FinishAndStartMain
|
||||
import org.kiwix.kiwixmobile.custom.download.effects.NavigateToCustomReader
|
||||
import org.kiwix.kiwixmobile.custom.download.effects.SetPreferredStorageWithMostSpace
|
||||
import org.kiwix.sharedFunctions.InstantExecutorExtension
|
||||
import org.kiwix.sharedFunctions.downloadItem
|
||||
@ -50,7 +50,7 @@ internal class CustomDownloadViewModelTest {
|
||||
private val fetchDownloadDao: FetchDownloadDao = mockk()
|
||||
private val setPreferredStorageWithMostSpace: SetPreferredStorageWithMostSpace = mockk()
|
||||
private val downloadCustom: DownloadCustom = mockk()
|
||||
private val finishAndStartMain: FinishAndStartMain = mockk()
|
||||
private val navigateToCustomReader: NavigateToCustomReader = mockk()
|
||||
|
||||
private val downloads: PublishProcessor<List<DownloadModel>> = PublishProcessor.create()
|
||||
private lateinit var customDownloadViewModel: CustomDownloadViewModel
|
||||
@ -63,7 +63,7 @@ internal class CustomDownloadViewModelTest {
|
||||
fetchDownloadDao,
|
||||
setPreferredStorageWithMostSpace,
|
||||
downloadCustom,
|
||||
finishAndStartMain
|
||||
navigateToCustomReader
|
||||
)
|
||||
}
|
||||
|
||||
@ -137,7 +137,7 @@ internal class CustomDownloadViewModelTest {
|
||||
DatabaseEmission(listOf()),
|
||||
DownloadComplete
|
||||
)
|
||||
sideEffects.assertValues(setPreferredStorageWithMostSpace, finishAndStartMain)
|
||||
sideEffects.assertValues(setPreferredStorageWithMostSpace, navigateToCustomReader)
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -23,7 +23,7 @@ import io.mockk.mockk
|
||||
import io.mockk.verify
|
||||
import org.junit.jupiter.api.Test
|
||||
|
||||
internal class FinishAndStartMainTest {
|
||||
internal class NavigateToCustomReaderTest {
|
||||
|
||||
@Test
|
||||
fun `invokeWith finishes activity and starts main`() {
|
||||
@ -31,7 +31,7 @@ internal class FinishAndStartMainTest {
|
||||
// Inline functions cannot be mocked
|
||||
// mockkObject(ActivityExtensions)
|
||||
// every { start<CustomMainActivity>(null) } just Runs issues with inline extension functions
|
||||
FinishAndStartMain().invokeWith(activity)
|
||||
NavigateToCustomReader().invokeWith(activity)
|
||||
verify {
|
||||
activity.finish()
|
||||
activity.startActivity(any())
|
Loading…
x
Reference in New Issue
Block a user