move docs
[fanfix.git] / docs / android / android.md
CommitLineData
bac39c50
NR
1# Android UI mock-up
2
3## Concepts
4
5### Story
6
7We have **Stories** in Fanfix, which represent a story (an "epub", ...) or a comics (a "CBZ" file, ...).
8
9A story is written by an author, comes from a source and is dentified by a LUID (Local Unique ID).
10It can be a text story or an image story.
11
12The source can actually be changed by the user (this is the main sorting key).
13
14### Book
15
16We also have **Books**.
17
18Books can be used to display:
19
20- All the sources present in the library
21- All the authors known in the lbrary
22- Stories sharing a source or an author
23
24### All and Listing modes
25
26When representing sources or authors, books can be arranged in two modes:
27
28- "All" mode : all the sources/authors are represented by a book and displayed in the UI
29- "Listing" mode : for each source/author, a group of books representing the corresponding story is present with the name of the source/author to group them (for instance, a JLabel on top of the group)
30
31Note: Listing mode can be left out of the Android version if needed (but the all mode is really needed).
32
33### Destination
34
35What I call here a destination is a specific group of books.
36
37Examples :
38
39- All the sources
40- All the books of author "Tulipe, F."
41- A listing of all the authors and their stories
42
43## Core
44
45### Library (main screen)
46
47[image]
48
49#### Header
50
51The header has a title, a navigation icon on the left and a search icon.
52
53Title can vary upon the current displayed books:
54
55- All sources
56- Sources listing
57- Source: xxx
58- All authors
59- Authors listing
60- Author: xxx
61
62The navigation icon open the Navigation drawer.
63
64The search icon is actually a filter: it will hide all the books that don't contain the given text (search on LUID, title and author).
65
66#### List
67
68This list will hold books. Each item will be represented by :
69
70- a cover image (which is provided by fanfix.jar)
71- a main info, which can be:
72 - for stories, the story title
73 - for source books, the source name
74 - for author books, the author name
75- a secondary info, which can vary via a setting (see the Options page) between:
76 - author name (for a book representing an author, it is left blank)
77 - a count (a word count for text stories, an image count for images stories, a stories count for sources and authors books)
78
79#### UI
80
81Material.IO:
82
83- Title, navigation icon, search icon : Header
84- List : TODO: List? AdaptiveList? (I forgot the full name...)
85
86A tap will open the target book.
87
88A long press will first "select" the book (visually alter it so the user know which book is the target) then open the context menu.
89
90### Navigation drawer
91
92[Image]
93
94The navigation drawer will list 4 destinations:
95
96- All the sources
97- Listing of the sources
98- All the authors
99- Listing of the authors
100- By source
101
102...and 2 foldable "panels" with more destinations:
103
104- By source
105- By author
106
107Those subpanels will either contain the sources/authors **or** sub-subpanels with sources/authors.
108See fanfix.jar (BasicLibrary.getSourcesGrouped() and BasicLibrary.getAuthorsGrouped()).
109
110#### UI
111
112Material.IO:
113
114- Navigation drawer: navigation drawer
115
116TODO: is it ok to have 3 levels of drawers?
117
118### Context menu
119
120[image]
121
122The context menu options are as follow for stories:
123
124- Open : open the book (= internal or external reader)
125- Rename... : ask the user for a new title for the story (default is current name)
126- Move to >> : show a "new source..." option as well as the current ones fo quick select (BasicLibrary.getSourcesGrouped() will return all the sources on only one level if their number is small enough)
127 - *
128 - [new source...]
129 - [A-H]
130 - Anima
131 - Fanfiction.NET
132 - [I-Z]
133 - MangaFox
134- Change author to >> : show a "new author..." option as well as the current ones fo quick select (BasicLibrary.getAuthorsGrouped() will return all the authors on only one level if their number is small enough)
135 - *
136 - [new author...]
137 - [0-9]
138 - 5-stars
139 - [A-H]
140 - Albert
141 - BĂ©atrice
142 - Hakan
143 - [I-Z]
144 - Irma
145 - Zoul
146- Delete : delete the story
147- Redownload : redownload the story (will **not** delete the original)
148- Properties : open the properties page
149
150For other books (sources and authors):
151
152- Open: open the book (= go to the selected destination)
153
154#### UI
155
156Material.IO:
157
158- menu: menu
159
160### Description page
161
162[image-portrait]
163
164[image-landscape]
165
166#### Header
167
168Use the same cover image as the books, and the description key/values comes from BasicLibrary.getDescription().
169
170#### Description
171
172Simply display Story.getMeta().getResume(), without adding the chapter number (it is always 0 for description).
173
174An example can be seen in be.nikiroo.fanfix.ui.GuiReaderViewerTextOutput.java.
175
176### Options page
177
178It consists of a "Remote Library" panel:
179
180- enable : an option to enable/disable the remote library (if disabled, use the local library instead)
181- server : (only enabled if the remote library is) the remote server host
182- port : (only enabled if the remote library is) the remote server port
183- key : (only enabled if the remote library is) the remote server secret key
184
185...and 5 other options:
186
187- Open CBZ files internally : open CBZ files with the internal viewer
188- Open epub files internally : open EPUB files with the internal viewer
189- Show handles on image viewer : can hide the handles used as cues in the image viewer to know where to click
190- Startup screen : select the destination to show on application startup
191- Language : select the language to use
192
193#### Startup screen
194
195Can be:
196
197- Sources
198 - All
199 - Listing
200- Authors
201 - All
202 - Listing
203
204...but will have to be presented in a better way to the user (i.e., better names).
205
206#### UI
207
208Material.IO:
209
210- the page itself : Temporary UI Region
211- the options : Switch
212- the languages : Exposed Dropdown Menu
213- the text fields : the default for text fields
b19b9ba2 214- the scret key field : the default for passwords (with * * * )
bac39c50 215
b19b9ba2
NR
216## Internal viewer
217
218The program will have an internal viewer that will be able to display the 2 kinds of stories (images and text).
219
220### Base viewer
221
222This is common to both of the viewer (this is **not** an architectural directives, I only speak about the concept here).
223
224[image]
225
226#### Header
227
228The title is the title of the story, shortened with "..." if too long.
229
230#### Content
231
232This area will host the text viewer or the image viewer.
233
234#### Navigator
235
236It contains 4 action buttons (first, previous, next and last chapter) and the title of the current chapter:
237
238- Descripton : for the properties page (same layout as the actual Properties page)
239- Chapter X/Y: title : for the normal chapters (note that "Chapter X/Y" should be bold, and "X" should be coloured)
240
241#### UI
242
243Matrial.IO:
244
245- Header : Header
246- Navigator : Bottom sheet
247
248### Text viewer
249
250[image]
251
252It will contain the content of the current chapter (Story.getChapters().get(index - 1)).
253
254Same layout as the Properties page uses for the resume, with just a small difference: the chapter name is now prefixed by "Chaper X: ".
255
256### Image viewer
257
258[image]
259
260#### Image
261
262Auto-zoom and fit (keep aspect ratio).
263
264#### Image counter
265
266Just display "Image X/Y"
267
268#### Handles
269
270This is a simple cue to show the user where to click.
271
272It can be hidden via the option "Show handles on image viewer" from the Options page.
273
274#### UI
275
276Pinch & Zoom should be allowed.
277
278Drag-to-pan should be allowed.
bac39c50 279