[flexiglass] Bouncer refactoring, improvements and fixes.

1. Store `AuthMethodBouncerViewModel`s polymorphically.

2. Extract most of the common logic of the bouncer sub-view-models into
the parent `AuthMethodBouncerViewModel`, to ensure behavior consistency
and remove some code duplication. This fixes some bugs like the error
message not always being cleared when the input is cleared.

3. Represent the authentication attempt result more explicitly via a
dedicated enum, to prevent confusion when handling a `null` vs `false`
result.

4. Fix a memory leak when switching the authentication method.

5. Assign child view models of `BouncerViewModel` a temporary coroutine
scope, so we can dispose of them properly when the authentication method
is switched.

6. Move the "skip-authentication" business logic from `BouncerViewModel`
to `BouncerInteractor`.

7. Remove `minPatternLength` from `BouncerViewModel` and
`BouncerInteractor`.

8. Make view-model unit tests more concise by extracting the setup code
(setting the authentication method, locking the device and opening the
bouncer) to a helper function.

Fix: 300441917
Test: Unit tests still pass.
Test: Manually tested the 3 different bouncer auth methods and verified
 they still work as expected.
Change-Id: I711df14547d8b10caf275890b4de6cbdd3177c36
17 files changed