* (Android) Get rid of double bangs by using Kotlin view binding
Instead of holding a nullable reference to the WebView, we are now
accessing the WebView using the view binding utility of Kotlin's
Android Extensions.
Further reading:
https://kotlinlang.org/docs/tutorials/android-plugin.html
* (Android) Enable WebView debugging in debug builds
This enables debugging the app's WebView using Chrome's DevTools.
https://developers.google.com/web/tools/chrome-devtools/remote-debugging/webviews
* (Android) Make MainActivity.kt adhere to common Kotlin conventions
* (Android) Update dependencies and improve formatting of Gradle files
This updates the Kotlin plugin to 1.3.21 and the Gradle plugin to 3.3.2
* (Android) Remove unnecessary ConstraintLayout container
Layout files should generally have as few nested layers as possible,
because every layer affects the performance.
* (Android) Use JSONObject class to construct a JSON string
It is way safer to construct a JSON string using classes that are
meant for doing that, instead of concatenating raw strings.
* (Android) Suppress JavaScript lint warning
* (Android) Use Kotlin string templates instead of concatenating strings
* (Android) Add missing SuppressLint import
To do so, we clear the webview history once the login process is complete so that the intermediate redirect urls used by the login process are not in the history.
Also, update the versions of some of the libraries we use.
Java has nulls, and any object reference in Java can be null, but in Kotlin parameters default to not null unless the type is specified as `Type?`; our override of onActivityResult was specifying the type of the intent parameter as `Intent` instead of `Intent?`, causing an exception before our code was called. Figuring out how to turn on "break on all exceptions" in Android Studio (which is non-trivial for some reason) finally showed me the stack trace.