Skip to content

Commit 4fc5e90

Browse files
committed
Refine page navigation with touch events
Open navigation menu with double tab. Use GestureDetector. Hide app bar.
1 parent d707651 commit 4fc5e90

File tree

6 files changed

+106
-78
lines changed

6 files changed

+106
-78
lines changed

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

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -98,18 +98,7 @@ public void onDetach() {
9898
mListener = null;
9999
}
100100

101-
/**
102-
* This interface must be implemented by activities that contain this
103-
* fragment to allow an interaction in this fragment to be communicated
104-
* to the activity and potentially other fragments contained in that
105-
* activity.
106-
* <p>
107-
* See the Android Training lesson <a href=
108-
* "http://developer.android.com/training/basics/fragments/communicating.html"
109-
* >Communicating with Other Fragments</a> for more information.
110-
*/
111101
public interface OnFragmentInteractionListener {
112-
// TODO: Update argument type and name
113102
void onBrowsePageInProgress(int currentSpine, int totalSpine, int pageCount);
114103
}
115104

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import android.support.v7.app.ActionBarDrawerToggle;
1414
import android.support.v7.app.AppCompatActivity;
1515
import android.support.v7.widget.Toolbar;
16+
import android.view.Gravity;
1617
import android.view.Menu;
1718
import android.view.MenuItem;
1819
import android.widget.TextView;
@@ -217,6 +218,12 @@ public void onPageChanged(int pageIndex, int spineIndex) {
217218
}
218219
}
219220

221+
@Override
222+
public void onOpenMenu() {
223+
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
224+
drawer.openDrawer(GravityCompat.START);
225+
}
226+
220227
@Override
221228
public void onBrowsePageInProgress(int spineIndex, int totalSpine, int pageCount) {
222229
int percent = (int) ((spineIndex + 1) / (float) totalSpine * 100);

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

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -7,23 +7,21 @@
77
import android.app.Fragment;
88
import android.util.Log;
99
import android.view.LayoutInflater;
10-
import android.view.MotionEvent;
1110
import android.view.View;
1211
import android.view.ViewGroup;
1312
import android.webkit.WebChromeClient;
1413
import android.webkit.WebResourceRequest;
1514
import android.webkit.WebResourceResponse;
1615
import android.webkit.WebView;
1716
import android.webkit.WebViewClient;
18-
import android.widget.TextView;
1917

2018
import com.devgrapher.ocebook.readium.ObjectHolder;
2119
import com.devgrapher.ocebook.readium.ReadiumContext;
2220
import com.devgrapher.ocebook.model.OpenPageRequest;
2321
import com.devgrapher.ocebook.model.Page;
2422
import com.devgrapher.ocebook.model.PaginationInfo;
2523
import com.devgrapher.ocebook.model.ViewerSettings;
26-
import com.devgrapher.ocebook.util.MotionHandler;
24+
import com.devgrapher.ocebook.util.WebViewMotionHandler;
2725

2826
import org.readium.sdk.android.Container;
2927
import org.readium.sdk.android.Package;
@@ -32,7 +30,6 @@
3230
import java.io.IOException;
3331
import java.io.InputStream;
3432
import java.util.List;
35-
import java.util.Locale;
3633

3734

3835
/**
@@ -114,17 +111,23 @@ private void initWebView() {
114111
mWebView.getSettings().setAllowUniversalAccessFromFileURLs(true);
115112
mWebView.setWebViewClient(new ReadiumWebViewClient());
116113
mWebView.setWebChromeClient(new WebChromeClient());
117-
mWebView.setOnTouchListener(new MotionHandler(new MotionHandler.OnMotionListener() {
118-
@Override
119-
public void onMoveNextPage() {
120-
mReadiumCtx.getApi().openPageRight();
121-
}
114+
mWebView.setOnTouchListener(
115+
new WebViewMotionHandler(getContext(), new WebViewMotionHandler.OnMotionListener() {
116+
@Override
117+
public void onMoveNextPage() {
118+
mReadiumCtx.getApi().openPageRight();
119+
}
122120

123-
@Override
124-
public void onMovePreviousPage() {
125-
mReadiumCtx.getApi().openPageLeft();
126-
}
127-
}));
121+
@Override
122+
public void onMovePreviousPage() {
123+
mReadiumCtx.getApi().openPageLeft();
124+
}
125+
126+
@Override
127+
public void onOpenMenu() {
128+
mListener.onOpenMenu();
129+
}
130+
}));
128131
}
129132

130133
private void initReadium() {
@@ -221,6 +224,7 @@ public void onDestroy() {
221224
public interface OnFragmentInteractionListener {
222225
void onPackageOpen(ReadiumContext readiumContext);
223226
void onPageChanged(int pageIndex, int spineIndex);
227+
void onOpenMenu();
224228
}
225229

226230
public final class ReadiumWebViewClient extends WebViewClient {

OCEBook/app/src/main/java/com/devgrapher/ocebook/util/MotionHandler.java

Lines changed: 0 additions & 53 deletions
This file was deleted.
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
package com.devgrapher.ocebook.util;
2+
3+
import android.content.Context;
4+
import android.util.Log;
5+
import android.view.GestureDetector;
6+
import android.view.MotionEvent;
7+
import android.view.View;
8+
9+
/**
10+
* Hide implementations of motion handling.
11+
* This only provides motions that we desired through OnMotionListener.
12+
*/
13+
14+
public class WebViewMotionHandler implements View.OnTouchListener {
15+
16+
private static final String TAG = WebViewMotionHandler.class.toString();
17+
18+
private final OnMotionListener mMotionListener;
19+
private final GestureDetector mGestureDetector;
20+
21+
private View mView;
22+
23+
public interface OnMotionListener {
24+
void onMoveNextPage();
25+
void onMovePreviousPage();
26+
void onOpenMenu();
27+
}
28+
29+
public WebViewMotionHandler(Context context, OnMotionListener listener) {
30+
mMotionListener = listener;
31+
mGestureDetector = new GestureDetector(context, new GestureListener());
32+
}
33+
34+
@Override
35+
public boolean onTouch(View v, MotionEvent event) {
36+
mView = v;
37+
return mGestureDetector.onTouchEvent(event);
38+
}
39+
40+
private class GestureListener extends GestureDetector.SimpleOnGestureListener {
41+
@Override
42+
public boolean onDoubleTap(MotionEvent e) {
43+
Log.d(TAG, "Double Tap");
44+
// Only accept 1/3 potion in the middle.
45+
if (e.getX() > mView.getWidth() / 3 &&
46+
e.getX() < mView.getWidth() * 2/3) {
47+
mMotionListener.onOpenMenu();
48+
} else {
49+
// deal it as if double move page.
50+
onSingleTapConfirmed(e);
51+
onSingleTapConfirmed(e);
52+
}
53+
return true;
54+
}
55+
56+
@Override
57+
public boolean onSingleTapConfirmed(MotionEvent e) {
58+
if (e.getX() < mView.getWidth() / 2) {
59+
Log.d(TAG, "Touch left");
60+
mMotionListener.onMovePreviousPage();
61+
} else {
62+
Log.d(TAG, "Touch right");
63+
mMotionListener.onMoveNextPage();
64+
}
65+
return true;
66+
}
67+
68+
@Override
69+
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
70+
if (e1.getX() < mView.getWidth() / 2) {
71+
Log.d(TAG, "Fling left");
72+
mMotionListener.onMovePreviousPage();
73+
} else {
74+
Log.d(TAG, "Fling right");
75+
mMotionListener.onMoveNextPage();
76+
}
77+
return true;
78+
}
79+
}
80+
}

OCEBook/app/src/main/res/layout/app_bar_reader.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
<android.support.design.widget.AppBarLayout
1111
android:layout_width="match_parent"
1212
android:layout_height="wrap_content"
13+
android:visibility="gone"
1314
android:theme="@style/AppTheme.AppBarOverlay">
1415

1516
<android.support.v7.widget.Toolbar

0 commit comments

Comments
 (0)