Check external storage volume ID to ensure media is actually mounted.

Programs may request to media scan files (via MediaScannerConnection::scanFile)
before external storage is mounted.  If that happens, MediaProvider creates
an external-ffffffff.db (volume ID -1) database once external storage is
mounted, instead of the one with the expected volume ID.

Later, if android.process.media is killed and respawned, the real external
database (that is, the one corresponding to the actual external storage
volume ID) is attached.  At best, that database contains stale records.
However, in conjunction with another bug (where the LRU database garbage
collector prunes all but one external database), most often a new, empty
database is created.  This results in the sudden disappearance of all
ringtones and media from programs that depend on the media database.

Change-Id: Ie0bf72f700430a2744ad20669aed91e22c6d5d07
Fix deletion of least-recently-used external databases.

The present external database LRU garbage collector mistakenly includes
SQLite temporary files, including those associated with the internal
database, as distinct external databases.  This leads to a number of
problems, including partial deletion of databases and/or their temporary
files and early deletion of databases before the MAX_EXTERNAL_DATABASES
limit is reached.  In short, the present code works only, and
coincidentally, in a single circumstance: when there is an internal
database and _exactly one_ external database.

This fixes the above problem by removing SQLite temporary files from the
list of candidate databases.

Note, the actual bug here is in the android.app.ContextImpl::databaseList
method, which return SQLite temporary files as part of a context's
"database list" instead of hiding them and handling their deletion
internally.  However, since these methods are part of the Android public
API and used by third-party apps, the present fix is implemented in
MediaProvider only.  Should the Context database API be altered, this fix
will be made redundant but remain unharmful.

Change-Id: I222255babf02b437d9ab7109a5fb1396bd38a9dd
MediaScanner: Don't delete entries of secondary storage on shutdown

MediaScanner deletes the entries of secondary storage whenever it
is ejected by the user. However, a shutdown also sends this eject
events. This patch ignores the eject event if the system is being
shutdown.

Patch Set 2: Fix compile error

Change-Id: I0dfe4bd750c563e99b59ad6e9155b241c3228e0d
Merge branch 'jb-mr1-release' of https://android.googlesource.com/platform/packages/providers/MediaProvider into HEAD
MediaProvider: get UUID of removable volumes for non-FAT filesystems

Change-Id: I0a66d6c169f3da8fb69af09e543d56df2d84e347
MediaProvider: Allow scan for directories

Patchset 2: Allow only directories of external volumes

Change-Id: I5694f75896749d84b163a1213730eaa4c1e776e6
Signed-off-by: Jorge Ruesga <jorge@ruesga.com>
Merge "MediaProvider: get UUID of removable volumes for non-FAT filesystems" into cm-10.1
Merge branch 'cm-10.1' of https://github.com/CyanogenMod/android_packages_providers_MediaProvider into HEAD