diff --git a/SDKLauncher-Android/app/src/main/assets/font-faces/Noto-Serif/Noto-Serif-700.woff b/SDKLauncher-Android/app/src/main/assets/font-faces/Noto-Serif/Noto-Serif-700.woff
new file mode 100644
index 00000000..76ad2672
Binary files /dev/null and b/SDKLauncher-Android/app/src/main/assets/font-faces/Noto-Serif/Noto-Serif-700.woff differ
diff --git a/SDKLauncher-Android/app/src/main/assets/font-faces/Noto-Serif/Noto-Serif-700italic.woff b/SDKLauncher-Android/app/src/main/assets/font-faces/Noto-Serif/Noto-Serif-700italic.woff
new file mode 100644
index 00000000..deb8181d
Binary files /dev/null and b/SDKLauncher-Android/app/src/main/assets/font-faces/Noto-Serif/Noto-Serif-700italic.woff differ
diff --git a/SDKLauncher-Android/app/src/main/assets/font-faces/Noto-Serif/Noto-Serif-italic.woff b/SDKLauncher-Android/app/src/main/assets/font-faces/Noto-Serif/Noto-Serif-italic.woff
new file mode 100644
index 00000000..47ef061e
Binary files /dev/null and b/SDKLauncher-Android/app/src/main/assets/font-faces/Noto-Serif/Noto-Serif-italic.woff differ
diff --git a/SDKLauncher-Android/app/src/main/assets/font-faces/Noto-Serif/Noto-Serif-regular.woff b/SDKLauncher-Android/app/src/main/assets/font-faces/Noto-Serif/Noto-Serif-regular.woff
new file mode 100644
index 00000000..2e104c59
Binary files /dev/null and b/SDKLauncher-Android/app/src/main/assets/font-faces/Noto-Serif/Noto-Serif-regular.woff differ
diff --git a/SDKLauncher-Android/app/src/main/assets/font-faces/Noto-Serif/Noto-Serif.css b/SDKLauncher-Android/app/src/main/assets/font-faces/Noto-Serif/Noto-Serif.css
new file mode 100644
index 00000000..dff98580
--- /dev/null
+++ b/SDKLauncher-Android/app/src/main/assets/font-faces/Noto-Serif/Noto-Serif.css
@@ -0,0 +1,27 @@
+@font-face {
+ font-family: 'Noto Serif';
+ src: url('Noto-Serif-italic.woff') format('woff');
+ font-weight: normal;
+ font-style: italic;
+}
+
+@font-face {
+ font-family: 'Noto Serif';
+ src: url('Noto-Serif-700.woff') format('woff');
+ font-weight: bold;
+ font-style: normal;
+}
+
+@font-face {
+ font-family: 'Noto Serif';
+ src: url('Noto-Serif-700italic.woff') format('woff');
+ font-weight: bold;
+ font-style: italic;
+}
+
+@font-face {
+ font-family: 'Noto Serif';
+ src: url('Noto-Serif-regular.woff') format('woff');
+ font-weight: normal;
+ font-style: normal;
+}
diff --git a/SDKLauncher-Android/app/src/main/assets/font-faces/Open-Sans/Open-Sans-700.woff b/SDKLauncher-Android/app/src/main/assets/font-faces/Open-Sans/Open-Sans-700.woff
new file mode 100644
index 00000000..ca2f1c27
Binary files /dev/null and b/SDKLauncher-Android/app/src/main/assets/font-faces/Open-Sans/Open-Sans-700.woff differ
diff --git a/SDKLauncher-Android/app/src/main/assets/font-faces/Open-Sans/Open-Sans-700italic.woff b/SDKLauncher-Android/app/src/main/assets/font-faces/Open-Sans/Open-Sans-700italic.woff
new file mode 100644
index 00000000..db66197b
Binary files /dev/null and b/SDKLauncher-Android/app/src/main/assets/font-faces/Open-Sans/Open-Sans-700italic.woff differ
diff --git a/SDKLauncher-Android/app/src/main/assets/font-faces/Open-Sans/Open-Sans-italic.woff b/SDKLauncher-Android/app/src/main/assets/font-faces/Open-Sans/Open-Sans-italic.woff
new file mode 100644
index 00000000..a17ba1db
Binary files /dev/null and b/SDKLauncher-Android/app/src/main/assets/font-faces/Open-Sans/Open-Sans-italic.woff differ
diff --git a/SDKLauncher-Android/app/src/main/assets/font-faces/Open-Sans/Open-Sans-regular.woff b/SDKLauncher-Android/app/src/main/assets/font-faces/Open-Sans/Open-Sans-regular.woff
new file mode 100644
index 00000000..ac2b2c65
Binary files /dev/null and b/SDKLauncher-Android/app/src/main/assets/font-faces/Open-Sans/Open-Sans-regular.woff differ
diff --git a/SDKLauncher-Android/app/src/main/assets/font-faces/Open-Sans/Open-Sans.css b/SDKLauncher-Android/app/src/main/assets/font-faces/Open-Sans/Open-Sans.css
new file mode 100644
index 00000000..38d6831d
--- /dev/null
+++ b/SDKLauncher-Android/app/src/main/assets/font-faces/Open-Sans/Open-Sans.css
@@ -0,0 +1,27 @@
+@font-face {
+ font-family: 'Open Sans';
+ src: url('Open-Sans-italic.woff') format('woff');
+ font-weight: normal;
+ font-style: italic;
+}
+
+@font-face {
+ font-family: 'Open Sans';
+ src: url('Open-Sans-700.woff') format('woff');
+ font-weight: bold;
+ font-style: normal;
+}
+
+@font-face {
+ font-family: 'Open Sans';
+ src: url('Open-Sans-700italic.woff') format('woff');
+ font-weight: bold;
+ font-style: italic;
+}
+
+@font-face {
+ font-family: 'Open Sans';
+ src: url('Open-Sans-regular.woff') format('woff');
+ font-weight: normal;
+ font-style: normal;
+}
\ No newline at end of file
diff --git a/SDKLauncher-Android/app/src/main/assets/font-faces/OpenDyslexic/OpenDyslexic-Bold.eot b/SDKLauncher-Android/app/src/main/assets/font-faces/OpenDyslexic/OpenDyslexic-Bold.eot
new file mode 100755
index 00000000..03006b1b
Binary files /dev/null and b/SDKLauncher-Android/app/src/main/assets/font-faces/OpenDyslexic/OpenDyslexic-Bold.eot differ
diff --git a/SDKLauncher-Android/app/src/main/assets/font-faces/OpenDyslexic/OpenDyslexic-Bold.svg b/SDKLauncher-Android/app/src/main/assets/font-faces/OpenDyslexic/OpenDyslexic-Bold.svg
new file mode 100755
index 00000000..edd7346c
--- /dev/null
+++ b/SDKLauncher-Android/app/src/main/assets/font-faces/OpenDyslexic/OpenDyslexic-Bold.svg
@@ -0,0 +1,244 @@
+
+
+
\ No newline at end of file
diff --git a/SDKLauncher-Android/app/src/main/assets/font-faces/OpenDyslexic/OpenDyslexic-Bold.ttf b/SDKLauncher-Android/app/src/main/assets/font-faces/OpenDyslexic/OpenDyslexic-Bold.ttf
new file mode 100755
index 00000000..7c97eb43
Binary files /dev/null and b/SDKLauncher-Android/app/src/main/assets/font-faces/OpenDyslexic/OpenDyslexic-Bold.ttf differ
diff --git a/SDKLauncher-Android/app/src/main/assets/font-faces/OpenDyslexic/OpenDyslexic-Bold.woff b/SDKLauncher-Android/app/src/main/assets/font-faces/OpenDyslexic/OpenDyslexic-Bold.woff
new file mode 100755
index 00000000..755476f6
Binary files /dev/null and b/SDKLauncher-Android/app/src/main/assets/font-faces/OpenDyslexic/OpenDyslexic-Bold.woff differ
diff --git a/SDKLauncher-Android/app/src/main/assets/font-faces/OpenDyslexic/OpenDyslexic-BoldItalic.eot b/SDKLauncher-Android/app/src/main/assets/font-faces/OpenDyslexic/OpenDyslexic-BoldItalic.eot
new file mode 100755
index 00000000..7eb8d251
Binary files /dev/null and b/SDKLauncher-Android/app/src/main/assets/font-faces/OpenDyslexic/OpenDyslexic-BoldItalic.eot differ
diff --git a/SDKLauncher-Android/app/src/main/assets/font-faces/OpenDyslexic/OpenDyslexic-BoldItalic.svg b/SDKLauncher-Android/app/src/main/assets/font-faces/OpenDyslexic/OpenDyslexic-BoldItalic.svg
new file mode 100755
index 00000000..970c1003
--- /dev/null
+++ b/SDKLauncher-Android/app/src/main/assets/font-faces/OpenDyslexic/OpenDyslexic-BoldItalic.svg
@@ -0,0 +1,244 @@
+
+
+
\ No newline at end of file
diff --git a/SDKLauncher-Android/app/src/main/assets/font-faces/OpenDyslexic/OpenDyslexic-BoldItalic.ttf b/SDKLauncher-Android/app/src/main/assets/font-faces/OpenDyslexic/OpenDyslexic-BoldItalic.ttf
new file mode 100755
index 00000000..f949334d
Binary files /dev/null and b/SDKLauncher-Android/app/src/main/assets/font-faces/OpenDyslexic/OpenDyslexic-BoldItalic.ttf differ
diff --git a/SDKLauncher-Android/app/src/main/assets/font-faces/OpenDyslexic/OpenDyslexic-BoldItalic.woff b/SDKLauncher-Android/app/src/main/assets/font-faces/OpenDyslexic/OpenDyslexic-BoldItalic.woff
new file mode 100755
index 00000000..624d0efd
Binary files /dev/null and b/SDKLauncher-Android/app/src/main/assets/font-faces/OpenDyslexic/OpenDyslexic-BoldItalic.woff differ
diff --git a/SDKLauncher-Android/app/src/main/assets/font-faces/OpenDyslexic/OpenDyslexic-Italic.eot b/SDKLauncher-Android/app/src/main/assets/font-faces/OpenDyslexic/OpenDyslexic-Italic.eot
new file mode 100755
index 00000000..f34c1820
Binary files /dev/null and b/SDKLauncher-Android/app/src/main/assets/font-faces/OpenDyslexic/OpenDyslexic-Italic.eot differ
diff --git a/SDKLauncher-Android/app/src/main/assets/font-faces/OpenDyslexic/OpenDyslexic-Italic.svg b/SDKLauncher-Android/app/src/main/assets/font-faces/OpenDyslexic/OpenDyslexic-Italic.svg
new file mode 100755
index 00000000..96ec67f7
--- /dev/null
+++ b/SDKLauncher-Android/app/src/main/assets/font-faces/OpenDyslexic/OpenDyslexic-Italic.svg
@@ -0,0 +1,459 @@
+
+
+
\ No newline at end of file
diff --git a/SDKLauncher-Android/app/src/main/assets/font-faces/OpenDyslexic/OpenDyslexic-Italic.ttf b/SDKLauncher-Android/app/src/main/assets/font-faces/OpenDyslexic/OpenDyslexic-Italic.ttf
new file mode 100755
index 00000000..2f775808
Binary files /dev/null and b/SDKLauncher-Android/app/src/main/assets/font-faces/OpenDyslexic/OpenDyslexic-Italic.ttf differ
diff --git a/SDKLauncher-Android/app/src/main/assets/font-faces/OpenDyslexic/OpenDyslexic-Italic.woff b/SDKLauncher-Android/app/src/main/assets/font-faces/OpenDyslexic/OpenDyslexic-Italic.woff
new file mode 100755
index 00000000..f6b12fc1
Binary files /dev/null and b/SDKLauncher-Android/app/src/main/assets/font-faces/OpenDyslexic/OpenDyslexic-Italic.woff differ
diff --git a/SDKLauncher-Android/app/src/main/assets/font-faces/OpenDyslexic/OpenDyslexic-Regular.eot b/SDKLauncher-Android/app/src/main/assets/font-faces/OpenDyslexic/OpenDyslexic-Regular.eot
new file mode 100755
index 00000000..0e4e9713
Binary files /dev/null and b/SDKLauncher-Android/app/src/main/assets/font-faces/OpenDyslexic/OpenDyslexic-Regular.eot differ
diff --git a/SDKLauncher-Android/app/src/main/assets/font-faces/OpenDyslexic/OpenDyslexic-Regular.svg b/SDKLauncher-Android/app/src/main/assets/font-faces/OpenDyslexic/OpenDyslexic-Regular.svg
new file mode 100755
index 00000000..261004ed
--- /dev/null
+++ b/SDKLauncher-Android/app/src/main/assets/font-faces/OpenDyslexic/OpenDyslexic-Regular.svg
@@ -0,0 +1,616 @@
+
+
+
\ No newline at end of file
diff --git a/SDKLauncher-Android/app/src/main/assets/font-faces/OpenDyslexic/OpenDyslexic-Regular.ttf b/SDKLauncher-Android/app/src/main/assets/font-faces/OpenDyslexic/OpenDyslexic-Regular.ttf
new file mode 100755
index 00000000..e7849348
Binary files /dev/null and b/SDKLauncher-Android/app/src/main/assets/font-faces/OpenDyslexic/OpenDyslexic-Regular.ttf differ
diff --git a/SDKLauncher-Android/app/src/main/assets/font-faces/OpenDyslexic/OpenDyslexic-Regular.woff b/SDKLauncher-Android/app/src/main/assets/font-faces/OpenDyslexic/OpenDyslexic-Regular.woff
new file mode 100755
index 00000000..fdf9e37d
Binary files /dev/null and b/SDKLauncher-Android/app/src/main/assets/font-faces/OpenDyslexic/OpenDyslexic-Regular.woff differ
diff --git a/SDKLauncher-Android/app/src/main/assets/font-faces/OpenDyslexic/OpenDyslexic.css b/SDKLauncher-Android/app/src/main/assets/font-faces/OpenDyslexic/OpenDyslexic.css
new file mode 100755
index 00000000..c40e6eca
--- /dev/null
+++ b/SDKLauncher-Android/app/src/main/assets/font-faces/OpenDyslexic/OpenDyslexic.css
@@ -0,0 +1,52 @@
+@font-face {
+ font-family: 'OpenDyslexic';
+ src:
+ local('OpenDyslexic'),
+ local('OpenDyslexic Regular'),
+ local('OpenDyslexic-Regular'),
+ url('OpenDyslexic-Regular.eot') format('embedded-opentype'),
+ url('OpenDyslexic-Regular.woff') format('woff'),
+ url('OpenDyslexic-Regular.ttf') format('truetype'),
+ url('OpenDyslexic-Regular.svg') format('svg');
+ font-weight: normal;
+ font-style: normal;
+}
+@font-face {
+ font-family: 'OpenDyslexic';
+ src:
+ local('OpenDyslexic Italic'),
+ local('OpenDyslexic-Italic'),
+ url('OpenDyslexic-Italic.eot') format('embedded-opentype'),
+ url('OpenDyslexic-Italic.woff') format('woff'),
+ url('OpenDyslexic-Italic.ttf') format('truetype'),
+ url('OpenDyslexic-Italic.svg') format('svg');
+ font-weight: normal;
+ font-weight: normal;
+ font-style: italic;
+}
+@font-face {
+ font-family: 'OpenDyslexic';
+ src:
+ local('OpenDyslexic Bold'),
+ local('OpenDyslexic-Bold'),
+ url('OpenDyslexic-Bold.eot') format('embedded-opentype'),
+ url('OpenDyslexic-Bold.woff') format('woff'),
+ url('OpenDyslexic-Bold.ttf') format('truetype'),
+ url('OpenDyslexic-Bold.svg') format('svg');
+ font-weight: normal;
+ font-weight: bold;
+ font-style: normal;
+}
+@font-face {
+ font-family: 'OpenDyslexic';
+ src:
+ local('OpenDyslexic Bold Italic'),
+ local('OpenDyslexic-BoldItalic'),
+ url('OpenDyslexic-BoldItalic.eot') format('embedded-opentype'),
+ url('OpenDyslexic-BoldItalic.woff') format('woff'),
+ url('OpenDyslexic-BoldItalic.ttf') format('truetype'),
+ url('OpenDyslexic-BoldItalic.svg') format('svg');
+ font-weight: normal;
+ font-weight: bold;
+ font-style: italic;
+}
diff --git a/SDKLauncher-Android/app/src/main/assets/readium-shared-js/host_app_feedback.js b/SDKLauncher-Android/app/src/main/assets/readium-shared-js/host_app_feedback.js
index 6026f6ec..68308373 100644
--- a/SDKLauncher-Android/app/src/main/assets/readium-shared-js/host_app_feedback.js
+++ b/SDKLauncher-Android/app/src/main/assets/readium-shared-js/host_app_feedback.js
@@ -199,10 +199,16 @@ require(['readium_shared_js/views/reader_view'], function (ReaderView)
};
}();
+ var fontsArray = [];
+ if (typeof readiumFontFaces != "undefined") { // Injected by WebViewActivity
+ fontsArray = readiumFontFaces;
+ }
+
var opts = {
needsFixedLayoutScalerWorkAround: true,
el: "#viewport",
- annotationCSSUrl: '/readium_Annotations.css' //prefix + '/css/annotations.css'
+ annotationCSSUrl: '/readium_Annotations.css', //prefix + '/css/annotations.css'
+ fonts: fontsArray
};
ReadiumSDK.on(ReadiumSDK.Events.PLUGINS_LOADED, function(reader)
diff --git a/SDKLauncher-Android/app/src/main/assets/readium-shared-js/reader.html b/SDKLauncher-Android/app/src/main/assets/readium-shared-js/reader.html
index 19f84724..8b08b657 100644
--- a/SDKLauncher-Android/app/src/main/assets/readium-shared-js/reader.html
+++ b/SDKLauncher-Android/app/src/main/assets/readium-shared-js/reader.html
@@ -10,6 +10,7 @@
+
diff --git a/SDKLauncher-Android/app/src/main/java/org/readium/sdk/android/launcher/ViewerSettingsDialog.java b/SDKLauncher-Android/app/src/main/java/org/readium/sdk/android/launcher/ViewerSettingsDialog.java
index fcaa9794..7bce3152 100644
--- a/SDKLauncher-Android/app/src/main/java/org/readium/sdk/android/launcher/ViewerSettingsDialog.java
+++ b/SDKLauncher-Android/app/src/main/java/org/readium/sdk/android/launcher/ViewerSettingsDialog.java
@@ -29,18 +29,24 @@
package org.readium.sdk.android.launcher;
-import org.readium.sdk.android.launcher.model.ViewerSettings;
-
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
-import android.support.v4.app.DialogFragment;
import android.os.Bundle;
+import android.support.v4.app.DialogFragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
+import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.RadioGroup;
+import android.widget.Spinner;
+
+import org.readium.sdk.android.launcher.model.Font;
+import org.readium.sdk.android.launcher.model.ViewerSettings;
+
+import java.util.ArrayList;
+import java.util.List;
/**
* This dialog displays the viewer settings to the user.
@@ -48,7 +54,7 @@
*
*/
public class ViewerSettingsDialog extends DialogFragment {
-
+
/**
* Interface to notify the listener when a viewer settings have been changed.
*/
@@ -56,16 +62,16 @@ public interface OnViewerSettingsChange {
public void onViewerSettingsChange(ViewerSettings settings);
}
- protected static final String TAG = "ViewerSettingsDialog";
-
- private OnViewerSettingsChange mListener;
+ protected static final String TAG = "ViewerSettingsDialog";
+ private final List mFontFaces;
+ private OnViewerSettingsChange mListener;
+ private ViewerSettings mOriginalSettings;
- private ViewerSettings mOriginalSettings;
-
- public ViewerSettingsDialog(OnViewerSettingsChange listener, ViewerSettings originalSettings) {
- mListener = listener;
- mOriginalSettings = originalSettings;
- }
+ public ViewerSettingsDialog(OnViewerSettingsChange listener, ViewerSettings originalSettings, List fontFaces) {
+ mListener = listener;
+ mOriginalSettings = originalSettings;
+ mFontFaces = fontFaces;
+ }
@Override
public Dialog onCreateDialog(
@@ -102,6 +108,18 @@ public Dialog onCreateDialog(
break;
}
+ final Spinner fontSpinner = (Spinner) dialogView.findViewById(R.id.spinner);
+ List fontDisplayName = new ArrayList();
+ fontDisplayName.add("Default");
+ for (Font font : mFontFaces) {
+ fontDisplayName.add(font.getDisplayName());
+ }
+ ArrayAdapter dataAdapter = new ArrayAdapter(getContext(),
+ android.R.layout.simple_spinner_item, fontDisplayName);
+ dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
+ fontSpinner.setAdapter(dataAdapter);
+ fontSpinner.setSelection(mOriginalSettings.getFontSelection());
+
final EditText fontSizeText = (EditText) dialogView.findViewById(R.id.fontSize);
fontSizeText.setText("" + mOriginalSettings.getFontSize());
@@ -115,6 +133,7 @@ public Dialog onCreateDialog(
@Override
public void onClick(DialogInterface dialog, int id) {
if (mListener != null) {
+ int fontSelection = fontSpinner.getSelectedItemPosition();
int fontSize = parseString(fontSizeText.getText().toString(), 100);
int columnGap = parseString(columnGapText.getText().toString(), 20);
@@ -144,7 +163,7 @@ public void onClick(DialogInterface dialog, int id) {
break;
}
- ViewerSettings settings = new ViewerSettings(syntheticSpreadMode, scrollMode, fontSize, columnGap);
+ ViewerSettings settings = new ViewerSettings(syntheticSpreadMode, scrollMode, fontSelection, fontSize, columnGap);
mListener.onViewerSettingsChange(settings);
}
dismiss();
diff --git a/SDKLauncher-Android/app/src/main/java/org/readium/sdk/android/launcher/WebViewActivity.java b/SDKLauncher-Android/app/src/main/java/org/readium/sdk/android/launcher/WebViewActivity.java
index 1a2ba517..4c9442fa 100644
--- a/SDKLauncher-Android/app/src/main/java/org/readium/sdk/android/launcher/WebViewActivity.java
+++ b/SDKLauncher-Android/app/src/main/java/org/readium/sdk/android/launcher/WebViewActivity.java
@@ -36,8 +36,10 @@
import java.net.URL;
import java.net.URLConnection;
import java.nio.charset.Charset;
+import java.util.ArrayList;
import java.util.List;
+import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.readium.sdk.android.Container;
@@ -45,6 +47,7 @@
import org.readium.sdk.android.Package;
import org.readium.sdk.android.SpineItem;
import org.readium.sdk.android.launcher.model.BookmarkDatabase;
+import org.readium.sdk.android.launcher.model.Font;
import org.readium.sdk.android.launcher.model.OpenPageRequest;
import org.readium.sdk.android.launcher.model.Page;
import org.readium.sdk.android.launcher.model.PaginationInfo;
@@ -207,6 +210,7 @@ public byte[] handle(byte[] data, String mime, String uriPath,
private Package mPackage;
private OpenPageRequest mOpenPageRequestData;
private TextView mPageInfo;
+ private ArrayList mFontArray;
private ViewerSettings mViewerSettings;
private ReadiumJSApi mReadiumJSApi;
private EpubServer mServer;
@@ -269,11 +273,18 @@ protected void onCreate(Bundle savedInstanceState) {
mPackage, quiet, dataPreProcessor);
mServer.startServer();
- // Load the page skeleton
- mWebview.loadUrl(READER_SKELETON);
- mViewerSettings = new ViewerSettings(
- ViewerSettings.SyntheticSpreadMode.AUTO,
- ViewerSettings.ScrollMode.AUTO, 100, 20);
+ // Load the page skeleton
+ mWebview.loadUrl(READER_SKELETON);
+
+ ArrayList fontList = new ArrayList<>();
+ fontList.add(new Font("Open Dyslexic", "OpenDyslexic", "font-faces/OpenDyslexic/OpenDyslexic.css"));
+ fontList.add(new Font("Open Sans", "Open Sans", "font-faces/Open-Sans/Open-Sans.css"));
+ fontList.add(new Font("Noto Serif", "Noto Serif", "font-faces/Noto-Serif/Noto-Serif.css"));
+ mFontArray = fontList;
+
+ mViewerSettings = new ViewerSettings(
+ ViewerSettings.SyntheticSpreadMode.AUTO,
+ ViewerSettings.ScrollMode.AUTO, 0, 100, 20);
mReadiumJSApi = new ReadiumJSApi(new ReadiumJSApi.JSLoader() {
@Override
@@ -364,7 +375,7 @@ public void onClick(View v) {
private void showSettings() {
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fm.beginTransaction();
- DialogFragment dialog = new ViewerSettingsDialog(this, mViewerSettings);
+ DialogFragment dialog = new ViewerSettingsDialog(this, mViewerSettings, mFontArray);
dialog.show(fm, "dialog");
fragmentTransaction.commit();
}
@@ -507,10 +518,35 @@ public WebResourceResponse shouldInterceptRequest(WebView view,
if (!quiet)
Log.d(TAG, "READER ASSET ...");
- // reader.html
- if (mime.equals("application/xhtml+xml")) {
- mime = "text/html";
- }
+ // Font injection
+ if (url.matches(ASSET_PREFIX + "\\/?font-faces\\/fonts.js")) {
+ if (!quiet)
+ Log.d(TAG, "readiumFontFaces inject ...");
+
+ if (mFontArray != null && mFontArray.size() > 0) {
+ try {
+ JSONArray jsonArray = new JSONArray();
+ for (Font fontFace : mFontArray) {
+ jsonArray.put(fontFace.toJSON());
+ }
+
+ String readiumFontFaces = "var readiumFontFaces =" + jsonArray.toString() + ";";
+
+ return new WebResourceResponse("text/javascript", UTF_8, new ByteArrayInputStream(readiumFontFaces.getBytes()));
+ } catch (JSONException e) {
+ return new WebResourceResponse(null, UTF_8,
+ new ByteArrayInputStream("".getBytes()));
+ }
+ } else {
+ return new WebResourceResponse(null, UTF_8,
+ new ByteArrayInputStream("".getBytes()));
+ }
+ }
+
+ // reader.html
+ if (mime.equals("application/xhtml+xml")) {
+ mime = "text/html";
+ }
InputStream is = null;
try {
@@ -538,12 +574,12 @@ public WebResourceResponse shouldInterceptRequest(WebView view,
// iframe(s)
evaluateJavascript(INJECT_EPUB_RSO_SCRIPT_2);
-
+
return new WebResourceResponse("text/javascript", UTF_8,
new ByteArrayInputStream(
"(function(){})()".getBytes()));
}
-
+
if (cleanedUrl.matches("\\/?readium_MathJax.js")) {
if (!quiet)
Log.d(TAG, "MathJax.js inject ...");
@@ -580,6 +616,25 @@ public WebResourceResponse shouldInterceptRequest(WebView view,
return new WebResourceResponse("text/css", UTF_8, is);
}
+ if (cleanedUrl.matches(".*\\/?font-faces\\/.*")) {
+ if (!quiet)
+ Log.d(TAG, "font-face inject ...");
+
+ String assetPath = cleanedUrl.substring(cleanedUrl.lastIndexOf("font-faces/"));
+
+ InputStream is = null;
+ try {
+ is = getAssets().open(assetPath);
+ } catch (IOException e) {
+
+ Log.e(TAG, "font-face asset fail!");
+
+ return super.shouldInterceptRequest(view, url);
+ }
+
+ return new WebResourceResponse(null, UTF_8, is);
+ }
+
ManifestItem item = mPackage.getManifestItem(cleanedUrl);
String contentType = item != null ? item.getMediaType() : null;
diff --git a/SDKLauncher-Android/app/src/main/java/org/readium/sdk/android/launcher/model/Font.java b/SDKLauncher-Android/app/src/main/java/org/readium/sdk/android/launcher/model/Font.java
new file mode 100644
index 00000000..4f21cb01
--- /dev/null
+++ b/SDKLauncher-Android/app/src/main/java/org/readium/sdk/android/launcher/model/Font.java
@@ -0,0 +1,47 @@
+package org.readium.sdk.android.launcher.model;
+
+import org.json.JSONException;
+import org.json.JSONObject;
+
+public class Font {
+
+ private final String mDisplayName;
+ private final String mFontFamily;
+ private final String mUrl;
+
+ public Font(String displayName, String fontFamily, String url) {
+ this.mDisplayName = displayName;
+ this.mFontFamily = fontFamily;
+ this.mUrl = url;
+ }
+
+ public String getDisplayName() {
+ return mDisplayName;
+ }
+
+ public String getFontFamily() {
+ return mFontFamily;
+ }
+
+ public String getUrl() {
+ return mUrl;
+ }
+
+ public JSONObject toJSON() throws JSONException {
+ JSONObject json = new JSONObject();
+
+ json.put("displayName", mDisplayName);
+ json.put("fontFamily", mFontFamily);
+ json.put("url", mUrl);
+ return json;
+ }
+
+ @Override
+ public String toString() {
+ return "Font{" +
+ "mDisplayName=" + mDisplayName +
+ ", mFontFamily=" + mFontFamily +
+ ", mUrl=" + mUrl +
+ '}';
+ }
+}
diff --git a/SDKLauncher-Android/app/src/main/java/org/readium/sdk/android/launcher/model/ViewerSettings.java b/SDKLauncher-Android/app/src/main/java/org/readium/sdk/android/launcher/model/ViewerSettings.java
index a6ff149a..b4692909 100644
--- a/SDKLauncher-Android/app/src/main/java/org/readium/sdk/android/launcher/model/ViewerSettings.java
+++ b/SDKLauncher-Android/app/src/main/java/org/readium/sdk/android/launcher/model/ViewerSettings.java
@@ -42,12 +42,14 @@ public enum ScrollMode {
private final SyntheticSpreadMode mSyntheticSpreadMode;
private final ScrollMode mScrollMode;
+ private final int mFontSelection;
private final int mFontSize;
private final int mColumnGap;
- public ViewerSettings(SyntheticSpreadMode syntheticSpreadMode, ScrollMode scrollMode, int fontSize, int columnGap) {
+ public ViewerSettings(SyntheticSpreadMode syntheticSpreadMode, ScrollMode scrollMode, int fontSelection, int fontSize, int columnGap) {
mSyntheticSpreadMode = syntheticSpreadMode;
mScrollMode = scrollMode;
+ mFontSelection = fontSelection;
mFontSize = fontSize;
mColumnGap = columnGap;
}
@@ -60,6 +62,10 @@ public ScrollMode getScrollMode() {
return mScrollMode;
}
+ public int getFontSelection() {
+ return mFontSelection;
+ }
+
public int getFontSize() {
return mFontSize;
}
@@ -67,7 +73,7 @@ public int getFontSize() {
public int getColumnGap() {
return mColumnGap;
}
-
+
public JSONObject toJSON() throws JSONException {
JSONObject json = new JSONObject();
@@ -100,6 +106,7 @@ public JSONObject toJSON() throws JSONException {
}
json.put("scroll", scroll);
+ json.put("fontSelection", mFontSelection);
json.put("fontSize", mFontSize);
json.put("columnGap", mColumnGap);
return json;
@@ -110,6 +117,7 @@ public String toString() {
return "ViewerSettings{" +
"mSyntheticSpreadMode=" + mSyntheticSpreadMode +
", mScrollMode=" + mScrollMode +
+ ", mFontSelection=" + mFontSelection +
", mFontSize=" + mFontSize +
", mColumnGap=" + mColumnGap +
'}';
diff --git a/SDKLauncher-Android/app/src/main/res/layout/viewer_settings.xml b/SDKLauncher-Android/app/src/main/res/layout/viewer_settings.xml
index 05f7bf10..bcde8cff 100644
--- a/SDKLauncher-Android/app/src/main/res/layout/viewer_settings.xml
+++ b/SDKLauncher-Android/app/src/main/res/layout/viewer_settings.xml
@@ -43,6 +43,11 @@
android:layout_marginTop="8dp"
android:layout_marginBottom="8dp" />
+
+