Skip to content

Commit 8cd74cd

Browse files
committed
Show table of contents on Drawer Layout
1 parent 22cc8cc commit 8cd74cd

File tree

7 files changed

+76
-77
lines changed

7 files changed

+76
-77
lines changed

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

Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,10 @@
22

33
import android.Manifest;
44
import android.app.FragmentManager;
5-
import android.app.FragmentTransaction;
65
import android.content.pm.PackageManager;
7-
import android.net.Uri;
86
import android.os.Bundle;
9-
import android.support.design.widget.FloatingActionButton;
10-
import android.support.design.widget.Snackbar;
117
import android.support.v4.content.ContextCompat;
128
import android.util.Log;
13-
import android.view.View;
149
import android.support.design.widget.NavigationView;
1510
import android.support.v4.view.GravityCompat;
1611
import android.support.v4.widget.DrawerLayout;
@@ -19,21 +14,27 @@
1914
import android.support.v7.widget.Toolbar;
2015
import android.view.Menu;
2116
import android.view.MenuItem;
17+
import android.widget.TextView;
2218
import android.widget.Toast;
2319

2420
import com.devgrapher.ocebook.model.ContainerHolder;
21+
import com.devgrapher.ocebook.readium.TocManager;
2522

2623
import org.readium.sdk.android.Container;
2724
import org.readium.sdk.android.EPub3;
25+
import org.readium.sdk.android.Package;
2826
import org.readium.sdk.android.SdkErrorHandler;
2927

28+
3029
public class ReaderActivity extends AppCompatActivity
3130
implements NavigationView.OnNavigationItemSelectedListener,
3231
SdkErrorHandler,
3332
WebViewFragment.OnFragmentInteractionListener {
3433

3534
private final String TAG = ReaderActivity.class.toString();
3635
private Container mContainer;
36+
private TocManager mTocManager;
37+
private NavigationView mTocNavView;
3738

3839
// TODO: 외부에서 값을 받아와야 함
3940
private final String BOOK_PATH = "/sdcard/ocebook/alice3.epub";
@@ -51,8 +52,8 @@ protected void onCreate(Bundle savedInstanceState) {
5152
drawer.addDrawerListener(toggle);
5253
toggle.syncState();
5354

54-
NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
55-
navigationView.setNavigationItemSelectedListener(this);
55+
mTocNavView = (NavigationView) findViewById(R.id.nav_view);
56+
mTocNavView.setNavigationItemSelectedListener(this);
5657

5758
if (!checkPermissions())
5859
return;
@@ -66,9 +67,11 @@ protected void onCreate(Bundle savedInstanceState) {
6667
ContainerHolder.getInstance().put(id, mContainer);
6768

6869
FragmentManager fragmentManager = getFragmentManager();
69-
FragmentTransaction transaction = fragmentManager.beginTransaction();
70-
transaction.add(R.id.webViewFrame, WebViewFragment.newInstance(id));
71-
transaction.commit();
70+
fragmentManager.beginTransaction()
71+
.add(R.id.container_web_fragment, WebViewFragment.newInstance(id))
72+
.commit();
73+
74+
7275
}
7376

7477
private boolean checkPermissions() {
@@ -125,19 +128,7 @@ public boolean onNavigationItemSelected(MenuItem item) {
125128
// Handle navigation view item clicks here.
126129
int id = item.getItemId();
127130

128-
if (id == R.id.nav_camera) {
129-
// Handle the camera action
130-
} else if (id == R.id.nav_gallery) {
131-
132-
} else if (id == R.id.nav_slideshow) {
133-
134-
} else if (id == R.id.nav_manage) {
135131

136-
} else if (id == R.id.nav_share) {
137-
138-
} else if (id == R.id.nav_send) {
139-
140-
}
141132

142133
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
143134
drawer.closeDrawer(GravityCompat.START);
@@ -156,7 +147,16 @@ public boolean handleSdkError(String message, boolean isSevereEpubError) {
156147
}
157148

158149
@Override
159-
public void onFragmentInteraction(Uri uri) {
150+
public void onPackageOpen(Package pckg) {
151+
mTocNavView.getMenu().removeGroup(R.id.menu_group_toc);
152+
153+
mTocManager = new TocManager(pckg);
154+
mTocManager.getTableOfContents()
155+
.forEach(e -> {
156+
mTocNavView.getMenu().add(R.id.menu_group_toc, Menu.NONE, Menu.NONE, e.getTitle());
157+
});
160158

159+
((TextView) mTocNavView.findViewById(R.id.tv_nav_book_title))
160+
.setText(pckg.getTitle());
161161
}
162162
}

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

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -189,13 +189,6 @@ public void addJavascriptInterface(ScriptProcessor.JsInterface jsInterface,
189189
mReadiumServer = new ReadiumServer(mScriptProcessor, mPackage);
190190
}
191191

192-
// TODO: Rename method, update argument and hook method into UI event
193-
public void onButtonPressed(Uri uri) {
194-
if (mListener != null) {
195-
mListener.onFragmentInteraction(uri);
196-
}
197-
}
198-
199192
@Override
200193
public void onAttach(Context context) {
201194
super.onAttach(context);
@@ -249,8 +242,7 @@ public void onDestroy() {
249242
* >Communicating with Other Fragments</a> for more information.
250243
*/
251244
public interface OnFragmentInteractionListener {
252-
// TODO: Update argument type and name
253-
void onFragmentInteraction(Uri uri);
245+
void onPackageOpen(Package pckg);
254246
}
255247

256248
public final class ReadiumWebViewClient extends WebViewClient {
@@ -300,6 +292,7 @@ public void onReaderInitialized() {
300292
.ifPresent(item -> {
301293
mReadiumJSApi.openBook(mPackage, mViewerSettings,
302294
OpenPageRequest.fromIdref(item.getIdRef()));
295+
mListener.onPackageOpen(mPackage);
303296
});
304297
});
305298
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package com.devgrapher.ocebook.readium;
2+
3+
import android.util.Log;
4+
5+
import org.readium.sdk.android.Package;
6+
import org.readium.sdk.android.components.navigation.NavigationElement;
7+
import org.readium.sdk.android.components.navigation.NavigationPoint;
8+
9+
import java.util.List;
10+
import java.util.stream.Collectors;
11+
import java.util.stream.Stream;
12+
13+
/**
14+
* Created by Brent on 2/17/17.
15+
*
16+
* Help to navigate through the Table of Contents.
17+
* This flattens children tree and caches it.
18+
*/
19+
20+
public class TocManager {
21+
private List<NavigationPoint> mToc;
22+
private final Package mPackage;
23+
24+
public TocManager(Package pckg) {
25+
mPackage = pckg;
26+
mToc = flatNavigationElement(mPackage.getTableOfContents())
27+
.filter(e -> e instanceof NavigationPoint)
28+
.map(e -> (NavigationPoint)e)
29+
.collect(Collectors.toList());
30+
mToc.forEach(e -> Log.d("######", e.getTitle()));
31+
}
32+
33+
public Stream<NavigationElement> flatNavigationElement(final NavigationElement elem) {
34+
return Stream.concat(
35+
Stream.of(elem),
36+
elem.getChildren().stream().flatMap(e -> flatNavigationElement(e)));
37+
}
38+
39+
public Stream<NavigationPoint> getTableOfContents() {
40+
return mToc.stream();
41+
}
42+
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
<FrameLayout
1717
android:layout_width="match_parent"
1818
android:layout_height="match_parent"
19-
android:id="@+id/webViewFrame">
19+
android:id="@+id/container_web_fragment">
2020

2121
</FrameLayout>
2222
</RelativeLayout>

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
android:layout_gravity="center_horizontal"
2020
android:id="@+id/tv_page_info"
2121
android:textAppearance="@style/TextAppearance.AppCompat.Body1"
22-
android:text="1 / 10"
2322
android:textSize="14sp"
2423
android:textAlignment="center"
2524
android:fontFamily="sans-serif" />

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

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -12,24 +12,18 @@
1212
android:paddingTop="@dimen/activity_vertical_margin"
1313
android:theme="@style/ThemeOverlay.AppCompat.Dark">
1414

15-
<ImageView
16-
android:id="@+id/imageView"
17-
android:layout_width="wrap_content"
18-
android:layout_height="wrap_content"
19-
android:paddingTop="@dimen/nav_header_vertical_spacing"
20-
app:srcCompat="@android:drawable/sym_def_app_icon" />
21-
2215
<TextView
2316
android:layout_width="match_parent"
2417
android:layout_height="wrap_content"
25-
android:paddingTop="@dimen/nav_header_vertical_spacing"
26-
android:text="Android Studio"
27-
android:textAppearance="@style/TextAppearance.AppCompat.Body1" />
18+
android:id="@+id/tv_nav_book_title"
19+
android:text="title"
20+
android:textAppearance="@style/TextAppearance.AppCompat.Title" />
2821

2922
<TextView
30-
android:id="@+id/textView"
3123
android:layout_width="wrap_content"
3224
android:layout_height="wrap_content"
33-
android:text="android.studio@android.com" />
25+
android:paddingTop="@dimen/nav_header_vertical_spacing"
26+
android:textAppearance="@style/TextAppearance.AppCompat.Body1"
27+
android:text="Table of Contents" />
3428

3529
</LinearLayout>
Lines changed: 2 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,7 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<menu xmlns:android="http://schemas.android.com/apk/res/android">
33

4-
<group android:checkableBehavior="single">
5-
<item
6-
android:id="@+id/nav_camera"
7-
android:icon="@drawable/ic_menu_camera"
8-
android:title="Import" />
9-
<item
10-
android:id="@+id/nav_gallery"
11-
android:icon="@drawable/ic_menu_gallery"
12-
android:title="Gallery" />
13-
<item
14-
android:id="@+id/nav_slideshow"
15-
android:icon="@drawable/ic_menu_slideshow"
16-
android:title="Slideshow" />
17-
<item
18-
android:id="@+id/nav_manage"
19-
android:icon="@drawable/ic_menu_manage"
20-
android:title="Tools" />
4+
<group android:checkableBehavior="single"
5+
android:id="@+id/menu_group_toc">
216
</group>
22-
23-
<item android:title="Communicate">
24-
<menu>
25-
<item
26-
android:id="@+id/nav_share"
27-
android:icon="@drawable/ic_menu_share"
28-
android:title="Share" />
29-
<item
30-
android:id="@+id/nav_send"
31-
android:icon="@drawable/ic_menu_send"
32-
android:title="Send" />
33-
</menu>
34-
</item>
35-
367
</menu>

0 commit comments

Comments
 (0)