Skip to content

Commit cbf85d1

Browse files
committed
Hide readium classes from View into ReadiumService
Rename ReadiumServer to ReadiumService Make navigating table of contents function
1 parent 8cd74cd commit cbf85d1

File tree

7 files changed

+247
-225
lines changed

7 files changed

+247
-225
lines changed

OCEBook/app/src/main/java/com/devgrapher/ocebook/ReaderActivity.java

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,16 @@
1818
import android.widget.Toast;
1919

2020
import com.devgrapher.ocebook.model.ContainerHolder;
21-
import com.devgrapher.ocebook.readium.TocManager;
21+
import com.devgrapher.ocebook.readium.ReadiumService;
22+
import com.devgrapher.ocebook.readium.TocHelper;
2223

2324
import org.readium.sdk.android.Container;
2425
import org.readium.sdk.android.EPub3;
2526
import org.readium.sdk.android.Package;
2627
import org.readium.sdk.android.SdkErrorHandler;
28+
import org.readium.sdk.android.components.navigation.NavigationPoint;
29+
30+
import java.util.concurrent.atomic.AtomicInteger;
2731

2832

2933
public class ReaderActivity extends AppCompatActivity
@@ -33,9 +37,9 @@ public class ReaderActivity extends AppCompatActivity
3337

3438
private final String TAG = ReaderActivity.class.toString();
3539
private Container mContainer;
36-
private TocManager mTocManager;
3740
private NavigationView mTocNavView;
3841

42+
3943
// TODO: 외부에서 값을 받아와야 함
4044
private final String BOOK_PATH = "/sdcard/ocebook/alice3.epub";
4145

@@ -128,7 +132,12 @@ public boolean onNavigationItemSelected(MenuItem item) {
128132
// Handle navigation view item clicks here.
129133
int id = item.getItemId();
130134

131-
135+
Package pckg = mContainer.getDefaultPackage();
136+
NavigationPoint nav = TocHelper.getAt(pckg, id);
137+
if (nav != null) {
138+
ReadiumService.getApi().openContentUrl(
139+
nav.getContent(), pckg.getTableOfContents().getSourceHref());
140+
}
132141

133142
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
134143
drawer.closeDrawer(GravityCompat.START);
@@ -150,10 +159,14 @@ public boolean handleSdkError(String message, boolean isSevereEpubError) {
150159
public void onPackageOpen(Package pckg) {
151160
mTocNavView.getMenu().removeGroup(R.id.menu_group_toc);
152161

153-
mTocManager = new TocManager(pckg);
154-
mTocManager.getTableOfContents()
162+
AtomicInteger index = new AtomicInteger(0);
163+
TocHelper.flatTableOfContents(pckg)
155164
.forEach(e -> {
156-
mTocNavView.getMenu().add(R.id.menu_group_toc, Menu.NONE, Menu.NONE, e.getTitle());
165+
mTocNavView.getMenu().add(
166+
R.id.menu_group_toc,
167+
index.getAndIncrement(),
168+
Menu.NONE,
169+
e.getTitle());
157170
});
158171

159172
((TextView) mTocNavView.findViewById(R.id.tv_nav_book_title))

OCEBook/app/src/main/java/com/devgrapher/ocebook/WebViewFragment.java

Lines changed: 19 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import android.content.Context;
44
import android.content.pm.ApplicationInfo;
55
import android.graphics.Bitmap;
6-
import android.net.Uri;
76
import android.os.Bundle;
87
import android.app.Fragment;
98
import android.util.Log;
@@ -18,14 +17,11 @@
1817
import android.webkit.WebViewClient;
1918
import android.widget.TextView;
2019

21-
import com.devgrapher.ocebook.readium.TocManager;
22-
import com.devgrapher.ocebook.readium.ScriptProcessor;
23-
import com.devgrapher.ocebook.readium.ReadiumServer;
20+
import com.devgrapher.ocebook.readium.ReadiumService;
2421
import com.devgrapher.ocebook.model.ContainerHolder;
2522
import com.devgrapher.ocebook.model.OpenPageRequest;
2623
import com.devgrapher.ocebook.model.Page;
2724
import com.devgrapher.ocebook.model.PaginationInfo;
28-
import com.devgrapher.ocebook.model.ReadiumJSApi;
2925
import com.devgrapher.ocebook.model.ViewerSettings;
3026

3127
import org.readium.sdk.android.Container;
@@ -49,20 +45,14 @@
4945
public class WebViewFragment extends Fragment {
5046
private static final String TAG = WebViewFragment.class.toString();
5147
private static final String ARG_CONTAINER_ID = "package";
52-
private static final String READER_SKELETON = "file:///android_asset/readium-shared-js/reader.html";
5348

5449
private Package mPackage;
5550
private OnFragmentInteractionListener mListener;
5651
private ViewerSettings mViewerSettings;
57-
private ReadiumJSApi mReadiumJSApi;
58-
private ReadiumServer mReadiumServer;
59-
private TocManager mTocManager;
6052

6153
private WebView mWebView;
6254
private TextView mPageInfoTextView;
6355

64-
private ScriptProcessor mScriptProcessor;
65-
6656
public WebViewFragment() {
6757
// Required empty public constructor
6858
}
@@ -106,21 +96,10 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container,
10696
initWebView();
10797
intReadium();
10898

109-
11099
mViewerSettings = new ViewerSettings(
111100
ViewerSettings.SyntheticSpreadMode.AUTO,
112101
ViewerSettings.ScrollMode.AUTO, 100, 20);
113102

114-
mReadiumJSApi = new ReadiumJSApi(new ReadiumJSApi.JSLoader() {
115-
@Override
116-
public void loadJS(String javascript) {
117-
mWebView.loadUrl(javascript);
118-
}
119-
});
120-
121-
mReadiumServer.start();
122-
123-
mTocManager = new TocManager(mPackage);
124103
return view;
125104
}
126105

@@ -130,34 +109,30 @@ private void initWebView() {
130109
!= 0) {
131110
WebView.setWebContentsDebuggingEnabled(true);
132111
}
133-
mWebView.loadUrl(READER_SKELETON);
112+
134113
mWebView.getSettings().setJavaScriptEnabled(true);
135114
mWebView.getSettings().setMediaPlaybackRequiresUserGesture(false);
136115
mWebView.getSettings().setAllowUniversalAccessFromFileURLs(true);
137116
mWebView.setWebViewClient(new ReadiumWebViewClient());
138117
mWebView.setWebChromeClient(new WebChromeClient());
139118

140-
mWebView.setOnTouchListener(new View.OnTouchListener() {
141-
@Override
142-
public boolean onTouch(View v, MotionEvent event) {
119+
mWebView.setOnTouchListener((View v, MotionEvent event) -> {
143120
switch (event.getAction()) {
144121
case MotionEvent.ACTION_UP:
145122
if (event.getX() < v.getWidth() / 2) {
146123
Log.d(TAG, "Touch left");
147-
mReadiumJSApi.openPageLeft();
124+
ReadiumService.getApi().openPageLeft();
148125
} else {
149126
Log.d(TAG, "Touch right");
150-
mReadiumJSApi.openPageRight();
127+
ReadiumService.getApi().openPageRight();
151128
}
152129
}
153130
return false;
154-
}
155131
});
156132
}
157133

158134
private void intReadium() {
159-
mScriptProcessor = new ScriptProcessor(
160-
new ScriptProcessor.ContentProcessorDelegate() {
135+
ReadiumService.getInstance().start(new ReadiumService.WebViewDelegate() {
161136
@Override
162137
public void evaluateJavascript(String script) {
163138
getActivity().runOnUiThread(() -> {
@@ -178,15 +153,16 @@ public InputStream openAsset(String fileName) {
178153
}
179154

180155
@Override
181-
public void addJavascriptInterface(ScriptProcessor.JsInterface jsInterface,
182-
String name) {
156+
public void addJavascriptInterface(ReadiumService.JsInterface jsInterface, String name) {
183157
mWebView.addJavascriptInterface(jsInterface, name);
184158
}
185-
}, mPackage);
186159

187-
mScriptProcessor.setEventListener(new ReadiumJsEventListener());
160+
@Override
161+
public void loadUrl(String url) {
162+
mWebView.loadUrl(url);
163+
}
188164

189-
mReadiumServer = new ReadiumServer(mScriptProcessor, mPackage);
165+
}, new ReadiumPageEventListener(), mPackage);
190166
}
191167

192168
@Override
@@ -222,8 +198,8 @@ public void onDetach() {
222198
public void onDestroy() {
223199
super.onDestroy();
224200

225-
mReadiumServer.stop();
226-
mWebView.loadUrl(READER_SKELETON);
201+
ReadiumService.getInstance().stop();
202+
//TODO: mWebView.loadUrl(READER_SKELETON);
227203
((ViewGroup) mWebView.getParent()).removeView(mWebView);
228204
mWebView.removeAllViews();
229205
mWebView.clearCache(true);
@@ -272,8 +248,9 @@ public boolean shouldOverrideUrlLoading(WebView view, String url) {
272248
public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest req) {
273249
Log.d(TAG, "-------- interceptRequest: " + req.getUrl().toString());
274250

275-
WebResourceResponse res = mScriptProcessor.interceptRequest(
276-
req.getUrl().toString());
251+
WebResourceResponse res = ReadiumService.getInstance()
252+
.handleWebRequest(req.getUrl().toString());
253+
277254
if (res == null) {
278255
return super.shouldInterceptRequest(view, req);
279256
}
@@ -282,15 +259,15 @@ public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceReque
282259
}
283260
}
284261

285-
public final class ReadiumJsEventListener implements ScriptProcessor.JsEventListener {
262+
public final class ReadiumPageEventListener implements ReadiumService.PageEventListener {
286263

287264
@Override
288265
public void onReaderInitialized() {
289266
getActivity().runOnUiThread(() -> {
290267
mPackage.getSpineItems().stream()
291268
.findAny()
292269
.ifPresent(item -> {
293-
mReadiumJSApi.openBook(mPackage, mViewerSettings,
270+
ReadiumService.getApi().openBook(mPackage, mViewerSettings,
294271
OpenPageRequest.fromIdref(item.getIdRef()));
295272
mListener.onPackageOpen(mPackage);
296273
});

OCEBook/app/src/main/java/com/devgrapher/ocebook/readium/ReadiumServer.java

Lines changed: 0 additions & 48 deletions
This file was deleted.

0 commit comments

Comments
 (0)