Merge small pull requests

Summary:
To give credit for changes, I am listing author/pull request here
for changes incorporated in this checkin.

I am submitting these changes directly to master to preserve a
linear history, to allow for minor edits, and to credit multiple
people when more than one change was merged to fix a single issue.

=== Summary by submitter of pull requests in this commit ===
andypalmer:
- 160: ClassCastExceptions in Util.java
grant land:
- 216: Fix ArrayOutOfBoundsException when clicking "Don't Allow" in FbDialog one
iamnoah:
- 117: Fixed a NPE
lvillani:
- 261: Add support for Android build system.
nikreiman:
- 218: Fix exception when trying to decode invalid string
plowman:
- 246: Fix for Issue #160: ClassCastExceptions filling up the logs.

To investigate pull request 260, I enabled orientation changes in Hackbook.
This did not demonstrate the issue, but doesn't hurt anything and makes it
easier to test on the x86 emulator.

I also fixed some build issues in Hackbook around SDK version required and
the path to the SDK.

Test Plan:
Full clean builds of facebook and Hackbook.
Verify creating Eclipse project per public docs still works.
Upload photo in Android Hackbook.

Reviewers: caabernathy, jacl, vijaye, yariv

Reviewed By: jacl

CC: ekoneil, gregschechte

Differential Revision: https://phabricator.fb.com/D451434

Revert Plan: Safe to revert

Task ID: 1028564
Disable password saving in FbDialog

Summary:
By default, Android WebViews store passwords in a per-application
sqlite database.  This changes the default for the Facebook SDK.

Test Plan:
- Build from command-line.
- Uninstall Facebook app, run Hackbook, log in, adb shell, inspect
  webview database to verify no password was saved.

Revert Plan: OK

Reviewers: clang, jacl, vijaye

Reviewed By: vijaye

Differential Revision: https://phabricator.fb.com/D497389

Task ID: 1108189
Enable caching last-token-updated timestamp

Summary:
There was only a single method for setting the access token on the
Facebook class (setAccessToken()).  This did not distinguish between
setting a token loaded from cache vs.  setting a new token resulting
from authorization.

Since setAccessToken() updates the last-token-updated timestamp, and
since this timestamp is used to determine when to refresh the token,
it always looked like the token had just been updated when the app's
Activity started.  This meant the Facebook class would never try to
refresh the token.

To fix this, the Facebook class now supports getting the value of the
last-token-updated timestamp, and also supports restoring this along
with the token value and expiration timestamp in a single operation.

This also updates Hackbook to demonstrate caching.

Test Plan:
- ant build Hackbook
- Ran Hackbook, verified that we could get and restore the timestamp.

Revert Plan:
safe to revert

Tags:

Reviewers: clang, vijaye, caabernathy

Reviewed By: clang

CC: msdkexp@

Differential Revision: https://phabricator.fb.com/D552473

Task ID: 1363221
Install attribution tracking

Summary:
On authorize, automatically publish an install attribution if it can be acquired from the installed Facebook application, and the application allows it.
If the app does not use Facebook login, they may call publishInstall() directly.
In both cases, this code handles tracking success so that reporting should only occur once.

Call early, call often for best results.

Test Plan:
- ant build Hackbook
- Ran Hackbook, verified that the publish occurs.
- Ran again, verified that the publish did not reoccur.
- Modify hackbook to explicitly publish.  Saw it work.

Revert Plan:
safe to revert

Reviewers: clang, mmarucheck

Reviewed By: mmarucheck

CC: msdkexp@

Differential Revision: https://phabricator.fb.com/D559309

Task ID: 1404123
updated url to developer page since <app_id> was getting stripped by github.

Summary:
persumably the XSS code that github runs caused this part of the url to be dropped.  we'd rather have the url be clickable with screaming caps so that
it's obvious what we're trying to express.

Test Plan: none.

Reviewers: mmarucheck

Reviewed By: mmarucheck

CC: msdkexp@

Differential Revision: https://phabricator.fb.com/D560306

Blame Revision: 559309
Check shouldAutoPublishInstall on auto publish.

Summary: We're not.  This was dropped during the port of the iOS implementation.  Thanks to Karsten Sperling (https://github.com/ksperling) for reporting.

Test Plan: modify a sample to change the value to false, and see publish not occur.  revert + delete the app & re-test.  see the publish occur.

Reviewers: mmarucheck

CC: msdkexp@, neko-dev@

Differential Revision: https://phabricator.fb.com/D574705

Blame Revision: D559309