From dc5acd398ac9cdd6560f6f7af6a45826fbece9da Mon Sep 17 00:00:00 2001 From: Juan Corona Date: Mon, 1 Dec 2014 09:59:58 -0800 Subject: [PATCH 1/4] Evaluate canGoX functions into resolved values when fed to launcher UI --- .../assets/readium-shared-js/host_app_feedback.js | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/SDKLauncher-Android/assets/readium-shared-js/host_app_feedback.js b/SDKLauncher-Android/assets/readium-shared-js/host_app_feedback.js index 73ed9080..3abe4e5e 100644 --- a/SDKLauncher-Android/assets/readium-shared-js/host_app_feedback.js +++ b/SDKLauncher-Android/assets/readium-shared-js/host_app_feedback.js @@ -87,10 +87,15 @@ ReadiumSDK.HostAppFeedback = function() { }, this); - this.onPaginationChanged = function(paginationInfo) { + this.onPaginationChanged = function(pageChangeData) { if (window.LauncherUI) { - window.LauncherUI.onPaginationChanged(JSON.stringify(paginationInfo.paginationInfo)); + var staticPaginationInfo = pageChangeData.paginationInfo; + staticPaginationInfo.canGoLeft = staticPaginationInfo.canGoLeft(); + staticPaginationInfo.canGoRight = staticPaginationInfo.canGoRight(); + staticPaginationInfo.canGoNext = staticPaginationInfo.canGoNext(); + staticPaginationInfo.canGoPrev = staticPaginationInfo.canGoPrev(); + window.LauncherUI.onPaginationChanged(JSON.stringify(staticPaginationInfo)); if(window.LauncherUI.onIsMediaOverlayAvailable){ window.LauncherUI.onIsMediaOverlayAvailable(ReadiumSDK.reader.isMediaOverlayAvailable()); From 08cb26c93723df4ab820b50869b3dbce69dda029 Mon Sep 17 00:00:00 2001 From: Juan Corona Date: Mon, 1 Dec 2014 10:03:20 -0800 Subject: [PATCH 2/4] Update PaginationInfo class to match new JS API --- .../launcher/model/PaginationInfo.java | 60 ++++++++++++++----- 1 file changed, 44 insertions(+), 16 deletions(-) diff --git a/SDKLauncher-Android/src/org/readium/sdk/android/launcher/model/PaginationInfo.java b/SDKLauncher-Android/src/org/readium/sdk/android/launcher/model/PaginationInfo.java index e970f7ca..1fd7affe 100644 --- a/SDKLauncher-Android/src/org/readium/sdk/android/launcher/model/PaginationInfo.java +++ b/SDKLauncher-Android/src/org/readium/sdk/android/launcher/model/PaginationInfo.java @@ -40,21 +40,29 @@ public class PaginationInfo { - private final String pageProgressionDirection; + private final boolean isRightToLeft; private final boolean isFixedLayout; private final int spineItemCount; private final List openPages; - - public PaginationInfo(String pageProgressionDirection, - boolean isFixedLayout, int spineItemCount) { - this.pageProgressionDirection = pageProgressionDirection; - this.isFixedLayout = isFixedLayout; - this.spineItemCount = spineItemCount; - this.openPages = new ArrayList(); - } + private final boolean canGoLeft; + private final boolean canGoRight; + private final boolean canGoPrev; + private final boolean canGoNext; + + public PaginationInfo(boolean isRightToLeft, boolean isFixedLayout, int spineItemCount, boolean canGoLeft, boolean canGoRight, boolean canGoPrev, boolean canGoNext) { - public String getPageProgressionDirection() { - return pageProgressionDirection; + this.isRightToLeft = isRightToLeft; + this.isFixedLayout = isFixedLayout; + this.spineItemCount = spineItemCount; + this.openPages = new ArrayList(); + this.canGoLeft = canGoLeft; + this.canGoRight = canGoRight; + this.canGoPrev = canGoPrev; + this.canGoNext = canGoNext; + } + + public boolean isRightToLeft() { + return isRightToLeft; } public boolean isFixedLayout() { @@ -68,12 +76,32 @@ public int getSpineItemCount() { public List getOpenPages() { return openPages; } - - public static PaginationInfo fromJson(String jsonString) throws JSONException { + + public boolean canGoLeft() { + return canGoLeft; + } + + public boolean canGoRight() { + return canGoRight; + } + + public boolean canGoPrev() { + return canGoPrev; + } + + public boolean canGoNext() { + return canGoNext; + } + + public static PaginationInfo fromJson(String jsonString) throws JSONException { JSONObject json = new JSONObject(jsonString); - PaginationInfo paginationInfo = new PaginationInfo(json.optString("pageProgressionDirection", "ltr"), - json.optBoolean("isFixedLayout"), - json.optInt("spineItemCount")); + PaginationInfo paginationInfo = new PaginationInfo(json.optBoolean("isRightToLeft"), + json.optBoolean("isFixedLayout"), + json.optInt("spineItemCount"), + json.optBoolean("canGoLeft"), + json.optBoolean("canGoRight"), + json.optBoolean("canGoPrev"), + json.optBoolean("canGoNext")); JSONArray openPages = json.getJSONArray("openPages"); for (int i = 0; i < openPages.length(); i++) { JSONObject p = openPages.getJSONObject(i); From a95a28710cdbc0423cd8743e9c1b02b27df61a13 Mon Sep 17 00:00:00 2001 From: Juan Corona Date: Mon, 1 Dec 2014 10:11:49 -0800 Subject: [PATCH 3/4] Enable/disable page buttons depending on canGoLeft or canGoRight. --- .../sdk/android/launcher/WebViewActivity.java | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/SDKLauncher-Android/src/org/readium/sdk/android/launcher/WebViewActivity.java b/SDKLauncher-Android/src/org/readium/sdk/android/launcher/WebViewActivity.java index d48210c4..97db1850 100644 --- a/SDKLauncher-Android/src/org/readium/sdk/android/launcher/WebViewActivity.java +++ b/SDKLauncher-Android/src/org/readium/sdk/android/launcher/WebViewActivity.java @@ -77,6 +77,7 @@ import android.webkit.WebResourceResponse; import android.webkit.WebView; import android.webkit.WebViewClient; +import android.widget.Button; import android.widget.EditText; import android.widget.FrameLayout; import android.widget.TextView; @@ -133,6 +134,10 @@ public class WebViewActivity extends FragmentActivity implements ViewerSettingsD private ViewerSettings mViewerSettings; private ReadiumJSApi mReadiumJSApi; private EpubServer mServer; + + private Button mLeftButton; + private Button mRightButton; + private boolean mIsMoAvailable; private boolean mIsMoPlaying; @@ -148,7 +153,10 @@ protected void onCreate(Bundle savedInstanceState) { && 0 != (getApplicationInfo().flags &= ApplicationInfo.FLAG_DEBUGGABLE)) { mWebview.setWebContentsDebuggingEnabled(true); } - + + mLeftButton = (Button) findViewById(R.id.left); + mRightButton = (Button) findViewById(R.id.right); + mPageInfo = (TextView) findViewById(R.id.page_info); initWebView(); @@ -497,7 +505,7 @@ public class EpubInterface { public void onPaginationChanged(String currentPagesInfo) { Log.d(TAG, "onPaginationChanged: "+currentPagesInfo); try { - PaginationInfo paginationInfo = PaginationInfo.fromJson(currentPagesInfo); + final PaginationInfo paginationInfo = PaginationInfo.fromJson(currentPagesInfo); List openPages = paginationInfo.getOpenPages(); if (!openPages.isEmpty()) { final Page page = openPages.get(0); @@ -510,6 +518,8 @@ public void run() { boolean isFixedLayout = spineItem.isFixedLayout(); mWebview.getSettings().setBuiltInZoomControls(isFixedLayout); mWebview.getSettings().setDisplayZoomControls(false); + mLeftButton.setEnabled(paginationInfo.canGoLeft()); + mRightButton.setEnabled(paginationInfo.canGoRight()); } }); } From 4ec1945e6d2d378fde818add8e66d187bc53e6ab Mon Sep 17 00:00:00 2001 From: Juan Corona Date: Mon, 1 Dec 2014 11:14:59 -0800 Subject: [PATCH 4/4] Update page indicator to show a range of pages when in multi column pagination. --- SDKLauncher-Android/res/values/strings.xml | 1 + .../sdk/android/launcher/WebViewActivity.java | 20 ++++++++++++++----- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/SDKLauncher-Android/res/values/strings.xml b/SDKLauncher-Android/res/values/strings.xml index 0c270449..0214b843 100644 --- a/SDKLauncher-Android/res/values/strings.xml +++ b/SDKLauncher-Android/res/values/strings.xml @@ -28,6 +28,7 @@ Title: %1$s Page List Page %1$d of %2$d + Page %1$d-%2$d of %3$d Spine Items Table of Contents WebViewActivity diff --git a/SDKLauncher-Android/src/org/readium/sdk/android/launcher/WebViewActivity.java b/SDKLauncher-Android/src/org/readium/sdk/android/launcher/WebViewActivity.java index 97db1850..65762dba 100644 --- a/SDKLauncher-Android/src/org/readium/sdk/android/launcher/WebViewActivity.java +++ b/SDKLauncher-Android/src/org/readium/sdk/android/launcher/WebViewActivity.java @@ -506,15 +506,25 @@ public void onPaginationChanged(String currentPagesInfo) { Log.d(TAG, "onPaginationChanged: "+currentPagesInfo); try { final PaginationInfo paginationInfo = PaginationInfo.fromJson(currentPagesInfo); - List openPages = paginationInfo.getOpenPages(); + final List openPages = paginationInfo.getOpenPages(); if (!openPages.isEmpty()) { - final Page page = openPages.get(0); + + final Page firstVisiblePage = openPages.get(0); runOnUiThread(new Runnable() { public void run() { + if(openPages.size() == 1){ mPageInfo.setText(getString(R.string.page_x_of_y, - page.getSpineItemPageIndex() + 1, - page.getSpineItemPageCount())); - SpineItem spineItem = mPackage.getSpineItem(page.getIdref()); + firstVisiblePage.getSpineItemPageIndex() + 1, + firstVisiblePage.getSpineItemPageCount())); + } else { + Page lastVisiblePage = openPages.get(openPages.size() - 1); + mPageInfo.setText(getString(R.string.page_x_dash_y_of_z, + firstVisiblePage.getSpineItemPageIndex() + 1, + lastVisiblePage.getSpineItemPageIndex() + 1, + firstVisiblePage.getSpineItemPageCount())); + } + + SpineItem spineItem = mPackage.getSpineItem(firstVisiblePage.getIdref()); boolean isFixedLayout = spineItem.isFixedLayout(); mWebview.getSettings().setBuiltInZoomControls(isFixedLayout); mWebview.getSettings().setDisplayZoomControls(false);