Merge lp:~thomas-voss/biometryd/add-sphinx-documentation into lp:biometryd

Proposed by Thomas Voß
Status: Merged
Approved by: Ken VanDine
Approved revision: 38
Merged at revision: 38
Proposed branch: lp:~thomas-voss/biometryd/add-sphinx-documentation
Merge into: lp:biometryd
Diff against target: 682 lines (+597/-3)
10 files modified
doc/CMakeLists.txt (+4/-0)
doc/Doxyfile (+3/-3)
doc/architecture.md (+65/-0)
doc/conf.py (+344/-0)
doc/extending_biometryd.md (+55/-0)
doc/index.rst (+10/-0)
doc/interfaces.rst (+17/-0)
doc/intro.md (+21/-0)
doc/manual_test_plan.md.moved (+77/-0)
doc/requirements.txt (+1/-0)
To merge this branch: bzr merge lp:~thomas-voss/biometryd/add-sphinx-documentation
Reviewer Review Type Date Requested Status
Simon Fels Approve
Review via email: mp+297845@code.launchpad.net

Commit message

Add sphinx documentation.

Description of the change

Add sphinx documentation.

To post a comment you must log in.
36. By Thomas Voß

Adjust author/copyright holder.

37. By Thomas Voß

Add images illustrating key system aspects.

Revision history for this message
Simon Fels (morphis) wrote :

LGTM

review: Approve
38. By Thomas Voß

[ Thomas Voß ]
* Verify incoming requests. (LP: #1593383)
* Immediately cancel operations instead of enqueuing cancellation.
* Only for landing purposes.
* cmds::Run now tries to make an educated guess for configuring the
  default device.
* Also consider /custom/vendor/biometryd/plugins when scanning for
  plugins.
[ Ken VanDine ]
* Added COPYING file for the LGPL-3 and updated copyright for the
  single file licensed under MIT

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'doc/CMakeLists.txt'
2--- doc/CMakeLists.txt 2016-05-02 06:16:01 +0000
3+++ doc/CMakeLists.txt 2016-06-26 19:02:08 +0000
4@@ -6,6 +6,10 @@
5
6 if (BIOMETRYD_ENABLE_DOC_GENERATION)
7
8+# Please note that we are creating documentation within the source tree
9+# as we are hosting our documentation on readthedocs.org. For their build machinery to work
10+# properly, we need to generate doxygen XML output within the source tree.
11+
12 find_package(Doxygen)
13
14 if (DOXYGEN_FOUND)
15
16=== renamed file 'doc/Doxyfile.in' => 'doc/Doxyfile'
17--- doc/Doxyfile.in 2016-05-02 06:16:01 +0000
18+++ doc/Doxyfile 2016-06-26 19:02:08 +0000
19@@ -32,7 +32,7 @@
20 # This could be handy for archiving the generated documentation or
21 # if some version control system is used.
22
23-PROJECT_NUMBER = @BIOMETRYD_VERSION_MAJOR@.@BIOMETRYD_VERSION_MINOR@.@BIOMETRYD_VERSION_PATCH@
24+PROJECT_NUMBER = 0.0.1
25
26 # Using the PROJECT_BRIEF tag one can provide an optional one line description
27 # for a project that appears at the top of each page and should give viewer
28@@ -668,7 +668,7 @@
29 # directories like "/usr/src/myproject". Separate the files or directories
30 # with spaces.
31
32-INPUT = @CMAKE_CURRENT_SOURCE_DIR@ @CMAKE_CURRENT_SOURCE_DIR@/../include @CMAKE_BINARY_DIR@/include @CMAKE_SOURCE_DIR@/src/biometry/qml
33+INPUT = ../include ../src/biometry/qml
34
35 # This tag can be used to specify the character encoding of the source files
36 # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
37@@ -1463,7 +1463,7 @@
38 # generate an XML file that captures the structure of
39 # the code including all documentation.
40
41-GENERATE_XML = NO
42+GENERATE_XML = YES
43
44 # The XML_OUTPUT tag is used to specify where the XML pages will be put.
45 # If a relative path is entered the value of OUTPUT_DIRECTORY will be
46
47=== added directory 'doc/_static'
48=== added directory 'doc/_templates'
49=== added file 'doc/architecture.md'
50--- doc/architecture.md 1970-01-01 00:00:00 +0000
51+++ doc/architecture.md 2016-06-26 19:02:08 +0000
52@@ -0,0 +1,65 @@
53+# Architecture & Technology
54+
55+This section presents a high-level overview of the system design. The
56+system is devided into a set of core components and concepts that are
57+exposed via DBus to client applications.
58+
59+Please note that we designed the core components such that other types
60+of (remote) interfaces are possible, e.g., a REST API. At the time of
61+this writing, DBus is the primary interface though.
62+
63+The primary implementation language is C++11, and we offer both a C++11
64+client library as well as QML bindings. Other languages, runtimes and
65+toolkits can easily consume Biomtryd by either leveraging theq
66+aforementioned client bindings or by directly consuming the DBus API.
67+
68+The following diagram gives an overview of the main interfaces as
69+further described in this secion:
70+
71+![Biometryd overview](images/biometryd.png)
72+
73+## Device
74+
75+A Device abstracts an arbitrary biometric device. It bundles together access to
76+a set of interfaces that enable client applications to:
77+ - enroll and query information about known templates
78+ - identify a user from a set of candidate users
79+ - verify that a given user is actually interacting with a device
80+
81+### Template Store
82+
83+A template store enables applications to manage and query information
84+about enrolled templates. A template is device-specific and its actual
85+data is *not* available to applications. Instead, it is referred to
86+and uniquely identified by a numeric id in the context of one specific
87+device implementation. Applications can:
88+
89+- add (enroll) a template to the template store
90+ - remove an individual template from the template store
91+ - clear out all templates
92+ - list all enrolled templates
93+
94+### Identifier
95+
96+An identifier enables applications to identify one user from a given
97+set of candidate users.
98+
99+### Verifier
100+
101+A verifier enables applications to verify that a specific user is
102+interacting with a device.
103+
104+## Operation
105+
106+The overall system and access to its functionality is structured
107+around the notion of an asynchronous operation. An operation is a
108+state machine as shown in: ![Operation state machine](images/state_machine.png)
109+
110+Client applications can start and cancel an operation, all other state
111+transitions are triggered by the device implementation executing an
112+operation. An operation and its state transitions can be observed by
113+client applications and certain type of devices hand out detailed
114+information about the ongoing operation.
115+
116+Please note that both the service and device implementations might
117+cancel an ongoing operation, too.
118
119=== added file 'doc/conf.py'
120--- doc/conf.py 1970-01-01 00:00:00 +0000
121+++ doc/conf.py 2016-06-26 19:02:08 +0000
122@@ -0,0 +1,344 @@
123+# -*- coding: utf-8 -*-
124+#
125+# biometryd documentation build configuration file, created by
126+# sphinx-quickstart on Fri Jun 17 21:36:48 2016.
127+#
128+# This file is execfile()d with the current directory set to its
129+# containing dir.
130+#
131+# Note that not all possible configuration values are present in this
132+# autogenerated file.
133+#
134+# All configuration values have a default; values that are commented out
135+# serve to show the default.
136+
137+# If extensions (or modules to document with autodoc) are in another directory,
138+# add these directories to sys.path here. If the directory is relative to the
139+# documentation root, use os.path.abspath to make it absolute, like shown here.
140+#
141+import os
142+import sys
143+# sys.path.insert(0, os.path.abspath('.'))
144+
145+on_rtd = os.environ.get('READTHEDOCS', None) == 'True'
146+if on_rtd:
147+ from subprocess import call
148+ call('doxygen')
149+
150+# -- General configuration ------------------------------------------------
151+
152+# If your documentation needs a minimal Sphinx version, state it here.
153+#
154+# needs_sphinx = '1.0'
155+
156+# Add any Sphinx extension module names here, as strings. They can be
157+# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
158+# ones.
159+extensions = ['breathe']
160+
161+breathe_projects = { "biometryd": "xml" }
162+breathe_default_project = "biometryd"
163+# Add any paths that contain templates here, relative to this directory.
164+templates_path = ['_templates']
165+
166+source_parsers = {
167+ '.md': 'recommonmark.parser.CommonMarkParser',
168+}
169+source_suffix = ['.rst', '.md']
170+
171+# The suffix(es) of source filenames.
172+# You can specify multiple suffix as a list of string:
173+#
174+# source_suffix = ['.rst', '.md']
175+# source_suffix = '.md'
176+
177+# The encoding of source files.
178+#
179+# source_encoding = 'utf-8-sig'
180+
181+# The master toctree document.
182+master_doc = 'index'
183+
184+# General information about the project.
185+project = u'biometryd'
186+copyright = u'2016, Canonical Ltd.'
187+author = u'Thomas Voß'
188+
189+# The version info for the project you're documenting, acts as replacement for
190+# |version| and |release|, also used in various other places throughout the
191+# built documents.
192+#
193+# The short X.Y version.
194+version = u'0.0.1'
195+# The full version, including alpha/beta/rc tags.
196+release = u'0.0.1'
197+
198+# The language for content autogenerated by Sphinx. Refer to documentation
199+# for a list of supported languages.
200+#
201+# This is also used if you do content translation via gettext catalogs.
202+# Usually you set "language" from the command line for these cases.
203+language = None
204+
205+# There are two options for replacing |today|: either, you set today to some
206+# non-false value, then it is used:
207+#
208+# today = ''
209+#
210+# Else, today_fmt is used as the format for a strftime call.
211+#
212+# today_fmt = '%B %d, %Y'
213+
214+# List of patterns, relative to source directory, that match files and
215+# directories to ignore when looking for source files.
216+# This patterns also effect to html_static_path and html_extra_path
217+exclude_patterns = []
218+
219+# The reST default role (used for this markup: `text`) to use for all
220+# documents.
221+#
222+# default_role = None
223+
224+# If true, '()' will be appended to :func: etc. cross-reference text.
225+#
226+# add_function_parentheses = True
227+
228+# If true, the current module name will be prepended to all description
229+# unit titles (such as .. function::).
230+#
231+# add_module_names = True
232+
233+# If true, sectionauthor and moduleauthor directives will be shown in the
234+# output. They are ignored by default.
235+#
236+# show_authors = False
237+
238+# The name of the Pygments (syntax highlighting) style to use.
239+pygments_style = 'sphinx'
240+
241+# A list of ignored prefixes for module index sorting.
242+# modindex_common_prefix = []
243+
244+# If true, keep warnings as "system message" paragraphs in the built documents.
245+# keep_warnings = False
246+
247+# If true, `todo` and `todoList` produce output, else they produce nothing.
248+todo_include_todos = False
249+
250+
251+# -- Options for HTML output ----------------------------------------------
252+
253+# The theme to use for HTML and HTML Help pages. See the documentation for
254+# a list of builtin themes.
255+#
256+html_theme = 'sphinx_rtd_theme'
257+
258+# Theme options are theme-specific and customize the look and feel of a theme
259+# further. For a list of options available for each theme, see the
260+# documentation.
261+#
262+# html_theme_options = {}
263+
264+# Add any paths that contain custom themes here, relative to this directory.
265+# html_theme_path = []
266+
267+# The name for this set of Sphinx documents.
268+# "<project> v<release> documentation" by default.
269+#
270+# html_title = u'biometryd v0.0.1'
271+
272+# A shorter title for the navigation bar. Default is the same as html_title.
273+#
274+# html_short_title = None
275+
276+# The name of an image file (relative to this directory) to place at the top
277+# of the sidebar.
278+#
279+# html_logo = None
280+
281+# The name of an image file (relative to this directory) to use as a favicon of
282+# the docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32
283+# pixels large.
284+#
285+# html_favicon = None
286+
287+# Add any paths that contain custom static files (such as style sheets) here,
288+# relative to this directory. They are copied after the builtin static files,
289+# so a file named "default.css" will overwrite the builtin "default.css".
290+html_static_path = ['_static']
291+
292+# Add any extra paths that contain custom files (such as robots.txt or
293+# .htaccess) here, relative to this directory. These files are copied
294+# directly to the root of the documentation.
295+#
296+# html_extra_path = []
297+
298+# If not None, a 'Last updated on:' timestamp is inserted at every page
299+# bottom, using the given strftime format.
300+# The empty string is equivalent to '%b %d, %Y'.
301+#
302+# html_last_updated_fmt = None
303+
304+# If true, SmartyPants will be used to convert quotes and dashes to
305+# typographically correct entities.
306+#
307+# html_use_smartypants = True
308+
309+# Custom sidebar templates, maps document names to template names.
310+#
311+# html_sidebars = {}
312+
313+# Additional templates that should be rendered to pages, maps page names to
314+# template names.
315+#
316+# html_additional_pages = {}
317+
318+# If false, no module index is generated.
319+#
320+# html_domain_indices = True
321+
322+# If false, no index is generated.
323+#
324+# html_use_index = True
325+
326+# If true, the index is split into individual pages for each letter.
327+#
328+# html_split_index = False
329+
330+# If true, links to the reST sources are added to the pages.
331+#
332+# html_show_sourcelink = True
333+
334+# If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
335+#
336+# html_show_sphinx = True
337+
338+# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
339+#
340+# html_show_copyright = True
341+
342+# If true, an OpenSearch description file will be output, and all pages will
343+# contain a <link> tag referring to it. The value of this option must be the
344+# base URL from which the finished HTML is served.
345+#
346+# html_use_opensearch = ''
347+
348+# This is the file name suffix for HTML files (e.g. ".xhtml").
349+# html_file_suffix = None
350+
351+# Language to be used for generating the HTML full-text search index.
352+# Sphinx supports the following languages:
353+# 'da', 'de', 'en', 'es', 'fi', 'fr', 'hu', 'it', 'ja'
354+# 'nl', 'no', 'pt', 'ro', 'ru', 'sv', 'tr', 'zh'
355+#
356+# html_search_language = 'en'
357+
358+# A dictionary with options for the search language support, empty by default.
359+# 'ja' uses this config value.
360+# 'zh' user can custom change `jieba` dictionary path.
361+#
362+# html_search_options = {'type': 'default'}
363+
364+# The name of a javascript file (relative to the configuration directory) that
365+# implements a search results scorer. If empty, the default will be used.
366+#
367+# html_search_scorer = 'scorer.js'
368+
369+# Output file base name for HTML help builder.
370+htmlhelp_basename = 'biometryddoc'
371+
372+# -- Options for LaTeX output ---------------------------------------------
373+
374+latex_elements = {
375+ # The paper size ('letterpaper' or 'a4paper').
376+ #
377+ # 'papersize': 'letterpaper',
378+
379+ # The font size ('10pt', '11pt' or '12pt').
380+ #
381+ # 'pointsize': '10pt',
382+
383+ # Additional stuff for the LaTeX preamble.
384+ #
385+ # 'preamble': '',
386+
387+ # Latex figure (float) alignment
388+ #
389+ # 'figure_align': 'htbp',
390+}
391+
392+# Grouping the document tree into LaTeX files. List of tuples
393+# (source start file, target name, title,
394+# author, documentclass [howto, manual, or own class]).
395+latex_documents = [
396+ (master_doc, 'biometryd.tex', u'biometryd Documentation',
397+ u'Thomas Voß', 'manual'),
398+]
399+
400+# The name of an image file (relative to this directory) to place at the top of
401+# the title page.
402+#
403+# latex_logo = None
404+
405+# For "manual" documents, if this is true, then toplevel headings are parts,
406+# not chapters.
407+#
408+# latex_use_parts = False
409+
410+# If true, show page references after internal links.
411+#
412+# latex_show_pagerefs = False
413+
414+# If true, show URL addresses after external links.
415+#
416+# latex_show_urls = False
417+
418+# Documents to append as an appendix to all manuals.
419+#
420+# latex_appendices = []
421+
422+# If false, no module index is generated.
423+#
424+# latex_domain_indices = True
425+
426+
427+# -- Options for manual page output ---------------------------------------
428+
429+# One entry per manual page. List of tuples
430+# (source start file, name, description, authors, manual section).
431+man_pages = [
432+ (master_doc, 'biometryd', u'biometryd Documentation',
433+ [author], 1)
434+]
435+
436+# If true, show URL addresses after external links.
437+#
438+# man_show_urls = False
439+
440+
441+# -- Options for Texinfo output -------------------------------------------
442+
443+# Grouping the document tree into Texinfo files. List of tuples
444+# (source start file, target name, title, author,
445+# dir menu entry, description, category)
446+texinfo_documents = [
447+ (master_doc, 'biometryd', u'biometryd Documentation',
448+ author, 'biometryd', 'One line description of project.',
449+ 'Miscellaneous'),
450+]
451+
452+# Documents to append as an appendix to all manuals.
453+#
454+# texinfo_appendices = []
455+
456+# If false, no module index is generated.
457+#
458+# texinfo_domain_indices = True
459+
460+# How to display URL addresses: 'footnote', 'no', or 'inline'.
461+#
462+# texinfo_show_urls = 'footnote'
463+
464+# If true, do not generate a @detailmenu in the "Top" node's menu.
465+#
466+# texinfo_no_detailmenu = False
467
468=== added file 'doc/extending_biometryd.md'
469--- doc/extending_biometryd.md 1970-01-01 00:00:00 +0000
470+++ doc/extending_biometryd.md 2016-06-26 19:02:08 +0000
471@@ -0,0 +1,55 @@
472+# Extending Biometryd
473+
474+Biometryd can be extended by implementing the interface
475+`biometry::Device`. We support both in-tree and out-of-tree
476+plugins. In-tree plugin authors should add their device implementation
477+in the folder `${BIOMETRYD_ROOT}/src/biometry/devices` and submit
478+their code contribution as a merge proposal to `https://launchpad.net/biometryd`.
479+
480+Out-of-tree plugin authors should rely on
481+ - `BIOMETRYD_DEVICES_PLUGIN_DESCRIBE(name, author, desc, major, minor, patch)`
482+ - `name` The name of the plugin
483+ - `author` The author of the plugin
484+ - `desc` Human-readable description of the plugin
485+ - `major` Major revision of the plugin
486+ - `minor` Minor revision of the plugin
487+ - `patch` Patch level of the plugin
488+ - `BIOMETRYD_DEVICES_PLUGIN_CREATE`
489+ - `BIOMETRYD_DEVICES_PLUGIN_DESTROY`
490+
491+to describe, instantiate and destroy their plugin, respectively. The
492+following snippet demonstrates a complete plugin definition. The
493+resulting shared object file should be installed to `biometryd config
494+--flag default_plugin_directory`. Once the plugin is installed, it can
495+be referenced by its name as passed to
496+`BIOMETRYD_DEVICES_PLUGIN_DESCRIBE`.
497+
498+```c++
499+#include <biometry/devices/plugin/interface.h>
500+
501+#include "mock_device.h"
502+
503+/// [Defining the create function]
504+BIOMETRYD_DEVICES_PLUGIN_CREATE
505+{
506+ return new testing::MockDevice();
507+}
508+/// [Defining the create function]
509+
510+/// [Defining the destroy function]
511+BIOMETRYD_DEVICES_PLUGIN_DESTROY
512+{
513+ delete d;
514+}
515+/// [Defining the destroy function]
516+
517+/// [Describing the plugin]
518+BIOMETRYD_DEVICES_PLUGIN_DESCRIBE(
519+ "TestPlugin",
520+ "Thomas Voß <thomas.voss@canonical.com>",
521+ "Just a plugin for testing purposes",
522+ 0,
523+ 0,
524+ 0)
525+/// [Describing the plugin]
526+ ```
527
528=== added directory 'doc/images'
529=== added file 'doc/images/biometryd.png'
530Binary files doc/images/biometryd.png 1970-01-01 00:00:00 +0000 and doc/images/biometryd.png 2016-06-26 19:02:08 +0000 differ
531=== added file 'doc/images/state_machine.png'
532Binary files doc/images/state_machine.png 1970-01-01 00:00:00 +0000 and doc/images/state_machine.png 2016-06-26 19:02:08 +0000 differ
533=== added file 'doc/index.rst'
534--- doc/index.rst 1970-01-01 00:00:00 +0000
535+++ doc/index.rst 2016-06-26 19:02:08 +0000
536@@ -0,0 +1,10 @@
537+Welcome to biometryd's documentation
538+------------------------------------
539+
540+ .. toctree::
541+
542+ intro
543+ architecture
544+ interfaces
545+ extending_biometryd
546+ manual_test_plan
547
548=== added file 'doc/interfaces.rst'
549--- doc/interfaces.rst 1970-01-01 00:00:00 +0000
550+++ doc/interfaces.rst 2016-06-26 19:02:08 +0000
551@@ -0,0 +1,17 @@
552+Interfaces
553+----------
554+.. doxygenclass:: biometry::Device
555+ :members:
556+
557+.. doxygenclass:: biometry::TemplateStore
558+ :members:
559+
560+.. doxygenclass:: biometry::Identifier
561+ :members:
562+
563+.. doxygenclass:: biometry::Verifier
564+ :members:
565+
566+.. doxygenclass:: biometry::Operation
567+ :members:
568+
569
570=== added file 'doc/intro.md'
571--- doc/intro.md 1970-01-01 00:00:00 +0000
572+++ doc/intro.md 2016-06-26 19:02:08 +0000
573@@ -0,0 +1,21 @@
574+# Introduction
575+
576+Biometryd multiplexes and mediates access to devices for biometric
577+identification and verification. A fingerprint reader is an example of
578+such a device, but the overall system is designed with arbitrary
579+devices and mechanisms in mind.
580+
581+Security and privacy is one the most important design goal. For that,
582+design, API and implementation do make sure that actual template
583+boundary is never exposed to client applications. More to this,
584+Biometryd and its API are designed such that actual template data is
585+not needed for operation (unless really needed by a device). Instead,
586+the API focuses on controlling and monitoring devices and operations
587+instead of dealing with handling actual template data.
588+
589+## Coordinates
590+
591+ - Project: <https://launchpad.net/biometryd>
592+ - Code: <https://launchpad.net/biometryd>
593+ - Docs: <http://biometryd.rtfd.io/>
594+ - Bugs: <https://bugs.launchpad.net/biometryd>
595
596=== added file 'doc/manual_test_plan.md.moved'
597--- doc/manual_test_plan.md.moved 1970-01-01 00:00:00 +0000
598+++ doc/manual_test_plan.md.moved 2016-06-26 19:02:08 +0000
599@@ -0,0 +1,77 @@
600+# Manual Test Plan
601+
602+This section lists manual test cases that should be executed prior to landing. The test cases exercise the main functionality and aim to guarantee a baseline level of functionality that should not regress across releases.
603+
604+Please note that individual landings might require specific testing steps in addition to the ones listed here.
605+
606+We assume that testers use a freshly bootstrapped device.
607+
608+## CLI
609+
610+### Testing Against a Running Service Instance
611+
612+Execute the following command line and follow the on-screen instructions:
613+
614+```bash
615+> biometryd test
616+```
617+You should receive output similar to:
618+
619+```bash
620+> biometryd test
621+We are about to execute a test run for a biometric device.
622+Please note that we are executing the test in a production
623+environment and you should consider the test to be harmful to the
624+device configuration:
625+ User: User[32011]
626+ Config: Default device
627+Would you really like to proceed (y/n)?y
628+
629+Clearing template store: [=================] 100.00 %
630+Enrolling new template: [=================] 100.00 %
631+Identifying user: [=================] 100.00 %
632+
633+ min: 267488.00 [µs]
634+ mean: 497875.12 [µs]
635+ std.dev.: 198079.29 [µs]
636+ max: 1172946.00 [µs]
637+```
638+
639+## Fingerprint Reader With Guidance
640+
641+The following section provides testing instructions for fingerprint
642+readers featuring guided enrollment processes.
643+
644+### Enrolling a New Template
645+
646+ - Boot the phone
647+ - Unlock the greeter/complete the wizard
648+ - Start "System Settings"
649+ - Switch to the "Security & Privacy" page
650+ - Select "Fingerprint ID"
651+ - Select "Add Fingerprint"
652+ + Enroll a new template according to the onscreen instructions.
653+ + Make sure that feedback given during enrollment is meaningful and reasonable.
654+ + After completion, check if the list of enrolled fingerprints has grown by 1.
655+ - Select the recently enrolled fingerprint and rename it:
656+ + Ensure that the name of the fingerprint is persistent across restarts of "System Settings"
657+
658+### Identifying With A Fingerprint
659+
660+ - In "System Settings", choose Fingerprint ID as lock security.
661+ - Lock the screen.
662+ - Wake up the phone by pressing the power button.
663+ - Try to identify with your previously enrolled fingerprint.
664+ - Lock the screen again.
665+ - Wake up with the home button.
666+ - Try to identify with your previously enrolled fingerprint.
667+ - Lock the screen again.
668+ - Wake up the screen and try to identify with a finger that hasn't been enrolled previously. The attempts should fail and the device should fall back to your passcode.
669+
670+### Removing a Previously Enrolled Template
671+
672+ - Start "System Settings"
673+ - Switch to "Security & Privacy" page
674+ - Remove at least one enrolled fingerprint
675+ + Make sure that the fingerprint is removed from the list
676+ - Lock the screen and try to identify with the fingerprint. The attemtps should fail.
677
678=== added file 'doc/requirements.txt'
679--- doc/requirements.txt 1970-01-01 00:00:00 +0000
680+++ doc/requirements.txt 2016-06-26 19:02:08 +0000
681@@ -0,0 +1,1 @@
682+breathe

Subscribers

People subscribed via source and target branches