Use the Android 21 SDK and the Material theme.
Only use the Material theme on SDK 21 targets (older ones don't have it).

By creating values-v21/style.xml, as suggested here:
https://developer.android.com/training/material/compatibility.html
Use AppCompat-v7 and its Theme.AppCompat theme.

Instead of using Material for >=v21 and Holo for <21.
This should let us have the same theme on all devices.
See https://chris.banes.me/2014/10/17/appcompat-v21/

It (or the Material theme) also seems to make it easier to
specify simple modifications to give some identity.
Attempting to style the ActionBar.

But the icons are still white.
Use the new Toolbar instead of ActionBar.

This lets us specify the Light theme for the toolbar, so we can have the
dark overflow (three vertical dots) icon, without specifying a custom
icon for it.
Action icons: Regenerate "light" (dark on light) icons.
Using the Asset Studio again:
http://romannurik.github.io/AndroidAssetStudio/icons-actionbar.html#source.type=clipart&source.space.trim=0&source.space.pad=0&source.clipart=res%2Fclipart%2Ficons%2Faction_help.svg&name=ic_action_help&theme=light&color=33b5e5%2C60
Action icons: Regenerate the invert icon from the SVG

Again using:
http://romannurik.github.io/AndroidAssetStudio/icons-actionbar.html#source.type=image&source.space.trim=1&source.space.pad=0&name=ic_action_invert&theme=light&color=33b5e5%2C60
styles.xml: Enable transitions on API v21, which supports them.

* app/src/main/res/values/styles.xml: Move most styling into
  an AppTheme.Base style and derive AppTheme from it.
* app/src/main/res/values-v21/styles.xml: Derive AppTheme again
  here, but enable transitions.
  See http://antonioleiva.com/material-design-everywhere/
ListFragment: Replace GridView with RecyclerView.

With some nasty code in our RecyclerView.Adapter to handle the
Cursor, because there is no equivalent for CursorAdapter as with
ListView/GridView.
I suspect that all the Cursor.setPosition() calls are very bad for
performance.
ListFragment: Make the grid width/height match the parent.

It was not a problem, but it feels correct.
RecyclerView: imageView: Set android:background="?android:attr/selectableItemBackground"

This should apparently give use the "ripple" effect on click, but it
doesn't seem to work.
ListCursorAdapter (RecyclerView): Respond to cursor changes.

This code doesn't actually seem to work, but new items showed up
already anyway. Mysterious.
ListFragment: Try to make the ImageView have the ripple effect.

This doesn't actually seem to work, however.
ListFragment: Try to specify a transition to the Classify Activity's larger image.

I think I've done everything from "Start an activity with a shared element" here:
https://developer.android.com/training/material/animations.html
but it does not seem to work.
BaseActivity: Move the transitionName into a constant in SubjectFragment.
QuestionHelpFragment: Use a transition when opening the example image viewer.

By using the shared transitionName and ActivityCompat.startActivity().
Material design: Use colors from the Material design palette.

Including specifying a colorPrimaryDark which changes the status bar
above the actionbar/toolbar, because that seems to be normal.
Login: Move the toolbar up out of the LinearLayout that has padding.

So it is flush with the status bar and the sides, like the other
activities.
Layout XML: Fix typos in the tools: attributes.

These were copy/paste errors.
QuestionFragment: Reduce the minimum padding inside the answer buttons.

To avoid words being broken across lines on the "Is Anything Odd?"
question with the Material (AppCompat) theme on, for instance,
a portrait Nexus 4.