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" /> + +