55import android .graphics .Bitmap ;
66import android .os .Bundle ;
77import android .app .Fragment ;
8+ import android .preference .PreferenceManager ;
89import android .util .Log ;
910import android .view .LayoutInflater ;
1011import android .view .View ;
2122import com .devgrapher .ocebook .model .Page ;
2223import com .devgrapher .ocebook .model .PaginationInfo ;
2324import com .devgrapher .ocebook .model .ViewerSettings ;
25+ import com .devgrapher .ocebook .util .PaginationPrefs ;
2426import com .devgrapher .ocebook .util .WebViewMotionHandler ;
2527
2628import org .readium .sdk .android .Container ;
@@ -46,6 +48,7 @@ public class WebViewFragment extends Fragment {
4648
4749 private OnFragmentInteractionListener mListener ;
4850 private Container mContainer ;
51+ private PaginationPrefs mLastPageinfo ;
4952 // protected to be accessed in HiddenRendererFragment
5053 protected ReadiumContext mReadiumCtx ;
5154 protected ViewerSettings mViewerSettings ;
@@ -99,7 +102,6 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container,
99102 return view ;
100103 }
101104
102-
103105 private void initWebView () {
104106 if ((getContext ().getApplicationInfo ().flags & ApplicationInfo .FLAG_DEBUGGABLE )
105107 != 0 ) {
@@ -272,35 +274,51 @@ public ReadiumContext.PageEventListener createPageEventListener() {
272274 @ Override
273275 public void onReaderInitialized () {
274276 getActivity ().runOnUiThread (() -> {
275- final Package pkcg = mReadiumCtx .getPackage ();
276- pkcg .getSpineItems ().stream ()
277- .findAny ()
278- .ifPresent (item -> {
279- mReadiumCtx .getApi ().openBook (pkcg , mViewerSettings ,
280- OpenPageRequest .fromIdref (item .getIdRef ()));
281-
282- mListener .onPackageOpen (mReadiumCtx );
283- });
277+ final Package pckg = mReadiumCtx .getPackage ();
278+
279+ // Get last open page number.
280+ mLastPageinfo = new PaginationPrefs (getContext ());
281+ SpineItem spine = pckg .getSpineItems ().get (mLastPageinfo .getSpineIndex ());
282+
283+ mReadiumCtx .getApi ().openBook (pckg , mViewerSettings ,
284+ OpenPageRequest .fromIdref (spine .getIdRef ()));
285+
286+ mListener .onPackageOpen (mReadiumCtx );
284287 });
285288 }
286289
287290 @ Override
288291 public void onPaginationChanged (PaginationInfo currentPagesInfo ) {
289292 Log .d (TAG , "onPaginationChanged: " + currentPagesInfo );
293+
290294 List <Page > openPages = currentPagesInfo .getOpenPages ();
291295 if (openPages .isEmpty ())
292296 return ;
293297
294298 getActivity ().runOnUiThread (() -> {
299+ final Package pckg = mReadiumCtx .getPackage ();
295300 final Page page = openPages .get (0 );
296- SpineItem spineItem = mReadiumCtx .getPackage ().getSpineItem (page
297- .getIdref ());
298- boolean isFixedLayout = spineItem
299- .isFixedLayout (mReadiumCtx .getPackage ());
300- mWebView .getSettings ().setBuiltInZoomControls (
301- isFixedLayout );
302- mWebView .getSettings ()
303- .setDisplayZoomControls (false );
301+
302+ SpineItem spineItem = pckg .getSpineItem (page .getIdref ());
303+ boolean isFixedLayout = spineItem .isFixedLayout (pckg );
304+ mWebView .getSettings ().setBuiltInZoomControls (isFixedLayout );
305+ mWebView .getSettings ().setDisplayZoomControls (false );
306+
307+ if (mLastPageinfo != null ) {
308+ int newPage = mLastPageinfo .recalculateSpinePage (
309+ page .getSpineItemPageCount ());
310+ Log .d ("PaginationPref" , "" + newPage );
311+
312+ mReadiumCtx .getApi ().openSpineItemPage (spineItem .getIdRef (), newPage );
313+
314+ // Set null not to reuse.
315+ mLastPageinfo = null ;
316+ } else {
317+ PaginationPrefs .save (getContext (),
318+ page .getSpineItemIndex (),
319+ page .getSpineItemPageIndex (),
320+ page .getSpineItemPageCount ());
321+ }
304322
305323 mListener .onPageChanged (page .getSpineItemPageIndex (), page .getSpineItemIndex ());
306324 });
0 commit comments