mirror of
https://github.com/kiwix/kiwix-android.git
synced 2025-09-12 17:08:59 -04:00
commit
97b51a1c49
@ -1,3 +1,11 @@
|
|||||||
|
3.4.3
|
||||||
|
NEW: Updated translations
|
||||||
|
BUGFIX: Video seek was not working
|
||||||
|
BUGFIX: Back button in history and bookmarks toolbar always took to library
|
||||||
|
BUGFIX: Books hosted from android client were not updating on browser dynamically
|
||||||
|
BUGFIX: Creating multiple tabs was causing `loading` in previously opened tabs
|
||||||
|
BUGFIX: Messages displayed when no books are present were inconsistent typographically
|
||||||
|
|
||||||
3.4.2
|
3.4.2
|
||||||
NEW: Service worker support for war2c zim files
|
NEW: Service worker support for war2c zim files
|
||||||
NEW: Updated translations
|
NEW: Updated translations
|
||||||
|
@ -11,7 +11,7 @@ apply(from = rootProject.file("jacoco.gradle"))
|
|||||||
ext {
|
ext {
|
||||||
set("versionMajor", 3)
|
set("versionMajor", 3)
|
||||||
set("versionMinor", 4)
|
set("versionMinor", 4)
|
||||||
set("versionPatch", 2)
|
set("versionPatch", 3)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun generateVersionName() = "${ext["versionMajor"]}.${ext["versionMinor"]}.${ext["versionPatch"]}"
|
fun generateVersionName() = "${ext["versionMajor"]}.${ext["versionMinor"]}.${ext["versionPatch"]}"
|
||||||
|
@ -24,9 +24,12 @@ Abdul Wadood<br>
|
|||||||
Adeel Zafar<br>
|
Adeel Zafar<br>
|
||||||
Aditya Sood<br>
|
Aditya Sood<br>
|
||||||
Ayoub Dardory<br>
|
Ayoub Dardory<br>
|
||||||
|
Ayush Shrivastava<br>
|
||||||
Christian Pühringer<br>
|
Christian Pühringer<br>
|
||||||
Elad Keyshawn<br>
|
Elad Keyshawn<br>
|
||||||
Emmanuel Engelhart<br>
|
Emmanuel Engelhart<br>
|
||||||
|
Frans-Lukas Lövenvald<br>
|
||||||
|
Gourishankar Panda<br>
|
||||||
Isaac Hutt<br>
|
Isaac Hutt<br>
|
||||||
Joseph E. Reeve<br>
|
Joseph E. Reeve<br>
|
||||||
Julian Harty<br>
|
Julian Harty<br>
|
||||||
|
@ -23,9 +23,8 @@ import android.app.Service
|
|||||||
import android.content.Context
|
import android.content.Context
|
||||||
import dagger.Module
|
import dagger.Module
|
||||||
import dagger.Provides
|
import dagger.Provides
|
||||||
import org.kiwix.kiwixlib.JNIKiwixServer
|
|
||||||
import org.kiwix.kiwixlib.Library
|
|
||||||
import org.kiwix.kiwixmobile.di.ServiceScope
|
import org.kiwix.kiwixmobile.di.ServiceScope
|
||||||
|
import org.kiwix.kiwixmobile.webserver.KiwixServer
|
||||||
import org.kiwix.kiwixmobile.webserver.WebServerHelper
|
import org.kiwix.kiwixmobile.webserver.WebServerHelper
|
||||||
import org.kiwix.kiwixmobile.webserver.wifi_hotspot.HotspotNotificationManager
|
import org.kiwix.kiwixmobile.webserver.wifi_hotspot.HotspotNotificationManager
|
||||||
import org.kiwix.kiwixmobile.webserver.wifi_hotspot.HotspotStateReceiver
|
import org.kiwix.kiwixmobile.webserver.wifi_hotspot.HotspotStateReceiver
|
||||||
@ -38,25 +37,15 @@ class ServiceModule {
|
|||||||
@Provides
|
@Provides
|
||||||
@ServiceScope
|
@ServiceScope
|
||||||
fun providesWebServerHelper(
|
fun providesWebServerHelper(
|
||||||
jniKiwixLibrary: Library,
|
kiwixServerFactory: KiwixServer.Factory,
|
||||||
kiwixServer: JNIKiwixServer,
|
|
||||||
ipAddressCallbacks: IpAddressCallbacks
|
ipAddressCallbacks: IpAddressCallbacks
|
||||||
): WebServerHelper = WebServerHelper(jniKiwixLibrary, kiwixServer, ipAddressCallbacks)
|
): WebServerHelper = WebServerHelper(kiwixServerFactory, ipAddressCallbacks)
|
||||||
|
|
||||||
@Provides
|
@Provides
|
||||||
@ServiceScope
|
@ServiceScope
|
||||||
fun providesIpAddressCallbacks(service: Service): IpAddressCallbacks =
|
fun providesIpAddressCallbacks(service: Service): IpAddressCallbacks =
|
||||||
service as IpAddressCallbacks
|
service as IpAddressCallbacks
|
||||||
|
|
||||||
@Provides
|
|
||||||
@ServiceScope
|
|
||||||
fun providesLibrary(): Library = Library()
|
|
||||||
|
|
||||||
@Provides
|
|
||||||
@ServiceScope
|
|
||||||
fun providesJNIKiwixServer(jniKiwixLibrary: Library): JNIKiwixServer =
|
|
||||||
JNIKiwixServer(jniKiwixLibrary)
|
|
||||||
|
|
||||||
@Provides
|
@Provides
|
||||||
@ServiceScope
|
@ServiceScope
|
||||||
fun providesHotspotNotificationManager(
|
fun providesHotspotNotificationManager(
|
||||||
|
@ -23,8 +23,8 @@ import android.os.Looper
|
|||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
|
||||||
import androidx.core.view.isVisible
|
import androidx.core.view.isVisible
|
||||||
|
import androidx.navigation.fragment.findNavController
|
||||||
import androidx.viewpager.widget.ViewPager
|
import androidx.viewpager.widget.ViewPager
|
||||||
import kotlinx.android.synthetic.main.fragment_intro.get_started
|
import kotlinx.android.synthetic.main.fragment_intro.get_started
|
||||||
import kotlinx.android.synthetic.main.fragment_intro.tab_indicator
|
import kotlinx.android.synthetic.main.fragment_intro.tab_indicator
|
||||||
@ -35,7 +35,6 @@ import org.kiwix.kiwixmobile.cachedComponent
|
|||||||
import org.kiwix.kiwixmobile.core.base.BaseActivity
|
import org.kiwix.kiwixmobile.core.base.BaseActivity
|
||||||
import org.kiwix.kiwixmobile.core.base.BaseFragment
|
import org.kiwix.kiwixmobile.core.base.BaseFragment
|
||||||
import org.kiwix.kiwixmobile.core.base.FragmentActivityExtensions
|
import org.kiwix.kiwixmobile.core.base.FragmentActivityExtensions
|
||||||
import org.kiwix.kiwixmobile.main.KiwixMainActivity
|
|
||||||
import org.kiwix.kiwixmobile.zim_manager.SimplePageChangeListener
|
import org.kiwix.kiwixmobile.zim_manager.SimplePageChangeListener
|
||||||
import java.util.Timer
|
import java.util.Timer
|
||||||
import java.util.TimerTask
|
import java.util.TimerTask
|
||||||
@ -103,15 +102,10 @@ class IntroFragment : BaseFragment(), IntroContract.View, FragmentActivityExtens
|
|||||||
views = emptyArray()
|
views = emptyArray()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onBackPressed(activity: AppCompatActivity): FragmentActivityExtensions.Super {
|
|
||||||
activity.finish()
|
|
||||||
return super.onBackPressed(activity)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun navigateToLibrary() {
|
private fun navigateToLibrary() {
|
||||||
dismissAutoRotate()
|
dismissAutoRotate()
|
||||||
presenter.setIntroShown()
|
presenter.setIntroShown()
|
||||||
(requireActivity() as KiwixMainActivity).navController.popBackStack()
|
findNavController().navigate(IntroFragmentDirections.actionIntrofragmentToLibraryFragment())
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun updateView(position: Int) {
|
private fun updateView(position: Int) {
|
||||||
|
@ -38,6 +38,7 @@ import org.kiwix.kiwixmobile.core.base.FragmentActivityExtensions
|
|||||||
import org.kiwix.kiwixmobile.core.di.components.CoreComponent
|
import org.kiwix.kiwixmobile.core.di.components.CoreComponent
|
||||||
import org.kiwix.kiwixmobile.core.main.CoreMainActivity
|
import org.kiwix.kiwixmobile.core.main.CoreMainActivity
|
||||||
import org.kiwix.kiwixmobile.kiwixActivityComponent
|
import org.kiwix.kiwixmobile.kiwixActivityComponent
|
||||||
|
import org.kiwix.kiwixmobile.nav.destination.library.LocalLibraryFragmentDirections
|
||||||
|
|
||||||
const val NAVIGATE_TO_ZIM_HOST_FRAGMENT = "navigate_to_zim_host_fragment"
|
const val NAVIGATE_TO_ZIM_HOST_FRAGMENT = "navigate_to_zim_host_fragment"
|
||||||
|
|
||||||
@ -94,7 +95,7 @@ class KiwixMainActivity : CoreMainActivity() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (sharedPreferenceUtil.showIntro()) {
|
if (sharedPreferenceUtil.showIntro()) {
|
||||||
navigate(R.id.introFragment)
|
navigate(LocalLibraryFragmentDirections.actionLibraryFragmentToIntrofragment())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -251,7 +251,9 @@ class KiwixReaderFragment : CoreReaderFragment() {
|
|||||||
val zimFile = settings.getString(TAG_CURRENT_FILE, null)
|
val zimFile = settings.getString(TAG_CURRENT_FILE, null)
|
||||||
|
|
||||||
if (zimFile != null) {
|
if (zimFile != null) {
|
||||||
openZimFile(File(zimFile))
|
if (zimReaderContainer.zimFile == null) {
|
||||||
|
openZimFile(File(zimFile))
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
getCurrentWebView().snack(R.string.zim_not_opened)
|
getCurrentWebView().snack(R.string.zim_not_opened)
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,51 @@
|
|||||||
|
/*
|
||||||
|
* Kiwix Android
|
||||||
|
* Copyright (c) 2020 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.webserver
|
||||||
|
|
||||||
|
import android.util.Log
|
||||||
|
import org.kiwix.kiwixlib.JNIKiwixException
|
||||||
|
import org.kiwix.kiwixlib.JNIKiwixServer
|
||||||
|
import org.kiwix.kiwixlib.Library
|
||||||
|
import javax.inject.Inject
|
||||||
|
|
||||||
|
private const val TAG = "KiwixServer"
|
||||||
|
|
||||||
|
class KiwixServer @Inject constructor(private val jniKiwixServer: JNIKiwixServer) {
|
||||||
|
|
||||||
|
class Factory @Inject constructor() {
|
||||||
|
fun createKiwixServer(selectedBooksPath: ArrayList<String>): KiwixServer {
|
||||||
|
val kiwixLibrary = Library()
|
||||||
|
selectedBooksPath.forEach { path ->
|
||||||
|
try {
|
||||||
|
kiwixLibrary.addBook(path)
|
||||||
|
} catch (e: JNIKiwixException) {
|
||||||
|
Log.v(TAG, "Couldn't add book with path:{ $path }")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return KiwixServer(JNIKiwixServer(kiwixLibrary))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun startServer(port: Int): Boolean {
|
||||||
|
jniKiwixServer.setPort(port)
|
||||||
|
return jniKiwixServer.start()
|
||||||
|
}
|
||||||
|
|
||||||
|
fun stopServer() = jniKiwixServer.stop()
|
||||||
|
}
|
@ -25,9 +25,7 @@ import io.reactivex.android.schedulers.AndroidSchedulers;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
import org.kiwix.kiwixlib.JNIKiwixException;
|
|
||||||
import org.kiwix.kiwixlib.JNIKiwixServer;
|
import org.kiwix.kiwixlib.JNIKiwixServer;
|
||||||
import org.kiwix.kiwixlib.Library;
|
|
||||||
import org.kiwix.kiwixmobile.core.utils.ServerUtils;
|
import org.kiwix.kiwixmobile.core.utils.ServerUtils;
|
||||||
import org.kiwix.kiwixmobile.webserver.wifi_hotspot.IpAddressCallbacks;
|
import org.kiwix.kiwixmobile.webserver.wifi_hotspot.IpAddressCallbacks;
|
||||||
|
|
||||||
@ -41,15 +39,14 @@ import static org.kiwix.kiwixmobile.core.utils.ServerUtils.INVALID_IP;
|
|||||||
|
|
||||||
public class WebServerHelper {
|
public class WebServerHelper {
|
||||||
private static final String TAG = "WebServerHelper";
|
private static final String TAG = "WebServerHelper";
|
||||||
private Library kiwixLibrary;
|
private KiwixServer kiwixServer;
|
||||||
private JNIKiwixServer kiwixServer;
|
private KiwixServer.Factory kiwixServerFactory;
|
||||||
private IpAddressCallbacks ipAddressCallbacks;
|
private IpAddressCallbacks ipAddressCallbacks;
|
||||||
private boolean isServerStarted;
|
private boolean isServerStarted;
|
||||||
|
|
||||||
@Inject public WebServerHelper(@NonNull Library kiwixLibrary,
|
@Inject public WebServerHelper(@NonNull KiwixServer.Factory kiwixServerFactory,
|
||||||
@NonNull JNIKiwixServer kiwixServer, @NonNull IpAddressCallbacks ipAddressCallbacks) {
|
@NonNull IpAddressCallbacks ipAddressCallbacks) {
|
||||||
this.kiwixLibrary = kiwixLibrary;
|
this.kiwixServerFactory = kiwixServerFactory;
|
||||||
this.kiwixServer = kiwixServer;
|
|
||||||
this.ipAddressCallbacks = ipAddressCallbacks;
|
this.ipAddressCallbacks = ipAddressCallbacks;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -65,7 +62,7 @@ public class WebServerHelper {
|
|||||||
|
|
||||||
public void stopAndroidWebServer() {
|
public void stopAndroidWebServer() {
|
||||||
if (isServerStarted) {
|
if (isServerStarted) {
|
||||||
kiwixServer.stop();
|
kiwixServer.stopServer();
|
||||||
updateServerState(false);
|
updateServerState(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -74,17 +71,9 @@ public class WebServerHelper {
|
|||||||
if (!isServerStarted) {
|
if (!isServerStarted) {
|
||||||
int DEFAULT_PORT = 8080;
|
int DEFAULT_PORT = 8080;
|
||||||
ServerUtils.port = DEFAULT_PORT;
|
ServerUtils.port = DEFAULT_PORT;
|
||||||
for (String path : selectedBooksPath) {
|
kiwixServer = kiwixServerFactory.createKiwixServer(selectedBooksPath);
|
||||||
try {
|
updateServerState(kiwixServer.startServer(ServerUtils.port));
|
||||||
boolean isBookAdded = kiwixLibrary.addBook(path);
|
Log.d(TAG, "Server status" + isServerStarted);
|
||||||
Log.v(TAG, "isBookAdded: " + isBookAdded + path);
|
|
||||||
} catch (JNIKiwixException e) {
|
|
||||||
Log.v(TAG, "Couldn't add book " + path);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
kiwixServer.setPort(ServerUtils.port);
|
|
||||||
updateServerState(kiwixServer.start());
|
|
||||||
Log.v(TAG, "Server status" + isServerStarted);
|
|
||||||
}
|
}
|
||||||
return isServerStarted;
|
return isServerStarted;
|
||||||
}
|
}
|
||||||
|
@ -18,9 +18,9 @@
|
|||||||
|
|
||||||
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent">
|
||||||
xmlns:tools="http://schemas.android.com/tools">
|
|
||||||
|
|
||||||
<org.kiwix.kiwixmobile.core.utils.NestedCoordinatorLayout
|
<org.kiwix.kiwixmobile.core.utils.NestedCoordinatorLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
@ -44,11 +44,11 @@
|
|||||||
app:layout_behavior="@string/appbar_scrolling_view_behavior">
|
app:layout_behavior="@string/appbar_scrolling_view_behavior">
|
||||||
|
|
||||||
<androidx.recyclerview.widget.RecyclerView
|
<androidx.recyclerview.widget.RecyclerView
|
||||||
tools:listitem="@layout/item_download"
|
|
||||||
android:id="@+id/libraryList"
|
android:id="@+id/libraryList"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
|
app:layout_behavior="@string/appbar_scrolling_view_behavior"
|
||||||
|
tools:listitem="@layout/item_download" />
|
||||||
|
|
||||||
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
|
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
|
||||||
</org.kiwix.kiwixmobile.core.utils.NestedCoordinatorLayout>
|
</org.kiwix.kiwixmobile.core.utils.NestedCoordinatorLayout>
|
||||||
@ -56,11 +56,12 @@
|
|||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/libraryErrorText"
|
android:id="@+id/libraryErrorText"
|
||||||
style="@style/no_list_content_text"
|
style="@style/no_content"
|
||||||
app:layout_constraintBottom_toBottomOf="parent"
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toTopOf="parent" />
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
|
app:layout_constraintVertical_bias="0.45" />
|
||||||
|
|
||||||
|
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
@ -19,9 +19,10 @@
|
|||||||
|
|
||||||
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
xmlns:tools="http://schemas.android.com/tools">
|
android:fitsSystemWindows="true">
|
||||||
|
|
||||||
<org.kiwix.kiwixmobile.core.utils.NestedCoordinatorLayout
|
<org.kiwix.kiwixmobile.core.utils.NestedCoordinatorLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
@ -46,33 +47,34 @@
|
|||||||
app:layout_behavior="@string/appbar_scrolling_view_behavior">
|
app:layout_behavior="@string/appbar_scrolling_view_behavior">
|
||||||
|
|
||||||
<androidx.recyclerview.widget.RecyclerView
|
<androidx.recyclerview.widget.RecyclerView
|
||||||
tools:listitem="@layout/item_book"
|
|
||||||
android:id="@+id/zimfilelist"
|
android:id="@+id/zimfilelist"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent" />
|
android:layout_height="match_parent"
|
||||||
|
tools:listitem="@layout/item_book" />
|
||||||
|
|
||||||
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
|
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
|
||||||
|
|
||||||
</org.kiwix.kiwixmobile.core.utils.NestedCoordinatorLayout>
|
</org.kiwix.kiwixmobile.core.utils.NestedCoordinatorLayout>
|
||||||
|
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/file_management_no_files"
|
android:id="@+id/file_management_no_files"
|
||||||
style="@style/no_list_content_text"
|
style="@style/no_content"
|
||||||
android:layout_gravity="center"
|
|
||||||
android:text="@string/no_files_here"
|
android:text="@string/no_files_here"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toTopOf="parent" />
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
|
app:layout_constraintVertical_bias="0.45" />
|
||||||
|
|
||||||
<Button
|
<Button
|
||||||
android:id="@+id/go_to_downloads_button_no_files"
|
android:id="@+id/go_to_downloads_button_no_files"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="8dp"
|
||||||
android:text="@string/download_books"
|
android:text="@string/download_books"
|
||||||
android:visibility="gone"
|
android:visibility="gone"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="@+id/file_management_no_files"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="@+id/file_management_no_files"
|
||||||
app:layout_constraintTop_toBottomOf="@+id/file_management_no_files" />
|
app:layout_constraintTop_toBottomOf="@+id/file_management_no_files" />
|
||||||
|
|
||||||
|
|
||||||
|
@ -69,6 +69,11 @@
|
|||||||
<action
|
<action
|
||||||
android:id="@+id/action_libraryFragment_to_localFileTransferFragment"
|
android:id="@+id/action_libraryFragment_to_localFileTransferFragment"
|
||||||
app:destination="@id/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>
|
||||||
|
|
||||||
<fragment
|
<fragment
|
||||||
@ -85,7 +90,13 @@
|
|||||||
android:id="@+id/introFragment"
|
android:id="@+id/introFragment"
|
||||||
android:name="org.kiwix.kiwixmobile.intro.IntroFragment"
|
android:name="org.kiwix.kiwixmobile.intro.IntroFragment"
|
||||||
android:label="IntroFragment"
|
android:label="IntroFragment"
|
||||||
tools:layout="@layout/fragment_intro" />
|
tools:layout="@layout/fragment_intro">
|
||||||
|
<action
|
||||||
|
android:id="@+id/action_introfragment_to_libraryFragment"
|
||||||
|
app:destination="@id/libraryFragment"
|
||||||
|
app:popUpTo="@id/introFragment"
|
||||||
|
app:popUpToInclusive="true" />
|
||||||
|
</fragment>
|
||||||
<fragment
|
<fragment
|
||||||
android:id="@+id/historyFragment"
|
android:id="@+id/historyFragment"
|
||||||
android:name="org.kiwix.kiwixmobile.core.page.history.HistoryFragment"
|
android:name="org.kiwix.kiwixmobile.core.page.history.HistoryFragment"
|
||||||
|
@ -25,5 +25,6 @@
|
|||||||
<dimen name="favicon_margin_right">8dp</dimen>
|
<dimen name="favicon_margin_right">8dp</dimen>
|
||||||
<dimen name="item_library_margin_top">8dp</dimen>
|
<dimen name="item_library_margin_top">8dp</dimen>
|
||||||
<dimen name="stop_horizontal_margin">8dp</dimen>
|
<dimen name="stop_horizontal_margin">8dp</dimen>
|
||||||
|
<dimen name="material_design_appbar_size">48dp</dimen>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -18,14 +18,4 @@
|
|||||||
|
|
||||||
<resources>
|
<resources>
|
||||||
|
|
||||||
<style name="no_list_content_text" parent="TextAppearance.KiwixTheme.Headline6">
|
|
||||||
<item name="android:layout_width">wrap_content</item>
|
|
||||||
<item name="android:layout_height">wrap_content</item>
|
|
||||||
<item name="android:visibility">gone</item>
|
|
||||||
<item name="layout_constraintLeft_toLeftOf">parent</item>
|
|
||||||
<item name="layout_constraintRight_toRightOf">parent</item>
|
|
||||||
<item name="layout_constraintVertical_bias">0.4</item>
|
|
||||||
<item name="layout_constraintTop_toTopOf">parent</item>
|
|
||||||
<item name="layout_constraintBottom_toBottomOf">parent</item>
|
|
||||||
</style>
|
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -32,7 +32,7 @@ class ServiceWorkerInitialiser @Inject constructor(zimReaderContainer: ZimReader
|
|||||||
ServiceWorkerControllerCompat.getInstance()
|
ServiceWorkerControllerCompat.getInstance()
|
||||||
.setServiceWorkerClient(object : ServiceWorkerClientCompat() {
|
.setServiceWorkerClient(object : ServiceWorkerClientCompat() {
|
||||||
override fun shouldInterceptRequest(request: WebResourceRequest): WebResourceResponse? =
|
override fun shouldInterceptRequest(request: WebResourceRequest): WebResourceResponse? =
|
||||||
zimReaderContainer.load(request.url.toString())
|
zimReaderContainer.load(request.url.toString(), request.requestHeaders)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -778,7 +778,7 @@ public abstract class CoreReaderFragment extends BaseFragment
|
|||||||
private KiwixWebView newTab(String url, boolean selectTab) {
|
private KiwixWebView newTab(String url, boolean selectTab) {
|
||||||
KiwixWebView webView = initalizeWebView(url);
|
KiwixWebView webView = initalizeWebView(url);
|
||||||
webViewList.add(webView);
|
webViewList.add(webView);
|
||||||
if(selectTab) {
|
if (selectTab) {
|
||||||
selectTab(webViewList.size() - 1);
|
selectTab(webViewList.size() - 1);
|
||||||
}
|
}
|
||||||
tabsAdapter.notifyDataSetChanged();
|
tabsAdapter.notifyDataSetChanged();
|
||||||
@ -964,7 +964,6 @@ public abstract class CoreReaderFragment extends BaseFragment
|
|||||||
@SuppressWarnings("SameReturnValue")
|
@SuppressWarnings("SameReturnValue")
|
||||||
@OnLongClick(R2.id.bottom_toolbar_bookmark)
|
@OnLongClick(R2.id.bottom_toolbar_bookmark)
|
||||||
boolean goToBookmarks() {
|
boolean goToBookmarks() {
|
||||||
saveTabStates();
|
|
||||||
CoreMainActivity parentActivity = (CoreMainActivity) requireActivity();
|
CoreMainActivity parentActivity = (CoreMainActivity) requireActivity();
|
||||||
parentActivity.navigate(parentActivity.getBookmarksFragmentResId());
|
parentActivity.navigate(parentActivity.getBookmarksFragmentResId());
|
||||||
return true;
|
return true;
|
||||||
@ -1205,7 +1204,6 @@ public abstract class CoreReaderFragment extends BaseFragment
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void goToSearch(boolean isVoice) {
|
private void goToSearch(boolean isVoice) {
|
||||||
saveTabStates();
|
|
||||||
openSearch("", false, isVoice);
|
openSearch("", false, isVoice);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1235,7 +1233,6 @@ public abstract class CoreReaderFragment extends BaseFragment
|
|||||||
break;
|
break;
|
||||||
case Intent.ACTION_VIEW:
|
case Intent.ACTION_VIEW:
|
||||||
if (intent.getType() == null || !intent.getType().equals("application/octet-stream")) {
|
if (intent.getType() == null || !intent.getType().equals("application/octet-stream")) {
|
||||||
saveTabStates();
|
|
||||||
String searchString =
|
String searchString =
|
||||||
intent.getData() == null ? "" : intent.getData().getLastPathSegment();
|
intent.getData() == null ? "" : intent.getData().getLastPathSegment();
|
||||||
openSearch(searchString, false, false);
|
openSearch(searchString, false, false);
|
||||||
@ -1249,7 +1246,6 @@ public abstract class CoreReaderFragment extends BaseFragment
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void goToSearchWithText(Intent intent) {
|
private void goToSearchWithText(Intent intent) {
|
||||||
saveTabStates();
|
|
||||||
String searchString = Build.VERSION.SDK_INT >= Build.VERSION_CODES.M
|
String searchString = Build.VERSION.SDK_INT >= Build.VERSION_CODES.M
|
||||||
? intent.getStringExtra(Intent.EXTRA_PROCESS_TEXT)
|
? intent.getStringExtra(Intent.EXTRA_PROCESS_TEXT)
|
||||||
: "";
|
: "";
|
||||||
@ -1570,21 +1566,14 @@ public abstract class CoreReaderFragment extends BaseFragment
|
|||||||
try {
|
try {
|
||||||
JSONArray urls = new JSONArray(zimArticles);
|
JSONArray urls = new JSONArray(zimArticles);
|
||||||
JSONArray positions = new JSONArray(zimPositions);
|
JSONArray positions = new JSONArray(zimPositions);
|
||||||
int i = 0;
|
webViewList.clear();
|
||||||
// tabs are already restored if the webViewList includes more tabs than the default
|
currentWebViewIndex=0;
|
||||||
if (webViewList.size() == 1) {
|
tabsAdapter.notifyItemRemoved(0);
|
||||||
getCurrentWebView().setScrollY(positions.getInt(0));
|
tabsAdapter.notifyDataSetChanged();
|
||||||
i++;
|
for (int i = 0; i < urls.length(); i++) {
|
||||||
while (i < urls.length()) {
|
newTab(UpdateUtils.reformatProviderUrl(urls.getString(i)), i == currentTab)
|
||||||
newTab(UpdateUtils.reformatProviderUrl(urls.getString(i)));
|
.setScrollY(positions.getInt(i));
|
||||||
safelyGetWebView(i).setScrollY(positions.getInt(i));
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
selectTab(currentTab);
|
|
||||||
safelyGetWebView(currentTab)
|
|
||||||
.loadUrl(UpdateUtils.reformatProviderUrl(urls.getString(currentTab)));
|
|
||||||
getCurrentWebView().setScrollY(positions.getInt(currentTab));
|
|
||||||
} catch (JSONException e) {
|
} catch (JSONException e) {
|
||||||
Log.w(TAG_KIWIX, "Kiwix shared preferences corrupted", e);
|
Log.w(TAG_KIWIX, "Kiwix shared preferences corrupted", e);
|
||||||
ContextExtensionsKt.toast(getActivity(), "Could not restore tabs.", Toast.LENGTH_LONG);
|
ContextExtensionsKt.toast(getActivity(), "Could not restore tabs.", Toast.LENGTH_LONG);
|
||||||
|
@ -139,13 +139,10 @@ public class CoreWebViewClient extends WebViewClient {
|
|||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
@Override
|
@Override
|
||||||
public WebResourceResponse shouldInterceptRequest(
|
public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {
|
||||||
WebView view,
|
|
||||||
WebResourceRequest request)
|
|
||||||
{
|
|
||||||
String url = convertLegacyUrl(request.getUrl().toString());
|
String url = convertLegacyUrl(request.getUrl().toString());
|
||||||
if (url.startsWith(CONTENT_PREFIX)) {
|
if (url.startsWith(CONTENT_PREFIX)) {
|
||||||
return zimReaderContainer.load(url);
|
return zimReaderContainer.load(url, request.getRequestHeaders());
|
||||||
} else {
|
} else {
|
||||||
return super.shouldInterceptRequest(view, request);
|
return super.shouldInterceptRequest(view, request);
|
||||||
}
|
}
|
||||||
|
@ -172,7 +172,7 @@ open class KiwixWebView @SuppressLint("SetJavaScriptEnabled") constructor(
|
|||||||
}.first { !it.exists() }
|
}.first { !it.exists() }
|
||||||
val source = Uri.parse(src)
|
val source = Uri.parse(src)
|
||||||
try {
|
try {
|
||||||
zimReaderContainer.load("$source").data.use { inputStream ->
|
zimReaderContainer.load("$source", emptyMap()).data.use { inputStream ->
|
||||||
fileToSave.outputStream().use { inputStream.copyTo(it) }
|
fileToSave.outputStream().use { inputStream.copyTo(it) }
|
||||||
}
|
}
|
||||||
instance.toast(instance.getString(R.string.save_media_saved, fileToSave.name))
|
instance.toast(instance.getString(R.string.save_media_saved, fileToSave.name))
|
||||||
|
@ -121,6 +121,7 @@ abstract class PageFragment : OnItemClickListener, BaseFragment(), FragmentActiv
|
|||||||
recycler_view.layoutManager = LinearLayoutManager(activity, RecyclerView.VERTICAL, false)
|
recycler_view.layoutManager = LinearLayoutManager(activity, RecyclerView.VERTICAL, false)
|
||||||
recycler_view.adapter = pageAdapter
|
recycler_view.adapter = pageAdapter
|
||||||
activity.setSupportActionBar(toolbar)
|
activity.setSupportActionBar(toolbar)
|
||||||
|
toolbar.setNavigationOnClickListener { requireActivity().onBackPressed() }
|
||||||
activity.supportActionBar?.apply {
|
activity.supportActionBar?.apply {
|
||||||
setDisplayHomeAsUpEnabled(true)
|
setDisplayHomeAsUpEnabled(true)
|
||||||
title = screenTitle
|
title = screenTitle
|
||||||
|
@ -20,6 +20,7 @@ package org.kiwix.kiwixmobile.core.reader
|
|||||||
import android.webkit.WebResourceResponse
|
import android.webkit.WebResourceResponse
|
||||||
import org.kiwix.kiwixmobile.core.reader.ZimFileReader.Factory
|
import org.kiwix.kiwixmobile.core.reader.ZimFileReader.Factory
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
import java.net.HttpURLConnection
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
import javax.inject.Singleton
|
import javax.inject.Singleton
|
||||||
|
|
||||||
@ -45,12 +46,26 @@ class ZimReaderContainer @Inject constructor(private val zimFileReaderFactory: F
|
|||||||
fun getRandomArticleUrl() = zimFileReader?.getRandomArticleUrl()
|
fun getRandomArticleUrl() = zimFileReader?.getRandomArticleUrl()
|
||||||
fun isRedirect(url: String): Boolean = zimFileReader?.isRedirect(url) == true
|
fun isRedirect(url: String): Boolean = zimFileReader?.isRedirect(url) == true
|
||||||
fun getRedirect(url: String): String = zimFileReader?.getRedirect(url) ?: ""
|
fun getRedirect(url: String): String = zimFileReader?.getRedirect(url) ?: ""
|
||||||
fun load(url: String) =
|
fun load(url: String, requestHeaders: Map<String, String>): WebResourceResponse {
|
||||||
WebResourceResponse(
|
val data = zimFileReader?.load(url)
|
||||||
zimFileReader?.readMimeType(url),
|
return WebResourceResponse(zimFileReader?.readMimeType(url), Charsets.UTF_8.name(), data)
|
||||||
Charsets.UTF_8.name(),
|
.apply {
|
||||||
zimFileReader?.load(url)
|
val headers = mutableMapOf("Accept-Ranges" to "bytes")
|
||||||
)
|
if ("Range" in requestHeaders.keys) {
|
||||||
|
setStatusCodeAndReasonPhrase(HttpURLConnection.HTTP_PARTIAL, "Partial Content")
|
||||||
|
val fullSize = data?.available()?.toLong() ?: 0L
|
||||||
|
val lastByte = fullSize - 1
|
||||||
|
val byteRanges = requestHeaders.getValue("Range").substringAfter("=").split("-")
|
||||||
|
headers["Content-Range"] = "bytes ${byteRanges[0]}-$lastByte/$fullSize"
|
||||||
|
if (byteRanges.size == 1) {
|
||||||
|
headers["Connection"] = "close"
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
setStatusCodeAndReasonPhrase(HttpURLConnection.HTTP_OK, "OK")
|
||||||
|
}
|
||||||
|
responseHeaders = headers
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fun copyReader(): ZimFileReader? = zimFile?.let(zimFileReaderFactory::create)
|
fun copyReader(): ZimFileReader? = zimFile?.let(zimFileReaderFactory::create)
|
||||||
|
|
||||||
|
@ -31,26 +31,25 @@
|
|||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/no_open_book_text"
|
android:id="@+id/no_open_book_text"
|
||||||
style="@style/no_content_text"
|
style="@style/no_content"
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_gravity="center"
|
|
||||||
android:text="@string/no_open_book"
|
android:text="@string/no_open_book"
|
||||||
android:visibility="gone"
|
android:layout_marginTop="@dimen/material_design_appbar_size"
|
||||||
app:layout_constraintBottom_toBottomOf="parent"
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toTopOf="parent" />
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
|
app:layout_constraintVertical_bias="0.45" />
|
||||||
|
|
||||||
<Button
|
<Button
|
||||||
android:id="@+id/go_to_library_button_no_open_book"
|
android:id="@+id/go_to_library_button_no_open_book"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="8dp"
|
||||||
android:text="@string/open_library"
|
android:text="@string/open_library"
|
||||||
android:visibility="gone"
|
android:visibility="gone"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="@+id/no_open_book_text"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="@+id/no_open_book_text"
|
||||||
app:layout_constraintTop_toBottomOf="@id/no_open_book_text" />
|
app:layout_constraintTop_toBottomOf="@id/no_open_book_text"/>
|
||||||
|
|
||||||
<RelativeLayout
|
<RelativeLayout
|
||||||
android:id="@+id/fullscreen_video_container"
|
android:id="@+id/fullscreen_video_container"
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
|
||||||
android:animateLayoutChanges="true"
|
android:animateLayoutChanges="true"
|
||||||
android:fitsSystemWindows="true"
|
android:fitsSystemWindows="true"
|
||||||
android:orientation="vertical">
|
android:orientation="vertical">
|
||||||
@ -14,28 +14,25 @@
|
|||||||
<include layout="@layout/layout_toolbar" />
|
<include layout="@layout/layout_toolbar" />
|
||||||
|
|
||||||
<androidx.recyclerview.widget.RecyclerView
|
<androidx.recyclerview.widget.RecyclerView
|
||||||
tools:listitem="@layout/list_item_search"
|
|
||||||
android:id="@+id/search_list"
|
android:id="@+id/search_list"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent" />
|
android:layout_height="match_parent"
|
||||||
|
tools:listitem="@layout/list_item_search" />
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/searchNoResults"
|
android:id="@+id/searchNoResults"
|
||||||
style="@style/no_content_text"
|
style="@style/no_content"
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_gravity="center"
|
|
||||||
android:text="@string/no_results" />
|
android:text="@string/no_results" />
|
||||||
|
|
||||||
<androidx.core.widget.ContentLoadingProgressBar
|
<androidx.core.widget.ContentLoadingProgressBar
|
||||||
android:id="@+id/searchLoadingIndicator"
|
android:id="@+id/searchLoadingIndicator"
|
||||||
style="?android:attr/progressBarStyleLarge"
|
style="?android:attr/progressBarStyleLarge"
|
||||||
android:visibility="gone"
|
|
||||||
tools:visibility="visible"
|
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_gravity="center" />
|
android:layout_gravity="center"
|
||||||
|
android:visibility="gone"
|
||||||
|
tools:visibility="visible" />
|
||||||
|
|
||||||
</androidx.coordinatorlayout.widget.CoordinatorLayout>
|
</androidx.coordinatorlayout.widget.CoordinatorLayout>
|
||||||
|
@ -33,6 +33,7 @@
|
|||||||
<string name="hotspot_failed_title">فشل بدء الهوت-سبوت</string>
|
<string name="hotspot_failed_title">فشل بدء الهوت-سبوت</string>
|
||||||
<string name="hotspot_failed_message">يبدو أن الهوت-سبوت مفعلٌ بالفعل. يرجى تعطيل هوت-سبوت الواي فاي للمتابعة.</string>
|
<string name="hotspot_failed_message">يبدو أن الهوت-سبوت مفعلٌ بالفعل. يرجى تعطيل هوت-سبوت الواي فاي للمتابعة.</string>
|
||||||
<string name="go_to_wifi_settings_label">انتقل إلى إعدادات الواي فاي</string>
|
<string name="go_to_wifi_settings_label">انتقل إلى إعدادات الواي فاي</string>
|
||||||
|
<string name="connection_refused">الاتصال مرفوض.</string>
|
||||||
<string name="hotspot_running">تشغيل الهوت-سبوت</string>
|
<string name="hotspot_running">تشغيل الهوت-سبوت</string>
|
||||||
<string name="no_books_selected_toast_message">يُرجى اختيار الكتب أولًا</string>
|
<string name="no_books_selected_toast_message">يُرجى اختيار الكتب أولًا</string>
|
||||||
<string name="server_failed_message">لا يمكن بدء الخادم. يُرجى تشغيل الهوت-سبوت الخاص بك</string>
|
<string name="server_failed_message">لا يمكن بدء الخادم. يُرجى تشغيل الهوت-سبوت الخاص بك</string>
|
||||||
@ -76,6 +77,7 @@
|
|||||||
<string name="delete_recent_search_item">حذف هذا العنصر؟</string>
|
<string name="delete_recent_search_item">حذف هذا العنصر؟</string>
|
||||||
<string name="pref_clear_all_history_title">إفراغ التاريخ</string>
|
<string name="pref_clear_all_history_title">إفراغ التاريخ</string>
|
||||||
<string name="pref_clear_all_history_summary">إفراغ عمليات البحث الحديثة وعلامات التبويب</string>
|
<string name="pref_clear_all_history_summary">إفراغ عمليات البحث الحديثة وعلامات التبويب</string>
|
||||||
|
<string name="pref_notes">ملاحظات</string>
|
||||||
<string name="all_history_cleared">أُفرغ سجل التاريخ</string>
|
<string name="all_history_cleared">أُفرغ سجل التاريخ</string>
|
||||||
<string name="pref_clear_all_bookmarks_title">حذف الإشارات المرجعية</string>
|
<string name="pref_clear_all_bookmarks_title">حذف الإشارات المرجعية</string>
|
||||||
<string name="clear_all_history_dialog_title">مسح كل التاريخ</string>
|
<string name="clear_all_history_dialog_title">مسح كل التاريخ</string>
|
||||||
@ -227,6 +229,7 @@
|
|||||||
<string name="severe_loss_error">خطأ شديد! حاول تعطيل/إعادة تمكين الواي فاي P2P</string>
|
<string name="severe_loss_error">خطأ شديد! حاول تعطيل/إعادة تمكين الواي فاي P2P</string>
|
||||||
<string name="connection_failed">فشل الاتصال</string>
|
<string name="connection_failed">فشل الاتصال</string>
|
||||||
<string name="permission_rationale_location">مطلوب إذن للموقع بواسطة أندرويد للسماح للتطبيق باكتشاف الأجهزة المقترنة</string>
|
<string name="permission_rationale_location">مطلوب إذن للموقع بواسطة أندرويد للسماح للتطبيق باكتشاف الأجهزة المقترنة</string>
|
||||||
|
<string name="permission_rationale_location_on_host_zim_file">مطلوب إذن للموقع بواسطة أندرويد للسماح للتطبيق باكتشاف ملفات زيم (Zim) المستضافة</string>
|
||||||
<string name="permission_refused_location">لا يمكن تحديد موقع الأجهزة المقترنة دون أذونات الموقع</string>
|
<string name="permission_refused_location">لا يمكن تحديد موقع الأجهزة المقترنة دون أذونات الموقع</string>
|
||||||
<string name="permission_refused_storage">لا يمكن الوصول إلى ملفات زيم (ZIM) دون إذن وحدة تخزين</string>
|
<string name="permission_refused_storage">لا يمكن الوصول إلى ملفات زيم (ZIM) دون إذن وحدة تخزين</string>
|
||||||
<string name="request_enable_location">تمكين الموقع للسماح باكتشاف الأجهزة المقترنة</string>
|
<string name="request_enable_location">تمكين الموقع للسماح باكتشاف الأجهزة المقترنة</string>
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<!-- Authors:
|
<!-- Authors:
|
||||||
* InsomniHat
|
* InsomniHat
|
||||||
|
* Kareyac
|
||||||
* ShockD
|
* ShockD
|
||||||
* StanProg
|
* StanProg
|
||||||
* Ted Masters
|
* Ted Masters
|
||||||
@ -48,6 +49,7 @@
|
|||||||
<string name="delete_recent_search_item">Изтриване на този елемент?</string>
|
<string name="delete_recent_search_item">Изтриване на този елемент?</string>
|
||||||
<string name="pref_clear_all_history_title">Изтрий история</string>
|
<string name="pref_clear_all_history_title">Изтрий история</string>
|
||||||
<string name="pref_clear_all_history_summary">Изтрийте последните търсения и история на табовете</string>
|
<string name="pref_clear_all_history_summary">Изтрийте последните търсения и история на табовете</string>
|
||||||
|
<string name="pref_notes">Бележки</string>
|
||||||
<string name="all_history_cleared">Историята е изтрита</string>
|
<string name="all_history_cleared">Историята е изтрита</string>
|
||||||
<string name="clear_all_history_dialog_title">Изтриване на цялата история?</string>
|
<string name="clear_all_history_dialog_title">Изтриване на цялата история?</string>
|
||||||
<string name="delete">Изтриване</string>
|
<string name="delete">Изтриване</string>
|
||||||
|
@ -6,6 +6,7 @@
|
|||||||
* FF11
|
* FF11
|
||||||
* Killarnee
|
* Killarnee
|
||||||
* Metalhead64
|
* Metalhead64
|
||||||
|
* Pittigrilli
|
||||||
* Stephane
|
* Stephane
|
||||||
* Susann Schweden
|
* Susann Schweden
|
||||||
* Symposiarch
|
* Symposiarch
|
||||||
@ -74,6 +75,7 @@
|
|||||||
<string name="delete_recent_search_item">Dieses Element löschen?</string>
|
<string name="delete_recent_search_item">Dieses Element löschen?</string>
|
||||||
<string name="pref_clear_all_history_title">Verlauf löschen</string>
|
<string name="pref_clear_all_history_title">Verlauf löschen</string>
|
||||||
<string name="pref_clear_all_history_summary">Letzte Suchanfragen und Registerkartenverlauf löschen</string>
|
<string name="pref_clear_all_history_summary">Letzte Suchanfragen und Registerkartenverlauf löschen</string>
|
||||||
|
<string name="pref_notes">Anmerkungen</string>
|
||||||
<string name="all_history_cleared">Gesamter Verlauf gelöscht</string>
|
<string name="all_history_cleared">Gesamter Verlauf gelöscht</string>
|
||||||
<string name="pref_clear_all_bookmarks_title">Lesezeichen löschen</string>
|
<string name="pref_clear_all_bookmarks_title">Lesezeichen löschen</string>
|
||||||
<string name="clear_all_history_dialog_title">Gesamten Verlauf löschen?</string>
|
<string name="clear_all_history_dialog_title">Gesamten Verlauf löschen?</string>
|
||||||
|
@ -75,6 +75,7 @@
|
|||||||
<string name="delete_recent_search_item">No item wa esterıyo?</string>
|
<string name="delete_recent_search_item">No item wa esterıyo?</string>
|
||||||
<string name="pref_clear_all_history_title">verore cı besterne</string>
|
<string name="pref_clear_all_history_title">verore cı besterne</string>
|
||||||
<string name="pref_clear_all_history_summary">Cıgeyrayışê peyêni u Verocê tavaya bıesterne</string>
|
<string name="pref_clear_all_history_summary">Cıgeyrayışê peyêni u Verocê tavaya bıesterne</string>
|
||||||
|
<string name="pref_notes">Noti</string>
|
||||||
<string name="all_history_cleared">Tarix pêro biyo pak</string>
|
<string name="all_history_cleared">Tarix pêro biyo pak</string>
|
||||||
<string name="pref_clear_all_bookmarks_title">Bookmarka pak kerê</string>
|
<string name="pref_clear_all_bookmarks_title">Bookmarka pak kerê</string>
|
||||||
<string name="clear_all_history_dialog_title">Verori pêro wa pak kerê?</string>
|
<string name="clear_all_history_dialog_title">Verori pêro wa pak kerê?</string>
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
* Geraki
|
* Geraki
|
||||||
* Giorgos456
|
* Giorgos456
|
||||||
* Glavkos
|
* Glavkos
|
||||||
|
* NikosLikomitros
|
||||||
* Nikosgranturismogt
|
* Nikosgranturismogt
|
||||||
* Norhorn
|
* Norhorn
|
||||||
-->
|
-->
|
||||||
@ -68,6 +69,7 @@
|
|||||||
<string name="delete_recent_search_item">Διαγραφή αυτού του αντικειμένου;</string>
|
<string name="delete_recent_search_item">Διαγραφή αυτού του αντικειμένου;</string>
|
||||||
<string name="pref_clear_all_history_title">Εκκαθάριση ιστορικού</string>
|
<string name="pref_clear_all_history_title">Εκκαθάριση ιστορικού</string>
|
||||||
<string name="pref_clear_all_history_summary">Εκκαθάριση ιστορικού πρόσφατων αναζητήσεων και ετικετών</string>
|
<string name="pref_clear_all_history_summary">Εκκαθάριση ιστορικού πρόσφατων αναζητήσεων και ετικετών</string>
|
||||||
|
<string name="pref_notes">Σημειώσεις</string>
|
||||||
<string name="all_history_cleared">Όλο το ιστορικό καθαρίστηκε</string>
|
<string name="all_history_cleared">Όλο το ιστορικό καθαρίστηκε</string>
|
||||||
<string name="clear_all_history_dialog_title" fuzzy="true">Εκκαθάριση όλου του ιστορικού</string>
|
<string name="clear_all_history_dialog_title" fuzzy="true">Εκκαθάριση όλου του ιστορικού</string>
|
||||||
<string name="delete">Διαγραφή</string>
|
<string name="delete">Διαγραφή</string>
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
* Abijeet Patro
|
* Abijeet Patro
|
||||||
* Blahma
|
* Blahma
|
||||||
* Fitoschido
|
* Fitoschido
|
||||||
|
* Javiero
|
||||||
* Kelson
|
* Kelson
|
||||||
* KuboF
|
* KuboF
|
||||||
* Mirin
|
* Mirin
|
||||||
@ -49,6 +50,7 @@
|
|||||||
<string name="delete_recent_search_item">Forigi ĉi tiu eron?</string>
|
<string name="delete_recent_search_item">Forigi ĉi tiu eron?</string>
|
||||||
<string name="pref_clear_all_history_title">Forviŝi hisorion</string>
|
<string name="pref_clear_all_history_title">Forviŝi hisorion</string>
|
||||||
<string name="pref_clear_all_history_summary">Forviŝi ĵusajn serĉojn kaj historion de langetoj</string>
|
<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="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" fuzzy="true">Forviŝi Ĉiun da Historio</string>
|
||||||
<string name="share">Diskonigi</string>
|
<string name="share">Diskonigi</string>
|
||||||
|
@ -12,6 +12,7 @@
|
|||||||
* MarcoAurelio
|
* MarcoAurelio
|
||||||
* Mpayansilva
|
* Mpayansilva
|
||||||
* Ncr
|
* Ncr
|
||||||
|
* Rodney Araujo
|
||||||
* VegaDark
|
* VegaDark
|
||||||
-->
|
-->
|
||||||
<resources>
|
<resources>
|
||||||
@ -76,6 +77,7 @@
|
|||||||
<string name="delete_recent_search_item">¿Borrar este elemento?</string>
|
<string name="delete_recent_search_item">¿Borrar este elemento?</string>
|
||||||
<string name="pref_clear_all_history_title">Limpiar el historial</string>
|
<string name="pref_clear_all_history_title">Limpiar el historial</string>
|
||||||
<string name="pref_clear_all_history_summary">Borrar las búsquedas recientes y el historial de pestañas</string>
|
<string name="pref_clear_all_history_summary">Borrar las búsquedas recientes y el historial de pestañas</string>
|
||||||
|
<string name="pref_notes">Notas</string>
|
||||||
<string name="all_history_cleared">Borrado todo el historial</string>
|
<string name="all_history_cleared">Borrado todo el historial</string>
|
||||||
<string name="pref_clear_all_bookmarks_title">Borrar marcadores</string>
|
<string name="pref_clear_all_bookmarks_title">Borrar marcadores</string>
|
||||||
<string name="clear_all_history_dialog_title">Borrar todo el historial?</string>
|
<string name="clear_all_history_dialog_title">Borrar todo el historial?</string>
|
||||||
|
@ -84,6 +84,7 @@
|
|||||||
<string name="delete_recent_search_item">Supprimer cet élément ?</string>
|
<string name="delete_recent_search_item">Supprimer cet élément ?</string>
|
||||||
<string name="pref_clear_all_history_title">Effacer l’historique</string>
|
<string name="pref_clear_all_history_title">Effacer l’historique</string>
|
||||||
<string name="pref_clear_all_history_summary">Effacer les recherches récentes et l’historique des onglets</string>
|
<string name="pref_clear_all_history_summary">Effacer les recherches récentes et l’historique des onglets</string>
|
||||||
|
<string name="pref_notes">Notes</string>
|
||||||
<string name="all_history_cleared">Tout l’historique est effacé</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="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>
|
||||||
|
@ -50,6 +50,7 @@
|
|||||||
<string name="clear_recent_and_tabs_history_dialog">Sei sicuro di voler cancellare la tua cronologia di ricerca e resettare tutte le tab attive?</string>
|
<string name="clear_recent_and_tabs_history_dialog">Sei sicuro di voler cancellare la tua cronologia di ricerca e resettare tutte le tab attive?</string>
|
||||||
<string name="delete_recent_search_item">Elimina questo elemento?</string>
|
<string name="delete_recent_search_item">Elimina questo elemento?</string>
|
||||||
<string name="pref_clear_all_history_title">Cancella la cronologia</string>
|
<string name="pref_clear_all_history_title">Cancella la cronologia</string>
|
||||||
|
<string name="pref_notes">Note</string>
|
||||||
<string name="all_history_cleared">Tutta la cronologia è stata cancellata</string>
|
<string name="all_history_cleared">Tutta la cronologia è stata cancellata</string>
|
||||||
<string name="clear_all_history_dialog_title">Cancellare tutta la cronologia?</string>
|
<string name="clear_all_history_dialog_title">Cancellare tutta la cronologia?</string>
|
||||||
<string name="delete">Cancella</string>
|
<string name="delete">Cancella</string>
|
||||||
|
@ -9,6 +9,7 @@
|
|||||||
* Tuvalevsku
|
* Tuvalevsku
|
||||||
* YaronSh
|
* YaronSh
|
||||||
* יאיר מן
|
* יאיר מן
|
||||||
|
* ישראל קלר
|
||||||
-->
|
-->
|
||||||
<resources>
|
<resources>
|
||||||
<string name="menu_help">עזרה</string>
|
<string name="menu_help">עזרה</string>
|
||||||
@ -77,6 +78,7 @@
|
|||||||
<string name="delete_recent_search_item">למחוק את הפריט הזה?</string>
|
<string name="delete_recent_search_item">למחוק את הפריט הזה?</string>
|
||||||
<string name="pref_clear_all_history_title">ניקוי ההיסטוריה</string>
|
<string name="pref_clear_all_history_title">ניקוי ההיסטוריה</string>
|
||||||
<string name="pref_clear_all_history_summary">ניקוי מילות חיפוש קודמות והיסטוריית כרטיסיות</string>
|
<string name="pref_clear_all_history_summary">ניקוי מילות חיפוש קודמות והיסטוריית כרטיסיות</string>
|
||||||
|
<string name="pref_notes">הערות</string>
|
||||||
<string name="all_history_cleared">כל ההיסטוריה נמחקה</string>
|
<string name="all_history_cleared">כל ההיסטוריה נמחקה</string>
|
||||||
<string name="pref_clear_all_bookmarks_title">ניקוי סימניות</string>
|
<string name="pref_clear_all_bookmarks_title">ניקוי סימניות</string>
|
||||||
<string name="clear_all_history_dialog_title">לנקות את כל ההיסטוריה?</string>
|
<string name="clear_all_history_dialog_title">לנקות את כל ההיסטוריה?</string>
|
||||||
|
@ -52,7 +52,7 @@
|
|||||||
<string name="server_started_message">Vê adresa IPyê di geroka xwe de binivîsîne ji bo ku xwe bigihînî servera %s</string>
|
<string name="server_started_message">Vê adresa IPyê di geroka xwe de binivîsîne ji bo ku xwe bigihînî servera %s</string>
|
||||||
<string name="error_file_not_found">Çewtîː Peldanka ZIM\'ê ya bijartî nehate dîtin.</string>
|
<string name="error_file_not_found">Çewtîː Peldanka ZIM\'ê ya bijartî nehate dîtin.</string>
|
||||||
<string name="zim_not_opened">Nikare dosyeya zim-ê veke</string>
|
<string name="zim_not_opened">Nikare dosyeya zim-ê veke</string>
|
||||||
<string name="error_file_invalid">Çewtîː Peldanka bijartî ne peldankeke ZIM\'ê ya derbasdar e.</string>
|
<string name="error_file_invalid">Çewtîː Peldanka bijartî ne peldankeke ZIMê ya derbasdar e.</string>
|
||||||
<string name="error_article_url_not_found">Çewtîː Barkirina gotara (Url: %1$s) têk çû.</string>
|
<string name="error_article_url_not_found">Çewtîː Barkirina gotara (Url: %1$s) têk çû.</string>
|
||||||
<string name="pref_display_title">Nîşan bide</string>
|
<string name="pref_display_title">Nîşan bide</string>
|
||||||
<string name="pref_info_title">Agahî</string>
|
<string name="pref_info_title">Agahî</string>
|
||||||
@ -73,6 +73,7 @@
|
|||||||
<string name="delete_recent_search_item">Vê pelê jê bibe?</string>
|
<string name="delete_recent_search_item">Vê pelê jê bibe?</string>
|
||||||
<string name="pref_clear_all_history_title">Raboriyê paqij bike</string>
|
<string name="pref_clear_all_history_title">Raboriyê paqij bike</string>
|
||||||
<string name="pref_clear_all_history_summary">Lêgerînên dawî û raboriya hilpekînan paqij bike</string>
|
<string name="pref_clear_all_history_summary">Lêgerînên dawî û raboriya hilpekînan paqij bike</string>
|
||||||
|
<string name="pref_notes">Not</string>
|
||||||
<string name="all_history_cleared">Hemû Raborî Hat Paqijkirin</string>
|
<string name="all_history_cleared">Hemû Raborî Hat Paqijkirin</string>
|
||||||
<string name="pref_clear_all_bookmarks_title">Bijareyan paqij bike</string>
|
<string name="pref_clear_all_bookmarks_title">Bijareyan paqij bike</string>
|
||||||
<string name="clear_all_history_dialog_title">Hemû Dîrokê Paqij Bike</string>
|
<string name="clear_all_history_dialog_title">Hemû Dîrokê Paqij Bike</string>
|
||||||
|
@ -39,6 +39,7 @@
|
|||||||
<string name="pref_language_chooser">Sicht eng Sprooch eraus</string>
|
<string name="pref_language_chooser">Sicht eng Sprooch eraus</string>
|
||||||
<string name="pref_credits">Auteuren a Lizenzen</string>
|
<string name="pref_credits">Auteuren a Lizenzen</string>
|
||||||
<string name="delete_recent_search_item">Dëst Element läschen?</string>
|
<string name="delete_recent_search_item">Dëst Element läschen?</string>
|
||||||
|
<string name="pref_notes">Notizen</string>
|
||||||
<string name="pref_clear_all_bookmarks_title">Lieszeechen ewechhuelen</string>
|
<string name="pref_clear_all_bookmarks_title">Lieszeechen ewechhuelen</string>
|
||||||
<string name="delete">Läschen</string>
|
<string name="delete">Läschen</string>
|
||||||
<string name="cancel">Ofbriechen</string>
|
<string name="cancel">Ofbriechen</string>
|
||||||
|
@ -70,6 +70,7 @@
|
|||||||
<string name="delete_recent_search_item">Да ја избришам ставкава?</string>
|
<string name="delete_recent_search_item">Да ја избришам ставкава?</string>
|
||||||
<string name="pref_clear_all_history_title">Исчисти историја</string>
|
<string name="pref_clear_all_history_title">Исчисти историја</string>
|
||||||
<string name="pref_clear_all_history_summary">Исчисти скорешни пребарувања и јазичиња</string>
|
<string name="pref_clear_all_history_summary">Исчисти скорешни пребарувања и јазичиња</string>
|
||||||
|
<string name="pref_notes">Белешки</string>
|
||||||
<string name="all_history_cleared">Сета историја е исчистена</string>
|
<string name="all_history_cleared">Сета историја е исчистена</string>
|
||||||
<string name="pref_clear_all_bookmarks_title">Исчисти обележувачи</string>
|
<string name="pref_clear_all_bookmarks_title">Исчисти обележувачи</string>
|
||||||
<string name="clear_all_history_dialog_title">Да ја исчистам сета историја</string>
|
<string name="clear_all_history_dialog_title">Да ја исчистам сета историја</string>
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
* Alan ffm
|
* Alan ffm
|
||||||
* DeRudySoulStorm
|
* DeRudySoulStorm
|
||||||
* InternerowyGołąb
|
* InternerowyGołąb
|
||||||
|
* Kareyac
|
||||||
* Kelson
|
* Kelson
|
||||||
* Krzyz23
|
* Krzyz23
|
||||||
* Macofe
|
* Macofe
|
||||||
@ -79,6 +80,7 @@
|
|||||||
<string name="delete_recent_search_item">Usunąć ten obiekt?</string>
|
<string name="delete_recent_search_item">Usunąć ten obiekt?</string>
|
||||||
<string name="pref_clear_all_history_title">Wyczyść historię</string>
|
<string name="pref_clear_all_history_title">Wyczyść historię</string>
|
||||||
<string name="pref_clear_all_history_summary">Wyczyść historię ostatnich wyszukiwań i kart</string>
|
<string name="pref_clear_all_history_summary">Wyczyść historię ostatnich wyszukiwań i kart</string>
|
||||||
|
<string name="pref_notes">Uwagi</string>
|
||||||
<string name="all_history_cleared">Usunięto całą historię</string>
|
<string name="all_history_cleared">Usunięto całą historię</string>
|
||||||
<string name="pref_clear_all_bookmarks_title">Wyczyść zakładki</string>
|
<string name="pref_clear_all_bookmarks_title">Wyczyść zakładki</string>
|
||||||
<string name="clear_all_history_dialog_title">Wyczyść całą historię?</string>
|
<string name="clear_all_history_dialog_title">Wyczyść całą historię?</string>
|
||||||
|
@ -76,6 +76,7 @@
|
|||||||
<string name="delete_recent_search_item">Eliminar este item?</string>
|
<string name="delete_recent_search_item">Eliminar este item?</string>
|
||||||
<string name="pref_clear_all_history_title">Apagar histórico</string>
|
<string name="pref_clear_all_history_title">Apagar histórico</string>
|
||||||
<string name="pref_clear_all_history_summary">Limpar pesquisas recentes e histórico de guias</string>
|
<string name="pref_clear_all_history_summary">Limpar pesquisas recentes e histórico de guias</string>
|
||||||
|
<string name="pref_notes">Notas</string>
|
||||||
<string name="all_history_cleared">Eliminando todo o histórico</string>
|
<string name="all_history_cleared">Eliminando todo o histórico</string>
|
||||||
<string name="pref_clear_all_bookmarks_title">Limpar marcadores</string>
|
<string name="pref_clear_all_bookmarks_title">Limpar marcadores</string>
|
||||||
<string name="clear_all_history_dialog_title">Limpar todo o histórico?</string>
|
<string name="clear_all_history_dialog_title">Limpar todo o histórico?</string>
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
* Hamilton Abreu
|
* Hamilton Abreu
|
||||||
* Imperadeiro90
|
* Imperadeiro90
|
||||||
* Imperadeiro98
|
* Imperadeiro98
|
||||||
|
* Kareyac
|
||||||
* Kelson
|
* Kelson
|
||||||
* Macofe
|
* Macofe
|
||||||
* Mansil alfalb
|
* Mansil alfalb
|
||||||
@ -53,6 +54,7 @@
|
|||||||
<string name="delete_recent_search_item">Apagar este elemento?</string>
|
<string name="delete_recent_search_item">Apagar este elemento?</string>
|
||||||
<string name="pref_clear_all_history_title">Limpar o histórico</string>
|
<string name="pref_clear_all_history_title">Limpar o histórico</string>
|
||||||
<string name="pref_clear_all_history_summary">Limpar as pesquisas recentes e o histórico de separadores</string>
|
<string name="pref_clear_all_history_summary">Limpar as pesquisas recentes e o histórico de separadores</string>
|
||||||
|
<string name="pref_notes">Notas</string>
|
||||||
<string name="all_history_cleared">Todo o historial foi apagado</string>
|
<string name="all_history_cleared">Todo o historial foi apagado</string>
|
||||||
<string name="clear_all_history_dialog_title" fuzzy="true">Apagar todo o historial</string>
|
<string name="clear_all_history_dialog_title" fuzzy="true">Apagar todo o historial</string>
|
||||||
<string name="delete">Apagar</string>
|
<string name="delete">Apagar</string>
|
||||||
|
@ -29,6 +29,7 @@
|
|||||||
<string name="pref_back_to_top">{{Identical|Back to top}}</string>
|
<string name="pref_back_to_top">{{Identical|Back to top}}</string>
|
||||||
<string name="pref_language_title">{{Identical|Language}}</string>
|
<string name="pref_language_title">{{Identical|Language}}</string>
|
||||||
<string name="pref_language_chooser">{{Identical|Choose language}}</string>
|
<string name="pref_language_chooser">{{Identical|Choose language}}</string>
|
||||||
|
<string name="pref_notes">{{Identical|Notes}}</string>
|
||||||
<string name="delete">{{Identical|Delete}}</string>
|
<string name="delete">{{Identical|Delete}}</string>
|
||||||
<string name="cancel">{{identical|Cancel}}</string>
|
<string name="cancel">{{identical|Cancel}}</string>
|
||||||
<string name="undo">{{Identical|Undo}}</string>
|
<string name="undo">{{Identical|Undo}}</string>
|
||||||
@ -45,6 +46,7 @@
|
|||||||
<string name="previous">{{Identical|Previous}}</string>
|
<string name="previous">{{Identical|Previous}}</string>
|
||||||
<string name="time_left">This is the past participle of the verb “to leave” (meaning “quitted” or “exited”). This is used in a context of “X minutes left” to finish a download.</string>
|
<string name="time_left">This is the past participle of the verb “to leave” (meaning “quitted” or “exited”). This is used in a context of “X minutes left” to finish a download.</string>
|
||||||
<string name="time_yesterday">{{Identical|Yesterday}}</string>
|
<string name="time_yesterday">{{Identical|Yesterday}}</string>
|
||||||
|
<string name="history">{{Identical|History}}</string>
|
||||||
<string name="search_history">TODO: Unclear, must be documented. See https://github.com/kiwix/overview/issues/31</string>
|
<string name="search_history">TODO: Unclear, must be documented. See https://github.com/kiwix/overview/issues/31</string>
|
||||||
<string name="save">{{Identical|Save}}</string>
|
<string name="save">{{Identical|Save}}</string>
|
||||||
<string name="permission_rationale_location_on_host_zim_file">Tell the user Location permission required for hosting zim file.</string>
|
<string name="permission_rationale_location_on_host_zim_file">Tell the user Location permission required for hosting zim file.</string>
|
||||||
|
@ -85,6 +85,7 @@
|
|||||||
<string name="delete_recent_search_item">Удалить этот элемент?</string>
|
<string name="delete_recent_search_item">Удалить этот элемент?</string>
|
||||||
<string name="pref_clear_all_history_title">Очистить историю</string>
|
<string name="pref_clear_all_history_title">Очистить историю</string>
|
||||||
<string name="pref_clear_all_history_summary">Очистить недавние поисковые запросы и историю вкладок</string>
|
<string name="pref_clear_all_history_summary">Очистить недавние поисковые запросы и историю вкладок</string>
|
||||||
|
<string name="pref_notes">Примечания</string>
|
||||||
<string name="all_history_cleared">Вся история очищена</string>
|
<string name="all_history_cleared">Вся история очищена</string>
|
||||||
<string name="pref_clear_all_bookmarks_title">Очистить закладки</string>
|
<string name="pref_clear_all_bookmarks_title">Очистить закладки</string>
|
||||||
<string name="clear_all_history_dialog_title">Очистить всю историю?</string>
|
<string name="clear_all_history_dialog_title">Очистить всю историю?</string>
|
||||||
|
@ -156,7 +156,7 @@
|
|||||||
<string name="table_of_contents">Kazalo vsebine</string>
|
<string name="table_of_contents">Kazalo vsebine</string>
|
||||||
<string name="select_languages">Izberi jezike</string>
|
<string name="select_languages">Izberi jezike</string>
|
||||||
<string name="save_languages">Shrani jezike</string>
|
<string name="save_languages">Shrani jezike</string>
|
||||||
<string name="send_feedback">Sporoči svoje mnenje</string>
|
<string name="send_feedback">Sporočite svoje mnenje</string>
|
||||||
<string name="expand">Razširi</string>
|
<string name="expand">Razširi</string>
|
||||||
<string name="history">Zgodovina</string>
|
<string name="history">Zgodovina</string>
|
||||||
<string name="history_from_current_book" fuzzy="true">Zgodovina iz trenutne knjige</string>
|
<string name="history_from_current_book" fuzzy="true">Zgodovina iz trenutne knjige</string>
|
||||||
|
@ -75,6 +75,7 @@
|
|||||||
<string name="delete_recent_search_item">Radera detta objekt?</string>
|
<string name="delete_recent_search_item">Radera detta objekt?</string>
|
||||||
<string name="pref_clear_all_history_title">Rensa historik</string>
|
<string name="pref_clear_all_history_title">Rensa historik</string>
|
||||||
<string name="pref_clear_all_history_summary">Rensa senaste sökningar och flikhistorik</string>
|
<string name="pref_clear_all_history_summary">Rensa senaste sökningar och flikhistorik</string>
|
||||||
|
<string name="pref_notes">Anteckningar</string>
|
||||||
<string name="all_history_cleared">All historik rensades</string>
|
<string name="all_history_cleared">All historik rensades</string>
|
||||||
<string name="pref_clear_all_bookmarks_title">Rensa bokmärken</string>
|
<string name="pref_clear_all_bookmarks_title">Rensa bokmärken</string>
|
||||||
<string name="clear_all_history_dialog_title">Rensa all historik?</string>
|
<string name="clear_all_history_dialog_title">Rensa all historik?</string>
|
||||||
|
@ -83,6 +83,7 @@
|
|||||||
<string name="delete_recent_search_item">Bu öğe silinsin mi?</string>
|
<string name="delete_recent_search_item">Bu öğe silinsin mi?</string>
|
||||||
<string name="pref_clear_all_history_title">Geçmişi temizle</string>
|
<string name="pref_clear_all_history_title">Geçmişi temizle</string>
|
||||||
<string name="pref_clear_all_history_summary">Son aramalar ve sekmeler geçmişini temizle</string>
|
<string name="pref_clear_all_history_summary">Son aramalar ve sekmeler geçmişini temizle</string>
|
||||||
|
<string name="pref_notes">Notlar</string>
|
||||||
<string name="all_history_cleared">Tüm geçmiş temizlendi</string>
|
<string name="all_history_cleared">Tüm geçmiş temizlendi</string>
|
||||||
<string name="pref_clear_all_bookmarks_title">Yer imlerini temizle</string>
|
<string name="pref_clear_all_bookmarks_title">Yer imlerini temizle</string>
|
||||||
<string name="clear_all_history_dialog_title">Tüm Geçmişi Silinsin mi?</string>
|
<string name="clear_all_history_dialog_title">Tüm Geçmişi Silinsin mi?</string>
|
||||||
|
@ -75,6 +75,7 @@
|
|||||||
<string name="delete_recent_search_item">刪除此項目?</string>
|
<string name="delete_recent_search_item">刪除此項目?</string>
|
||||||
<string name="pref_clear_all_history_title">清除歷史記錄</string>
|
<string name="pref_clear_all_history_title">清除歷史記錄</string>
|
||||||
<string name="pref_clear_all_history_summary">清除近期搜尋和分頁歷史記錄</string>
|
<string name="pref_clear_all_history_summary">清除近期搜尋和分頁歷史記錄</string>
|
||||||
|
<string name="pref_notes">備註</string>
|
||||||
<string name="all_history_cleared">所有歷史記錄已清除</string>
|
<string name="all_history_cleared">所有歷史記錄已清除</string>
|
||||||
<string name="pref_clear_all_bookmarks_title">清除書籤</string>
|
<string name="pref_clear_all_bookmarks_title">清除書籤</string>
|
||||||
<string name="clear_all_history_dialog_title">清除所有歷史記錄?</string>
|
<string name="clear_all_history_dialog_title">清除所有歷史記錄?</string>
|
||||||
|
@ -18,4 +18,6 @@
|
|||||||
<dimen name="section_list_height">56dp</dimen>
|
<dimen name="section_list_height">56dp</dimen>
|
||||||
<dimen name="card_margin">5dp</dimen>
|
<dimen name="card_margin">5dp</dimen>
|
||||||
<dimen name="fab_vertical_offset">25dp</dimen>
|
<dimen name="fab_vertical_offset">25dp</dimen>
|
||||||
|
|
||||||
|
<dimen name="material_design_appbar_size">48dp</dimen>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -66,6 +66,7 @@
|
|||||||
<string name="delete_recent_search_item">Delete this item?</string>
|
<string name="delete_recent_search_item">Delete this item?</string>
|
||||||
<string name="pref_clear_all_history_title">Clear history</string>
|
<string name="pref_clear_all_history_title">Clear history</string>
|
||||||
<string name="pref_clear_all_history_summary">Clear recent searches and tabs history</string>
|
<string name="pref_clear_all_history_summary">Clear recent searches and tabs history</string>
|
||||||
|
<string name="pref_notes">Notes</string>
|
||||||
<string name="all_history_cleared">All History Cleared</string>
|
<string name="all_history_cleared">All History Cleared</string>
|
||||||
<string name="pref_clear_all_bookmarks_title">Clear bookmarks</string>
|
<string name="pref_clear_all_bookmarks_title">Clear bookmarks</string>
|
||||||
<string name="clear_all_history_dialog_title">Clear All History?</string>
|
<string name="clear_all_history_dialog_title">Clear All History?</string>
|
||||||
|
@ -62,7 +62,6 @@
|
|||||||
<item name="android:gravity">end</item>
|
<item name="android:gravity">end</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<style name="no_content_text" parent="TextAppearance.KiwixTheme.Headline5" />
|
|
||||||
|
|
||||||
<style name="switch_style">
|
<style name="switch_style">
|
||||||
<item name="android:layout_width">wrap_content</item>
|
<item name="android:layout_width">wrap_content</item>
|
||||||
@ -104,4 +103,11 @@
|
|||||||
<item name="colorAccent">@color/denim_blue400</item>
|
<item name="colorAccent">@color/denim_blue400</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
|
<style name="no_content" parent="TextAppearance.KiwixTheme.Headline6">
|
||||||
|
<item name="android:layout_width">wrap_content</item>
|
||||||
|
<item name="android:layout_height">wrap_content</item>
|
||||||
|
<item name="android:layout_gravity">center</item>
|
||||||
|
<item name="android:visibility">gone</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -74,7 +74,7 @@
|
|||||||
|
|
||||||
<PreferenceCategory
|
<PreferenceCategory
|
||||||
android:key="pref_history"
|
android:key="pref_history"
|
||||||
android:title="History"
|
android:title="@string/history"
|
||||||
app:iconSpaceReserved="false">
|
app:iconSpaceReserved="false">
|
||||||
|
|
||||||
<Preference
|
<Preference
|
||||||
@ -86,7 +86,7 @@
|
|||||||
</PreferenceCategory>
|
</PreferenceCategory>
|
||||||
<PreferenceCategory
|
<PreferenceCategory
|
||||||
android:key="pref_notes"
|
android:key="pref_notes"
|
||||||
android:title="Notes"
|
android:title="@string/pref_notes"
|
||||||
app:iconSpaceReserved="false">
|
app:iconSpaceReserved="false">
|
||||||
|
|
||||||
<Preference
|
<Preference
|
||||||
|
@ -24,9 +24,12 @@
|
|||||||
<a href="mailto:adeelzafar619@gmail.com">Adeel Zafar</a><br>
|
<a href="mailto:adeelzafar619@gmail.com">Adeel Zafar</a><br>
|
||||||
<a href="mailto:sood.aditya.08@gmail.com">Aditya Sood</a><br>
|
<a href="mailto:sood.aditya.08@gmail.com">Aditya Sood</a><br>
|
||||||
<a href="mailto:ayoubuto@gmail.com">Ayoub Dardory</a><br>
|
<a href="mailto:ayoubuto@gmail.com">Ayoub Dardory</a><br>
|
||||||
|
<a href="mailto:stvayush@gmail.com">Ayush Shrivastava</a><br>
|
||||||
<a href="mailto:cip@gmx.at">Christian Pühringer</a><br>
|
<a href="mailto:cip@gmx.at">Christian Pühringer</a><br>
|
||||||
<a href="mailto:elad.keyshawn@gmail.com">Elad Keyshawn</a><br>
|
<a href="mailto:elad.keyshawn@gmail.com">Elad Keyshawn</a><br>
|
||||||
<a href="mailto:kelson@kiwix.org">Emmanuel Engelhart</a><br>
|
<a href="mailto:kelson@kiwix.org">Emmanuel Engelhart</a><br>
|
||||||
|
<a href="mailto:franslukas@pm.me">Frans-Lukas Lövenvald</a><br>
|
||||||
|
<a href="mailto:gouripanda4@gmail.com">Gourishankar Panda</a><br>
|
||||||
<a href="mailto:mhutti1@gmail.com">Isaac Hutt</a><br>
|
<a href="mailto:mhutti1@gmail.com">Isaac Hutt</a><br>
|
||||||
<a href="mailto:joseph.reeve@googlemail.com">Joseph E. Reeve</a><br>
|
<a href="mailto:joseph.reeve@googlemail.com">Joseph E. Reeve</a><br>
|
||||||
<a href="mailto:julianharty@gmail.com">Julian Harty</a><br>
|
<a href="mailto:julianharty@gmail.com">Julian Harty</a><br>
|
||||||
|
30
custom/src/main/res/drawable-night-v23/launch_screen.xml
Normal file
30
custom/src/main/res/drawable-night-v23/launch_screen.xml
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?><!--
|
||||||
|
~ Kiwix Android
|
||||||
|
~ Copyright (c) 2020 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/>.
|
||||||
|
~
|
||||||
|
-->
|
||||||
|
|
||||||
|
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:opacity="opaque">
|
||||||
|
<!-- The background color, preferably the same as your normal theme -->
|
||||||
|
<item android:drawable="@color/alabaster_white" />
|
||||||
|
<item
|
||||||
|
android:bottom="24dp"
|
||||||
|
android:drawable="@mipmap/ic_launcher"
|
||||||
|
android:gravity="center"
|
||||||
|
android:left="24dp"
|
||||||
|
android:right="24dp"
|
||||||
|
android:top="24dp" />
|
||||||
|
</layer-list>
|
@ -1,12 +1,11 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?><!--
|
||||||
<!--
|
|
||||||
~ Kiwix Android
|
~ Kiwix Android
|
||||||
~ Copyright (c) 2020 Kiwix <android.kiwix.org>
|
~ Copyright (c) 2020 Kiwix <android.kiwix.org>
|
||||||
~ This program is free software: you can redistribute it and/or modify
|
~ 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
|
~ it under the terms of the GNU General Public License as published by
|
||||||
~ the Free Software Foundation, either version 3 of the License, or
|
~ the Free Software Foundation, either version 3 of the License, or
|
||||||
~ (at your option) any later version.
|
~ (at your option) any later version.
|
||||||
~
|
|
||||||
~ This program is distributed in the hope that it will be useful,
|
~ This program is distributed in the hope that it will be useful,
|
||||||
~ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
~ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
@ -21,11 +20,9 @@
|
|||||||
android:opacity="opaque">
|
android:opacity="opaque">
|
||||||
<!-- The background color, preferably the same as your normal theme -->
|
<!-- The background color, preferably the same as your normal theme -->
|
||||||
<item android:drawable="@color/mine_shaft_gray900" />
|
<item android:drawable="@color/mine_shaft_gray900" />
|
||||||
<item
|
<item>
|
||||||
android:bottom="24dp"
|
<bitmap
|
||||||
android:drawable="@mipmap/ic_launcher"
|
android:gravity="center"
|
||||||
android:gravity="center"
|
android:src="@mipmap/ic_launcher" />
|
||||||
android:left="24dp"
|
</item>
|
||||||
android:right="24dp"
|
|
||||||
android:top="24dp" />
|
|
||||||
</layer-list>
|
</layer-list>
|
||||||
|
30
custom/src/main/res/drawable-v23/launch_screen.xml
Normal file
30
custom/src/main/res/drawable-v23/launch_screen.xml
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?><!--
|
||||||
|
~ Kiwix Android
|
||||||
|
~ Copyright (c) 2020 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/>.
|
||||||
|
~
|
||||||
|
-->
|
||||||
|
|
||||||
|
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:opacity="opaque">
|
||||||
|
<!-- The background color, preferably the same as your normal theme -->
|
||||||
|
<item android:drawable="@color/alabaster_white" />
|
||||||
|
<item
|
||||||
|
android:bottom="24dp"
|
||||||
|
android:drawable="@mipmap/ic_launcher"
|
||||||
|
android:gravity="center"
|
||||||
|
android:left="24dp"
|
||||||
|
android:right="24dp"
|
||||||
|
android:top="24dp" />
|
||||||
|
</layer-list>
|
@ -21,11 +21,9 @@
|
|||||||
android:opacity="opaque">
|
android:opacity="opaque">
|
||||||
<!-- The background color, preferably the same as your normal theme -->
|
<!-- The background color, preferably the same as your normal theme -->
|
||||||
<item android:drawable="@color/alabaster_white" />
|
<item android:drawable="@color/alabaster_white" />
|
||||||
<item
|
<item>
|
||||||
android:bottom="24dp"
|
<bitmap
|
||||||
android:drawable="@mipmap/ic_launcher"
|
android:gravity="center"
|
||||||
android:gravity="center"
|
android:src="@mipmap/ic_launcher" />
|
||||||
android:left="24dp"
|
</item>
|
||||||
android:right="24dp"
|
|
||||||
android:top="24dp" />
|
|
||||||
</layer-list>
|
</layer-list>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user