Skip to content
This repository was archived by the owner on May 7, 2025. It is now read-only.

Commit 6c648f8

Browse files
committed
Merge pull request #39 from readium/feature/ui_rendition
Add UI controls for rendition:flow, updated spread change to include auto.
2 parents 492cebe + a6c4f21 commit 6c648f8

File tree

5 files changed

+322
-116
lines changed

5 files changed

+322
-116
lines changed

SDKLauncher-Android/res/layout/viewer_settings.xml

Lines changed: 145 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -2,46 +2,149 @@
22
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
33
android:layout_width="match_parent"
44
android:layout_height="match_parent"
5-
android:orientation="vertical"
6-
android:padding="8dp">
7-
8-
<TextView android:text="@string/fontSize"
9-
android:layout_width="match_parent"
10-
android:layout_height="wrap_content"
11-
style="@android:style/TextAppearance.Medium"
12-
android:paddingLeft="8dp"/>
13-
<EditText android:hint="@string/fontSize"
14-
android:id="@+id/fontSize"
15-
android:layout_width="match_parent"
16-
android:layout_height="wrap_content"
17-
android:inputType="number"/>
18-
<TextView android:text="@string/columnGap"
19-
android:layout_width="match_parent"
20-
android:layout_height="wrap_content"
21-
style="@android:style/TextAppearance.Medium"
22-
android:paddingLeft="8dp"/>
23-
<EditText android:hint="@string/columnGap"
24-
android:id="@+id/columnGap"
25-
android:layout_width="match_parent"
26-
android:layout_height="wrap_content"
27-
android:inputType="number"/>
28-
<CheckBox android:text="@string/syntheticSpread"
29-
android:id="@+id/syntheticSpread"
30-
android:layout_width="match_parent"
31-
android:layout_height="wrap_content"/>
32-
<LinearLayout
33-
android:layout_width="match_parent"
34-
android:layout_height="wrap_content"
35-
android:orientation="horizontal" >
36-
<Button android:text="@android:string/cancel"
37-
android:id="@+id/cancel"
38-
android:layout_width="0dp"
39-
android:layout_weight="1"
40-
android:layout_height="wrap_content"/>
41-
<Button android:text="@android:string/ok"
42-
android:id="@+id/ok"
43-
android:layout_width="0dp"
44-
android:layout_weight="1"
45-
android:layout_height="wrap_content"/>
46-
</LinearLayout>
5+
android:orientation="vertical">
6+
7+
<ScrollView
8+
android:layout_width="fill_parent"
9+
android:layout_height="fill_parent"
10+
android:id="@+id/scrollView" >
11+
12+
<LinearLayout
13+
android:orientation="vertical"
14+
android:layout_width="fill_parent"
15+
android:layout_height="fill_parent"
16+
android:padding="4dp">
17+
18+
<TextView android:text="@string/fontSize"
19+
android:layout_width="match_parent"
20+
android:layout_height="wrap_content"
21+
style="?android:attr/listSeparatorTextViewStyle"
22+
android:paddingLeft="8dp"/>
23+
24+
<EditText android:hint="@string/fontSize"
25+
android:id="@+id/fontSize"
26+
android:layout_width="match_parent"
27+
android:layout_height="wrap_content"
28+
android:inputType="number"
29+
android:layout_marginBottom="8dp"
30+
android:layout_marginTop="8dp" />
31+
32+
<TextView android:text="@string/columnGap"
33+
android:layout_width="match_parent"
34+
android:layout_height="wrap_content"
35+
style="?android:attr/listSeparatorTextViewStyle"
36+
android:paddingLeft="8dp" />
37+
38+
<EditText android:hint="@string/columnGap"
39+
android:id="@+id/columnGap"
40+
android:layout_width="match_parent"
41+
android:layout_height="wrap_content"
42+
android:inputType="number"
43+
android:layout_marginTop="8dp"
44+
android:layout_marginBottom="8dp" />
45+
46+
<LinearLayout
47+
android:orientation="horizontal"
48+
android:layout_width="fill_parent"
49+
android:layout_height="wrap_content">
50+
51+
<LinearLayout
52+
android:orientation="vertical"
53+
android:layout_width="wrap_content"
54+
android:layout_height="wrap_content"
55+
android:layout_weight="2">
56+
57+
<TextView
58+
android:layout_width="fill_parent"
59+
android:layout_height="wrap_content"
60+
android:text="@string/syntheticSpread"
61+
android:id="@+id/textView"
62+
style="?android:attr/listSeparatorTextViewStyle"
63+
android:ellipsize="end"
64+
android:lines="1" />
65+
66+
<RadioGroup
67+
android:layout_width="wrap_content"
68+
android:layout_height="wrap_content"
69+
android:orientation="vertical"
70+
android:padding="8dp"
71+
android:id="@+id/spreadSettings">
72+
73+
<RadioButton
74+
android:layout_width="wrap_content"
75+
android:layout_height="wrap_content"
76+
android:text="@string/auto"
77+
android:id="@+id/spreadAuto"
78+
android:layout_weight="1"
79+
android:checked="true" />
80+
81+
<RadioButton
82+
android:layout_width="wrap_content"
83+
android:layout_height="wrap_content"
84+
android:text="@string/single"
85+
android:id="@+id/spreadSingle"
86+
android:layout_weight="1" />
87+
88+
<RadioButton
89+
android:layout_width="wrap_content"
90+
android:layout_height="wrap_content"
91+
android:text="@string/double_"
92+
android:id="@+id/spreadDouble"
93+
android:singleLine="false"
94+
android:layout_weight="1" />
95+
</RadioGroup>
96+
</LinearLayout>
97+
98+
<LinearLayout
99+
android:orientation="vertical"
100+
android:layout_width="wrap_content"
101+
android:layout_height="wrap_content"
102+
android:layout_weight="1"
103+
android:layout_marginLeft="4dp">
104+
105+
<TextView
106+
style="?android:attr/listSeparatorTextViewStyle"
107+
android:layout_width="fill_parent"
108+
android:layout_height="wrap_content"
109+
android:text="@string/scrollMode"
110+
android:id="@+id/textView2"
111+
android:ellipsize="end"
112+
android:lines="1" />
113+
114+
<RadioGroup
115+
android:layout_width="wrap_content"
116+
android:layout_height="wrap_content"
117+
android:padding="8dp"
118+
android:orientation="vertical"
119+
android:id="@+id/scrollSettings">
120+
121+
<RadioButton
122+
android:layout_width="wrap_content"
123+
android:layout_height="wrap_content"
124+
android:text="Auto"
125+
android:id="@+id/scrollAuto"
126+
android:checked="true"
127+
android:layout_weight="1" />
128+
129+
<RadioButton
130+
android:layout_width="wrap_content"
131+
android:layout_height="wrap_content"
132+
android:text="Document"
133+
android:id="@+id/scrollDocument"
134+
android:layout_weight="1" />
135+
136+
<RadioButton
137+
android:layout_width="wrap_content"
138+
android:layout_height="wrap_content"
139+
android:text="Continuous"
140+
android:id="@+id/scrollContinuous"
141+
android:singleLine="false"
142+
android:layout_weight="1" />
143+
</RadioGroup>
144+
</LinearLayout>
145+
146+
</LinearLayout>
147+
</LinearLayout>
148+
</ScrollView>
149+
47150
</LinearLayout>

SDKLauncher-Android/res/values/strings.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,5 +45,9 @@
4545
<string name="menu_mo_next">Next</string>
4646
<string name="menu_mo_play">Play</string>
4747
<string name="menu_mo_pause">Pause</string>
48+
<string name="auto">Auto</string>
49+
<string name="single">Single</string>
50+
<string name="double_">Double</string>
51+
<string name="scrollMode">Scroll Mode</string>
4852

4953
</resources>

SDKLauncher-Android/src/org/readium/sdk/android/launcher/ViewerSettingsDialog.java

Lines changed: 101 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -31,15 +31,16 @@
3131

3232
import org.readium.sdk.android.launcher.model.ViewerSettings;
3333

34+
import android.app.AlertDialog;
35+
import android.app.Dialog;
36+
import android.content.DialogInterface;
3437
import android.support.v4.app.DialogFragment;
3538
import android.os.Bundle;
3639
import android.util.Log;
3740
import android.view.LayoutInflater;
3841
import android.view.View;
39-
import android.view.ViewGroup;
40-
import android.widget.Button;
41-
import android.widget.CheckBox;
4242
import android.widget.EditText;
43+
import android.widget.RadioGroup;
4344

4445
/**
4546
* This dialog displays the viewer settings to the user.
@@ -67,55 +68,104 @@ public ViewerSettingsDialog(OnViewerSettingsChange listener, ViewerSettings orig
6768
}
6869

6970
@Override
70-
public View onCreateView(LayoutInflater inflater, ViewGroup container,
71+
public Dialog onCreateDialog(
7172
Bundle savedInstanceState) {
72-
73-
getDialog().setTitle(R.string.settings);
74-
View dialogView = inflater.inflate(R.layout.viewer_settings, container);
75-
76-
final CheckBox syntheticSpread = (CheckBox) dialogView.findViewById(R.id.syntheticSpread);
77-
syntheticSpread.setChecked(mOriginalSettings.isSyntheticSpread());
78-
79-
final EditText fontSizeText = (EditText) dialogView.findViewById(R.id.fontSize);
80-
fontSizeText.setText("" + mOriginalSettings.getFontSize());
81-
82-
final EditText columnGapText = (EditText) dialogView.findViewById(R.id.columnGap);
83-
columnGapText.setText("" + mOriginalSettings.getColumnGap());
84-
85-
Button ok = (Button) dialogView.findViewById(R.id.ok);
86-
ok.setOnClickListener(new View.OnClickListener() {
87-
88-
@Override
89-
public void onClick(View v) {
90-
if (mListener != null) {
91-
int fontSize = parseString(fontSizeText.getText().toString(), 100);
92-
int columnGap = parseString(columnGapText.getText().toString(), 20);
93-
ViewerSettings settings = new ViewerSettings(syntheticSpread.isChecked(), fontSize, columnGap);
94-
mListener.onViewerSettingsChange(settings);
95-
}
96-
dismiss();
97-
}
98-
99-
private int parseString(String s, int defaultValue) {
100-
try {
101-
return Integer.parseInt(s);
102-
} catch (Exception e) {
103-
Log.e(TAG, ""+e.getMessage(), e);
104-
}
105-
return defaultValue;
106-
}
107-
});
108-
109-
Button cancel = (Button) dialogView.findViewById(R.id.cancel);
110-
cancel.setOnClickListener(new View.OnClickListener() {
111-
112-
@Override
113-
public void onClick(View v) {
114-
dismiss();
115-
}
116-
});
117-
118-
return dialogView;
73+
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
74+
75+
LayoutInflater inflater = getActivity().getLayoutInflater();
76+
77+
final View dialogView = inflater.inflate(R.layout.viewer_settings, null);
78+
79+
final RadioGroup spreadGroup = (RadioGroup) dialogView.findViewById(R.id.spreadSettings);
80+
switch (mOriginalSettings.getSyntheticSpreadMode()) {
81+
case AUTO:
82+
spreadGroup.check(R.id.spreadAuto);
83+
break;
84+
case DOUBLE:
85+
spreadGroup.check(R.id.spreadDouble);
86+
break;
87+
case SINGLE:
88+
spreadGroup.check(R.id.spreadSingle);
89+
break;
90+
}
91+
92+
final RadioGroup scrollGroup = (RadioGroup) dialogView.findViewById(R.id.scrollSettings);
93+
switch (mOriginalSettings.getScrollMode()) {
94+
case AUTO:
95+
scrollGroup.check(R.id.scrollAuto);
96+
break;
97+
case DOCUMENT:
98+
scrollGroup.check(R.id.scrollDocument);
99+
break;
100+
case CONTINUOUS:
101+
scrollGroup.check(R.id.scrollContinuous);
102+
break;
103+
}
104+
105+
final EditText fontSizeText = (EditText) dialogView.findViewById(R.id.fontSize);
106+
fontSizeText.setText("" + mOriginalSettings.getFontSize());
107+
108+
final EditText columnGapText = (EditText) dialogView.findViewById(R.id.columnGap);
109+
columnGapText.setText("" + mOriginalSettings.getColumnGap());
110+
111+
112+
builder.setView(dialogView)
113+
.setTitle(R.string.settings)
114+
.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
115+
@Override
116+
public void onClick(DialogInterface dialog, int id) {
117+
if (mListener != null) {
118+
int fontSize = parseString(fontSizeText.getText().toString(), 100);
119+
int columnGap = parseString(columnGapText.getText().toString(), 20);
120+
121+
ViewerSettings.SyntheticSpreadMode syntheticSpreadMode = null;
122+
switch (spreadGroup.getCheckedRadioButtonId()) {
123+
case R.id.spreadAuto:
124+
syntheticSpreadMode = ViewerSettings.SyntheticSpreadMode.AUTO;
125+
break;
126+
case R.id.spreadSingle:
127+
syntheticSpreadMode = ViewerSettings.SyntheticSpreadMode.SINGLE;
128+
break;
129+
case R.id.spreadDouble:
130+
syntheticSpreadMode = ViewerSettings.SyntheticSpreadMode.DOUBLE;
131+
break;
132+
}
133+
134+
ViewerSettings.ScrollMode scrollMode = null;
135+
switch (scrollGroup.getCheckedRadioButtonId()) {
136+
case R.id.scrollAuto:
137+
scrollMode = ViewerSettings.ScrollMode.AUTO;
138+
break;
139+
case R.id.scrollDocument:
140+
scrollMode = ViewerSettings.ScrollMode.DOCUMENT;
141+
break;
142+
case R.id.scrollContinuous:
143+
scrollMode = ViewerSettings.ScrollMode.CONTINUOUS;
144+
break;
145+
}
146+
147+
ViewerSettings settings = new ViewerSettings(syntheticSpreadMode, scrollMode, fontSize, columnGap);
148+
mListener.onViewerSettingsChange(settings);
149+
}
150+
dismiss();
151+
}
152+
153+
private int parseString(String s, int defaultValue) {
154+
try {
155+
return Integer.parseInt(s);
156+
} catch (Exception e) {
157+
Log.e(TAG, "" + e.getMessage(), e);
158+
}
159+
return defaultValue;
160+
}
161+
})
162+
.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
163+
public void onClick(DialogInterface dialog, int id) {
164+
dismiss();
165+
}
166+
});
167+
168+
return builder.create();
119169
}
120170

121171
}

SDKLauncher-Android/src/org/readium/sdk/android/launcher/WebViewActivity.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,7 @@ protected Void doInBackground(Void... params) {
180180

181181
// Load the page skeleton
182182
mWebview.loadUrl(READER_SKELETON);
183-
mViewerSettings = new ViewerSettings(false, 100, 20);
183+
mViewerSettings = new ViewerSettings(ViewerSettings.SyntheticSpreadMode.AUTO, ViewerSettings.ScrollMode.AUTO, 100, 20);
184184
mReadiumJSApi = new ReadiumJSApi(new ReadiumJSApi.JSLoader() {
185185

186186
@Override

0 commit comments

Comments
 (0)