Add progress bar to book list item layout

The progress bar is a RelativeLayout having a same size as the book
item, it contains a ProgressBar. Its visibility is set to View.GONE by
default.
Add Books.TITLE to BOOK_LIST_FROM

The EpubReader contract class defines a constant BOOK_LIST_FROM used by
booklist activity to map Cursor column to views.
The newly added Books.TITLE is at the end, it will be used by the
RelativeLayout containing a ProgressBar. The
SimpleCursorAdapter.ViewBinder will capture this column and use it to
set up ProgressBar. See the next commits message to find out how it's
done.
Add TEMPORARY_TITLE_TO_SHOW_PROGRESS_BAR constant

Notice the "~" at the beginning of the String. Since book list will be
sorted by title(this is a change, previous version is using the default
sort order), the tilde make sure our newly added item always shows at
the end.
Rewrite rescan procedure to show progress bar

Instead of inserting the book as a last step, insert a temporary book
item as soon as the epub processor is constructed, so that the book
item will show as soon as possible. When all files have been read,
update the temporary row will real data.
The progress bar is shown on top of the book item before real data is
inserted into book table during the interval. And this is how I
implement the progress bar when adding a book.
Add progress bar id to SimpleCursorAdapter int[] to

The Books.TITLE at the end of EpubReader.BOOK_LIST_FROM is mapped to
progress bar id. The binding happens in ViewBinder in following commits.
mplement Books.TITLE to ProgressBar binding

The ViewBinder captures the View with id equals
R.id.book_list_item_progress_bar, and compares the title to
TEMPORARY_TITLE_TO_SHOW_PROGRESS_BAR. If it equals, the show the
progress bar, if not, erase it from layout.
This way of binding allows the progress of process a book to be shown
using a progress bar while all added books shown as usual.
Change CursorLoader sort order to Books.TITLE

This way it will be easy to find books according to alphabet order.
Add insertTemporaryRowIntoBookTable method

This method insert a temporaray row into book table to trigger the
progress bar to show.
Rewrite addEpubFile process procedure

This time first insert the temporary row, then update it at the end of
processing, just the same as rescan does. Also when the file is
unsupported, delete the temporary row.
Update rescanExistingBooks to call insert temp row

rescanExisitingBooks now calls insertTemporaryRowIntoBookTable to get
the new row.
Implement feature: show progress bar when adding book

This branch deals with progress bar when adding a book from
FilePickerDialog, from a rescan, or from a recovery. The implementation
uses SimpleCursorAdapter.ViewBinder to control the progress bar showing
or gone. See previous commit messages for how it works.

* add-book-progressbar:
  Update rescanExistingBooks to call insert temp row
  Rewrite addEpubFile process procedure
  Add insertTemporaryRowIntoBookTable method
  Change CursorLoader sort order to Books.TITLE
  mplement Books.TITLE to ProgressBar binding
  Add progress bar id to SimpleCursorAdapter int[] to
  Rewrite rescan procedure to show progress bar
  Add TEMPORARY_TITLE_TO_SHOW_PROGRESS_BAR constant
  Add Books.TITLE to BOOK_LIST_FROM
  Add progress bar to book list item layout
Add ReadingControl class and public method

ReadingControl class will be used to aid create JavaScriptInterface
calls in WebView pages using JavaScript injection by calling loadUrl
with "javascript:" scheme. It itself only builds the necessary url
string to be used by WebView.

Public method: getImageListenerUrl
  This method iterates through all the <img> tag in current page and
  register a 'click' event listener, the listener calls
  JavaScriptInterface onImageClick added by mBookView.
- parameter: none
- return: String, the returned string is a "javascript:" scheme url
Implement getJS_RegisterImageListener

This method returns a string exactly the same as you will put into a
<script> tag. The JavaScript content register a onImageClickListener on
every <img> tag found on current page. The listener calls
JavaScriptInterface method added to mBookView.
Implement getJSUrl in ReadingControl

It just wraps all raw JavaScript code in a "javascript:" scheme url
using JavaScript function expression.
Add WebInterface to mBookView JavascriptInterface
Add WebInterface inner class in ReadingActivity

This class is the JavascriptInterface class.
Implement getInterfaceName method of WebInterface

Parameter: none
Return: String, the interface name
Implement onImageClick JavascriptInterface

Parameter: String, <img> src attribute, which is a uri string
Return: void

This method using the supplied uri to start an Activity on the device
capable of view the image.
Register image listener in onPageFinished

Call registerImageListener.
Implement registerImageListener

It loads "javascript:" url build by ReadingControl.