mirror of
https://github.com/kiwix/kiwix-android.git
synced 2025-09-18 20:05:53 -04:00
Mhutti1/multizim (#290)
* Integerate new JNI changes * Update CHANGELOG * Add code to start using multizim * Fix some merge conflicts * Improve merge
This commit is contained in:
parent
9325810600
commit
9f61c49c29
@ -34,7 +34,7 @@ dependencies {
|
||||
|
||||
// Get kiwixlib online if it is not populated locally
|
||||
if (file("../kiwixlib/src/main").list().length == 1) {
|
||||
implementation 'org.kiwix.kiwixlib:kiwixlib:0.1.0'
|
||||
implementation 'org.kiwix.kiwixlib:kiwixlib:1.0.2'
|
||||
} else {
|
||||
implementation project(':kiwixlib')
|
||||
archs = file("../kiwixlib/src/main/jniLibs").list()
|
||||
|
@ -31,6 +31,8 @@ import android.webkit.MimeTypeMap;
|
||||
|
||||
import org.kiwix.kiwixlib.JNIKiwix;
|
||||
import org.kiwix.kiwixlib.JNIKiwixInt;
|
||||
import org.kiwix.kiwixlib.JNIKiwixReader;
|
||||
import org.kiwix.kiwixlib.JNIKiwixSearcher;
|
||||
import org.kiwix.kiwixlib.JNIKiwixString;
|
||||
import org.kiwix.kiwixmobile.utils.files.FileUtils;
|
||||
|
||||
@ -66,11 +68,16 @@ public class ZimContentProvider extends ContentProvider {
|
||||
|
||||
@Inject public static JNIKiwix jniKiwix;
|
||||
|
||||
public static JNIKiwixReader currentJNIReader;
|
||||
|
||||
public static JNIKiwixSearcher jniSearcher;
|
||||
|
||||
@Inject public static Context context;
|
||||
|
||||
public void setupDagger() {
|
||||
KiwixApplication.getInstance().getApplicationComponent().inject(this);
|
||||
setIcuDataDirectory();
|
||||
jniSearcher = new JNIKiwixSearcher();
|
||||
}
|
||||
|
||||
|
||||
@ -97,20 +104,16 @@ public class ZimContentProvider extends ContentProvider {
|
||||
}
|
||||
|
||||
public synchronized static String setZimFile(String fileName) {
|
||||
if (!new File(fileName).exists()) {
|
||||
JNIKiwixReader reader = new JNIKiwixReader(fileName);
|
||||
jniSearcher.addKiwixReader(reader);
|
||||
if (!new File(fileName).exists() || reader == null) {
|
||||
Log.e(TAG_KIWIX, "Unable to open the ZIM file " + fileName);
|
||||
zimFileName = null;
|
||||
} else {
|
||||
jniKiwix.loadZIM(fileName);
|
||||
Log.i(TAG_KIWIX, "Opening ZIM file " + fileName);
|
||||
zimFileName = fileName;
|
||||
|
||||
/* Try to open the corresponding fulltext index */
|
||||
String fullText = getFulltextIndexPath(fileName);
|
||||
if (!jniKiwix.loadFulltextIndex(fullText)) {
|
||||
Log.e(TAG_KIWIX, "Unable to open the ZIM fulltext index " + fullText);
|
||||
}
|
||||
}
|
||||
currentJNIReader = reader;
|
||||
return zimFileName;
|
||||
}
|
||||
|
||||
@ -119,12 +122,12 @@ public class ZimContentProvider extends ContentProvider {
|
||||
}
|
||||
|
||||
public static String getZimFileTitle() {
|
||||
if (jniKiwix == null || zimFileName == null) {
|
||||
if (currentJNIReader == null || zimFileName == null) {
|
||||
return null;
|
||||
} else {
|
||||
JNIKiwixString title = new JNIKiwixString();
|
||||
if (jniKiwix.getTitle(title)) {
|
||||
return title.value;
|
||||
String title = currentJNIReader.getTitle();
|
||||
if (title != null) {
|
||||
return title;
|
||||
} else {
|
||||
return "No Title Found";
|
||||
}
|
||||
@ -132,50 +135,50 @@ public class ZimContentProvider extends ContentProvider {
|
||||
}
|
||||
|
||||
public static String getMainPage() {
|
||||
if (jniKiwix == null || zimFileName == null) {
|
||||
if (currentJNIReader == null || zimFileName == null) {
|
||||
return null;
|
||||
} else {
|
||||
return jniKiwix.getMainPage();
|
||||
return currentJNIReader.getMainPage();
|
||||
}
|
||||
}
|
||||
|
||||
public static String getId() {
|
||||
if (jniKiwix == null || zimFileName == null) {
|
||||
if (currentJNIReader == null || zimFileName == null) {
|
||||
return null;
|
||||
} else {
|
||||
return jniKiwix.getId();
|
||||
return currentJNIReader.getId();
|
||||
}
|
||||
}
|
||||
|
||||
public static int getFileSize() {
|
||||
if (jniKiwix == null || zimFileName == null) {
|
||||
if (currentJNIReader == null || zimFileName == null) {
|
||||
return 0;
|
||||
} else {
|
||||
return jniKiwix.getFileSize();
|
||||
return currentJNIReader.getFileSize();
|
||||
}
|
||||
}
|
||||
|
||||
public static String getCreator() {
|
||||
if (jniKiwix == null || zimFileName == null) {
|
||||
if (currentJNIReader == null || zimFileName == null) {
|
||||
return null;
|
||||
} else {
|
||||
return jniKiwix.getCreator();
|
||||
return currentJNIReader.getCreator();
|
||||
}
|
||||
}
|
||||
|
||||
public static String getPublisher() {
|
||||
if (jniKiwix == null || zimFileName == null) {
|
||||
if (currentJNIReader == null || zimFileName == null) {
|
||||
return null;
|
||||
} else {
|
||||
return jniKiwix.getPublisher();
|
||||
return currentJNIReader.getPublisher();
|
||||
}
|
||||
}
|
||||
|
||||
public static String getName() {
|
||||
if (jniKiwix == null || zimFileName == null) {
|
||||
if (currentJNIReader == null || zimFileName == null) {
|
||||
return null;
|
||||
} else {
|
||||
String name = jniKiwix.getName();
|
||||
String name = currentJNIReader.getName();
|
||||
if (name == null || name.equals("")) {
|
||||
return getId();
|
||||
} else {
|
||||
@ -185,53 +188,53 @@ public class ZimContentProvider extends ContentProvider {
|
||||
}
|
||||
|
||||
public static String getDate() {
|
||||
if (jniKiwix == null || zimFileName == null) {
|
||||
if (currentJNIReader == null || zimFileName == null) {
|
||||
return null;
|
||||
} else {
|
||||
return jniKiwix.getDate();
|
||||
return currentJNIReader.getDate();
|
||||
}
|
||||
}
|
||||
|
||||
public static String getDescription() {
|
||||
if (jniKiwix == null || zimFileName == null) {
|
||||
if (currentJNIReader == null || zimFileName == null) {
|
||||
return null;
|
||||
} else {
|
||||
return jniKiwix.getDescription();
|
||||
return currentJNIReader.getDescription();
|
||||
}
|
||||
}
|
||||
|
||||
public static String getFavicon() {
|
||||
if (jniKiwix == null || zimFileName == null) {
|
||||
if (currentJNIReader == null || zimFileName == null) {
|
||||
return null;
|
||||
} else {
|
||||
JNIKiwixString mime = new JNIKiwixString();
|
||||
mime.value = "image/x-ms-bmp";
|
||||
return jniKiwix.getFavicon();
|
||||
return currentJNIReader.getFavicon();
|
||||
}
|
||||
}
|
||||
|
||||
public static String getLanguage() {
|
||||
if (jniKiwix == null || zimFileName == null) {
|
||||
if (currentJNIReader == null || zimFileName == null) {
|
||||
return null;
|
||||
} else {
|
||||
return jniKiwix.getLanguage();
|
||||
return currentJNIReader.getLanguage();
|
||||
}
|
||||
}
|
||||
|
||||
public static boolean searchSuggestions(String prefix, int count) {
|
||||
if (jniKiwix == null || zimFileName == null) {
|
||||
if (currentJNIReader == null || zimFileName == null) {
|
||||
return false;
|
||||
} else {
|
||||
return jniKiwix.searchSuggestions(prefix, count);
|
||||
return currentJNIReader.searchSuggestions(prefix, count);
|
||||
}
|
||||
}
|
||||
|
||||
public static String getNextSuggestion() {
|
||||
if (jniKiwix == null || zimFileName == null) {
|
||||
if (currentJNIReader == null || zimFileName == null) {
|
||||
return null;
|
||||
} else {
|
||||
JNIKiwixString title = new JNIKiwixString();
|
||||
if (jniKiwix.getNextSuggestion(title)) {
|
||||
if (currentJNIReader.getNextSuggestion(title)) {
|
||||
return title.value;
|
||||
} else {
|
||||
return null;
|
||||
@ -240,11 +243,11 @@ public class ZimContentProvider extends ContentProvider {
|
||||
}
|
||||
|
||||
public static String getPageUrlFromTitle(String title) {
|
||||
if (jniKiwix == null || zimFileName == null) {
|
||||
if (currentJNIReader == null || zimFileName == null) {
|
||||
return null;
|
||||
} else {
|
||||
JNIKiwixString url = new JNIKiwixString();
|
||||
if (jniKiwix.getPageUrlFromTitle(title, url)) {
|
||||
if (currentJNIReader.getPageUrlFromTitle(title, url)) {
|
||||
return url.value;
|
||||
} else {
|
||||
return null;
|
||||
@ -253,11 +256,11 @@ public class ZimContentProvider extends ContentProvider {
|
||||
}
|
||||
|
||||
public static String getRandomArticleUrl() {
|
||||
if (jniKiwix == null || zimFileName == null) {
|
||||
if (currentJNIReader == null || zimFileName == null) {
|
||||
return null;
|
||||
} else {
|
||||
JNIKiwixString url = new JNIKiwixString();
|
||||
if (jniKiwix.getRandomPage(url)) {
|
||||
if (currentJNIReader.getRandomPage(url)) {
|
||||
return url.value;
|
||||
} else {
|
||||
return null;
|
||||
@ -340,7 +343,7 @@ public class ZimContentProvider extends ContentProvider {
|
||||
t = t.substring(0, pos);
|
||||
}
|
||||
|
||||
mimeType = jniKiwix.getMimeType(t);
|
||||
mimeType = currentJNIReader.getMimeType(t);
|
||||
|
||||
// Truncate mime-type (everything after the first space
|
||||
mimeType = mimeType.replaceAll("^([^ ]+).*$", "$1");
|
||||
@ -368,7 +371,7 @@ public class ZimContentProvider extends ContentProvider {
|
||||
ParcelFileDescriptor[] pipe;
|
||||
try {
|
||||
pipe = ParcelFileDescriptor.createPipe();
|
||||
new TransferThread(jniKiwix, uri, new AutoCloseOutputStream(pipe[1])).start();
|
||||
new TransferThread(currentJNIReader, uri, new AutoCloseOutputStream(pipe[1])).start();
|
||||
} catch (IOException e) {
|
||||
//TODO: Why do we narrow the exception? We can't be sure the file isn't found
|
||||
throw new FileNotFoundException("Could not open pipe for: "
|
||||
@ -388,7 +391,7 @@ public class ZimContentProvider extends ContentProvider {
|
||||
JNIKiwixString mime = new JNIKiwixString();
|
||||
JNIKiwixString title = new JNIKiwixString();
|
||||
JNIKiwixInt size = new JNIKiwixInt();
|
||||
byte[] data = jniKiwix.getContent(filePath, title, mime, size);
|
||||
byte[] data = currentJNIReader.getContent(filePath, title, mime, size);
|
||||
|
||||
FileOutputStream out = new FileOutputStream(f);
|
||||
|
||||
@ -436,10 +439,11 @@ public class ZimContentProvider extends ContentProvider {
|
||||
|
||||
OutputStream out;
|
||||
|
||||
JNIKiwix jniKiwix;
|
||||
JNIKiwixReader currentJNIReader;
|
||||
|
||||
TransferThread(JNIKiwix jniKiwix, Uri articleUri, OutputStream out) throws IOException {
|
||||
this.jniKiwix = jniKiwix;
|
||||
TransferThread(JNIKiwixReader currentJNIReader, Uri articleUri, OutputStream out) throws IOException {
|
||||
this.currentJNIReader = currentJNIReader;
|
||||
Log.d(TAG_KIWIX, "Retrieving: " + articleUri.toString());
|
||||
|
||||
String filePath = getFilePath(articleUri);
|
||||
|
||||
@ -453,7 +457,7 @@ public class ZimContentProvider extends ContentProvider {
|
||||
JNIKiwixString mime = new JNIKiwixString();
|
||||
JNIKiwixString title = new JNIKiwixString();
|
||||
JNIKiwixInt size = new JNIKiwixInt();
|
||||
byte[] data = jniKiwix.getContent(articleZimUrl, title, mime, size);
|
||||
byte[] data = currentJNIReader.getContent(articleZimUrl, title, mime, size);
|
||||
if (mime.value != null && mime.value.equals("text/css") && KiwixMobileActivity.nightMode) {
|
||||
out.write(("img, video { \n" +
|
||||
" -webkit-filter: invert(1); \n" +
|
||||
|
@ -2,6 +2,7 @@ package org.kiwix.kiwixmobile.views;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.SharedPreferences;
|
||||
import android.os.ResultReceiver;
|
||||
import android.preference.PreferenceManager;
|
||||
import android.text.Html;
|
||||
import android.view.View;
|
||||
@ -12,6 +13,7 @@ import android.widget.Filterable;
|
||||
import android.widget.TextView;
|
||||
|
||||
import org.kiwix.kiwixlib.JNIKiwix;
|
||||
import org.kiwix.kiwixlib.JNIKiwixSearcher;
|
||||
import org.kiwix.kiwixmobile.KiwixMobileActivity;
|
||||
import org.kiwix.kiwixmobile.ZimContentProvider;
|
||||
|
||||
@ -28,7 +30,7 @@ public class AutoCompleteAdapter extends ArrayAdapter<String> implements Filtera
|
||||
|
||||
private Context context;
|
||||
|
||||
@Inject JNIKiwix jniKiwix;
|
||||
@Inject JNIKiwix currentJNIReader;
|
||||
|
||||
public AutoCompleteAdapter(Context context) {
|
||||
super(context, android.R.layout.simple_list_item_1);
|
||||
@ -76,20 +78,39 @@ public class AutoCompleteAdapter extends ArrayAdapter<String> implements Filtera
|
||||
|
||||
if (constraint != null) {
|
||||
try {
|
||||
final String query = constraint.toString();
|
||||
|
||||
ZimContentProvider.searchSuggestions(query, 200);
|
||||
String suggestion;
|
||||
String suggestionUrl;
|
||||
List<String> alreadyAdded = new ArrayList<>();
|
||||
while ((suggestion = ZimContentProvider.getNextSuggestion()) != null) {
|
||||
suggestionUrl = ZimContentProvider.getPageUrlFromTitle(suggestion);
|
||||
if (!alreadyAdded.contains(suggestionUrl)) {
|
||||
alreadyAdded.add(suggestionUrl);
|
||||
data.add(suggestion);
|
||||
/* Get search request */
|
||||
final String query = constraint.toString();
|
||||
|
||||
/* Fulltex search */
|
||||
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
|
||||
if (sharedPreferences.getBoolean(KiwixMobileActivity.PREF_FULL_TEXT_SEARCH, false)) {
|
||||
ZimContentProvider.jniSearcher.search(query, 200);
|
||||
JNIKiwixSearcher.Result result = ZimContentProvider.jniSearcher.getNextResult();
|
||||
while (result != null) {
|
||||
if (!result.getTitle().trim().isEmpty()) {
|
||||
data.add(result.getTitle());
|
||||
}
|
||||
result = ZimContentProvider.jniSearcher.getNextResult();
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/* Suggestion search if no fulltext results */
|
||||
if (data.size() == 0) {
|
||||
ZimContentProvider.searchSuggestions(query, 200);
|
||||
String suggestion;
|
||||
String suggestionUrl;
|
||||
List<String> alreadyAdded = new ArrayList<>();
|
||||
while ((suggestion = ZimContentProvider.getNextSuggestion()) != null) {
|
||||
suggestionUrl = ZimContentProvider.getPageUrlFromTitle(suggestion);
|
||||
if (!alreadyAdded.contains(suggestionUrl)) {
|
||||
alreadyAdded.add(suggestionUrl);
|
||||
data.add(suggestion);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
@ -180,4 +180,6 @@
|
||||
<string name="pref_autonightmode_summary">Automatically switch between day and night mode.</string>
|
||||
<string name="pref_autonightmode">Automated night mode</string>
|
||||
<string name="language_count">(%1$d)</string>
|
||||
<string name="pref_multi_search_title">MultiZim Search</string>
|
||||
<string name="pref_multi_search_summary">Allow app to search the across ZIM files (Warning Very Experimental).</string>
|
||||
</resources>
|
||||
|
@ -46,6 +46,13 @@
|
||||
android:title="@string/pref_newtab_background_title"
|
||||
android:summary="@string/pref_newtab_background_summary"/>
|
||||
|
||||
<org.kiwix.kiwixmobile.settings.CustomSwitchPreference
|
||||
android:defaultValue="false"
|
||||
android:key="pref_full_text_search"
|
||||
android:title="@string/pref_multi_search_title"
|
||||
android:summary="@string/pref_multi_search_summary"/>
|
||||
|
||||
|
||||
<org.kiwix.kiwixmobile.settings.CustomSwitchPreference
|
||||
android:defaultValue="true"
|
||||
android:key="pref_wifi_only"
|
||||
|
Loading…
x
Reference in New Issue
Block a user