Merge remote-tracking branch 'origin/develop' into release/3.0.4

This commit is contained in:
Sean Mac Gillicuddy 2019-09-30 10:58:56 +01:00
commit d7d46ec163
4 changed files with 42 additions and 28 deletions

View File

@ -99,6 +99,7 @@ import org.kiwix.kiwixmobile.R;
import org.kiwix.kiwixmobile.base.BaseActivity;
import org.kiwix.kiwixmobile.bookmark.BookmarkItem;
import org.kiwix.kiwixmobile.bookmark.BookmarksActivity;
import org.kiwix.kiwixmobile.extensions.ContextExtensionsKt;
import org.kiwix.kiwixmobile.help.HelpActivity;
import org.kiwix.kiwixmobile.history.HistoryActivity;
import org.kiwix.kiwixmobile.history.HistoryListItem;
@ -1090,24 +1091,26 @@ public class MainActivity extends BaseActivity implements WebViewCallback,
&& Build.VERSION.SDK_INT != 23)) {
if (file.exists()) {
zimReaderContainer.setZimFile(file);
if (clearHistory) {
requestClearHistoryAfterLoad = true;
}
if (menu != null) {
initAllMenuItems();
if (zimReaderContainer.getZimFileReader() != null) {
if (clearHistory) {
requestClearHistoryAfterLoad = true;
}
if (menu != null) {
initAllMenuItems();
} else {
// Menu may not be initialized yet. In this case
// signal to menu create to show
requestInitAllMenuItems = true;
}
openMainPage();
presenter.loadCurrentZimBookmarksUrl();
} else {
// Menu may not be initialized yet. In this case
// signal to menu create to show
requestInitAllMenuItems = true;
ContextExtensionsKt.toast(this, R.string.error_file_invalid, Toast.LENGTH_LONG);
showHomePage();
}
openMainPage();
presenter.loadCurrentZimBookmarksUrl();
} else {
Log.w(TAG_KIWIX, "ZIM file doesn't exist at " + file.getAbsolutePath());
Toast.makeText(this, getResources().getString(R.string.error_file_not_found),
Toast.LENGTH_LONG)
.show();
ContextExtensionsKt.toast(this, R.string.error_file_not_found, Toast.LENGTH_LONG);
showHomePage();
}
} else {

View File

@ -41,15 +41,15 @@ object FileUtils {
"${Environment.getExternalStorageDirectory()}${File.separator}Android" +
"${File.separator}obb${File.separator}${BuildConfig.APPLICATION_ID}"
@JvmStatic fun getFileCacheDir(context: Context): File =
@JvmStatic fun getFileCacheDir(context: Context): File? =
if (Environment.MEDIA_MOUNTED == Environment.getExternalStorageState()) {
context.externalCacheDir!!
context.externalCacheDir
} else {
context.cacheDir
}
@JvmStatic @Synchronized fun deleteCachedFiles(context: Context) {
getFileCacheDir(context).deleteRecursively()
getFileCacheDir(context)?.deleteRecursively()
}
@JvmStatic @Synchronized fun deleteZimFile(path: String) {
@ -195,12 +195,16 @@ object FileUtils {
uri: Uri
): String? {
val columnName = "_data"
return context.contentResolver.query(uri, arrayOf(columnName), null, null, null)
?.use {
if (it.moveToFirst() && it.getColumnIndex(columnName) != -1) {
it[columnName]
} else null
}
return try {
context.contentResolver.query(uri, arrayOf(columnName), null, null, null)
?.use {
if (it.moveToFirst() && it.getColumnIndex(columnName) != -1) {
it[columnName]
} else null
}
} catch (ignore: SecurityException) {
null
}
}
@JvmStatic fun readLocalesFromAssets(context: Context) =

View File

@ -26,6 +26,7 @@ import android.webkit.MimeTypeMap
import androidx.core.net.toUri
import io.reactivex.Single
import io.reactivex.schedulers.Schedulers
import org.kiwix.kiwixlib.JNIKiwixException
import org.kiwix.kiwixlib.JNIKiwixInt
import org.kiwix.kiwixlib.JNIKiwixReader
import org.kiwix.kiwixlib.JNIKiwixString
@ -51,11 +52,15 @@ class ZimFileReader(
private val sharedPreferenceUtil: SharedPreferenceUtil
) {
interface Factory {
fun create(file: File): ZimFileReader
fun create(file: File): ZimFileReader?
class Impl @Inject constructor(val sharedPreferenceUtil: SharedPreferenceUtil) : Factory {
override fun create(file: File) =
ZimFileReader(file, sharedPreferenceUtil = sharedPreferenceUtil)
try {
ZimFileReader(file, sharedPreferenceUtil = sharedPreferenceUtil)
} catch (ignore: JNIKiwixException) {
null
}
}
}

View File

@ -1,5 +1,6 @@
package org.kiwix.kiwixmobile.zim_manager.fileselect_view
import io.reactivex.Flowable
import io.reactivex.functions.BiFunction
import io.reactivex.schedulers.Schedulers
import org.kiwix.kiwixmobile.database.newdb.dao.FetchDownloadDao
@ -16,10 +17,10 @@ class StorageObserver @Inject constructor(
private val zimReaderFactory: ZimFileReader.Factory
) {
val booksOnFileSystem
val booksOnFileSystem: Flowable<List<BookOnDisk>>
get() = scanFiles()
.withLatestFrom(downloadDao.downloads(), BiFunction(::toFilesThatAreNotDownloading))
.map { it.map(::convertToBookOnDisk) }
.map { it.mapNotNull(::convertToBookOnDisk) }
private fun scanFiles() = fileSearch.scan().subscribeOn(Schedulers.io())
@ -29,5 +30,6 @@ class StorageObserver @Inject constructor(
private fun fileHasNoMatchingDownload(downloads: List<DownloadModel>, file: File) =
downloads.firstOrNull { file.absolutePath.endsWith(it.fileNameFromUrl) } == null
private fun convertToBookOnDisk(file: File) = BookOnDisk(file, zimReaderFactory.create(file))
private fun convertToBookOnDisk(file: File) =
zimReaderFactory.create(file)?.let { BookOnDisk(file, it) }
}